PLC通用性數(shù)據(jù)通信接口的研究
隨著工業(yè)自動(dòng)化的發(fā)展,PLC 驅(qū)動(dòng)程序的設(shè)計(jì)和開(kāi)發(fā)成為最常遇到的問(wèn)題。信道利用率和數(shù)據(jù)采集效率直接影響到整個(gè)監(jiān)控系統(tǒng)的性能。本文討論了設(shè)計(jì)和開(kāi)發(fā)PLC 驅(qū)動(dòng)程序的方法;詳細(xì)介紹PLC 底層驅(qū)動(dòng)函數(shù)的設(shè)計(jì)和實(shí)現(xiàn);并探討了提高信道利用率的幾個(gè)關(guān)鍵問(wèn)題。實(shí)驗(yàn)證明,能夠降低開(kāi)發(fā)成本并大大提高計(jì)算機(jī)監(jiān)控系統(tǒng)與PLC 之間的數(shù)據(jù)通信的效率和信道利用率。
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)軟件需要開(kāi)發(fā)的設(shè)備通信驅(qū)動(dòng)程序就越來(lái)越多。這種復(fù)雜的設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)具有以下的特點(diǎn):
首先,上位監(jiān)控系統(tǒng)與PLC 設(shè)備間的數(shù)據(jù)交換,應(yīng)用較普遍。
其次,這種數(shù)據(jù)通訊過(guò)程,缺乏有通用性的框架設(shè)計(jì),開(kāi)發(fā)周期長(zhǎng),難度大,難以通用。
再者,在有限帶寬限制條件下的大數(shù)據(jù)量傳輸,普遍存在著信道利用率低,系統(tǒng)效率差,不穩(wěn)定的情況,迫切需要大幅度提高信道利用率的算法。而且在已有的數(shù)據(jù)交換標(biāo)準(zhǔn)中,對(duì)于有限帶寬條件下的信道利用率也沒(méi)有成熟的設(shè)計(jì)。
如上所述,開(kāi)發(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)開(kāi)發(fā)的方法,并提供PLC 通信的實(shí)例。
2、 PLC 驅(qū)動(dòng)的使用
本文中以使用串口通訊的PLC 為例進(jìn)行分析和說(shuō)明,監(jiān)控系統(tǒng)為北京昆侖通態(tài)公司生產(chǎn)的MCGS 監(jiān)控軟件。開(kāi)發(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)行說(shuō)明PLC 通用驅(qū)動(dòng)的構(gòu)架的開(kāi)發(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)志,一般來(lái)說(shuō)把這個(gè)標(biāo)志稱作設(shè)備地址。這個(gè)總線上的設(shè)備分為主設(shè)備和從設(shè)備兩類。在工作時(shí),從設(shè)備一直在監(jiān)聽(tīng)通訊線路上的數(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è)等待的過(guò)程有一個(gè)超時(shí)時(shí)間限制。如果過(guò)了一定的時(shí)間還沒(méi)有收到回答,它會(huì)認(rèn)為本次通訊失敗,然后按照一定的邏輯判斷是應(yīng)該重發(fā)請(qǐng)求還是放棄。
通訊使用的通訊協(xié)議,分為ASCII 通訊和16 進(jìn)制通訊兩類。PLC 的通訊協(xié)議中大多數(shù)都是使用16 進(jìn)制通訊。而且在串口通訊中,為了保證通訊的正確性、完整性,通常在通訊幀的尾部加上校驗(yàn),常見(jiàn)的有和校驗(yàn),異或校驗(yàn),CRC 校驗(yàn)等等。
在通訊過(guò)程中,上位機(jī)的MCGS 監(jiān)控軟件調(diào)用PLC 驅(qū)動(dòng),根據(jù)具體協(xié)議,向PLC 設(shè)備發(fā)送寄存器的讀寫命令,并接收應(yīng)答數(shù)據(jù)。
3 、主要流程
3.1 采集流程
為便于說(shuō)明,此處以一個(gè)采集周期內(nèi)僅需單次采集的最簡(jiǎn)情況為例。在5.1 中的密集采集模式中,描述了對(duì)一周期內(nèi)需多次采集的算法。
采集過(guò)程描述如下:首先進(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ù)只需要開(kāi)發(fā)人員按照設(shè)備協(xié)議將幀分割為有效的數(shù)據(jù)部分,添入聯(lián)合體FrameField 即可。該聯(lián)合體可將協(xié)議數(shù)據(jù)最小分割為位來(lái)進(jìn)行操作。
如上圖所示,第一個(gè)字節(jié)為幀頭,最后一個(gè)字節(jié)為幀尾,第二個(gè)字節(jié)為狀態(tài)標(biāo)示,第三至第六個(gè)字節(jié)為模擬量,第七個(gè)字節(jié)為單位,第八個(gè)字節(jié)按位分為四路輸入和四路輸出。
4 、接口設(shè)計(jì)
通常來(lái)說(shuō),一個(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),可以將通訊過(guò)程和協(xié)議方式進(jìn)行抽象,提取它們的共同點(diǎn)和變化點(diǎn),封裝和隱藏?cái)?shù)據(jù)交換過(guò)程中的細(xì)節(jié),達(dá)到通用的目的。通過(guò)封裝格式,規(guī)范代碼,統(tǒng)一接口,提高驅(qū)動(dòng)開(kāi)發(fā)效率,降低驅(qū)動(dòng)開(kāi)發(fā)的難度。提高代碼的重用性,增強(qiáng)驅(qū)動(dòng)的穩(wěn)定性,減少設(shè)計(jì)中容易出現(xiàn)的錯(cuò)誤。使開(kāi)發(fā)人員把主要的精力放在對(duì)設(shè)備的熟悉和對(duì)協(xié)議的分析上,而不是過(guò)多地糾纏于編程實(shí)現(xiàn)的細(xì)枝末節(jié)上。
封裝的數(shù)據(jù)和操作包括:
隱藏一次數(shù)據(jù)采集中的底層通訊過(guò)程(某些設(shè)備完成一次采集需要一次以上的發(fā)收過(guò)程,如西門子S7200);封裝針對(duì)采集點(diǎn)分散的動(dòng)態(tài)采集算法;封裝常用的命令操作;對(duì)與監(jiān)控系統(tǒng)間的交互提供統(tǒng)一的接口;PLC 驅(qū)動(dòng)封裝了底層的通訊過(guò)程,只將接口方法暴露在外面,開(kāi)發(fā)人員以統(tǒng)一的方式去調(diào)用這個(gè)方法,從而保證軟件對(duì)客戶的透明性,使開(kāi)發(fā)人員從低層的開(kāi)發(fā)中脫離出來(lái),降低開(kāi)發(fā)的難度。
對(duì)驅(qū)動(dòng)的開(kāi)發(fā)人員來(lái)說(shuō),需要關(guān)注的接口僅有以下部分:
定義設(shè)備本身的屬性;如地址、實(shí)時(shí)采集的時(shí)間要求等;定義設(shè)備的讀寫操作屬性;如通道數(shù)量等;通用設(shè)計(jì)僅提供跟設(shè)備協(xié)議相關(guān)的組包和解包接口,實(shí)現(xiàn)過(guò)程將由開(kāi)發(fā)人員完成。
5、 關(guān)鍵問(wèn)題分析
為提供信道利用率,提高系統(tǒng)效率,在PLC 的通信框架設(shè)計(jì)中考慮了幾個(gè)關(guān)鍵問(wèn)題。
5.1 三種采集模式
經(jīng)過(guò)對(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í)候通過(guò)設(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è)屬性,由開(kāi)發(fā)人員根據(jù)具體情況,選擇合適的采集模式。不同采集模式的采集算法實(shí)現(xiàn)如下:
密集采集執(zhí)行流程:設(shè)置一個(gè)采集周期如1000ms。每當(dāng)開(kāi)始一個(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ā),采集流程與密集采集一樣,但在判斷沒(méi)有滿足采集要求的通道不進(jìn)行采集。
5.2 采集點(diǎn)分散的動(dòng)態(tài)采集算法
在現(xiàn)有的數(shù)據(jù)交換過(guò)程中,用戶關(guān)心的數(shù)據(jù)往往只占全部信息的很小一部分,而且這些采集點(diǎn)分散在海量的數(shù)據(jù)中,如果不加判斷的依次讀取數(shù)據(jù),有效信息與采集信息的比例很低,實(shí)時(shí)性差;如果僅采集有效信息,分配的采集粒度過(guò)小,又會(huì)造成系統(tǒng)效率低下,信道利用率差。針對(duì)這一問(wèn)題,采取以下的解決方法:
(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í)間來(lái)改變其優(yōu)先級(jí)。
(3)實(shí)現(xiàn)一個(gè)動(dòng)態(tài)分塊算法,在一個(gè)合理的粒度上對(duì)采集的信息分塊傳輸,兼顧信道利用率與有效信息獲取的實(shí)時(shí)性;實(shí)現(xiàn)的分塊算法簡(jiǎn)述如下:在采集時(shí)判斷,如果當(dāng)前采集的寄存器類的激活通道可以組成一個(gè)數(shù)據(jù)請(qǐng)求包,則進(jìn)行處理,提高一次采集的通道數(shù)。根據(jù)開(kāi)發(fā)人員定義的通道優(yōu)先級(jí),找出優(yōu)先級(jí)最高的通道地址附近的地址連續(xù)(或緊密)的通道,這些通道形成一個(gè)通道塊。重復(fù)同樣的過(guò)程,將剩下的通道繼續(xù)分塊,直到形成的塊數(shù)大于某一規(guī)定的數(shù)值比如20 或?qū)⒈炯拇嫫鞯乃型ǖ婪峙渫瓿伞?/p>
(4)根據(jù)通訊協(xié)議的特點(diǎn),在打包數(shù)據(jù)請(qǐng)求時(shí)盡量保證包含更多的請(qǐng)求,從而減少請(qǐng)求的總次數(shù)。
6 、結(jié)論
根據(jù)本文的PLC 通用性數(shù)據(jù)接口開(kāi)發(fā)人員已開(kāi)發(fā)出多個(gè)廠家的PLC 驅(qū)動(dòng),并在不同項(xiàng)目中得到應(yīng)用。在此PLC 通用數(shù)據(jù)接口基礎(chǔ)上開(kāi)發(fā)PLC 驅(qū)動(dòng),縮短了開(kāi)發(fā)時(shí)間和難度。投入運(yùn)行的系統(tǒng)通信穩(wěn)定,采集速度快,通用性好,可靠性高。保證了項(xiàng)目的順利實(shí)施。本文作者創(chuàng)新點(diǎn):具有通用性的監(jiān)控系統(tǒng)與PLC 通信接口設(shè)計(jì),能夠大大縮短開(kāi)發(fā)時(shí)間和難度,并提高通信穩(wěn)定性、實(shí)時(shí)性,具有很高的實(shí)用價(jià)值和經(jīng)濟(jì)價(jià)值。
文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。
你可能感興趣的文章