ST語言語法

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

POU

POU(Programming Organisation Unit) 是IEC 61131-3 標準中最重要的基本編程單元,它包含如下三種類型

  • 功能塊
    功能塊實現了數據和操作的封裝,類似與C++中的類,但調用起來又有很多不同之處,功能塊中定義的變量如果沒有特別聲明爲TEMP臨時變量,那麼都爲靜態變量
  • 函數
    函數對操作進行了封裝,與C++中的函數概念類似,函數中定義的變量如果沒有特別聲明爲STAT靜態變量,那麼都是臨時變量
  • 程序
    程序就是一段順序執行的代碼,當然裏面可以調用其他程序,使用函數、功能塊
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章