PLC上用的最多的一個是梯形圖,它使用起來直觀方便,入門容易,非開發人員也可以很快入手,但是處理複雜的邏輯太麻煩;另外一種就是 ST(structed text, 結構化文本)語言,它寫起來跟高級語言類似,學過高級語言的開發人員可以很快入手。這兩種語言都是IEC 61131-3 中定義的,這個標準中還定義了其他三種語言:順序功能圖、功能塊圖、指令表。這裏主要對ST語言的基本語法進行一些總結,主要基於codesys類的環境測試。
變量類型
基本類型
類型 | 關鍵字 | 位數 |
---|---|---|
位 | BIT | 1 |
布爾型 | BOOL | 1 |
字節型 | BYTE | 8 |
字型 | WORD | 16 |
雙字型 | DWORD | 32 |
長字型 | LWORD | 64 |
短整型 | SINT | 8 |
無符號短整型 | USINT | 8 |
整型 | INT | 16 |
無符號整型 | UINT | 16 |
雙整型 | DINT | 32 |
無符號雙整型 | UDINT | 32 |
長整型 | LINT | 64 |
實數 | REAL | 32 |
長實數 | LREAL | 64 |
字符串類型 | STRING | 8的倍數,不超過256乘8,默認81乘8 |
時間戳 | TIME | 32 |
時間 | TIME_OF_DAY | 32 |
日期 | DATE | 32 |
日期時間 | DATE_AND_TIME | 32 |
NOTE: 整形、字節型、字型都可以通過.號引出具體bit的值,e.g. i: INT;
,那麼 i
的第三位可以使用 i.3
引出,它的類型爲BIT
,可以轉化爲 BOOL
型。
複合類型
- 數組
- 關鍵字:ARRAY
- 定義格式:ARRAY[開始索引…結束索引] OF 元素類型;其中包含開始和結束索引值
- e.g.
aiStatus: ARRAY[1..100] OF INT;
- 結構體
- 關鍵字:STRUCT
- 定義格式:
TYPE 類型名稱: STRUCT 變量名稱:變量類型; ... END_STRUCT END_TYPE
- 聯合體
- 關鍵字:UNION
- 定義格式:
TYPE 類型名稱: UNION 變量名稱:變量類型; ... END_UNION END_TYPE
- 枚舉
- 關鍵字:()
- 定義格式:
TYPE 類型名稱: (變量名稱; ...) 基本類型 END_TYPE
變量定義
- 變量名稱: 變量類型;
e.g.bEnable: BOOL;
控制語句
- 條件語句
- 關鍵字:IF, ELSIF, ELSE
- 格式:
IF 條件表達式 THEN ... ELSIF 條件表達式 THEN ... ELSE ... END_IF
- 循環語句
- 關鍵字:FOR TO DO END_FOR, WHILE END_WHILE, REPEAT UNTIL END_REPEAT
- 格式:
FOR 變量:=初始值 TO 目標值 DO ... END_FOR WHILE 條件表達式 DO ; END_WHILE REPEAT ... UNTIL 條件表達式 END_REPEAT
- CASE語句
- 關鍵字:CASE OF
- 格式:
CASE 變量名稱 OF 變量值1: ... 變量值2: ... ... ELSE ... END_CASE
- 跳轉語句
- EXIT
跳出當前循環,相當於C的 break - CONTINUE
跳出循環的當次執行,與C的continue類似 - RETURN
返回,後面程序不再執行,與C的return有一定區別,ST的函數返回值不用RETURN返回,直接函數名接受值 - JMP
跳轉到指定標籤位置,相當與C的goto
- EXIT
POU
POU(Programming Organisation Unit) 是IEC 61131-3 標準中最重要的基本編程單元,它包含如下三種類型
- 功能塊
功能塊實現了數據和操作的封裝,類似與C++中的類,但調用起來又有很多不同之處,功能塊中定義的變量如果沒有特別聲明爲TEMP臨時變量,那麼都爲靜態變量 - 函數
函數對操作進行了封裝,與C++中的函數概念類似,函數中定義的變量如果沒有特別聲明爲STAT靜態變量,那麼都是臨時變量 - 程序
程序就是一段順序執行的代碼,當然裏面可以調用其他程序,使用函數、功能塊