摘 要: 隨著工業(yè)自動(dòng)化的發(fā)展,PLC 驅(qū)動(dòng)程序的設(shè)計(jì)和開發(fā)成為最常遇到的問題。信道利用率和數(shù)據(jù)采集效率直接影響到整個(gè)監(jiān)控系統(tǒng)的性能。本文討論了設(shè)計(jì)和開發(fā)PLC 驅(qū)動(dòng)程序的方法;詳細(xì)介紹PLC 底層驅(qū)動(dòng)函數(shù)的設(shè)計(jì)和實(shí)現(xiàn);并探討了提高信道利用率的幾個(gè)關(guān)鍵問題。實(shí)驗(yàn)證明,能夠降低開發(fā)成本并大大提高計(jì)算機(jī)監(jiān)控系統(tǒng)與PLC 之間的數(shù)據(jù)通信的效率和信道利用率。
關(guān)鍵詞:可編程邏輯控制器,驅(qū)動(dòng),MCGS
Abstract: With the development of industry automatization. How to design and development PLC driver programs is coming into been one of the most critical problems.The efficiency of channel data processing is the key of the whole system. In this paper, how to design and development PLC driver programs is explored. This paper give detail design of PLC driver function and discuss several key problems about channel data processing. The experimental results show that, it can save cost and improve efficiency.
Keywords: PLC,Drviers,MCGS
1 引言
隨著計(jì)算機(jī)科學(xué)技術(shù)、工業(yè)控制等方面的新技術(shù)的迅速發(fā)展,使用計(jì)算機(jī)監(jiān)控系統(tǒng)與現(xiàn)場(chǎng)PLC 設(shè)備進(jìn)行數(shù)據(jù)交換得到了廣泛的應(yīng)用。這類數(shù)據(jù)交換往往具有以下的特點(diǎn),數(shù)據(jù)量大,采集點(diǎn)分散,帶寬較窄。由于不同廠家所提供的PLC 現(xiàn)場(chǎng)設(shè)備的通訊機(jī)制并不相同,計(jì)算機(jī)監(jiān)控系統(tǒng)軟件需要開發(fā)的設(shè)備通信驅(qū)動(dòng)程序就越來越多。這種復(fù)雜的設(shè)備驅(qū)動(dòng)程序的開發(fā)具有以下的特點(diǎn):
首先,上位監(jiān)控系統(tǒng)與PLC 設(shè)備間的數(shù)據(jù)交換,應(yīng)用較普遍。
其次,這種數(shù)據(jù)通訊過程,缺乏有通用性的框架設(shè)計(jì),開發(fā)周期長,難度大,難以通用。
再者,在有限帶寬限制條件下的大數(shù)據(jù)量傳輸,普遍存在著信道利用率低,系統(tǒng)效率差,不穩(wěn)定的情況,迫切需要大幅度提高信道利用率的算法。而且在已有的數(shù)據(jù)交換標(biāo)準(zhǔn)中,對(duì)于有限帶寬條件下的信道利用率也沒有成熟的設(shè)計(jì)。
如上所述,開發(fā)PLC 設(shè)備的通用性數(shù)據(jù)通信接口具有廣泛的應(yīng)用前景和實(shí)現(xiàn)價(jià)值。本文主要針對(duì)上位監(jiān)控系統(tǒng)與PLC 設(shè)備之間的數(shù)據(jù)通信進(jìn)行分析,介紹了PLC 設(shè)備的驅(qū)動(dòng)開發(fā)的方法,并提供PLC 通信的實(shí)例。
2 PLC 驅(qū)動(dòng)的使用
本文中以使用串口通訊的PLC 為例進(jìn)行分析和說明,監(jiān)控系統(tǒng)為北京昆侖通態(tài)公司生產(chǎn)的MCGS 監(jiān)控軟件。開發(fā)工具為VC++6.0。
MCGS 中PLC 已經(jīng)將串口通訊的波特率設(shè)置等功能集成至串口父設(shè)備中,因此PLC 設(shè)備驅(qū)動(dòng)是作為MCGS 監(jiān)控軟件設(shè)備管理窗口中的子設(shè)備提供的。它可以使用父設(shè)備的通訊功能,即可以與其他設(shè)備共享父設(shè)備的通訊功能。由于使用串口的PLC 設(shè)備較多,在這里我們以使用串口通訊方式的PLC 為例進(jìn)行說明PLC 通用驅(qū)動(dòng)的構(gòu)架的開發(fā)。如使用自定義編程電纜方式或使用以太網(wǎng)方式連接,此PLC 驅(qū)動(dòng)構(gòu)架同樣適用。
使用串口通訊的PLC 與上位機(jī)的通訊方式中,有RS232、RS485、RS422 多種方式。如果設(shè)備是采用RS232 方式通訊,那么在一個(gè)串口下面只能掛接一個(gè)設(shè)備。如果采用RS485 或者RS422 的方式通訊,那么可以使用多個(gè)設(shè)備構(gòu)成一個(gè)網(wǎng)絡(luò),在這個(gè)網(wǎng)絡(luò)中,為了識(shí)別各個(gè)不同的設(shè)備,給每一個(gè)設(shè)備加上一個(gè)標(biāo)志,一般來說把這個(gè)標(biāo)志稱作設(shè)備地址。這個(gè)總線上的設(shè)備分為主設(shè)備和從設(shè)備兩類。在工作時(shí),從設(shè)備一直在監(jiān)聽通訊線路上的數(shù)據(jù),并對(duì)這些數(shù)據(jù)進(jìn)行分析,當(dāng)收到對(duì)自己的請(qǐng)求時(shí),會(huì)發(fā)送一個(gè)相應(yīng)的應(yīng)答幀。主設(shè)備在工作時(shí)會(huì)根據(jù)需要向從設(shè)備發(fā)送請(qǐng)求幀,請(qǐng)求一些數(shù)據(jù)或者是發(fā)送一條命令,在發(fā)完請(qǐng)求幀后主設(shè)備需等待從設(shè)備的回答,這個(gè)等待的過程有一個(gè)超時(shí)時(shí)間限制。如果過了一定的時(shí)間還沒有收到回答,它會(huì)認(rèn)為本次通訊失敗,然后按照一定的邏輯判斷是應(yīng)該重發(fā)請(qǐng)求還是放棄。
通訊使用的通訊協(xié)議,分為ASCII 通訊和16 進(jìn)制通訊兩類。PLC 的通訊協(xié)議中大多數(shù)都是使用16 進(jìn)制通訊。而且在串口通訊中,為了保證通訊的正確性、完整性,通常在通訊幀的尾部加上校驗(yàn),常見的有和校驗(yàn),異或校驗(yàn),CRC 校驗(yàn)等等。
在通訊過程中,上位機(jī)的MCGS 監(jiān)控軟件調(diào)用PLC 驅(qū)動(dòng),根據(jù)具體協(xié)議,向PLC 設(shè)備發(fā)送寄存器的讀寫命令,并接收應(yīng)答數(shù)據(jù)。
3 主要流程
3.1 采集流程
為便于說明,此處以一個(gè)采集周期內(nèi)僅需單次采集的最簡情況為例。在5.1 中的密集采集模式中,描述了對(duì)一周期內(nèi)需多次采集的算法。
采集過程描述如下:首先進(jìn)行初始化,隨后創(chuàng)建通道。進(jìn)入數(shù)據(jù)采集周期,在每個(gè)數(shù)據(jù)采集周期中,首先形成讀命令,隨后校驗(yàn)發(fā)送數(shù)據(jù)幀,讀寫串口完成一次通訊,如果通訊成功,那么校驗(yàn)后將接收到的數(shù)據(jù)解碼輸出到通道,返回成功標(biāo)識(shí),如果通訊不成功或校驗(yàn)失敗,返回失敗標(biāo)識(shí)。
3.2 解析函數(shù)流程
上圖為解析數(shù)據(jù)幀的流程圖。不同的設(shè)備具有不同的協(xié)議內(nèi)容,使用定義好的模版解析函數(shù)只需要開發(fā)人員按照設(shè)備協(xié)議將幀分割為有效的數(shù)據(jù)部分,添入聯(lián)合體FrameField 即可。該聯(lián)合體可將協(xié)議數(shù)據(jù)最小分割為位來進(jìn)行操作。
如上圖所示,第一個(gè)字節(jié)為幀頭,最后一個(gè)字節(jié)為幀尾,第二個(gè)字節(jié)為狀態(tài)標(biāo)示,第三至第六個(gè)字節(jié)為模擬量,第七個(gè)字節(jié)為單位,第八個(gè)字節(jié)按位分為四路輸入和四路輸出。
4 接口設(shè)計(jì)
通常來說,一個(gè)廠家的同系列的PLC 產(chǎn)品,通訊協(xié)議一般是一樣的。區(qū)別只是在于其中一些寄存器的大小不同。這樣我們就考慮可以讓這一個(gè)系列的設(shè)備使用同一個(gè)驅(qū)動(dòng)。為了提高通用性,同時(shí)一般情況下,用戶也不需要使用所有的寄存器,所以把這種設(shè)備構(gòu)件的通道設(shè)計(jì)成用戶可以在組態(tài)時(shí)自己進(jìn)行定義。所有的通道及其所對(duì)應(yīng)的參數(shù)(即是寄存器地址)都由用戶自己進(jìn)行定義。驅(qū)動(dòng)程序根據(jù)用戶定義的信息進(jìn)行通訊。而且PLC 當(dāng)中可能有一些參數(shù)用戶并不常用,如果組成通道,每一個(gè)采集周期都要進(jìn)行通訊,效率比較低下,考慮到這種情況,我們提供了一些外部接口供監(jiān)控系統(tǒng)調(diào)用,在這些接口中可以發(fā)送命令,支持所有的寄存器通道。
而對(duì)不同廠家的PLC 設(shè)備進(jìn)行分析,也可以發(fā)現(xiàn),可以將通訊過程和協(xié)議方式進(jìn)行抽象,提取它們的共同點(diǎn)和變化點(diǎn),封裝和隱藏?cái)?shù)據(jù)交換過程中的細(xì)節(jié),達(dá)到通用的目的。通過封裝格式,規(guī)范代碼,統(tǒng)一接口,提高驅(qū)動(dòng)開發(fā)效率,降低驅(qū)動(dòng)開發(fā)的難度。提高代碼的重用性,增強(qiáng)驅(qū)動(dòng)的穩(wěn)定性,減少設(shè)計(jì)中容易出現(xiàn)的錯(cuò)誤。使開發(fā)人員把主要的精力放在對(duì)設(shè)備的熟悉和對(duì)協(xié)議的分析上,而不是過多地糾纏于編程實(shí)現(xiàn)的細(xì)枝末節(jié)上。
封裝的數(shù)據(jù)和操作包括:
隱藏一次數(shù)據(jù)采集中的底層通訊過程(某些設(shè)備完成一次采集需要一次以上的發(fā)收過
程,如西門子S7200);封裝針對(duì)采集點(diǎn)分散的動(dòng)態(tài)采集算法;封裝常用的命令操作;對(duì)與監(jiān)控系統(tǒng)間的交互提供統(tǒng)一的接口;PLC 驅(qū)動(dòng)封裝了底層的通訊過程,只將接口方法暴露在外面,開發(fā)人員以統(tǒng)一的方式去調(diào)用這個(gè)方法,從而保證軟件對(duì)客戶的透明性,使開發(fā)人員從低層的開發(fā)中脫離出來,降低開發(fā)的難度。
對(duì)驅(qū)動(dòng)的開發(fā)人員來說,需要關(guān)注的接口僅有以下部分:
定義設(shè)備本身的屬性;如地址、實(shí)時(shí)采集的時(shí)間要求等;定義設(shè)備的讀寫操作屬性;如通道數(shù)量等;通用設(shè)計(jì)僅提供跟設(shè)備協(xié)議相關(guān)的組包和解包接口,實(shí)現(xiàn)過程將由開發(fā)人員完成。
5 關(guān)鍵問題分析
為提供信道利用率,提高系統(tǒng)效率,在PLC 的通信框架設(shè)計(jì)中考慮了幾個(gè)關(guān)鍵問題。
5.1 三種采集模式
經(jīng)過對(duì)現(xiàn)有的數(shù)據(jù)交換的分析,將用戶的一般需求擬概括為三種采集模式,即密集采集,按需采集,定時(shí)采集。
密集采集模式:在這種情況下,用戶希望能盡量利用物理帶寬,保證最快的采集速度和更新。在這種模式下,理想狀態(tài)是設(shè)備始終處于采集狀態(tài)。采集目前所有激活通道中離需要采集的周期時(shí)間最小的通道。保證所有的通道都能獲得采集機(jī)會(huì),但是相對(duì)與其他模式,在該模式下CPU 占用率會(huì)比較高。
按需采集模式:在通訊鏈路需要受控的情況下,比如用戶采用GPRS 進(jìn)行采集,按流量計(jì)費(fèi),所以不能進(jìn)行大量的通訊。這時(shí)候通過設(shè)置采集模式為按需采集,然后在需要時(shí)再調(diào)用接口函數(shù)啟動(dòng)單次采集。否則不進(jìn)行數(shù)據(jù)采集。
定時(shí)采集模式:該模式是在CPU 的占用率和采集速度之間進(jìn)行折衷的采集框式,保證在用戶設(shè)置的通道刷新周期的時(shí)間內(nèi)進(jìn)行通道的采集,之后直到下一次通道的刷新周期到達(dá)再進(jìn)行下一次采集。
在模塊設(shè)計(jì)中,采集模式作為設(shè)備類的一個(gè)屬性,由開發(fā)人員根據(jù)具體情況,選擇合適的采集模式。不同采集模式的采集算法實(shí)現(xiàn)如下:
密集采集執(zhí)行流程:設(shè)置一個(gè)采集周期如1000ms。每當(dāng)開始一個(gè)新采集周期時(shí),重新計(jì)算采集通道的優(yōu)先級(jí)別。遍歷所有的通道,找出目前優(yōu)先級(jí)最高的通道,進(jìn)行采集。對(duì)通道進(jìn)行分塊(塊中包含最需要刷新的通道)。進(jìn)入通訊循環(huán)(某些設(shè)備進(jìn)行一次采集至少需要兩次通訊所以需要通訊循環(huán))。發(fā)送數(shù)據(jù)請(qǐng)求并等待回應(yīng);根據(jù)返回的信息解析出結(jié)果,并作相應(yīng)處理;判斷是否需要下一次采集,如果不需要跳出循環(huán);更新通道和采集標(biāo)志;繼續(xù)發(fā)送線程消息啟動(dòng)下一次采集直到一次通訊循環(huán)結(jié)束;直到遍歷完所有需采集的通道。
按需采集執(zhí)行流程:循環(huán)對(duì)每個(gè)通道進(jìn)行采集,保存采集成功的值,并進(jìn)行后續(xù)處理。定時(shí)采集執(zhí)行流程由定時(shí)器觸發(fā),采集流程與密集采集一樣,但在判斷沒有滿足采集要求的通道不進(jìn)行采集。
5.2 采集點(diǎn)分散的動(dòng)態(tài)采集算法
在現(xiàn)有的數(shù)據(jù)交換過程中,用戶關(guān)心的數(shù)據(jù)往往只占全部信息的很小一部分,而且這些采集點(diǎn)分散在海量的數(shù)據(jù)中,如果不加判斷的依次讀取數(shù)據(jù),有效信息與采集信息的比例很低,實(shí)時(shí)性差;如果僅采集有效信息,分配的采集粒度過小,又會(huì)造成系統(tǒng)效率低下,信道利用率差。針對(duì)這一問題,采取以下的解決方法:
(1)只采集用戶關(guān)心的數(shù)據(jù)。如當(dāng)有多個(gè)通道時(shí),只傳送當(dāng)前用戶只關(guān)心的通道的數(shù)據(jù),而不關(guān)心其它的通道。保證采集盡量少的通道,為每個(gè)需要采集的通道提供更快的采集周期。從而減少通訊量。
(2)對(duì)于待采集的數(shù)據(jù)分配不同的優(yōu)先級(jí),對(duì)實(shí)時(shí)性要求高的部分?jǐn)?shù)據(jù)優(yōu)先采集。可以根據(jù)用戶設(shè)置的數(shù)據(jù)刷新時(shí)間來改變其優(yōu)先級(jí)。
(3)實(shí)現(xiàn)一個(gè)動(dòng)態(tài)分塊算法,在一個(gè)合理的粒度上對(duì)采集的信息分塊傳輸,兼顧信道利用率與有效信息獲取的實(shí)時(shí)性;實(shí)現(xiàn)的分塊算法簡述如下:在采集時(shí)判斷,如果當(dāng)前采集的寄存器類的激活通道可以組成一個(gè)數(shù)據(jù)請(qǐng)求包,則進(jìn)行處理,提高一次采集的通道數(shù)。根據(jù)開發(fā)人員定義的通道優(yōu)先級(jí),找出優(yōu)先級(jí)最高的通道地址附近的地址連續(xù)(或緊密)的通道,這些通道形成一個(gè)通道塊。重復(fù)同樣的過程,將剩下的通道繼續(xù)分塊,直到形成的塊數(shù)大于某一規(guī)定的數(shù)值比如20 或?qū)⒈炯拇嫫鞯乃型ǖ婪峙渫瓿伞?
(4)根據(jù)通訊協(xié)議的特點(diǎn),在打包數(shù)據(jù)請(qǐng)求時(shí)盡量保證包含更多的請(qǐng)求,從而減少請(qǐng)求的總次數(shù)。
6 結(jié)論
根據(jù)本文的PLC 通用性數(shù)據(jù)接口開發(fā)人員已開發(fā)出多個(gè)廠家的PLC 驅(qū)動(dòng),并在不同項(xiàng)目中得到應(yīng)用。在此PLC 通用數(shù)據(jù)接口基礎(chǔ)上開發(fā)PLC 驅(qū)動(dòng),縮短了開發(fā)時(shí)間和難度。投入運(yùn)行的系統(tǒng)通信穩(wěn)定,采集速度快,通用性好,可靠性高。保證了項(xiàng)目的順利實(shí)施。本文作者創(chuàng)新點(diǎn):具有通用性的監(jiān)控系統(tǒng)與PLC 通信接口設(shè)計(jì),能夠大大縮短開發(fā)時(shí)間和難度,并提高通信穩(wěn)定性、實(shí)時(shí)性,具有很高的實(shí)用價(jià)值和經(jīng)濟(jì)價(jià)值。
作者簡介:李媛(1980-),女(漢族),山西省晉中市人,首都師范大學(xué)計(jì)算機(jī)聯(lián)合研究院04 級(jí)研究生,碩士,主要從事計(jì)算機(jī)網(wǎng)絡(luò),信息安全,嵌入式系統(tǒng)研究。
參考文獻(xiàn)
1 Modicon Inc. Modicon Modbus Protocol Reference Guide[Z].Modicon Inc.,1996
2 邱公偉.可編程控制器網(wǎng)絡(luò)通信及應(yīng)用[M].北京:清華大學(xué)出版社.2000
3 高放等. 在PC 機(jī)上模擬PLC 實(shí)現(xiàn)MODBUS 通信 :微計(jì)算機(jī)信息 2001 年8 期