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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6311|回復: 0
打印 上一主題 下一主題
收起左側

基于SoMachine平臺PLC自定義數據編程應用

[復制鏈接]
跳轉到指定樓層
樓主
ID:105323 發表于 2016-2-22 15:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

自定義數據類型(DUT

新建自定義數據類型:結構,枚舉,引用,子范圍,數組,指針。

結構(Structures)

結構聲明的語法如下:

TYPE <結構名>:
STRUCT
<
變量的聲明1>
..
<
變量聲明n>
END_STRUCT
END_TYPE

<結構名>是一種可以在整個工程中被識別的數據類型,可以像標準數據類型一樣使用。

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

定義名為Polygonline的結構舉例:

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

結構的初始化:

結構初始化舉例:

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

不能以變量作為初始化的值。參見數組中結構數組的初始化舉例。

結構成員的訪問:

您可以使用下述的語法訪問結構的成員:

<結構名>.<結構成員名>

因此對于上述的結構“polygonline”,您可以用Poly_1.Start訪問結構成員“start”

枚舉(Enumerations)

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

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

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

語法:

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

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

例如:

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;

實現:

(* 可以這樣使用:*)

colorvar1 := colors_1.blue;

colorvar2 := colors_2.blue;

(* 不能這樣使用:*)

colorvar1 := blue;

colorvar2 := blue;

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

例如:

需要將枚舉BigEnum的數據類型指定為DINT:

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

END_TYPE

引用(References)

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

用以下語法聲明引用:

語法

<標識符> : REFERENCE TO<數據類型>

聲明示例:

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) )

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

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

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

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

<名稱>

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

<Inttype>

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

<ug>

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

<og>

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

例如:

TYPE

SubInt : INT (-4095..4095);

END_TYPE

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

VAR

i : INT (-4095..4095);

ui : UINT (0..10000);

END_VAR

如果一個(在聲明或實現中)被指定為子范圍的值不在子范圍的界限之內(如令以上聲明中的i:=5000),系統將報錯。

導致死循環的例子:

VAR

ui : UINT (0..10000);

END_VAR

FOR ui:=0 TO 10000 DO

...

END_FOR

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

數組(數組(Arrays) )

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

語法:

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

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

例如:

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

數組的初始化:

數組的完全初始化舉例:

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的縮寫形式 *)

結構數組的初始化舉例:

結構定義:

TYPE STRUCT1

STRUCT

p1:int;

p2:int;

p3:dword;

END_STRUCT

END_TYPE

數組初始化:

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

數組的部分初始化舉例:

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

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

數組元素的訪問:

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

<數組名>[Index1,Index2]

指針(Pointers)

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

聲明指針的語法如下:

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

取指針地址內容即意味著讀取指針當前所指地址中存儲的數據。通過在指針標識符后添加內容操作符“^”,可以取得指針所指地址的內容: 請看下面“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的地址內容,將var_int1的值5賦給var_int2 *)

建立好自定義數據類型的引用

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

自定義數據引用開始前必須聲明引用的自定義數據

可以在全局和局部變量中關聯引用聲明。

在程序中輸入引用名后加“.”選擇相應的后綴名來使用引用的數據:

對于數據交流量大,數據流多的可以采用該方法來區別和方便的使用數據。

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

該文僅此記錄相關概念,留個存檔。相關應用歡迎交流。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 美女在线观看国产 | 高清视频一区二区三区 | 伊人网站在线 | 黄色国产大片 | 老司机狠狠爱 | 国产成人久久av免费高清密臂 | 一区二区视频在线 | 久久久久久国产精品三区 | 国产午夜亚洲精品不卡 | 日本三级电影在线看 | 国产精品日产欧美久久久久 | 成人午夜网 | 成人免费视频 | 国产精品久久国产精品 | 99精品免费久久久久久久久日本 | 天天av网| 精品九九 | 色黄网站 | 成人在线日韩 | 在线观看电影av | av无遮挡 | 国产一区二区三区精品久久久 | 日本三级电影免费观看 | 精品99爱视频在线观看 | 久久草在线视频 | 天天操精品视频 | 欧美天堂在线观看 | 国产精品福利在线观看 | 中文久久 | 在线一级片 | 日日草夜夜草 | 欧美一二三四成人免费视频 | 成人亚洲视频 | 日日爱视频| 天天干干 | 一级做a爰片久久毛片免费看 | 亚洲一区二区三区在线视频 | 三级黄色片在线播放 | 国产丝袜一区二区三区免费视频 | 欧美九九 | 久久国产区|