SCL(Structured Control Language)語言,也就是結構化控制語言,它其實和IEC标準制定的ST語言是一樣的。S7-SCL 可以編譯成 STL, 雖然其代碼量相對于 STL 編程有所增加,但我們更關心的是程序結構和程序的總體效率。類似于計算機行業的發展,彙編語言已經被舍棄,取而代之的是 C/C 等高級語言。S7-SCL 對工程設計人員要求較高,需要其具有一定的計算機高級語言的知識和編程技巧。
STL是STEP7時代推出的語言,它不是STRUCT TEXT LANGUAGE的縮寫,所以它和ST語言完全沒關系。STL語言是一種彙編語言,是面向機器底層的語言,可以直接操作寄存器,可讀性不強,和80C51單片機的機器語言是一個層面。所以它是一種低級語言,而ST和SCL都是中高級語言。
二、S7-SCL 常見問題1)如何規範地的開發一個 S7-SCL 程序?
解答:開發一個 S7-SCL 程序,應當遵循如下流程:
• 規劃需要的塊類型,即程序的整體結構;
• 規劃子任務(FB,FC 等等);
• 定義各個子任務的之間輸入/輸出接口;
• 定義各個子任務在原文件中的順序及調用關系;
• 定義符号表
• 編譯檢查;
•下載調試。
2)S7-SCL 支持哪些 STEP7 塊,與其它語言有什麼關系?
解答:S7-SCL 支持如下
STEP7 的塊:OB,FC,FB,DB,UDT。
在 S7 程序中,S7-SCL 塊可以與其它STEP7 編程語言生成的塊互相調用。
S7-SCL 可以被編譯成 STL, S7-SCL 生成的塊也可以作為庫文件被其它語言引用。
由于 S7-SCL 程序由 ASCII 文本構成,所以它非常容易被導入或導出。
3)為什麼雙擊打開 S7-SCL 類型的程序後,顯示的格式卻是 STL 格式?
解答:S7-SCL 程序編譯後生成的執行代碼實際上為 STL 格式,如下圖中的 FC1, 雖然其标示為 SCL格式,但如果用戶将 Source 目錄中的 FC1 的源文件删除後,再雙擊打開 FC1 後,顯示的将為 STL格式。
【文末免費領取學習電工/PLC學習資料】
【文末免費領取學習電工/PLC學習資料】
【文末免費領取學習電工/PLC學習資料】
4)什麼是 OK Flag?
解答:在 S7-SCL 程序中,OK 是一個布爾類型的特殊本地變量。它用來顯示塊執行是否正确。
OK 标志的使用與 STL 編程中對于 FC/FB 的 ENO 處理(STL 是用狀态字的 BR 位來保存狀态)非常相似。
在程序的開始,可以将 OK 标志賦值為 TURE,如果程序執行有錯誤(例如 0 作為除數),則當程序退出時,用戶通過程序将 OK 标志改寫為 FALSE,此數值将被存儲在輸出參數 ENO 當中。
OK 标志是一個系統變量,不需要定義,如果用戶希望在程序中使用此标志,可以在 S7-SCL編程菜單 Options>Customize>Compiler 中,應當選擇 Set OK flag.項。否則 ENO 将無法被評估。
OK 标志使用的例子:
OK:= TRUE;
Division:= 1 / IN;
IF OK THEN // 除法操作正常;
// 此處可以添加在除法操作正常情況下,其它的用戶程序ELSE //除法操作不正常;
// :END_IF;
5)在 STL 中可以讀取一個組織塊的信息 (例如 OB1 中的循環時間),在 S7-SCL 中是否存在同樣的可能?
解答:STEP7 中的任意 OB 塊在生成之後,其内部都自動生成一些特有的臨時變量,例如 OB1 中的變量OB1_PREV_CYCLE 即為CPU 上個掃描周期所用的時間。在 S7-SCL 編輯器中,通過“Insert> Block Template > OB”創建一個 OB 模闆。
在缺省情況下,此模闆的臨時變量區域将創建一個ARRAY OF BYTE 類型的臨時變量。此區域與 OB 塊的臨時變量區域是相對應的,但由于沒有變量名稱标識,并且數據類型也不相同,所以用戶使用起來非常不方便。如果用戶想要使用 S7-SCL格式的 OB 塊内的特有變量,請按下列步驟進行:
• 在路徑 STEP7 的安裝路徑 \Step7\S7DATA\S7wiz 下,包含所有 OB 塊的 STL 格式模闆,可以使用寫字闆打開這些模闆 (例如 OB31.awl), 并複制相應變量定義。
• 創建一個新的 S7-SCL 源文件并插入剛才複制的變量定義。
• 調整 S7-SCL 源文件中的語法結構;
• 在這個程序的開始部分, 可以設置 "Title" 和"Version" , 例如 Title=' ' 和 Version= '0.1';
• 在 BEGIN 語句後面插入一個分号,至此,即完成格式修改。另外,也可以打開本文中的 S7-SCL 例子目錄中的 OB_Templ 項目,其中包括了 44 個 S7-SCL 源文件格式的組織塊。
6)如何理解 FC/SFC 的輸出參數 RET_VAL(返回值)?
解答:對于此問題,如果讀者對 PASCAL 語言或者高級編程語言非常熟悉,可能此問題就非常容易解釋。許多 SFC (系統功能) 都有輸出參數 RET_VAL (返回值) ,它提供一個可供評估的錯誤代碼。STEP 7 在線幫助中提供有更多關于系統功能和輸出參數 RET_VAL 的信息。
通過在 SIMATIC管理器中選中 SFC 然後按“F1”鍵可以獲取相關的在線幫助信息。同樣,一個 FC 也可以返回一個結果,下面給出了一些例子,說明了如何在 S7-SCL 中調用帶有返回值 (RET_VAL) 的功能 (FC 或 SFC)。
定義 FC1, 函數類型為 INT (返回值)
調用 FC1,得到返回值:
調用一個系統功能 (SFC24):當調用系統功能 SFC 24 “TEST_DB”(測試數據塊) 時,得到關于 CPU主内存中一個數據塊的信息。SFC24 确定指定 DB 的數據字節數,并檢查該 DB 是否受到寫保護。選定 DB 所包含的數據字節數通過參數“DB_LENGTH”輸出,參數“WRITE_PROT”包含關于選定 DB 的寫保護 ID 的信息 (FALSE 表示沒有寫保護)。
7)在 S7-SCL 程序中,PLC 中的地址标識與 STL/LAD 中的地址标識有何區别,使用中有何注意事項?
解答:在 S7-SCL 程序中,PLC 中的地址标識與 STL/LAD 中的地址标識基本相同,方便了編程人員快速掌握 S7-SCL 語言。下圖為 PLC 中的 S7-SCL 程序地址标識格式,圖中一些格式有些特殊,實際上,下面的格式在 S7-SCL 中都是正确的。
DB1.D0.0:=DB1.DBX0.1;
DB1.DB1:=DB1.DBB1;
DB1.DW2:=DB1.DBW2;
DB1.DD4:=DB1.DBD4;
QX0.0:=Q0.0;
IX0.0:=I0.0;
MX0.0:=M0.0;
所以說,在一般情況下,編程人員依舊可以 STL 的标識方式用于 S7-SCL。注意:如果數據塊編号及地址都使用了間接尋址方式,則必須使用 S7-SCL特定的标識方式,例如如下語句:
STATUS_1:=WORD_TO_BLOCK(INDEX).DW [COUNTER]; (此格式正确)
STATUS_1:=WORD_TO_BLOCK(INDEX).DBW [COUNTER] ; (此格式錯誤)
上圖為S7-SCL 中的 PLC 地址格式。x 可以為 0 至 65535 之間的數字(絕對地址),y 可以為 0 至 7 之間的數字(位地址),對于其它 FB,OB,DB, T,C 等等的标識格式,S7-SCL 格式基本與 STL 格式相同,此處不做說明。
8)為什麼用戶人工輸入的程序在編譯時經常提示語法錯誤?
解答:S7-SCL 程序和所有的高級語言一樣,有着自己特定的語法,而很多編程人員容易在人工輸入程序時忽視語法格式,這樣就造成編譯錯誤。因此強烈建議編程人員使用 S7-SCL 的模闆向導。在菜單 Insert 中,提供了 Block Call, Block Template, Control Structure, 三個向導,用戶可以通過使用此向導,提高輸入效率。例如在下圖中指出了兩個常見錯誤,用戶如果使用向導,就不容易出錯誤:
【文末免費領取學習電工/PLC學習資料】
【文末免費領取學習電工/PLC學習資料】
【文末免費領取學習電工/PLC學習資料】
9)S7-SCL 程序中如何使用多重背景?
解答:S7-SCL 程序中可以使用多重背景,下面的程序列出了正确格式,聲明完成後,在程序中即可調用:
Supply1 : FB10; //将 Supply1 定義為 FB10 類型;
Supply2,Supply3,Supply4 : FB100;
//将 Supply2,Supply3,Supply4 定義為 FB100 類型。
10)如何在 S7-SCL 程序中實現數據塊間接尋址?
解答:S7-SCL 程序中對數據塊間接尋址提供了良好的支持,編程也很簡單。
<1>下面的程序列出了正确格式:
STATUS_1:= DB11.DW[COUNTER]; //字節間接尋址;
STATUS_2:= DB12.DX[WNO, BITNO]; //位間接尋址,用戶改變 WNO,BITNO 數值即可;
STATUS_1:= Database1.DW[COUNTER];// Database1 為 DB 類型的本地變量;
STATUS_2:= Database2.DX[WNO, BITNO];
STATUS_1:=WORD_TO_BLOCK_DB(INDEX).DW[COUNTER];
//INDEX 被定義為 BLOCK_DB 數據類型,COUNTER 為整數數據類型,這樣可以實現數據塊編号,字節地址同時間接尋址,此功能是一種功能很強間接尋址方式。
<2>以下是數據塊直接尋址方式格式:
STATUSBYTE :=DB101.DB10; //字節直接尋址格式;
STATUS_3 :=DB30.D1.1; //位直接尋址格式;
MEASVAL :=DB25.DW20; //字直接尋址格式;
STATUSBYTE :=Status_data.DB10;
STATUS_3:="New data ".D1.1;
MEASVAL :=Measdata.DW20;
STATUS_1 :=WORD_TO_BLOCK_DB (INDEX).DW10;
11)在 S7-SCL 程序中調用 FC/FB 與在 STL/LAD 中調用 FB/FC 有何區别?
解答:在 STL/LAD 程序中調用 FB 可以不把參數填寫完整,但在 S7-SCL 程序中調用 FB 時,必須把FB參數填寫完整;對于FC的調用S7-SCL與STL/LAD區别不大。強烈建議編程人員使用S7-SCL的模闆向導調用 FB。
12)為了将 S7-SCL 中的位數據類型(BYTE, WORD 或 DWORD)轉換到“REAL”數據類型時,需要使用哪種數據類型轉換程序?
解答:為了将 S7-SCL 中的位數據類型(BYTE, WORD 或 DWORD)轉換到數字數據類型“REAL”時,需要使用以下指令:
•從 BYTE 到 REAL:“DINT_TO_REAL(DWORD_TO_DINT(BYTE_TO_DWORD(value)) ”
• 從 WORD 到 REAL:“DINT_TO_REAL(DWORD_TO_DINT(WORD_TO_DWORD(value))”
• 從 DWORD 到 REAL:“DINT_TO_REAL(DWORD_TO_DINT(value)) ”
注意事項:用戶在将 BYTE, WORD 或 DWORD 數據類型轉換到 “REAL” 數據類型時,S7-SCL中常見的錯誤可以參考下例:
從WORD 到 REAL:“DWORD_TO_REAL(WORD_TO_DWORD(value))”(錯誤程序)。
如果執行了這一轉換,會得到錯誤的結果。原因:DINT_TO_REAL 函數将把源數據轉換并按照 IEEE REAL 的格式存儲到目的變量,而DWORD_TO_REAL 僅僅是從源數據拷貝位串至目的變量。因此,為了獲得正确的“REAL”數,必須總是通過中間步驟“DWORD_TO_DINT”和“DINT_TO_REAL”實現。
13)在 S7-SCL 中如何區分某個變量名是本地變量,還是符号名?
解答:S7-SCL 中本地變量與符号名的引用有如下區别:
• 如果引用中隻有變量名,則此變量為本地變量,如:Motor_Status:= Motor_1;
• 如果引用中變量名稱上包括“”,則此變量為符号名,如:Motor_Status:= “Motor_1”。
14)如何訪問一個字符串中的單個字符?
解答:對于字符串中的單個字符,使用如下的訪問格式,是錯誤的:
MB10 := str[5] 這樣的表達式無法實現将字符串的第 5 個字符送至 MB10 中。
方法:可以使用 IEC 函數 MID 來得到字符串的某個部分,例子如下:
VAR
str : STRING[20];
END_VAR
MB10:=CHAR_TO_BYTE(STRING_TO_CHAR(MID(IN:=str,L:=1,P:=5)));
15)如何加密我的 S7-SCL 程序?
解答:S7-SCL 程序加密與 STL 程序加密方法幾乎一樣,用戶可以在程序中加入關鍵字:
KNOW_HOW_PROTECT,再進行編譯即可,下圖中的 FC1 在編譯後,即出現了加鎖保護的圖标 。
注意:提供給最終用戶的項目中應當删除 S7-SCL 源代碼,否則用戶在雙擊加密的塊後(例如下圖中的 FC1),依然可以關聯打開 S7-SCL 源代碼。
注意:提供給最終用戶的項目中如果删除 S7-SCL 源代碼,用戶将隻能看到 STL 格式的程序,稍微複雜些的 S7-SCL 程序在 STL 格式下幾乎是無法閱讀的。此方法類似于加密的效果。
16)如何對 S7-SCL 程序中的數據塊及靜态變量初始化?
解答:S7-SCL 程序中對數據塊及靜态變量初始化和 STL 語言格式類似,下面的程序列出了正确格式:
DAT1 : REAL := 100.5;
A1 : INT := 10 ;
A2 : STRING[6] := 'FACTOR';
A3 : ARRAY[1..12] OF REAL := 0.0, 10(100.0), 1.0;
今天小編就給大家分享一部電氣軟件的“葵花寶典”。這市面上少有,整理彙總齊全且免費下載,且針對電氣從業者,量身歸類梳理的,兼具實用與專業技術為一身。電工必備軟件(電腦版 手機APP),供大家下載收藏,一起來看看!
★如何領取?★
①點擊技成PLC課堂主頁點擊“關注”
②選擇“免費資料”即可,喜歡請多多點贊分享!
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!