西門子plc復雜數(shù)據(jù)類型包括日期和實踐(date_and_time)、字符串(string)、數(shù)組(array)、結構(struct)和用戶定義的數(shù)據(jù)類型(udt)。
1、日期和時間
日期和時間(date_and_time)占8個字節(jié)的bcd碼,第1~6個字節(jié)分別存儲年、月、日、時、分和秒,毫秒存儲在整個第7個字節(jié)和第8個字節(jié)的高4位,星期存放在第8個字節(jié)的低4位,星期日代碼為1,星期一 ~ 星期六的代碼為2~7.例如2010年7月27日12點30分25.123秒可以表示為dt#10-07-27-12:30:25.123。
通過調用程序編輯器文件夾“l(fā)ibrariesstandard librariesiec function block”中的iec功能(參見下圖)
調用sfc0”set_clk”可以設置和啟動cpu時鐘的時間和日期。調用sfc1”read_clk“可以讀取cpu系統(tǒng)時鐘當前的日期和時間。
2、字符串
字符串(string)是字符(char)組成的一堆數(shù)組,每個字節(jié)存放一個字符。第1字節(jié)是字符串的最大字符長度,第2個字節(jié)是字符串當前有效字符的個數(shù),字符從第3個字節(jié)開始存放,一個字符串最多有254字符。字符串的默認長度為254b,如下圖所示,在db3中定義字符串fault的長度為20個字符,它只占用從db3.dbb20開始的22b,其初始值只有4個字符“over”。string變量中未使用的字節(jié)地址被初始化為b#16#00.
可以使用標準庫的iec苦衷的21個功能來處理字符串變量,見下表,包括字符串與其他數(shù)據(jù)類型的轉換、字符串比較和字符串編輯,具體方法參見在線幫助。
3、數(shù)組
數(shù)組(array)是同一類型的數(shù)據(jù)組合而成的一個單元,數(shù)組的維數(shù)最多為6維。下圖給出一個二維數(shù)組array [1..2,1..3]的內部結構,它共有6個字節(jié)的元素,圖中每一個小格為二進制的1位,每個元素占一行(一個字節(jié))。array后面的方括號的數(shù)字用來定義每一維的起始元素和結束元素在該維中的編號,可以取-32768~32767之間的整數(shù)。每維之間的數(shù)字用逗號隔開,每一堆開始和結束的編號用兩個小數(shù)點隔開。如果有一維有n個元素,該維的起始元素和結束元素的編號可以采用1和n,例如array [1..100]
4、結構
結構(struct)可以是不同類型的數(shù)據(jù)組合,可以用基本數(shù)據(jù)類型、負載數(shù)據(jù)類型(包括數(shù)組和結構),和用戶定義數(shù)據(jù)類型(udt)做為結構的元素,例如一個結構可以由數(shù)組和結構組成,結構可以潛逃8層。用戶可以把過程控制中有關數(shù)據(jù)統(tǒng)一組織在一個結構中,作為一個數(shù)據(jù)單元來使用,而不是使用大量單個的元素,為統(tǒng)一處理不同類型的數(shù)據(jù)和參數(shù)提供了方便。
5、用戶定義數(shù)據(jù)類型
用戶定義數(shù)據(jù)類型(user-defined data types)簡稱udt,是一種特殊的數(shù)據(jù)結構,用戶只需要對它定義一次,定義好了可以在用戶程序中作為數(shù)據(jù)類型使用,可以用它來產(chǎn)生大量的具有相同數(shù)據(jù)結構的數(shù)據(jù)塊,用這些數(shù)據(jù)來輸入用于不同目的的實際數(shù)據(jù)。例如生成用于顏料混合配方的udt后,可以用它來生成用于不同顏色配方的數(shù)據(jù)組合。用戶定義數(shù)據(jù)類型有基本數(shù)據(jù)類型和復雜數(shù)據(jù)類型組成。定義好以后可以在符號表中為它指定一個符號名,使用udt可以節(jié)約錄入數(shù)據(jù)的時間。
舉例說明:
1、數(shù)組的生成和使用
(1)生成數(shù)組
可以在數(shù)據(jù)塊中定義數(shù)組,也可以在邏輯塊的變量聲明表中定義它。下面介紹在數(shù)據(jù)塊中定義的方法,在simatic管理器中用菜單命令:【插入】-【s7塊】-【數(shù)據(jù)塊】生成數(shù)據(jù)塊db3,雙擊打開db3,默認顯示方式為聲明視圖方式如下圖所示:聲明視圖用于定義、刪除和修改共享數(shù)據(jù)塊中的變量,指定它們的名稱、數(shù)據(jù)類型和初始值。第一行和最后一行標有struct和edn_struct,這兩行中間有一個自動生成的臨時占位符變量。
按如下圖輸入
在類型int所在行的地址列自動生成*2.0,表示一個數(shù)組占用2b,地址列+12表示該數(shù)組的6個元素一共占用12b,地址列的內容自動生成,可以給每個變量加上注釋,數(shù)組第一個元素維press[1,1],第6個元素為press[2,3],
(2)給數(shù)組元素賦初始值
step7根據(jù)變量的數(shù)據(jù)類型給出默認的初始值,用戶可以修改初始值,定義數(shù)組時可以在array所在的行的初始值中給元素賦初始值,如上圖所示。執(zhí)行菜單命令【視圖】-【數(shù)據(jù)視圖】,切換到數(shù)據(jù)視圖方式,將顯示數(shù)組和結構中個元素的初始值和實際值如下圖所示
(3)訪問數(shù)組中的數(shù)據(jù)
例如:”tank” .press[2,1]。其中tank是數(shù)據(jù)塊db3的符號名,press是數(shù)組名稱,它們用英語的句號分開。方括號中的是數(shù)組元素的下表,該元素是數(shù)組的第4個元素如下圖。
(4)用數(shù)組傳遞參數(shù),如果在塊的變量聲明表中聲明形參的類型為array,可以將整個數(shù)組作為參數(shù)來傳遞,在調用塊時可以將每個數(shù)組元素賦值給統(tǒng)一數(shù)據(jù)類型的參數(shù),如下圖。
(5)用數(shù)組定義數(shù)據(jù)塊的大小
數(shù)據(jù)塊的大小與數(shù)據(jù)塊中定義的變量的個數(shù)和數(shù)據(jù)類型有關,如果需要一個容量很大的數(shù)據(jù)塊,可以用數(shù)組來定義數(shù)據(jù)塊的大小,如果在數(shù)據(jù)塊中只定義一個數(shù)組arrar[1..500],數(shù)組元素的數(shù)據(jù)類型為字,則該數(shù)據(jù)塊的大小為100b??梢杂媒^對地址和任意的簡單數(shù)據(jù)了誒行來方位該數(shù)據(jù)塊中的存儲單元。若方位數(shù)據(jù)塊中未定義的地址,將會出現(xiàn)錯誤信息“讀取時發(fā)生區(qū)域長度錯誤”。
(6)設置數(shù)據(jù)塊參數(shù):鼠標右鍵點擊數(shù)據(jù)塊,選擇對象屬性,出現(xiàn)如下圖所示,具體如何設置參見幫助。
(7)使用程序狀態(tài)功能監(jiān)視數(shù)據(jù)塊
點擊數(shù)據(jù)塊工具欄上的監(jiān)視按鈕,自動切換到“數(shù)據(jù)視圖”顯示方式,數(shù)據(jù)塊內的存儲單元在線的數(shù)值在實際值列中顯示,程序狀態(tài)被激活后,不能切換“聲明視圖”方式。
2、結構的生成和使用
(1)結構的生成
可以在數(shù)據(jù)塊中或邏輯塊的聲明表中定義結構,下面介紹在數(shù)據(jù)塊中定義的方法,在上面db3數(shù)據(jù)塊中,再定義一個結構,名為stack的結構由3個不同數(shù)據(jù)類型的變量組成。如下圖所示:
在“array”下面的int,按回車鍵,在該單元下面生成一個空白行,在名稱輸入stack,在類型列單元點右鍵選擇復雜數(shù)據(jù)類型,選擇struct,(也可以直接輸入struct),按回車后再改行下面出現(xiàn)新的行,按如圖輸入。在end_struct點回車,在出現(xiàn)的新的行中定義一個名為fault的字符串,如上圖所示,字符串長度占20個字符
在上圖中stack所在行的地址列中的+12表示結構在數(shù)據(jù)塊中的起始地址為dbb12,結構中各元素的地址列中的+2.0等表示在結構中的相對起始地址,=8.0表示該結構一共占用8b,最后一行地址行的=42.0表示db塊中的數(shù)組、結構和字符串一共占用42b,
(2)訪問結構中的元素
可以用結構中的元素的絕對地址或符號地址來訪問結構中的元素,訪問結構中的數(shù)據(jù)時,需要指出結構所在的數(shù)據(jù)塊的名稱、結構名稱,以及結構元素名稱,數(shù)據(jù)塊tank內結構stack的元素amount應表示為”tank”.stack.amount。因為amount從數(shù)據(jù)塊tank(db3)的第12號字節(jié)開始存放,它的絕對地址為db3.dbw12.
(3)用結構傳遞參數(shù)
如果在塊的變量聲明表中,聲明形參的類型為數(shù)組或結構,可以將整個數(shù)組或結構而不是它們的每個元素作為參數(shù)來傳遞,調用塊時也可以將某個數(shù)組或結構的元素賦值給同一類型的參數(shù)。
將復雜數(shù)據(jù)類型的變量作為參數(shù)傳遞時,作為形參和實參的兩個變量必須具有相同的數(shù)據(jù)結構,例如兩個結構應具有相同數(shù)據(jù)類型的結構元素和相同的排列順序。
3、用戶定義數(shù)據(jù)類型的生成和使用
在simatic管理器的左面窗口”塊“,執(zhí)行菜單命令【插入】-【s7塊】-【數(shù)據(jù)類型】,生成新的udt,在生成udt的元素時,可以設置它的初始值和加上注釋,如下圖
從表面上看udt1與stack完全相同,但是它們有本質區(qū)別。
結構(struct)是在數(shù)據(jù)塊聲明視圖方式或邏輯塊的變量聲明表中與別的變量一起定義的,但是udt必須在特殊的數(shù)據(jù)塊內單獨定義,并單獨存放在一個數(shù)據(jù)塊中。生成udt后,在定義變量時將它作為一個數(shù)據(jù)類型來多次使用,例如:在變量聲明表中定義一個變量,其數(shù)據(jù)類型為udt1,名稱為prodata如下圖
上圖可以看出,udt在數(shù)據(jù)塊中的使用方法與其他數(shù)據(jù)類型(如int)是一樣的。
udt可以在邏輯塊(fc、fb、ob)的變量生命表中作為基本數(shù)據(jù)類型或復雜數(shù)據(jù)類型來使用,或者在數(shù)據(jù)塊(db)作為變量的數(shù)據(jù)類型來使用。