在scl中如何置位?

五等一好男人


說一點個人意見:

在西門子PLC中有STL語言和SCL語言,相對於STL語句表編程來說SCL語言使用更少,SCL是Structured Control Language的縮寫,也就是結構化控制語言的意思。在西門子PLC中SCL編程其實是創建了一個源文件,然後利用源文件去生成對應的數據塊,而後在響應的程序塊中調用生成後的這個程序!

就你這個問題,在SCL中如何置位其實是很簡單,就是IF 條件A成立 THEN 位B就被置位,這樣一句話就可以了,還是上圖來講一下。

這個圖片就是我要生成FC1程序塊的SCL程序的源程序,這個程序編譯之後在STEP7軟件中就會生成一個FC1的程序塊。SCL編程是需要單獨的一個安裝組件安裝後集成到STEP7系列軟件中,因今天問題的主旨是SCL中的置位所以,我就不講SCL組件的安裝了。(前一段我寫了一篇文章說如何在STEP7安裝文件夾中找西門子的文檔,裡邊我上傳了我安裝的軟件的切圖,不明白的可以去看看,或許你電腦就沒有安裝這個SCL安裝包。)

--總之,這個圖片就是SCL安裝包安裝後打開才能編輯的一個源文件編輯器,紅圈①處我定義了FC1的2個輸入點形參,紅圈②處我定義了2個輸出點形參。--當然輸入和輸出都是bool變量。

紫圈③處就是一個置位語句,X1=1的時候,就會使得Q1被SET為1。紫圈④處是一個Q2的狀態始終等於X2狀態的語句,相當於X2=1,Q2=1;X2=0,Q2=0。

來看一下源文件編譯後生成的FC1在OB1中調用的情況吧:

這個圖片是我組合的圖片,上邊部分可以看到這個項目只有2個程序塊,OB1和FC1,OB1的創建語言就是LAD即梯形圖,FC1的創建語言就是SCL。

圖片的下邊部分是OB1中調用FC1兩次,可以看到FC1輸入參數2個是X1和X2,輸出參數是Q1和Q2還有一個返回值。上邊我的SCL中X1對應Q1,X2對應Q2。

再來看一下程序執行的動態圖,來看看Q1是否被置位了?

從這個動態圖片應該可以看到,我點擊M0.0讓其為1後M1.0就被置位為1,無論我後邊再怎麼點擊M0.0,M1.0都是為1的狀態,因為SCL程序中沒有復位的程序,所以置位後就一直為1了。

M0.1我點擊時候M1.1隨著M0.1的狀態在改變,因此我在SCL中的註釋是點動關係。

M0.2和M0.3也是和前邊的狀態一樣,不過是第個FC1塊的實參而已,因此他們的動作和前邊的M0.0 M0.1一樣。

想必到這裡你已經知道SCL中置位程序的實現方法了,答題也就結束了。但是,還需要強調的是SCL中的符號, 如分號,冒號的錄入,大家一定要小心,和C語言一樣,如果少錄或者錄錯,都會引起編譯錯誤,我圖上最後是0錯誤和0警告,所以如果要自己實驗的朋友,如果有錯,請和我的圖片仔細對比,謝謝!


就說到這裡了,希望對你有幫助,謝謝!


控制研究控


西門子PLC編程語言有以下五種:梯形圖LAD,功能塊圖FBD,語句表STL,結構控制語言SCL,順序功能圖Graph。下面我們組態演示如何在SCL中置位以及注意事項。

首先,SCL是西門子PLC的結構控制編程語言,在其他的品牌例如三菱PLC中叫ST結構化文本,說法不同,但都是符合IEC61131-3標準的編程語言。西門子SCL是一種跨平臺的語言,可移植性強,語法簡單易學。它是由Pascal計算機語言演變而來。

Simatic Manager中需要安裝獨立的軟件包才能組態SCL程序,而在TIA Portal中默認安裝就有有SCL語言環境。我們以TIA Portal軟件為平臺演示。

第一步,新建一個test1項目如下圖:

第二步,組態好硬件,創建PLC輸入輸出變量如下圖所示:


第三步,在OB1裡創建三段SCL程序(博途支持在梯形圖裡創建SCL程序段,但部分功能可能會受限,例如goto語句,可以在創建塊時選選擇SCL)。第一段程序表示I0.0為1時,Q0.0被置位;第二段程序表示I0.1為1時,Q0.1被置位,而I0.1為0時,Q0.1被複位;第三段程序表示將I0.3的值賦給Q0.3,效果和第二段程序一樣。見下圖:

第四步,啟動仿真並且激活I0.0為1,I0.1為1,I0.2為1,見下圖:

第五步,打開監視表,Q0.0,Q0.1,Q0.2都被置位為1,見下圖:

第六步,取消激活I0.0,I0.1,I0.2,再查看監視表,會發現Q0.0仍為1,Q0.1和Q0.2都變為0,見下圖:


總結以上可以看出,程序段1中當I0.0為1時,Q0.0被置位為1,如果想當I0.0為0時,Q0.0被複位,就要加else語句,見程序段2所示;如果想當I0.0為0且要滿足其他條件才對Q0.0復位,那就要加elsif或 else if語句。


笨澤貓


IF conditions THEN

Tag1 := TRUE;

END_IF

這就相當於LAD中置位指令


分享到:


相關文章: