一、時間繼電器:
TON 使能=1計數,計數到設定值時(一直計數到32767),定時器位=1。使能=0復位(定時器位=0)。
TOF 使能=1,定時器位=1,計數器復位(清零)。使能由1到0負跳變,計數器開始計數,到設定值時(停止計數),定時器位=0。如下圖:
圖1:使能=1時,TOF(T38)的觸點動作圖
圖2:使能斷開后,計數到設定值后,TOF(T38)的觸點動作圖(其中T38常開觸點是在使能由1到0負跳變后計數器計時到設定值后變為0的)
TONR 使能=1,計數器開始計數,計數到設定值時,計數器位=1。使能斷開,計數器停止計數,計數器位仍為1,使能位再為1時,計數器在原來的計數基礎上計數。
以上三種計數器可以通過復位指令復位。
正交計數器 A相超前B相90度,增計數
B相超前A相90度,減計數
當要改變計數方向時(增計數或減計數),只要A相和B相的接線交換一下就可以了。
二、譯碼指令和編碼指令:
譯碼指令和編碼指令執行結果如圖所示:
DECO是將VW2000的第十位置零(為十進制的1024),ENCO輸入IN最低位為1的是第3位,把3寫入
[NextPage]
VB10(二進制11)。
三、填表指令(ATT)
S7-200填表指令(ATT)的使能端(EN)必須使用一個上升沿或下降沿指令(即在下圖的I0.1后加一個上升沿或下降沿),若單純使用一個常開觸點,就會出現以下錯誤:
這一點在編程手冊中也沒有說明,需要注意。其他的表格指令也同樣。
四、數據轉換指令
使用數據轉換指令時,一定要注意數據的范圍,數據范圍大的轉換為數據范圍小的發注意不要超過范圍。如下圖所示為數據的大小及其范圍。
[NextPage]
(1)BCD碼轉化為整數(BCD_I)
BCD碼轉化為整數,我是這樣理解的:把BCD碼的數值看成為十進制數,然后把BCD到整數的轉化看成是十進制數到十六進制數的轉化。如下圖所示,BCD碼為54,轉化為整數后為36。
整數轉化為BCD碼(I_BCD)則正好相反,看成是十六進制到十進制的轉化。
(2)整數轉化為雙整數(I_DI)
此問題需要注意的是:整數轉化為雙整數后,符號位被擴展,因為整數的精度小于雙整數的精度,轉化后,雙整數除了表示整數的數值所占的位外,其余空位用符號位填充。如整數45轉化為雙整數后,基二進制表示為:2#0000_0000_0000_0000_0000_0000_0010_1101,而整數-45轉化為雙整數后則為:2#1111_1111_1111_1111_1111_1111_1101_0011。
五、避免重復使用PLC輸出線圈
基本邏輯指令中常開接點和常閉接點,作為使能的條件,在語法上和實際編程中都可以無限次的重復使用。
PLC輸出線圈,作為驅動元件,在語法上是可以無限次的使用。但在實際編程中是不應該的,應該避免使用的。因為,在重復使用的輸出線圈中只有程序中最后一個是有效的,其它都是無效的。輸出線圈具有最后優先權。
如圖1和2所示。
[NextPage]
圖1:輸出線路未重復使用 圖2:輸出線路未重復使用
圖1所示,輸出線圈Q0.0是單一使用,表示I0.0和I0.1兩個常開接點中任何一個閉合,輸出線圈都得電輸出。
圖2所示,輸出線圈Q0.0是重復使用,在網絡1和網絡2中重復使用兩次,目的和圖1所示一樣,要求I0.0和I0.1兩個常開接點中任何一個閉合,輸出線圈得電輸出。
首先需要肯定是圖2所示的程序在語法上是完全正確的。但是,Q0.0重復使用的輸出線圈中,真正有效的是網絡2,網絡1是多余的、無效的。也就是說,I0.0無論是閉合還是斷開,都對Q0.0不起作用,Q0.0是否得電是由I0.1決定的。
這是因為PLC在一個掃描周期中,PLC輸出點的刷新是在程序執行完畢后執行的,在一個掃描周期中,即使I0.0閉合,I0.1斷開,在PLC程序執行網絡1時,輸出點Q0.0映像存儲器為1,在執行網絡2時,輸出點Q0.0映像存儲器又變為0。程序執行完畢,PLC輸出點才執行刷新,最終輸出點Q0.0失電不輸出。同理,在一個掃描周期中,I0.0斷開,I0.1閉合,輸出點Q0.0映像存儲器最終為1,在PLC輸出點執行刷新時,輸出點得電輸出。因此,圖2所示的程序中,對Q0.0起作用的只是I0.1。
因此,在PLC編程時,重復使用數出線圈。盡管在語法上是正確的,但是應該避免使用的。
六、合理組織編寫梯形圖的結構
在編寫梯形圖時,宜將串聯的回路寫在上方,并聯的回路寫在左邊。如圖所示:
[NextPage]
采用右邊的形式,可以減少PLC的掃描時間,可以讓PLC拿更多的時間來處理輸入、輸出和通訊部分程序。這是因為,雖然是梯形圖,PLC最終還是把梯形圖轉化為指令語句來執行,而右邊的梯形圖轉化為語句后,顯然比左邊的要簡化的多,這樣就可以減少PLC的掃描時間。在比較大的程序中這點兒尤其顯得突出。
七、合理使用指令減少PLC掃描時間
PLC每種指令的執行時間是一定的,在編程時,一定要注意不要人為造成PLC的掃描時間加大。如下圖所示:
當I0.0閉合時,網絡1的執行時間是0.37μs+55μs=55.27μs,而網絡2當I0.0未動作時,執行時間是0.37μs。因此,當I0.0保持閉合的過程中,程序會反復執行網絡1加法語句,會大大加長PLC的掃描時間。這時可以采用網絡2的形式,僅在上升沿或下降沿時執行該加法語句,可以有降低PLC的掃描時間。
八、盡量避免形參不同時,多次調用同一子程序
[NextPage]
在程序中,多次調用同一個子程序,在語法方面沒有什么錯誤,但我們要盡量避免這一做法,尤其是在帶有形式參數時。下面通過一例來說明。如下圖1所示,網絡13和14都調用protection子程序,這時,網絡14調用時protection子程序的運行狀態如圖2所示。我們注意到,網絡14調用時的形參#protection的數值(1169,網絡13調用該子程序時的參數值)并不是網絡14調用protection子程序所要的數值(應是481)。這樣,就會造成我們所不希望的結果。