ST語言概述
- - - - - -
ST(結構化文本)是一種通用的高級文本語言,其語法類似于Pascal語言。 適用于包含數值分析或復雜算法的程序。 它可以在程序中,功能或功能塊的主體中????使用,以及用于描述SFC元素內的動作和轉換。 根據IEC 61131-3,關鍵字必須以大寫字母輸入。 空格和制表符不影響語法;可以在任何地方使用它們。
ST中的表達式與Pascal中的表達式完全相同:
\[ 變量\] := \[值\];
它們的執行順序是從右到左。 表達式由操作數和運算符組成。 操作數是文字,變量,結構化變量,結構化變量的組成部分,函數調用或直接地址。
# ◇ 1. 數據類型
根據IEC 61131-3標準,ST語言支持全部必需的類型集,類似于經典編程語言。 整數類型:SINT(字符),USINT(無符號字符),INT(短整數),UINT(無符號整數),DINT(長整數),UDINT(無符號長整數),LINT(64位整數),ULINT(64位整數,無簽字)。 有效類型為:REAL(浮點型),LREAL(雙精度型)。 特殊類型BYTE,WORD,DWORD,LWORD分別是8位,16位,32位和64位長度的位串。 ST中沒有位字段。 可以逐位直接訪問位串。 例如:
a.3:= 1; (*設置*變量的第3位)
布爾類型BOOL可以為TRUE或FALSE。 在物理上,BOOL類型的變量可以對應一位。 字符串STRING是字符串,而不是數組。 可以使用標準運算符比較和復制字符串。 例如:
strA:= strB;
有一組用于處理字符串的標準函數(請參見附錄2,"帶有STRING類型的變量的字符串操作"一節)。
IEC標準中的特殊類型定義為持續時間(TIME),一天中的時間(TOD),日歷日期(DATE)和時間點(DT)。
表3.1列出了與上述類型相對應的默認值。
表3.1-IEC 61131-3數據類型的默認值
數據類型值BOOL,SINT,INT,DINT,LINT0 USINT,UINT,UDINT,ULINT0 BYTE,WORD,DWORD,LWORD0 REAL0.0 TIMET#0S DATED#0001-01-01 TIME*OF*DAYTOD#00:00 00 DATE*AND*TIMEDT#0001-01-01-00:00:00 STRING''(空字符串) 默認情況下,所有變量都初始化為零。 聲明變量時,可以顯式指定其他值。 例如:
str1:STRING:='Hello world';
在某些情況下,開發軟件模塊時,可以方便地使用類型概括。 一組數據類型的一般命名。 這些概括在表3.2中給出。
表3.2-IEC 61131-3數據類型概括
ANY ANY\_BITANY\_NUMANY\_DATETIME STRING 和其他數據類型 BOOL BYTE WORD DWORD LWORDANY\_INTANY\_REALDATE TIME*OF*DAY DATE*AND*TIME INT SINT DINT LINTUINT USINT UDINT ULINTREAL LREAL ## ◇ 1.1. 語言設計
ST語言構造包括:
- 算術運算;
- 邏輯(按位)操作;
- 比較操作;
- 賦值操作;
- IF-ELSEIF-ELSE結構;
- FOR循環
- DO WHILE循環
- REPAET UNTIL循環
- CASE分支
編寫算術表達式時,允許使用括號來表示計算順序。 編寫表達式時,允許使用變量(局部和全局)和常量。
## ◇ 1.2. 算術運算
算術運算包括:
- " +"-加法;
- "-"-減法;
- " \*"-乘法;
- " /"-除;
- " Mod"是整數除法的余數。
表3.4中顯示了表達式中運算的優先級(優先級越高,執行操作越早)。
邏輯(按位)操作
這些操作包括:
" OR"-邏輯(按位)加法;
" AND"-邏輯(按位)乘法;
" XOR"-邏輯(按位)"異或";
" NOT"-邏輯(按位)取反。
比較運算
支持以下比較操作:
" ="-比較是否相等;
" <>"-不平等的比較;
">"-比較更多;
"> =-比較不少;
" <"-比較少;
" <="-不再進行比較。
比較的結果總是使用BOOL類型的值。
賦值
為了指示賦值,使用了雙符號":="。 表達式的左右部分必須包含相同類型的操作數(不提供自動類型轉換)。 在表達式的左側(接收側)只能使用變量。 右側可以包含表達式或常量。
表3.4顯示了執行上述操作的優先級。
表3.4-操作優先級
操作優先級對照1 加,減2 乘法,除法3 OR4 與,異或5 NOT6 一元減7 函數調用8 建設IF-ELSEIF-ELSE
使用大括號和方括號來描述某些語言構造很方便。 據信:
花括號中的表達式可以連續使用零次或多次。
方括號中的表達式是可選的。
IF-ELSEIF-ELSE構造具有以下格式:
IF <布爾表達式> THEN <語句列表>
\[ ELSEIF <布爾表達式> THEN <語句列表>\]
\[ ELSE <聲明列表>\]
END\_IF;
例如:
如果Var <> 0
然后變量:= 1
ELSEIF Var> 0
然后變量:= 0;
ELSE Var:= 10;
END\_IF;
該設計允許嵌套,即 在一個IF內可以再有一個,依此類推。 例如:
如果Var> 10 THEN
如果Var < +>
然后變量:= 10;
ELSE Var:= 0;
END\_IF;
END\_IF;
周期
用于設置具有固定迭代次數的循環。 設計格式如下:
FOR <控制變量>:= <表達式1>到<表達式2>
\[ BY \]做
<聲明清單>
END\_FOR;
指定循環條件時,假定<控制變量>,<表達式1> ... <表達式3>的類型為INT。 如果循環變量的值超過值,則循環將退出。 例如:
對于i:= 1到10乘2 DO
k:= k \* 2;
END\_FOR;
BY運算符指定循環變量的增量(在這種情況下,每次循環時,我將增加2)。 如果未指定BY運算符,則增量為1。例如:
對于i:= 1 TO k / 2 DO
var:= var + k;
k:= k-1;
END\_FOR;
在循環內部,可以使用其他循環,IF和CASE語句。 EXIT語句可用于退出循環(任何類型)。 例如:
對于i:= 1到10乘2 DO
k:= k \* 2;
如果k> 20 THEN
EXIT;
END\_IF;
END\_FOR;
注1:表達式 ... 是在進入循環之前計算的,因此,在這些表達式中的任何一個中更改變量的值都不會更改迭代次數。 例如:
01:k:= 10;
02:對于I:= 1 TO k / 2 DO
03:k:= 20;
04:END\_FOR;
在第3行中,變量k被更改,但是該循環仍將僅執行五次。 注2:循環變量的值可以在循環體內改變,但是在下一次迭代開始時,將根據循環條件設置該變量的值。 例如:
01:對于我:= 1至5
02:我:= 55;
03:END\_FOR;
在第一次通過時,I的值將等于1,然后在第2行中將其更改為55,但是在第二次通過時,I的值將等于2-根據循環條件的下一個值。
循環周期
它用于確定帶有先決條件的循環。 循環將一直運行,直到WHILE子句中的表達式返回TRUE。 設計格式如下:
WHILE <布爾表達式> DO
<聲明清單>
END\_WHILE;
在每次迭代時檢查的值。 如果表達式返回FALSE,則循環將結束。 例如:
k:= 10;
當k> 0時
i:= I + k;
k:= k –1;
END\_WHILE;
在循環內部,可以使用其他循環,IF和CASE語句。 為了盡早終止循環,請使用EXIT運算符(請參見FOR循環說明中的示例)。
重復直到循環
它用于確定具有后置條件的循環。 當UNTIL子句中的表達式返回FALSE時,循環將結束。 換句話說:循環將執行直到滿足UNTIL子句中的條件。 設計格式如下:
REPEAT
<聲明清單>
UNTIL <布爾表達式>;
END\_REPEAT;
例如:
k:= 10;
REPEAT
i:= i + k;
k:= k-1;
直到k = 0;
END\_REPEAT;
在循環內部,可以使用其他循環,IF和CASE語句。 為了盡早終止循環,請使用EXIT運算符(請參見FOR循環說明中的示例)。
施工case
該設計用于組織從一系列值中進行選擇。 設計格式如下:
case<表達式>
CASE*ELEMENT {CASE*ELEMENT}
\[ ELSE <聲明列表>\]
END\_CASE;
CASE*ELEMENT是值列表,以逗號分隔。 列表項可以是整數或整數范圍。 范圍設置如下BEGIN*VAL .. END\_VAL。
如果當前值不屬于任何CASE\_ELEMENT,則控制權將轉移到ELSE子句。 如果未指定ELSE子句,則不會采取任何措施。
的值只能是整數。 例如:
01:CASE k OF
02:1:
03:k:= k \* 10;
04:2..5:
05:k:= k \* 5;
06:i:= 0;
07:6,9..20:
08:k:= k-1;
09:其他
10:k:= 0;
11:i:= 1;
12:END\_CASE;
第4行包含一系列值。 如果k的值屬于數字段\[2,5\],則將執行第5和第6行。
第7行使用值列表。 如果值k等于6或屬于數字段\[9,20\],則將執行第8行。
如果k <1或6 20,則將執行第10行和第11行(在這種情況下,ELSE子句將起作用)。
指定值列表時,必須滿足以下條件:
同一CASE中的一組值不應重疊;
指定值范圍時,該范圍的開始應小于其結束。
表3.5顯示了CASE構造的正確和錯誤記錄代碼的示例。
為處理每種CASE情況而提供的操作可以使用循環,IF語句和CASE語句。
表3.5-CASE施工記錄
記錄不正確 正確記錄
01:CASE k OF
02:1:
03:k:= k \* 10;
04:2..5:
05:k:= k \* 5;
06:i:= 0;
07:5,9..20:
08:k:= k-1;
09:其他
10:k:= 0;
11:i:= 1;
12:END\_CASE;
第4行和第7行的范圍相交
01:CASE k OF
02:1:
03:k:= k \* 10;
04:2..5:
05:k:= k \* 5;
06:i:= 0;
07:6,9..20:
08:k:= k-1;
09:其他
10:k:= 0;
11:i:= 1;
12:END\_CASE;
01:CASE k OF
02:1:
03:k:= k \* 10;
04:2..5:
05:k:= k \* 5;
06:i:= 0;
07:6,20..9:
08:k:= k-1;
09:其他
10:k:= 0;
11:i:= 1;
12:END\_CASE;
在第7行中,值的范圍設置不正確。
01:CASE k OF
02:1:
03:k:= k \* 10;
04:2..5:
05:k:= k \* 5;
06:i:= 0;
07:6,9..20:
08:k:= k-1;
09:其他
10:k:= 0;
11:i:= 1;
12:END\_CASE;
在ST上編寫程序時,可以使用標準和用戶定義的功能以及功能塊。
- - - - - -
[< 前頁](SFC.html) [回目錄](_index.html) [后頁 >](IL.html)

- 軟件操作手冊
- 軟件安裝與使用
- 開發環境界面
- 程序的主菜單
- 工具欄
- 項目樹
- 項目設置面板
- ST和IL語言的的文本編輯器
- 梯形圖LD語言編輯器
- 功能塊圖FBD語言編輯器
- SFC語言編輯器
- 資源編輯面板
- 數據類型編輯面板
- 項目實例面板
- 功能和功能塊庫
- 調試控制臺
- 搜索項目
- 調試面板
- 圖形面板用于在調試模式下更改變量的值
- 軟件操作
- 快速操作流程
- 項目操作實踐
- IO變量掛載
- 應用程序選項
- 程序下載與調試
- Modbus配置使用方法
- 通過U盤更新應用程序
- 串口下載應用程序
- C語言嵌入
- 狀態指示
- 重置內部文件存儲
- IEC61131編程語言
- LD語言概述
- FBD語言
- SFC語言概述
- ST語言概述
- IL語言
- 函數庫和功能塊的說明