久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 基于SoMachine平臺PLC自定義數(shù)據(jù)編程應(yīng)用 [打印本頁]

作者: 51黑黑黑    時間: 2016-2-22 15:08
標題: 基于SoMachine平臺PLC自定義數(shù)據(jù)編程應(yīng)用

自定義數(shù)據(jù)類型(DUT

新建自定義數(shù)據(jù)類型:結(jié)構(gòu),枚舉,引用,子范圍,數(shù)組,指針。

結(jié)構(gòu)(Structures)

結(jié)構(gòu)聲明的語法如下:

TYPE <結(jié)構(gòu)名>:
STRUCT
<
變量的聲明1>
..
<
變量聲明n>
END_STRUCT
END_TYPE

<結(jié)構(gòu)名>是一種可以在整個工程中被識別的數(shù)據(jù)類型,可以像標準數(shù)據(jù)類型一樣使用。

您可以使用互鎖結(jié)構(gòu)。唯一的限制是不可以指定結(jié)構(gòu)中變量的地址(不允許使用AT來指定變量的地址)

定義名為Polygonline的結(jié)構(gòu)舉例:

TYPE Polygonline:

STRUCT

Start:ARRAY [1..2] OF INT;

Point1:ARRAY [1..2] OF INT;

Point2:ARRAY [1..2] OF INT;

END_STRUCT

END_TYPE

結(jié)構(gòu)的初始化:

結(jié)構(gòu)初始化舉例:

Poly_1:polygonline := ( Start:=[3,3], Point1 =[5,2], Point2:=[7,3];

不能以變量作為初始化的值。參見數(shù)組中結(jié)構(gòu)數(shù)組的初始化舉例。

結(jié)構(gòu)成員的訪問:

您可以使用下述的語法訪問結(jié)構(gòu)的成員:

<結(jié)構(gòu)名>.<結(jié)構(gòu)成員名>

因此對于上述的結(jié)構(gòu)“polygonline”,您可以用Poly_1.Start訪問結(jié)構(gòu)成員“start”

枚舉(Enumerations)

枚舉是由很多字符串常量組成的用戶定義數(shù)據(jù)類型。這些常量稱為枚舉值。

即使在POU之內(nèi)聲明枚舉值,枚舉值仍然可以在整個工程范圍內(nèi)被識別。

用戶可以通過添加對象對話框建立“DUT”對象來創(chuàng)建一個枚舉。

語法:

TYPE <標識符>:(<Enum_0>,<Enum_1>, ...,<Enum_n>) |<base data type>;
END_TYPE

<標識符>變量可以代表枚舉值 <Enum_..> 并被初始化為第一個值。這些值與所有的數(shù)字類型兼容,也就是說可以像使用整形變量一樣對其進行操作。您也可以把數(shù)x賦給這個值。如果在聲明中枚舉值沒有被初始化為指定的值,將從0開始遞增依次進行初始化。請確保初始化時的初始值在內(nèi)部元素中遞增。運行時將會檢查這些值的有效性。

例如:

TYPE TRAFFIC_SIGNAL: (red,yellow, green:=10); (* 每個顏色的初始值是Red=0Yellow=1Green=10 *)

END_TYPE

TRAFFIC_SIGNAL1 :TRAFFIC_SIGNAL;

TRAFFIC_SIGNAL1:=0; (* 交通信號的值是Red *)

FOR i:= red TO green DO

i := i + 1;

END_FOR;

IEC 61131-3標準的擴展:

枚舉類型的名稱可以(作為范圍操作符)用來確定需要訪問的枚舉常量。

因此,您可以在不同枚舉中使用相同的常量

例如:

定義兩個枚舉:

TYPE COLORS_1: (red, blue);
END_TYPE

TYPE COLORS_2: (green,blue, yellow);
END_TYPE

POU中使用枚舉值Blue

聲明:

colorvar1 : COLORS_1;

colorvar2 : COLORS_2;

實現(xiàn):

(* 可以這樣使用:*)

colorvar1 := colors_1.blue;

colorvar2 := colors_2.blue;

(* 不能這樣使用:*)

colorvar1 := blue;

colorvar2 := blue;

 可以明確指定枚舉所指向的數(shù)據(jù)類型(默認類型是INT)。

例如:

需要將枚舉BigEnum的數(shù)據(jù)類型指定為DINT:

TYPE BigEnum : (yellow,blue, green:=16#8000) DINT;

END_TYPE

引用(References)

引用是一個對象的別名。這個別名可以通過標識符讀寫。與指針不同的是,引用所指向的數(shù)據(jù)將被直接改變,因此引用的賦值和所指向的數(shù)據(jù)是相同的。設(shè)置引用的地址用一個特定的賦值操作完成。一個引用是否指向一個有效的數(shù)據(jù)(不等于0),可以使用一個專門的操作符來檢查,如下所示。

用以下語法聲明引用:

語法

<標識符> : REFERENCE TO<數(shù)據(jù)類型>

聲明示例:

ref_int : REFERENCE TO INT;

a : INT;

b : INT;

此時ref_int可以作為整型變量的別名使用

使用示例:

ref_int REF= a; (* 此時ref_int指向a *)

ref_int := 12; (* 此時a的值為12 *)

b := ref_int * 2; (* 此時b的值為24 *)

ref_int REF= b; (* 此時ref_int指向b *)

ref_int := a / 2; (* 此時b的值為6 *)

ref_int REF= 0; ( *引用的顯式初始化 *)

子范圍(子范圍(Subrangetypes) )

子范圍是一種用戶自定義類型,其值的范圍是基本數(shù)據(jù)類型的一個子集。注意可以使用隱含的范圍邊界校驗(Range boundary checks

DUT中聲明子范圍。您也可以把一個變量直接聲明為子范圍:

聲明為一個DUT對象的語法如下:

TYPE <名稱> : <Inttype>(<ug>..<og>) END_TYPE;

<名稱>

必須是一個有效的IEC標識符。

<Inttype>

是以下數(shù)據(jù)類型中的一個:SINTUSINTINTUINTDINTUDINTBYTEWORDDWORD (LINTULINTLWORD)

<ug>

是一個與基本數(shù)據(jù)類型相兼容的常量,它設(shè)定了范圍數(shù)據(jù)類型的下界。下界本身也屬于這個范圍。

<og>

是一個與基本數(shù)據(jù)類型相兼容的常量,它設(shè)定了范圍數(shù)據(jù)類型的上界。上界本身也屬于這個范圍。

例如:

TYPE

SubInt : INT (-4095..4095);

END_TYPE

把變量直接聲明為子范圍:

VAR

i : INT (-4095..4095);

ui : UINT (0..10000);

END_VAR

如果一個(在聲明或?qū)崿F(xiàn)中)被指定為子范圍的值不在子范圍的界限之內(nèi)(如令以上聲明中的i:=5000),系統(tǒng)將報錯。

導致死循環(huán)的例子:

VAR

ui : UINT (0..10000);

END_VAR

FOR ui:=0 TO 10000 DO

...

END_FOR

由于校驗函數(shù)使變量ui的值不會超過10000,故程序永遠無法跳出這個FOR循環(huán)。

數(shù)組(數(shù)組(Arrays) )

一維、二維和三維數(shù)組屬于基本的數(shù)據(jù)類型。您可以在POU的聲明部分或者全局變量表中定義數(shù)組。請注意可以使用隱含的邊界檢查。

語法:

<數(shù)組名>:ARRAY[<ll1>..<ul1>,<ll2>..<ul2>] OF <基本數(shù)據(jù)類型>

ii1, ll2, ll3表示字段范圍的最小值,ul1, ul2 and ul3表示字段范圍的最大值。字段范圍必須是整數(shù)。

例如:

card_game: ARRAY [1..13, 1..4] OF INT;

數(shù)組的初始化:

數(shù)組的完全初始化舉例:

arr1 : ARRAY [1..5] OF INT := [1,2,3,4,5];

arr2 : ARRAY [1..2,3..4] OF INT := [1,3(7)]; (* 1,7,7,7的縮寫形式 *)

arr3 : ARRAY [1..2,2..3,3..4] OF INT := [2(0),4(4),2,3];

(* 0,0,4,4,4,4,2,3的縮寫形式 *)

結(jié)構(gòu)數(shù)組的初始化舉例:

結(jié)構(gòu)定義:

TYPE STRUCT1

STRUCT

p1:int;

p2:int;

p3:dword;

END_STRUCT

END_TYPE

數(shù)組初始化:

ARRAY[1..3] OF STRUCT1:= [(p1:=1,p2:=10,p3:=4723),(p1:=2,p2:=0,p3:=299),
(p1:=14,p2:=5,p3:=112)];

數(shù)組的部分初始化舉例:

arr1 : ARRAY [1..10] OF INT := [1,2];

對于那些沒有預先賦值的元素,按照基本數(shù)據(jù)類型的缺省初始值進行初始化。在上例中,元素[3][10]被初始化為0

數(shù)組元素的訪問:

在二維數(shù)組中訪問數(shù)組元素,使用下面的語法:

<數(shù)組名>[Index1,Index2]

指針(Pointers)

指針用來在應(yīng)用程序運行時存儲變量、程序、功能塊、方法和函數(shù)的地址。它可以指向上述的任何一個對象以及任意數(shù)據(jù)類型,包括用戶定義數(shù)據(jù)類型。請注意,您可以使用隱含的指針校驗功能。

聲明指針的語法如下:

<標識符>: POINTER TO <數(shù)據(jù)類型 | 功能塊 | 程序 | 方法 | 函數(shù)>;

取指針地址內(nèi)容即意味著讀取指針當前所指地址中存儲的數(shù)據(jù)。通過在指針標識符后添加內(nèi)容操作符“^”,可以取得指針所指地址的內(nèi)容: 請看下面“pt^”的使用示例。

通過地址操作符ADR可以將變量的地址賦給指針。

示例:

VAR

pt:POINTER TO INT; (* 聲明一個指針pt *)

var_int1:INT := 5; (* 聲明變量var_int1var_int2 *)

var_int2:INT;

END_VAR

pt := ADR(var_int1); (* varint1的地址賦給指針pt *)

var_int2:= pt^; (* 通過取指針pt的地址內(nèi)容,將var_int1的值5賦給var_int2 *)

建立好自定義數(shù)據(jù)類型的引用

其中:數(shù)組,指針可以在局部和全局變量中獨自定義并引用。

自定義數(shù)據(jù)引用開始前必須聲明引用的自定義數(shù)據(jù)

可以在全局和局部變量中關(guān)聯(lián)引用聲明。

在程序中輸入引用名后加“.”選擇相應(yīng)的后綴名來使用引用的數(shù)據(jù):

對于數(shù)據(jù)交流量大,數(shù)據(jù)流多的可以采用該方法來區(qū)別和方便的使用數(shù)據(jù)。

其中:數(shù)組,可以是等于一個數(shù)據(jù)表格,通過尋表找出我們所需要的值;枚舉,是我們這個數(shù)據(jù)可能存在的不同值的可能,當其等于某個值的時候代表這某些值;指針,一般用在間接尋址,從而簡化了大量數(shù)據(jù)的存取賦值等操作(需結(jié)合FOR語句來使用),同時也實用與間接性過度值的一些數(shù)據(jù)應(yīng)用;子范圍,也就是局限了數(shù)據(jù)的肯能值范圍,防止數(shù)據(jù)超出范圍或者不在范圍內(nèi)。

該文僅此記錄相關(guān)概念,留個存檔。相關(guān)應(yīng)用歡迎交流。






歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 色妞色视频一区二区三区四区 | 国产精品久久久久久久久久久久久久久 | 激情四射网站 | 日本视频免费 | 一区二区三区国产视频 | 国产一区在线视频 | 午夜伦理福利 | 成人深夜福利视频 | av毛片在线看 | 五月天在线观看 | 欧美精品在线视频 | 欧美一级片在线 | 伊人精品 | 国产一级免费视频 | 狠狠操天天干 | 中文字幕日本在线 | 久久久久一区二区三区 | 成人黄色小视频 | 成人免费在线播放 | 亚洲一区二区在线免费观看 | 久久免费国产视频 | 久久精品视 | 国产三级在线观看视频 | 亚洲黄色天堂 | 99av| 中文字幕一二三四区 | 日本a级大片| 国产在线色 | 亚洲视频在线观看 | 黄色三级视频网站 | 久草这里只有精品 | 69人人| 亚洲第一免费视频 | 成人在线一区二区 | 色综合天天综合网国产成人网 | 亚洲黄色在线 | 国产成人在线免费观看 | 亚洲天堂成人 | 韩国精品一区 | 日本高清在线观看 | 色哟哟一区二区三区 |