S7-200 SMART在編程中
常見問題解析
工欲善其事必先利其器,在日常的程序編輯和調(diào)試過程中,可能會(huì)遇到各種各樣的問題,比如編輯好的邏輯程序執(zhí)行結(jié)果不正確,編譯正常的程序下載到不同的CPU中,有些可以下載,而有些提示非致命錯(cuò)誤等等,此時(shí)如何快速的排查和分析錯(cuò)誤發(fā)生原因就非常重要,而排查和分析的前提就需要對S7-200 SMART從軟件和硬件上有更加深入的了解,下面我們就通過幾個(gè)典型的案例來進(jìn)行問題的分析。
案例 1
首先看圖1這段程序,編譯無任何問題,如果下載到不同類型的CPU中,表現(xiàn)就會(huì)不同,我們可以嘗試下載到ST60和CR60兩種類型的CPU中。
圖1 主程序
下載到ST60中,程序運(yùn)行正常,如果下載到CR60中,程序運(yùn)行就會(huì)報(bào)非致命錯(cuò)誤:操作數(shù)非法(錯(cuò)誤碼:0090),圖2為具體的非致命錯(cuò)誤信息:
圖2 PLC信息
根據(jù)程序分析錯(cuò)誤出現(xiàn)的原因和中斷有關(guān),可以查詢S7-200 SMART系統(tǒng)手冊中斷章節(jié)可以找到對應(yīng)答案,如表1所示,24號(hào)中斷事件CR60不支持,所以在運(yùn)行時(shí)會(huì)報(bào)錯(cuò)非致命錯(cuò)誤。
表1
綜上,當(dāng)需要程序在多個(gè)不同類型CPU之間下載或者移植時(shí),就需要提前了解各個(gè)CPU的程序容量大小、支持的數(shù)據(jù)區(qū)的大小,斷電保持區(qū)域大小,是否使用到了CPU不支持的功能或者CPU固件版本是否支持等因素,只有了解了這些,才能做到有的放矢。
案例 2
在日常編程過程中,我們可能需要各種標(biāo)準(zhǔn)庫,有時(shí)需要子程序和中斷程序有多重調(diào)用關(guān)系,例如下面這個(gè)案例,程序想使用格雷碼轉(zhuǎn)換庫在定時(shí)中斷中每隔100ms進(jìn)行一次數(shù)據(jù)的格雷碼轉(zhuǎn)換,請看圖3:
圖3 主程序
圖4 子程序
程序的調(diào)用關(guān)系為:中斷子程序INT0調(diào)用子程序SBR1,SBR1中調(diào)用子程序SBR2,SBR2中的程序如圖4所示,下載到CPU中,通過狀態(tài)圖表監(jiān)視程序狀態(tài),發(fā)現(xiàn)沒有結(jié)果輸出,如圖5所示:
圖5 狀態(tài)圖標(biāo)監(jiān)控?zé)o輸出
進(jìn)一步監(jiān)控PLC信息,可以看到圖6的非致命錯(cuò)誤報(bào)警:超出最大用戶子例程嵌套級別(錯(cuò)誤碼:0008)
圖6 PLC信息
S7-200 SMART手冊中規(guī)定:從主程序調(diào)用子例程的嵌套深度是 8 級,從中斷例程調(diào)用嵌套深度是 4 級。
現(xiàn)在來看上述程序的調(diào)用關(guān)系:
INT0→SBR1→SBR2→GRAY_BIN_DW,表面上也僅僅嵌套了3級,滿足中斷嵌套深度要求,但是仔細(xì)查看GRAY_BIN_DW功能庫可以發(fā)現(xiàn),該庫也嵌套了幾層,嵌套關(guān)系如下:
GRAY_BIN_DW→GRAY_BIN→XOR,這樣下來,嵌套關(guān)系就變成如下:
INT0→SBR1→SBR2→GRAY_BIN_DW
→GRAY_BIN→XOR,總共5層嵌套關(guān)系,超過了CPU支持的最大嵌套深度,導(dǎo)致CPU 無法運(yùn)行,知道了原因,我們可以減少調(diào)用嵌套為4層以內(nèi),則程序就可以正常執(zhí)行了。
通過以上描述就可以明白,有些看似不可理解的問題其實(shí)有其發(fā)生的原因,只有深入了解對應(yīng)產(chǎn)品的技術(shù)細(xì)節(jié),才能抽繭剝絲,找到問題的根源所在。
S7-200 SMART
如何快速提高編程效率
在日常的編程過程中,我們可能需要不少的邏輯運(yùn)算和算術(shù)運(yùn)算,如果這種運(yùn)算很多,有可能會(huì)導(dǎo)致程序量很大,CPU的掃描周期加長,在這種情況下,找到其中的規(guī)律,可以大大簡化程序。
假設(shè)一個(gè)場景,現(xiàn)場有16臺(tái)設(shè)備,需要控制16臺(tái)泵的啟停,IO地址如下表所示:
表2
一般的編程思路是單獨(dú)寫出每個(gè)泵的啟動(dòng)停止控制邏輯,如圖7所示,需要編寫16組控制邏輯:
圖7 單個(gè)泵的啟??刂?/span>
其實(shí)針對這種編程,我們可以變換一種思路,將上面的梯形圖變換成圖8所示的邏輯,也可以完成對應(yīng)的控制功能:
圖8 字邏輯運(yùn)算
這樣變換完成后,編程就顯得特別簡潔,因此編程思路很重要。
在另外一些應(yīng)用場景中,有時(shí)需要記錄現(xiàn)場設(shè)備的運(yùn)行時(shí)間,一般情況下我們可以使用定時(shí)器來實(shí)現(xiàn)計(jì)時(shí)的功能,但S7-200 SMART定時(shí)器有數(shù)量限制(最大256個(gè)),并且最大時(shí)基為100ms的定時(shí)器其所能達(dá)到的最大計(jì)時(shí)長度為3276.7S,若想實(shí)現(xiàn)小時(shí)或者天的計(jì)時(shí)就需要定時(shí)器加計(jì)數(shù)器來實(shí)現(xiàn),而計(jì)數(shù)器也有數(shù)量限制(最大256個(gè)),當(dāng)需要類似的功能很多時(shí),計(jì)數(shù)器和定時(shí)器數(shù)量就不夠用了,此時(shí)可以使用系統(tǒng)特殊存儲(chǔ)器 SM0.4(周期為60S的時(shí)鐘脈沖)和SM0.5(周期為1S的時(shí)鐘脈沖)來實(shí)現(xiàn)計(jì)時(shí)功能。
如圖9所示,其中值VD0的單位為秒,在實(shí)際應(yīng)用中,可以對這個(gè)數(shù)值進(jìn)行再次轉(zhuǎn)換,得到分鐘、小時(shí)或者天的時(shí)間值(本例中VD4的單位為小時(shí)),同時(shí)這些地址也可以按需設(shè)置在S7-200 SMART斷電保持區(qū)域中,實(shí)現(xiàn)不同時(shí)間長度的定時(shí)以及斷電保持功能,非常方便。
圖9 使用SM0.5實(shí)現(xiàn)計(jì)時(shí)功能
實(shí)際編程時(shí)對于一些功能重復(fù)的地方,我們可以考慮做成子程序多次調(diào)用,一些需要重復(fù)計(jì)算的功能,可以使用FOR NEXT循環(huán)來完成,也可以考慮使用間接尋址的方式來提高程序的靈活性,而對一些流程方面的控制可以使用順序控制繼電器來完成,這樣可以大大提高編程的效率。