一、SCL的運算符
SCL具有完整的運算符,它包含算術、比較、邏輯等。每個運算符都有相應的優先級。優先級是指在一個表達式中可能包含多個由不同運算符連接起來的、具有不同數據類型的數據對象;由于表達式有多種運算,不同的運算順序可能得出不同結果甚至出現錯誤運算錯誤,因為當表達式中含多種運算符時,必須按一定順序進行結合,才能保證運算的合理性和結果的正确性、唯一性。關注<智控教育官網>
運算符及函數一覽表
二、SCL的程序注釋
适當的注釋可以增加代碼的可讀性,便于後續的功能維護或升級。SCL中的程序注釋有兩種,分别為符号"//"和"(*…*)",前一種用于行注釋,也就是後面隻可以有一行注釋。後面一種用于段注釋,"(* " 是一段注釋的起始符,最後用"*)" 結尾。
"//"使用方法:
"(*…*)"使用方法:
三、程序控制指令介紹
程序是語法和數據的有機結合,這裡介紹的流程控制即屬于基本的語法。SCL是高級編程語言,工程師根據工藝需求将各種控制語句進行有機組合并對輸入數據(包括各種現場信号、操作員命令等)的處理最終得出相應的控制命令至現場設備或相關的數據在HMI上顯示構成了控制程序。(控制程序=數據 語句)
SCL編輯器支持流程控制語句的快速輸入,我們隻需将光标移動到編輯器中目标位置,然後雙擊收藏夾中的語句圖标即可在編輯器中插入語句模闆,我們隻需要在模闆的基礎上編寫修改即可,參見下圖;
1.條件語句
所謂的條件語句就是根據已知條件判斷該執行哪段語句,使程序有選擇的執行。條件語句就是判斷條件,它可以是一個變量,也可以是一段語句的運算結果。
如果判斷條件是變量,那麼它必須為BOOL型;如果判斷條件是語句,那麼它的運算結果也必須是BOOL型。
IF語句示例:
//條件變量必須是B00L型
IF Start THEN
Q:=TRUE;//如果Start為TRUE則執行該語句
END_IF;
在上面的語句中,判斷條件就是變量Start的值。如果這個值是TRUE,那麼變量Q被置為TRUE;如果這個值為FALSE則跳過該語句,Q将保持原來的值而不做任何改變。
IF語句示例:
//條件語句的結果必須是BOOL型
IF (M-Number)<>0 THEN
Q:=TRUE;//如果(M-Number)<>0的結果為TRUE則執行此語句
END_IF;
在上面的語句中,判斷條件是語句(M-Number)<>0的運算結果。如果這個值為TRUE,那麼變量Q被置為TRUE;如果這個值為FALSE則跳過該語句,Q将保持原來的值而不做任何改變。
IF…ELSE語句示例:
//條件語句的結果必須是BOOL型
IF (M-Number)<>0 THEN
Data:=100;//如果(M-Number)<>0的結果為TRUE則執行此語句
ELSE
Data:=200;//如果(M-Number)<>0的結果為FALSE則執行此語句
END_IF;
在上面的語句中,判斷條件是語句(M-Number)<>0的運算結果是TRUE,那麼将變量Data賦值為100;反之賦值為200;
2. 選擇語句
一個變量或語句可能存在若幹個值,如果需要根據不同的值選擇執行不同的語句的話,那麼就需要選擇語句了。選擇語句是使用關鍵字CASE在語句或變量(變量和語句結果隻可以是整型)可能存在的若幹個結果中選擇執行相應的程序。它和IF語句相似,但IF語句對于多個可能性分支的選擇編寫較繁瑣,而CASE可以很好的解決這個問題,它支持在多個可能存在的結果中選擇。一般若小于3個條件分支建議使用IF語句,而若多于3個的條件分支則建議使用CASE語句。
CASE…OF語句示例:
CASE #Select Input OF //Select Input隻可以是整型
1:
#NextLable:=‘a’;
2:
#NextLable:=‘b’;
3:
#NextLable:=‘c’;
ELSE
#NextLable:=‘d’;
END_CASE;
在上面的語句中,程序首先讀取Select Input的值,然後根據這個值選擇執行相應的語句。若這個值為1,則執行NextLable:='a',若這個值為2,則執行NextLable:='b',若這個值為3,則執行NextLable:='c',若此值不符合所有的選擇條件則執行ELSE後面的語句NextLable:='d'。
四、SCL的案例程序
1.一鍵啟停
變量聲明
在下面的語句中,當#IN等于1時,導通CU加計數計1,當#CV當前計數值等于1時,執行THEN後面的語句,将1賦值給OUT;當#IN再次等于1時,導通CU加計數計2,當#CV=當前計數值等于2時,加計數Q點輸出複位加計數,并且執行ELSE後面的語句,将0賦值給OUT;依次循環邏輯。
#IEC_Counter_0_Instance(CU:=#IN,
R:=#Q,
PV:=2,
Q=>#Q,
CV=>#CV);//加計數計到2時自己複位自己;
IF #CV=1 THEN
#OUT := 1;//當加計數當前值等于1時将1賦值給OUT;
ELSE
#OUT := 0;//當當前值不等于1時将0賦值給OUT;
END_IF;
2.星三角控制:
變量聲明
在下面的語句中,當#Start等于1時,導通CU加計數計1,當#CV當前計數值等于1時,執行CASE1:後面的語句,将1賦值給#KM和#KMY,當#KMY等于1時導通TON定時器;當#Time_Q等于1時,導通CU加計數計2,當#CV當前計數值等于2時,執行CASE2:後面的語句,将1賦值給KM和KM△,将0賦值給KMY,按下停止按鈕#stop,複位加計數#CV值,并且執行ELSE後面的語句,将0賦值給KM、KMY、KM△;
#IEC_Counter_0_Instance(
CU:=#Start OR #Time_Q,
R:=#Stop,
PV:=2,
CV=>#CV);
CASE #CV OF
1: // 當CV計數值等于1時啟動星型;
#KM := 1;
#KMY := 1;
#IEC_Timer_0_Instance(IN:=#KMY,
PT:=#Time,
Q=>#Time_Q);
2: // 當CV計數值等于2時啟動三角型
#KM:=1;
#KM△ := 1;
#KMY := 0;
ELSE // 當CV計數值不等于1或者2時複位輸出
#KM := 0;
#KM△ :=0;
#KMY := 0;;
END_CASE;
3.指示燈功能塊:
工業生産中,為顯示設備的不同狀态,通常采用信号燈的顯示方式來區分。這裡我們編寫一個具有常量、慢速閃爍和快速閃爍功能的信号燈功能塊(封裝成一個FB),該功能塊可以重複調用。
#Q := (#SF AND (NOT #FF) AND "Clock_1.25Hz")
OR
(#FF AND (NOT #SF) AND "Clock_2.5Hz")
OR
#NL;
該FB的各參數功能如下,當NL為TRUE時,燈常亮(Q=1),當SF為TRUE時,燈慢速閃爍(Q在0和1之間慢速間歇變化)當FF為TRUE時燈快速閃爍(Q在0和1之間快速間歇變化)。
下一篇小編會介紹SCL的轉換指令和移動指令,關注(智控教育官網)哦!!!!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!