SCL 中的 EN/ENO 機(jī)制概述
在 SCL 程序段中,可以通過(guò)賦值來(lái)改變 ENO。為此,請(qǐng)寫入“ENO:=TRUE”或“ENO:=FALSE”,或使用 BOOL 數(shù)據(jù)類型的變量。當(dāng)激活“自動(dòng)置位 ENO”(Set ENO automatically) 塊屬性時(shí),編譯器會(huì)添加程序代碼來(lái)計(jì)算 ENO,類似于編程語(yǔ)言 LAD 和 FBD。添加的程序代碼會(huì)增加運(yùn)行時(shí)間,因此默認(rèn)情況下禁用“自動(dòng)置位 ENO”(Set ENO automatically) 屬性。 更多信息,請(qǐng)參見(jiàn):“在 SCL 中啟用和禁用“自動(dòng)置位 ENO”(Set ENO automatically) 屬性” 在 SCL 程序段中,無(wú)法為 FC 的 EN 參數(shù)賦值。但是可以在條件語(yǔ)句中調(diào)用 FC,這意味著需要將其置于“IF”指令中。這意味著塊調(diào)用不會(huì)執(zhí)行,也不會(huì)改變 ENO。此行為與編程語(yǔ)言 LAD 和 FBD 中的行為不同。 SCL 指令中使用使能輸出 ENO
說(shuō)明
要運(yùn)行諸如數(shù)學(xué)函數(shù)等每個(gè) SCL 指令,都必須查詢使能輸出 ENO。
操作步驟
要查詢使能輸出 ENO,請(qǐng)按以下步驟操作:
激活 EN/ENO 機(jī)制。 SCL 指令執(zhí)行后,查詢使能輸出 ENO(如,#MyOutputBool := ENO;) 如果發(fā)生錯(cuò)誤(如,結(jié)果溢出),則使能輸出 ENO 將返回信號(hào)狀態(tài)“0”。基于該信號(hào)狀態(tài)時(shí),指令可繼續(xù)執(zhí)行。例如,編程指令“RETURN”、故障顯示或替換值。 執(zhí)行下一個(gè)指令之前,先將使能輸出 ENO 的信號(hào)狀態(tài)復(fù)位為“1”(如,ENO :=1;)。 發(fā)生下一處錯(cuò)誤時(shí),該信號(hào)狀態(tài)因此可復(fù)位為“0”。否則,使能輸出 ENO 的信號(hào)狀態(tài)將保持為“0”。 |
說(shuō)明 跳轉(zhuǎn)到一個(gè) SCL 塊中。 跳轉(zhuǎn)到一個(gè) SCL 塊中時(shí),使能輸出 ENO 的信號(hào)狀態(tài)將自動(dòng)置位為“1”。 |
影響 SCL 塊的“ENO” |
說(shuō)明
SCL 程序塊中 ENO 的最后一個(gè)賦值即此塊的 ENO。另外,也可退出此程序塊,并同時(shí)使用“RETURN”指令為此塊的 ENO 賦值“TRUE”或“FALSE”。
操作步驟
可按照以下步驟影響此塊的 ENO 的信號(hào)狀態(tài):
激活 ENO 機(jī)制。
然后編程:
IF #n := 0 THEN
RETURN FALSE;
END_IF;
結(jié)果
當(dāng)本地變量“#n”為“0”時(shí),系統(tǒng)會(huì)返回到調(diào)用塊。在這種情況下,塊的 ENO 值為“FALSE”。
但無(wú)需對(duì) RETURN 進(jìn)行編程。SCL 編譯器將當(dāng)前 ENO 值轉(zhuǎn)發(fā)到塊的 ENO 值。這意味著,ENO 的最后一個(gè)賦值將來(lái)自塊的 ENO。
ENO 值可能會(huì)受到賦值“ENO:=TRUE”或“ENO:=FALSE”或者 BOOL 數(shù)據(jù)類型的變量的影響。如果激活“自動(dòng)置位 ENO”(Set ENO automatically) (TRUE) 塊屬性,則 ENO 在調(diào)用塊或指令時(shí)也會(huì)受到影響。
ENO的設(shè)置示例
以下示例顯示了一個(gè) SCL 塊,用于在執(zhí)行除法運(yùn)算前檢查除數(shù)是否為 0。此時(shí),ENO 的值將設(shè)置為“FALSE”,同時(shí)不執(zhí)行后續(xù)的除法運(yùn)算。調(diào)用塊可評(píng)估被調(diào)用塊的 ENO 并確定是否繼續(xù)執(zhí)行此程序。
IF #Divisor = 0 THEN |
ENO:=false; |
RETURN; |
END_IF; |
#Quotient:=Dividend/Divisor; |
通過(guò) ENO 評(píng)估程序塊調(diào)用的示例
以下示例顯示了程序塊 (A) 的調(diào)用過(guò)程,還程序塊用于處理被調(diào)用塊 (B) 的 ENO。
"BlockName_DB"( ENO => ENO ); |
IF ENO = false THEN |
RETURN; |
END_IF; |
調(diào)用并處理程序塊 (A)。被調(diào)用的程序塊 (B) 反映了其 ENO 在此過(guò)程中的值。被調(diào)用的塊 (B) 的 ENO 值將復(fù)制到調(diào)用塊 (A) 的 ENO 中。隨后將此 ENO 用于“IF”指令中。
被調(diào)用塊 (B) 返回信號(hào)狀態(tài)“ENO=FALSE”時(shí),調(diào)用塊 (A) 將不繼續(xù)處理并返回信號(hào)狀態(tài)“ENO=FALSE”。
審核編輯:彭菁
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7003瀏覽量
88944 -
程序
+關(guān)注
關(guān)注
117文章
3785瀏覽量
81005 -
編譯器
+關(guān)注
關(guān)注
1文章
1624瀏覽量
49108 -
機(jī)制
+關(guān)注
關(guān)注
0文章
24瀏覽量
9782 -
SCL
+關(guān)注
關(guān)注
1文章
239瀏覽量
17057
原文標(biāo)題:在 SCL 中使用 ENO 的示例
文章出處:【微信號(hào):gh_a8b121171b08,微信公眾號(hào):機(jī)器人及PLC自動(dòng)化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論