本文討論了可編程控制器驅(qū)動(dòng)程序的設(shè)計(jì)和開發(fā)方法。詳細(xì)介紹了PLC底層驅(qū)動(dòng)功能的設(shè)計(jì)與實(shí)現(xiàn);并討論了提高渠道利用率的幾個(gè)關(guān)鍵問(wèn)題。實(shí)驗(yàn)表明,它可以降低開發(fā)成本,大大提高計(jì)算機(jī)監(jiān)控系統(tǒng)與可編程控制器之間數(shù)據(jù)通信的效率和通道利用率。
1.介紹
隨著計(jì)算機(jī)科學(xué)技術(shù)、工業(yè)控制等新技術(shù)的快速發(fā)展,計(jì)算機(jī)監(jiān)控系統(tǒng)與現(xiàn)場(chǎng)PLC設(shè)備之間的數(shù)據(jù)交換得到了廣泛應(yīng)用。這種數(shù)據(jù)交換往往具有以下特點(diǎn):數(shù)據(jù)量大、采集點(diǎn)分散、帶寬窄。由于不同廠家提供的PLC現(xiàn)場(chǎng)設(shè)備的通信機(jī)制不盡相同,越來(lái)越多的設(shè)備通信驅(qū)動(dòng)程序需要通過(guò)計(jì)算機(jī)監(jiān)控系統(tǒng)軟件來(lái)開發(fā)。這種復(fù)雜設(shè)備驅(qū)動(dòng)程序的開發(fā)具有以下特點(diǎn):
首先,上層監(jiān)控系統(tǒng)與PLC設(shè)備之間的數(shù)據(jù)交換被廣泛使用。
其次,這種數(shù)據(jù)通信過(guò)程缺乏通用的框架設(shè)計(jì),開發(fā)周期長(zhǎng)、難度大,難以通用。
此外,在帶寬有限的大量數(shù)據(jù)傳輸中,信道利用率低,系統(tǒng)效率差且不穩(wěn)定,迫切需要大幅提高信道利用率的算法。而且,在現(xiàn)有的數(shù)據(jù)交換標(biāo)準(zhǔn)中,對(duì)于有限帶寬條件下的信道利用沒(méi)有成熟的設(shè)計(jì)。
如上所述,開發(fā)PLC設(shè)備通用數(shù)據(jù)通信接口具有廣闊的應(yīng)用前景和實(shí)現(xiàn)價(jià)值。本文主要分析了上位監(jiān)控系統(tǒng)與PLC設(shè)備之間的數(shù)據(jù)通信,介紹了PLC設(shè)備驅(qū)動(dòng)程序開發(fā)的方法,并提供了一個(gè)PLC通信的實(shí)例。
2.可編程控制器驅(qū)動(dòng)程序的使用
本文以采用串行通信的可編程控制器為例進(jìn)行分析和說(shuō)明。監(jiān)控系統(tǒng)為北京昆侖同泰公司生產(chǎn)的MCGS監(jiān)控軟件。開發(fā)工具是VC++6.0。
在MCGS,PLC已經(jīng)將串行通信的波特率設(shè)置等功能集成到串行父設(shè)備中,因此在MCGS監(jiān)控軟件設(shè)備管理窗口中,PLC設(shè)備驅(qū)動(dòng)程序作為子設(shè)備提供。它可以使用父設(shè)備的通信功能,即它可以與其他設(shè)備共享父設(shè)備的通信功能。由于使用串口的PLC設(shè)備很多,這里我們以使用串口通信的PLC為例來(lái)說(shuō)明PLC通用驅(qū)動(dòng)程序架構(gòu)的開發(fā)。如果使用用戶定義的編程電纜或以太網(wǎng)連接,該可編程邏輯控制器驅(qū)動(dòng)框架也適用。
PLC與上位機(jī)之間采用串行通信,通信方式有RS232、RS485和RS422三種。如果設(shè)備通過(guò)RS232通信,在一個(gè)串行端口下只能連接一個(gè)設(shè)備。如果使用RS485或RS422進(jìn)行通信,可以使用多個(gè)設(shè)備組成一個(gè)網(wǎng)絡(luò)。在這個(gè)網(wǎng)絡(luò)中,為了識(shí)別不同的設(shè)備,每個(gè)設(shè)備都添加了一個(gè)符號(hào),通常稱為設(shè)備地址。該總線上的設(shè)備分為主設(shè)備和從設(shè)備。在工作中,從設(shè)備一直在監(jiān)控和分析通信線路上的數(shù)據(jù),當(dāng)它收到自己的請(qǐng)求時(shí),會(huì)發(fā)送相應(yīng)的響應(yīng)幀。當(dāng)主設(shè)備工作時(shí),它會(huì)向從設(shè)備發(fā)送請(qǐng)求幀,請(qǐng)求一些數(shù)據(jù)或根據(jù)需要發(fā)送命令。發(fā)送請(qǐng)求幀后,主設(shè)備需要等待從設(shè)備的應(yīng)答,這個(gè)等待過(guò)程有超時(shí)限制。如果你過(guò)了一定時(shí)間還沒(méi)有收到回復(fù),它會(huì)認(rèn)為這次溝通失敗了,然后按照一定的邏輯判斷是重發(fā)請(qǐng)求還是放棄。
用于通信的通信協(xié)議分為ASCII通信和十六進(jìn)制通信。PLC的通信協(xié)議大多采用十六進(jìn)制通信。而且在串行通信中,為了保證通信的正確性和完整性,通常會(huì)在通信幀的末尾增加一個(gè)校驗(yà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.主要過(guò)程
3.1收集過(guò)程
為了便于解釋,這里是一個(gè)采集周期只需要一次采集的最簡(jiǎn)單情況。在5.1的集采模式中,描述了一個(gè)周期多次集采內(nèi)需的算法。
采集過(guò)程描述如下:首先初始化,然后創(chuàng)建通道。進(jìn)入數(shù)據(jù)收集周期。在每個(gè)數(shù)據(jù)收集周期中,首先形成讀命令,然后驗(yàn)證發(fā)送的數(shù)據(jù)幀。讀寫串行端口完成一次通信。如果通信成功,接收的數(shù)據(jù)被解碼并在驗(yàn)證后輸出到信道,并返回成功標(biāo)記。如果通信不成功或驗(yàn)證失敗,將返回失敗標(biāo)記。
3.2分析功能流程
上圖是解析數(shù)據(jù)幀的流程圖。不同的設(shè)備有不同的協(xié)議內(nèi)容。要使用已定義的模板解析函數(shù),開發(fā)人員只需根據(jù)設(shè)備協(xié)議將框架劃分為有效的數(shù)據(jù)部分,并將其添加到聯(lián)合體FrameField中。聯(lián)合體可以最低限度地將協(xié)議數(shù)據(jù)分成位進(jìn)行操作。
如上圖所示,第一個(gè)字節(jié)為幀頭,最后一個(gè)字節(jié)為幀尾,第二個(gè)字節(jié)為狀態(tài)指示符,第三至第六個(gè)字節(jié)為模擬量,第七個(gè)字節(jié)為單位,第八個(gè)字節(jié)按位分為四路輸入和四路輸出。
4.接口設(shè)計(jì)
一般來(lái)說(shuō),一個(gè)廠家同系列PLC產(chǎn)品的通信協(xié)議一般都是一樣的。唯一的區(qū)別是一些寄存器的大小不同。這樣,我們認(rèn)為這一系列設(shè)備可以使用相同的驅(qū)動(dòng)程序。為了提高通用性,同時(shí),一般情況下,用戶不需要使用所有寄存器,所以設(shè)計(jì)了這個(gè)設(shè)備組件的通道,以便用戶在配置時(shí)自行定義。的所有通道及其相應(yīng)的參數(shù)(即寄存器地址)由用戶自己定義。驅(qū)動(dòng)程序根據(jù)用戶定義的信息進(jìn)行通信。而且PLC中可能有一些參數(shù)是用戶不常用的。如果形成渠道,每個(gè)采集周期都需要溝通,效率相對(duì)較低??紤]到這種情況,我們提供了一些外部接口供監(jiān)控系統(tǒng)調(diào)用,在這些接口中可以發(fā)送命令并支持所有寄存器通道。
通過(guò)分析不同廠家的PLC設(shè)備,我們還可以發(fā)現(xiàn),我們可以抽象出通信過(guò)程和協(xié)議模式,提取它們的共同點(diǎn)和變化點(diǎn),并在數(shù)據(jù)交換過(guò)程中封裝和隱藏細(xì)節(jié),從而達(dá)到通用的目的。通過(guò)封裝格式、標(biāo)準(zhǔn)化代碼和統(tǒng)一接口,提高了驅(qū)動(dòng)開發(fā)的效率,降低了驅(qū)動(dòng)開發(fā)的難度。提高代碼的可重用性,增強(qiáng)驅(qū)動(dòng)的穩(wěn)定性,減少設(shè)計(jì)中容易出現(xiàn)的錯(cuò)誤。讓開發(fā)人員專注于設(shè)備的熟悉度和協(xié)議的分析,而不是過(guò)分糾結(jié)于編程實(shí)現(xiàn)的細(xì)節(jié)。
封裝的數(shù)據(jù)和操作包括:
隱藏?cái)?shù)據(jù)采集中的底層通信過(guò)程(一些設(shè)備需要發(fā)送和接收多次才能完成數(shù)據(jù)采集
程,如西門子s 7200);封裝針對(duì)分散采集點(diǎn)的動(dòng)態(tài)采集算法;封裝常見的命令操作;提供與監(jiān)控系統(tǒng)交互的統(tǒng)一接口;PLC驅(qū)動(dòng)封裝底層通信過(guò)程,只暴露接口方法,開發(fā)人員統(tǒng)一調(diào)用此方法,保證軟件對(duì)客戶的透明性,使開發(fā)人員與底層開發(fā)分離,降低開發(fā)難度。
對(duì)于驅(qū)動(dòng)程序開發(fā)人員來(lái)說(shuō),需要注意的接口只有以下幾個(gè)部分:
定義設(shè)備本身的屬性;如地址、實(shí)時(shí)采集的時(shí)間要求等。定義設(shè)備的讀寫操作屬性;比如頻道的數(shù)量;總體設(shè)計(jì)只提供了與設(shè)備協(xié)議相關(guān)的打包和解包的接口,實(shí)現(xiàn)過(guò)程將由開發(fā)者完成。
5.關(guān)鍵問(wèn)題分析
為了提高信道利用率和系統(tǒng)效率,在PLC通信框架的設(shè)計(jì)中考慮了幾個(gè)關(guān)鍵問(wèn)題。
5.1三種采集模式
在分析現(xiàn)有數(shù)據(jù)交換后,將用戶的一般需求歸納為三種采集模式,即集約采集、按需采集和定時(shí)采集。
密集采集模式:這種情況下,用戶希望充分利用物理帶寬,保證最快的采集速度和更新。在這種模式下,理想狀態(tài)是設(shè)備始終處于采集狀態(tài)。目前,收集所有活動(dòng)通道中周期時(shí)間最短的通道。保證所有通道都能獲得采集機(jī)會(huì),但相比其他模式,這種模式下的CPU利用率會(huì)更高。
按需采集模式:在通信鏈路需要控制的情況下,比如用戶使用GPRS按照流量進(jìn)行采集和收費(fèi),無(wú)法進(jìn)行大量的通信。此時(shí)將采集模式設(shè)置為按需采集,需要時(shí)再調(diào)用接口函數(shù)開始單次采集。否則,不執(zhí)行數(shù)據(jù)收集。
定時(shí)采集模式:該模式是一種折衷CPU占用率和采集速度的采集幀,保證在用戶設(shè)置的通道刷新周期內(nèi)可以進(jìn)行通道的采集,然后進(jìn)行下一次采集,直到下一個(gè)通道刷新周期到來(lái)。
在模塊設(shè)計(jì)中,采集方式是設(shè)備類的一個(gè)屬性,開發(fā)者根據(jù)具體情況選擇合適的采集方式。不同采集模式的采集算法實(shí)現(xiàn)如下:
密集采集執(zhí)行流程:設(shè)置采集周期,如1000毫秒。每當(dāng)新的采集周期開始時(shí),采集通道的優(yōu)先級(jí)被重新計(jì)算。遍歷所有渠道,找出目前優(yōu)先級(jí)最高的渠道,收集。阻塞通道(這些塊包含最需要刷新的通道)。進(jìn)入通信周期(有些設(shè)備一次采集至少需要兩次通信,因此需要通信周期)。發(fā)送數(shù)據(jù)請(qǐng)求并等待響應(yīng);根據(jù)返回的信息分析結(jié)果并做出相應(yīng)的處理;判斷是否需要下一次收購(gòu),如果不需要跳出周期;更新頻道和采集標(biāo)志;繼續(xù)發(fā)送線程消息以開始下一次收集,直到通信周期結(jié)束;直到所有要收集的通道都被遍歷。
按需采集執(zhí)行流程:循環(huán)采集各通道,保存采集成功的數(shù)值,并進(jìn)行后續(xù)處理。定時(shí)采集執(zhí)行過(guò)程由定時(shí)器觸發(fā),采集過(guò)程與密集采集相同,但不滿足采集要求的通道不進(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ì)導(dǎo)致系統(tǒng)效率低,信道利用率差。為了解決這個(gè)問(wèn)題,采用了以下解決方案:
(1)只收集用戶關(guān)心的數(shù)據(jù)。如果有多個(gè)頻道,只傳輸當(dāng)前用戶只關(guān)心的頻道的數(shù)據(jù),其他頻道不關(guān)心。確保盡可能少的通道,并為每個(gè)需要收集的通道提供更快的收集周期。從而減少了流量。
(2)對(duì)待采集的數(shù)據(jù)賦予不同的優(yōu)先級(jí),對(duì)一些實(shí)時(shí)性要求較高的數(shù)據(jù)給予優(yōu)先級(jí)。優(yōu)先級(jí)可以根據(jù)用戶設(shè)置的數(shù)據(jù)刷新時(shí)間進(jìn)行更改。
(3)考慮信道利用率和有效信息獲取的實(shí)時(shí)性,實(shí)現(xiàn)動(dòng)態(tài)分塊算法,以合理的粒度對(duì)收集的信息進(jìn)行分塊和傳輸;分塊算法的實(shí)現(xiàn)簡(jiǎn)述如下:采集時(shí),判斷當(dāng)前采集的寄存器類的活動(dòng)通道如果能形成數(shù)據(jù)請(qǐng)求包,則進(jìn)行處理,增加一次采集的通道數(shù)。根據(jù)開發(fā)者定義的通道優(yōu)先級(jí),在優(yōu)先級(jí)最高的通道地址附近找出地址連續(xù)(或接近)的通道,這些通道組成一個(gè)通道塊。重復(fù)相同的過(guò)程,并繼續(xù)阻塞剩余的通道,直到形成的塊數(shù)大于指定值(如20)或分配了該寄存器中的所有通道。(初學(xué)者可以結(jié)合PLC視頻教程來(lái)新學(xué)習(xí)。)
(4)根據(jù)通信協(xié)議的特點(diǎn),在打包數(shù)據(jù)請(qǐng)求時(shí),盡量保證包含更多的請(qǐng)求,從而減少請(qǐng)求總數(shù)。
6.結(jié)論
根據(jù)本文中PLC的通用數(shù)據(jù)接口,開發(fā)人員開發(fā)了多家廠商的PLC驅(qū)動(dòng)程序,并在不同的項(xiàng)目中得到應(yīng)用?;谠揚(yáng)LC通用數(shù)據(jù)接口開發(fā)PLC驅(qū)動(dòng)程序,縮短了開發(fā)時(shí)間和難度。該系統(tǒng)投入運(yùn)行后,通信穩(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à)值。
審核編輯:符乾江
評(píng)論