歡迎光臨
每天分享高質量文章

西門子S7-1200程式設計概念(5)——程式語言


點選 《福利來了!PLC的資料(免費),你要嗎?

點選第二波福利來了!PLC的資料(免費),你要嗎?

STEP 7 為 S7-1200 提供以下標準程式語言:
LAD(梯形圖邏輯)是一種圖形程式語言。 它使用基於電路圖的表示法。
FBD(功能塊圖)是基於布林代數中使用的圖形邏輯符號的程式語言。
SCL(結構化控制語言)是一種基於文字的高階程式語言。
建立程式碼塊時,應選擇該塊要使用的程式語言。使用者程式可以使用由任意或所有程式語言建立的程式碼塊。

梯形圖 (LAD)

電路圖的元件(如常閉觸點、常開觸點和線圈)相互連線構成程式段。

要建立複雜運算邏輯,可插入分支以建立並行電路的邏輯。
並行分支向下開啟或直接連線到電源線。 使用者可向上終止分支。
LAD 向多種功能(如數學、定時器、計數器和移動)提供“功能框”指令。
STEP 7 不限制 LAD 程式段中的指令(行和列)數。

建立 LAD 程式段時請註意以下規則:
● 不能建立可能導致反向能流的分支。

● 不能建立可能導致短路的分支。

功能塊圖 (FBD)

與 LAD 一樣,FBD 也是一種圖形程式語言。
邏輯表示法以布林代數中使用的圖形邏輯符號為基礎。

要建立複雜運算的邏輯,在功能框之間插入並行分支。

算術功能和其它複雜功能可直接結合邏輯框表示。
STEP 7 不限制 FBD 程式段中的指令(行和列)數。

SCL

結構化控制語言 (SCL, Structured Control Language) 是用於 SIMATIC S7 CPU的基於PASCAL 的高階程式語言。 SCL 支援 STEP 7 的塊結構。
可以使用以下三種程式語言之一將程式塊包括到專案中:SCL、LAD 和 FBD。

SCL 指令使用標準程式設計運運算元,例如,用 (:=) 表示賦值,算術功能(+ 表示相加,-表示相減,* 表示相乘,/ 表示相除)。 SCL 也使用標準的 PASCAL 程式控制操作,如IF-THEN-ELSE、CASE、REPEAT-UNTIL、GOTO 和 RETURN。 SCL程式語言中的語法元素還可以使用所有的 PASCAL 參考。 許多 SCL的其它指令(如定時器和計數器)與 LAD 和 FBD 指令匹配。

SCL 程式編輯器
可以在建立該塊時指定任何塊型別(OB、FB 或 FC)以便使用 SCL 程式語言。 STEP 7提供包含以下元素的 SCL 程式編輯器:
● 用於定義程式碼塊引數的介面部分
● 用於程式程式碼的程式碼部分
● 包含 CPU 支援的 SCL 指令的指令樹
可以直接在程式碼部分輸入指令的 SCL 程式碼。
編輯器包含用於通用程式碼結構和註釋的按鈕。 要瞭解更複雜的指令,只需從指令樹拖動SCL 指令並將其放入程式中。 也可以使用任意文字編輯器建立 SCL程式,然後將相應檔案匯入 STEP 7 中。

在 SCL 程式碼塊介面部分,可以宣告下列型別的引數:
● Input、Output、InOut 和 Ret_Val:
這些引數定義程式碼塊的輸入變數、輸出變數和傳回值。
執行程式碼塊期間區域性使用此處輸入的變數名稱。
通常不會使用變數表中的全域性變數名稱。
● Static(僅適用於 FB,上述示例適用於 FC):
程式碼塊使用靜態變數在背景資料塊中儲存靜態中間結果。
塊會一直保留靜態資料,直到多個週期後被改寫。
塊的名稱(此塊將其作為多重背景呼叫)也儲存在靜態區域性資料中。
● Temp:這些引數是執行程式碼塊期間使用的臨時變數。
● Constant:這些是為程式碼塊指定的常數值。
如果從其它程式碼塊呼叫 SCL 程式碼塊,該 SCL 程式碼塊的引數會顯示為輸入或輸出。

本示例中,“Start”和“On”變數(來自專案變數表)相當於 SCL程式宣告表中的“StartStopSwitch”和“RunYesNo”。

SCL 運算式和運算

SCL 運算式是用於計算值的公式。 運算式由運算元和運運算元(如 *、/、+ 或-)組成。
運算元可以是變數、常量或運算式。
運算式的計算按一定的順序進行,具體由以下因素決定:
● 每個運運算元均具有預定義的優先順序,首先執行優先順序最高的運算。
● 按從左至右的順序處理優先順序相同的運運算元。
● 可使用圓括號指定要一起計算的一系列運運算元。
運算式的結果可用於將值分配給程式使用的變數、用作由控制陳述句使用的條件、用作其它SCL 指令的引數或者用於呼叫程式碼塊。

算術運運算元可以處理各種數值資料型別。
結果的資料型別取決於最高有效運算元的資料型別。 例如,使用 INT 運算元和REAL運算元的乘法運算會產生 REAL 結果值。

控制陳述句是 SCL 運算式的一種專用型別,可用於執行以下任務:
● 程式分支
● 重覆 SCL 程式設計程式碼的某些部分
● 跳轉到 SCL 程式的其它部分
● 按條件執行
SCL 控制陳述句包括 IF-THEN、CASE-OF、FOR-TO-DO、WHILE-DO、REPEATUNTIL、CONTINUE、GOTO 和 RETURN。
一條陳述句通常佔一行程式碼。
可以在一行中輸入多條陳述句,或者可將一條陳述句斷開成多行程式碼以使程式碼易於閱讀。
分隔符(如製表符、換行符和多餘空格)在語法檢查期間會被忽略。 END陳述句可終止控制陳述句。

以下示例顯示的是 FOR-TO-DO 控制陳述句。 (兩種形式的程式碼在語法上均有效。)

還可以為控制陳述句提供標簽。 用陳述句前的逗點將標簽隔開:

條件是一個比較運算式或邏輯運算式,其結果為 BOOL 型別(值為 TRUE 或FALSE)。
以下示例顯示了各種型別的條件。

條件可以使用算術運算式:
● 如果結果是非零的任何值,則運算式的條件為 TRUE。
● 如果結果為零,則運算式的條件為 FALSE。

要呼叫使用者程式中的其它程式碼塊,只需使用引數輸入 FB 或 FC 的名稱(或絕對地址)。對於 FB,還必須提供 FB 待呼叫的背景資料塊。

還可將塊從導航樹中拖動到 SCL 程式編輯器中,然後完成引數分配。

可透過在 (* 和 *) 之間加入註釋文字,將塊註釋新增到 SCL 程式碼中。 可在 (* 和*)之間新增任意數目的註釋行。 SCL 程式塊可能包括多個塊註釋。 為方便程式設計,SCL編輯器包括一個塊註釋按鈕和通用控制陳述句:

定址

與 LAD 和 FBD 一樣,SCL允許使用者在使用者程式中使用變數地址(符號定址)或絕對地址。 SCL還允許使用變數作為陣列索引。

SCL 提供 PEEK 和 POKE 指令,可用來從資料塊、I/O或儲存器中讀取內容或是向其中寫入內容。而您提供操作中具體位元組偏移量或位偏移量的引數。

對於 PEEK 和 POKE 指令,“area”、“area_src”和“area_dest”引數可以使用以下值。對於資料塊以外的其它區域,dbNumber 引數必須為 0。

LAD、FBD 和 SCL 的 EN 和 ENO

確定指令的“能流”(EN 和 ENO)

特定指令(如數學和移動指令)為 EN 和 ENO 提供引數。 這些引數與 LAD 或FBD中的能流有關並確定在該掃描期間是否執行指令。 SCL 還允許使用者為程式碼塊設定 ENO引數。
● EN(使能輸入)是布林輸入。 要執行功能框指令,能流 (EN = 1)必須出現在此輸入端。 如果 LAD 框的 EN輸入直接連線到左側電源線,將始終執行該指令。
● ENO(使能輸出)是布林輸出。 如果該功能框在 EN輸入端有能流且正確執行了其功能,則 ENO 輸出會將能流 (ENO = 1)傳遞到下一個元素。
如果執行功能框指令時檢測到錯誤,則在產生該錯誤的功能框指令處終止該能流 (ENO= 0)。

透過組態 SCL 來設定 ENO

要組態 SCL 編譯器以設定 ENO,請按以下步驟操作:
1. 從“選項”(Options) 選單中選擇“設定”(Settings) 命令。
2. 展開“PLC 程式設計”(PLC programming) 屬性並選擇“SCL(結構化控制語言)”(SCL(Structured Control Language))。
3. 選擇“自動設定 ENO”(Set ENO automatically) 選項。

在程式程式碼中使用 ENO

您還能夠透過將 ENO 分配給 PLC 變數或在區域性塊中評估 ENO 等方式在程式程式碼中使用ENO。

Ret_Val 或 Status 引數對 ENO 的影響

某些指令(如通訊指令或字串轉換指令)提供一個輸出引數,其中包含有關指令處理的資訊。 例如,某些指令提供通常為 Int 資料型別的 Ret_Val(傳回值)引數,其中包含 -32768 到 +32767 範圍內的狀態資訊。還有些指令提供通常為 Word 資料型別的 Status引數,其中儲存十六進位制值 16#0000 到16#FFFF 範圍內的狀態資訊。 Ret_Val 或Status 引數中儲存的數字值確定該指令的 ENO狀態。
● Ret_Val:介於 0 至 32767 的值通常設定 ENO = 1(即 TRUE)。 介於 -32768 至 -1的值通常設定 ENO = 0(即 FALSE)。 要評估 Ret_Val,將表示法更改為十六進位制。
● Status:介於 16#0000 至 16#7FFF 的值通常設定 ENO = 1(即 TRUE)。介於16#8000 至 16#FFFF 的值通常設定 ENO = 0(即 FALSE)。
需要多次掃描才能執行的指令通常提供 Busy 引數(Bool),用於表示指令處於活動狀態,但尚未完成執行。 此類指令通常還提供 Done 引數(Bool) 和 Error 引數 (Bool)。Done 表示指令已完成且無錯誤,而 Error表示指令已完成,但存在錯誤情況。
● Busy = 1(即 TRUE)時,ENO = 1(即 TRUE)。
● Done = 1(即 TRUE)時,ENO = 1(即 TRUE)。
● Error = 1(即 TRUE)時,ENO = 0(即 FALSE)。




尋找同路人

做自動化工業變革的踐行者


可透過選單查詢自己喜歡的文章彙總:

現場儀錶DCS部分PLC部分SIS部分通訊標準數字化問題解答】此處列出部分連結,更多文章透過選單獲取。




贊(0)

分享創造快樂