官术网_书友最值得收藏!

2.3.2 子程序編制與應用實例

如前所述,有兩種情況會用到子程序,使編寫子程序成為必要。一是系統規模很大、控制要求復雜時,使用子程序可以將程序分成容易管理的小塊,使程序結構簡單,易于閱讀、調試、查錯和維護。這類子程序是在特定系統中編制的,相當于主程序的分支轉移,子程序中所涉及的各種軟元件相對比較獨立,也不存在所謂的移植問題。二是有一些程序功能會在程序中反復執行,如某些標定變換運算程序、查詢程序、排序程序、報警程序、通信程序中的校驗碼程序等,這時可將這些程序段編寫成子程序,在需要時對其進行調用,從而不需要在主程序中反復重寫這些程序段。這樣,可使主程序簡單清晰,程序容量減少,掃描時間也相應縮短。這類子程序所完成的功能相對比較獨立,一個子程序可以看成是一個功能塊,通用性很強,可以在任何一個控制系統中進行移植應用。對這類子程序進行開發和收集,會對程序設計工作帶來很大的方便。這也是要重點討論的子程序類型。

和主程序一樣,子程序中也使用到編程軟元件,子程序中所涉及的軟元件有兩種,一種是子程序功能本身所需要的軟元件,它們的主要特點是僅在子程序中運用,與主程序沒有關聯,這些軟元件是子程序所獨有的,可以稱為局部軟元件。另一種是與主程序相關聯的軟元件。這些軟元件,一類為主程序傳遞給子程序的數據(子程序的入口數據),一類為子程序完成功能后所需把處理結果送回主程序的數據(子程序的出口數據),這些軟元件是主程序和子程序共有的,可以稱為全局軟元件。不同品牌的PLC對局部軟元件和全局軟元件的處理是不同的。

西門子的局部軟元件和全局軟元件是互相獨立的(西門子稱為局部變量和全局變量)。因此,一個功能塊只需要關心它的入口和出口軟元件即可,功能塊可以很方便地進行移植,控制程序可以像搭積木似的編制。

三菱FX系列PLC軟元件是不分局部軟元件和全局軟元件的。所有軟元件都是主程序和子程序共享的,這就存在著一個軟元件沖突問題,主要體現在數據寄存器D的地址沖突。在子程序中出現的局部軟元件是不能在主程序中出現的,而主程序中的軟元件也不能出現在子程序的局部軟元件中。

當主程序和子程序使用同一地址的D寄存器時,如果它的含義在主程序和子程序中不,就會出現混亂。這就給子程序的編制和移植帶來了很大的不便。因此,在編制子程序時,必須對所用軟元件進行統一分配,以避免混亂發生。同樣功能的子程序在不同控制系統中移植時,必須要檢查子程序與新的主程序有無地址沖突,如果有,則必須對子程序軟元件進行修改或對主程序軟元件進行修改。在收集各種功能的子程序時,除了記錄它的功能,還必須記錄子程序的入口軟元件、出口軟元件和局部軟元件。

通過下面的例子給予說明。

【例3】在PLC與控制設備的通信控制中,如果采用了MODBUS通信協議RTU通信方式時,其通信數據規定采用CRC校驗碼。當PLC無CRC校驗碼指令時,必須編制CRC校驗碼子程序進行CRC校驗碼計算,其算法是:

(1)設置CRC寄存器為HFF。

(2)把第一個參與校驗的8位數與CRC低8位進行異或運算,結果仍存CRC。

(3)把CRC右移1位,最高位補0,檢查最低位b0位。

(4)b0=0,CRC不變,b0=1,CRC與HA001進行異或運算,結果仍存CRC。

(5)重復(3)(4),直到右移8次,這樣就對第一個8位數進行了處理,結果仍存CRC。

(6)重復(2)到(5),處理第二個8位數。

如此處理,直到所有參與校驗的8位數全部處理完畢。結果CRC寄存器所存即為CRC校驗碼。

注意:CRC校驗碼是16位校驗碼,通信程序要求,必須把16位校驗碼的高8位和低8位分別送至兩個存儲單元再送回主程序。該子程序所用軟元件清單如表2-7所示。

表2-7 CRC校驗碼子程序所用軟元件

程序編制如圖2-31所示(作為子程序P1編制)。

圖2-31 CRC校驗碼子程序

主站蜘蛛池模板: 库车县| 皋兰县| 鸡西市| 称多县| 肃南| 包头市| 泸溪县| 亚东县| 吴旗县| 惠州市| 双鸭山市| 曲沃县| 稷山县| 浮山县| 汉中市| 湖北省| 阿拉善右旗| 阿拉尔市| 汝城县| 诸城市| 清苑县| 鹤峰县| 河东区| 宜昌市| 怀柔区| 布尔津县| 苍山县| 保山市| 海兴县| 江安县| 平泉县| 集安市| 通辽市| 崇仁县| 商丘市| 色达县| 晴隆县| 通渭县| 精河县| 徐水县| 张北县|