臧 峰,吳 波,牛洪海,陳 俊
(南京南瑞繼保電氣有限公司,江蘇 南京 211102)
數(shù)據(jù)采集廣泛應(yīng)用于狀態(tài)監(jiān)控、故障診斷、誤差補(bǔ)償?shù)裙I(yè)過程控制領(lǐng)域的各個(gè)階段。伴隨中國制造2025 的提出,工業(yè)化和信息化融合進(jìn)入了全新階段[1-2]。以太網(wǎng)作為當(dāng)今局域網(wǎng)通信的通用標(biāo)準(zhǔn),得到了廣泛的應(yīng)用,并且應(yīng)用于工業(yè)控制領(lǐng)域,形成了工業(yè)以太網(wǎng)。實(shí)時(shí)工業(yè)以太網(wǎng)作為工業(yè)過程控制通信領(lǐng)域研究的熱點(diǎn)[3],具有傳輸距離長、抗干擾能力強(qiáng)、性價(jià)比高等一系列優(yōu)點(diǎn),因此廣泛應(yīng)用于工業(yè)過程控制領(lǐng)域。文獻(xiàn)[4]介紹了幾種常用的工業(yè)以太網(wǎng)及其協(xié)議接口分析。文獻(xiàn)[5]提出了工業(yè)實(shí)時(shí)以太網(wǎng)(ethernet powerlink,EPL)協(xié)議的分析,設(shè)計(jì)并實(shí)現(xiàn)了三軸電機(jī)的通信控制和實(shí)時(shí)性能測試。文獻(xiàn)[6]提出了一種基于ARM 的工業(yè)監(jiān)控系統(tǒng),并通過無線傳輸實(shí)現(xiàn)溫濕度數(shù)據(jù)的上送。以上文獻(xiàn)只考慮了本地?cái)?shù)據(jù)的采集和控制,沒有考慮當(dāng)現(xiàn)場設(shè)備距離控制器較遠(yuǎn)時(shí),無法實(shí)現(xiàn)對現(xiàn)場數(shù)據(jù)的實(shí)時(shí)采集和控制指令的輸出。因此,本文提出了一種基于工業(yè)以太網(wǎng)的遠(yuǎn)程數(shù)據(jù)采集和控制的方法,以解決遠(yuǎn)程設(shè)備的監(jiān)控問題。
隨著科學(xué)技術(shù)的進(jìn)步和工業(yè)控制技術(shù)的發(fā)展,對現(xiàn)場設(shè)備進(jìn)行遠(yuǎn)程控制的需求越來越強(qiáng)烈,而現(xiàn)場的控制環(huán)境也隨之復(fù)雜化。輸入輸出(input output,I/O)模塊的應(yīng)用使得對現(xiàn)場設(shè)備的控制得以實(shí)現(xiàn)。并行冗余協(xié)議(parallet redundancy protocol,PRP)系統(tǒng)結(jié)構(gòu)如圖1 所示。
圖1 PRP 系統(tǒng)結(jié)構(gòu)圖Fig.1 Structure of PRP system
I/O 模塊通常包括開關(guān)量輸入(digital input,DI)、開關(guān)量輸出(digital output,DO)、模擬量輸入(analog input,AI)、模擬量輸出(analog output,AO)和串口通信(serial communication,SC)模塊,是分布式采集系統(tǒng)中的關(guān)鍵部件。通過I/O 模塊可以采集現(xiàn)場設(shè)備就地?cái)?shù)據(jù),有效提高數(shù)據(jù)采集的品質(zhì);同時(shí),通過指令輸出,實(shí)現(xiàn)對設(shè)備的現(xiàn)場控制。使用I/O 模塊對現(xiàn)場設(shè)備進(jìn)行控制和數(shù)據(jù)采集過程中,存在一定的局限性。高可用性無縫冗余協(xié)議(high availability seamless redundancy,HSR)系統(tǒng)結(jié)構(gòu)如圖2 所示。
圖2 HSR 系統(tǒng)結(jié)構(gòu)圖Fig.2 Structure of HSR system
例如,當(dāng)現(xiàn)場設(shè)備距離控制器較遠(yuǎn)時(shí),無法通過控制器實(shí)現(xiàn)對現(xiàn)場設(shè)備的數(shù)據(jù)采集和輸出控制。此時(shí)需要通過遠(yuǎn)程采集和控制,以實(shí)現(xiàn)對現(xiàn)場設(shè)備的監(jiān)控。因此,本文提出一種用于遠(yuǎn)程數(shù)據(jù)采集和控制的方法。該方法通過組態(tài)工具,根據(jù)現(xiàn)場需求進(jìn)行I/O 模塊配置,能夠提供定制化的配置功能,滿足不同的現(xiàn)場控制需求。同時(shí),采用冗余以太網(wǎng)進(jìn)行遠(yuǎn)程通信,保證控制過程和數(shù)據(jù)采集過程的高效、可靠。冗余通信可根據(jù)組態(tài)工具配置實(shí)現(xiàn)PRP 或HSR。PRP/HSR 冗余網(wǎng)絡(luò)協(xié)議的特點(diǎn)是網(wǎng)絡(luò)冗余,但是應(yīng)用層只收到一份數(shù)據(jù),從而降低了嵌入式軟件應(yīng)用層處理報(bào)文的壓力[7-9]。
PRP 協(xié)議的實(shí)現(xiàn)依賴于支持PRP 的網(wǎng)絡(luò)節(jié)點(diǎn)。每個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)具有2 個(gè)獨(dú)立運(yùn)行的網(wǎng)絡(luò)物理端口,并且這2 個(gè)端口連接2 個(gè)獨(dú)立的交換機(jī)[10]。如圖1 所示,網(wǎng)絡(luò)節(jié)點(diǎn)應(yīng)用層通過用戶數(shù)據(jù)報(bào)協(xié)議(user datagram protocol,UDP)或傳輸控制協(xié)議(transmission control protocol,TCP),通過2 個(gè)物理端口把數(shù)據(jù)獨(dú)立發(fā)送出去。目的節(jié)點(diǎn)把先接收到的數(shù)據(jù)發(fā)送給應(yīng)用層,后到的數(shù)據(jù)則丟棄[11]。因此,任何一個(gè)網(wǎng)絡(luò)端口發(fā)生故障,都不會導(dǎo)致網(wǎng)絡(luò)通信中斷,且應(yīng)用層只收到一份數(shù)據(jù),也不會增加系統(tǒng)處理報(bào)文的負(fù)擔(dān)。
HSR 實(shí)現(xiàn)原理與PRP 基本相同,也是依靠2 個(gè)獨(dú)立運(yùn)行的網(wǎng)絡(luò)端口實(shí)現(xiàn)冗余。只不過這2 個(gè)端口是通過環(huán)形方式建立連接[12]的。如圖2 所示,支持HSR 的網(wǎng)絡(luò)冗余端口同時(shí)向環(huán)網(wǎng)發(fā)送UDP 或TCP 報(bào)文。因此,接收方根據(jù)不同情況對報(bào)文進(jìn)行處理。
①判斷接收報(bào)文是否為廣播報(bào)文或組播報(bào)文,如是,則接收此報(bào)文并通過另外一個(gè)端口轉(zhuǎn)發(fā)。
②如不是廣播報(bào)文或組播報(bào)文,判斷目的地址是不是本地地址。如果不是,通過另外一個(gè)端口轉(zhuǎn)發(fā)。如果目的地址是本地地址,則進(jìn)一步判斷此報(bào)文是否是接收到的第一幀報(bào)文:如是,則轉(zhuǎn)發(fā)給應(yīng)用層;如不是,則丟棄。
組態(tài)工具根據(jù)現(xiàn)場需求進(jìn)行遠(yuǎn)程I/O 模塊的配置,包括I/O 模塊的槽位號、I/O 模塊的類型、子類型和版本號,并把此配置文件下發(fā)給控制器。控制器接收到配置文件后進(jìn)行在線解析,并與內(nèi)存中存儲的配置文件校驗(yàn)碼進(jìn)行對比。如果校驗(yàn)碼一致,說明是組態(tài)工具重復(fù)下發(fā)的配置文件,不進(jìn)行內(nèi)存更新;如果不一致,則更新控制器中的內(nèi)存信息,并把此配置文件通過冗余以太網(wǎng)轉(zhuǎn)發(fā)給遠(yuǎn)程IOLINK 模塊。
遠(yuǎn)程IOLINK 模塊接收到控制器通過冗余網(wǎng)絡(luò)下發(fā)的組態(tài)文件后,也進(jìn)行在線解析配置文件,并與本地內(nèi)存保存的配置文件校驗(yàn)碼進(jìn)行比較。如果校驗(yàn)碼一致,說明是控制器重復(fù)下發(fā)的配置文件,不進(jìn)行內(nèi)存更新;如果不一致,則更新遠(yuǎn)程IOLINK 中的內(nèi)存信息。遠(yuǎn)程IOLINK 在數(shù)據(jù)交互報(bào)文中周期性地上傳本地存儲的配置文件校驗(yàn)碼信息,以防止因配置文件丟失而導(dǎo)致的控制器與遠(yuǎn)程IOLINK 中信息不匹配的問題。
數(shù)據(jù)交互協(xié)議包括兩層協(xié)議:①控制器與遠(yuǎn)程IOLINK 模塊之間的數(shù)據(jù)交互;②遠(yuǎn)程IOLINK 模塊與I/O 模塊之間的數(shù)據(jù)交互。
控制器與遠(yuǎn)程IOLINK 模塊之間的數(shù)據(jù)交互包括周期性數(shù)據(jù)交互和非周期性數(shù)據(jù)交互。周期性數(shù)據(jù)交互是指控制器周期性下發(fā)給遠(yuǎn)程IOLINK 模塊的查詢數(shù)據(jù)指令和控制輸出指令。遠(yuǎn)程IOLINK 接收到控制器下發(fā)的指令后,進(jìn)行數(shù)據(jù)報(bào)文的解析,并把控制指令存儲在本地內(nèi)存中;同時(shí),把本地內(nèi)存中采集的I/O 模塊數(shù)據(jù)組包反饋給控制器。非周期性數(shù)據(jù)交互是指一些突發(fā)性的數(shù)據(jù)交互。例如:當(dāng)遠(yuǎn)程IOLINK 模塊采集到DI 的事故序列(sequence of event,SOE)時(shí),遠(yuǎn)程IOLINK 模塊在周期性反饋報(bào)文中置標(biāo)記位通知控制器有SOE 數(shù)據(jù)??刂破鹘邮盏酱藰?biāo)志位后會下發(fā)一幀非周期性查詢報(bào)文,以采集遠(yuǎn)程IOLINK 模塊中存儲的SOE 信息。
遠(yuǎn)程IOLINK 模塊與I/O 模塊之間的數(shù)據(jù)交互也包括周期性和非周期性數(shù)據(jù)。遠(yuǎn)程IOLINK 與I/O 模塊之間通信的實(shí)時(shí)性和可靠性,主要取決于物理層的通信速率和數(shù)據(jù)鏈路層的調(diào)度策略。應(yīng)用層實(shí)現(xiàn)了I/O 模塊實(shí)時(shí)數(shù)據(jù)或非實(shí)時(shí)數(shù)據(jù)的解析,數(shù)據(jù)鏈路層實(shí)現(xiàn)了數(shù)據(jù)的循環(huán)冗余校驗(yàn)(cyclic redundant check,CRC),物理層實(shí)現(xiàn)了串口數(shù)據(jù)的編解碼功能。遠(yuǎn)程IOLINK 模塊周期性地下發(fā)控制指令和查詢指令,I/O模塊接收到此指令后進(jìn)行解析并反饋數(shù)據(jù)。組態(tài)工具可以直接與遠(yuǎn)程IOLINK 模塊進(jìn)行交互,發(fā)送查詢I/O模塊內(nèi)存、設(shè)置I/O 模塊變量等非周期性數(shù)據(jù)。I/O模塊包括一個(gè)微控制器(micro control unit,MCU),通過DMA 實(shí)現(xiàn)了數(shù)據(jù)的采集和傳輸。詳細(xì)設(shè)計(jì)可參考文獻(xiàn)[13]。
控制器和遠(yuǎn)程IOLINK 模塊使用了Xilinx 公司的Zynq 芯片。此芯片具有2 個(gè)ARM 芯片和一個(gè)現(xiàn)場可編輯邏輯門陣列(field programmable gate array,FPGA)。ARM 芯片運(yùn)行QNX 實(shí)時(shí)操作系統(tǒng),并通過FPGA 擴(kuò)展6 路冗余I/O 總線。每路總線都實(shí)現(xiàn)了5 Mbit/s 的高速串口通信[14]。
為了實(shí)現(xiàn)上述功能,需要對各個(gè)功能進(jìn)行詳細(xì)分析,并進(jìn)行軟件設(shè)計(jì)。組態(tài)工具與控制器時(shí)序如圖3所示。
圖3 組態(tài)工具與控制器時(shí)序圖Fig.3 Time sequence diagram of configuration tool and controller
通過組態(tài)工具進(jìn)行I/O 模塊配置,并將配置文件下發(fā)給控制器。組態(tài)工具是用于可視化生成I/O 模塊配置文件的工具。通過組態(tài)工具,可以根據(jù)現(xiàn)場的實(shí)際需求進(jìn)行I/O 模塊的可視化配置,并生成對應(yīng)的配置文件。控制器對接收的配置文件進(jìn)行在線解析并生成內(nèi)存鏡像數(shù)據(jù)??刂破鹘邮盏脚渲梦募?根據(jù)自定義格式進(jìn)行解析,并生成I/O 模塊的類型、輸入數(shù)據(jù)和輸出數(shù)據(jù)的內(nèi)存鏡像??刂破鬟€可以將接收的配置文件存儲在本地存儲器(例如FLASH)中,以便控制器重啟后進(jìn)行重新解析。此外,控制器還可以根據(jù)配置文件對本地文件進(jìn)行更新。當(dāng)經(jīng)過CRC 發(fā)現(xiàn)接收到的配置文件與本地存儲的文件不一致時(shí),對本地配置文件進(jìn)行更新??刂破髟谑盏竭h(yuǎn)程IOLINK 反饋的采集數(shù)據(jù)后,將其存儲至控制器內(nèi)存鏡像。
控制器與遠(yuǎn)程IOLINK 時(shí)序如圖4 所示。
圖4 控制器與遠(yuǎn)程IOLINK 時(shí)序圖Fig.4 Time sequcnce diagram of controller and remote IOLINK
控制器收到組態(tài)工具下發(fā)的配置文件后,將接收的配置文件下發(fā)給在線的遠(yuǎn)程IOLINK 模塊。控制器首先對遠(yuǎn)程IOLINK 模塊進(jìn)行在線監(jiān)測,通過在線監(jiān)測確定遠(yuǎn)程IOLINK 模塊是否在線。具體方案如下。
控制器定期向遠(yuǎn)程IOLINK 模塊發(fā)送數(shù)據(jù)包進(jìn)行在線監(jiān)測。例如,可以間隔1 s 進(jìn)行一次??刂破魇盏竭h(yuǎn)程IOLINK 模塊的響應(yīng)報(bào)文后,將遠(yuǎn)程IOLINK 模塊標(biāo)志為在線。遠(yuǎn)程IOLINK 模塊對接收的配置文件進(jìn)行在線解析并生成遠(yuǎn)程IOLINK 的內(nèi)存鏡像。當(dāng)遠(yuǎn)程IOLINK 模塊接收到控制器下發(fā)的配置文件后,首先進(jìn)行在線解析,生成I/O 模塊在遠(yuǎn)程IOLINK 中的內(nèi)存鏡像,包括輸入數(shù)據(jù)、輸出數(shù)據(jù)和參數(shù)。與控制器的內(nèi)存鏡像相比,遠(yuǎn)程IOLINK 內(nèi)存鏡像中多了參數(shù)項(xiàng)。其原因是遠(yuǎn)程IOLINK 模塊需要把參數(shù)數(shù)據(jù)下發(fā)給I/O 模塊,以便I/O 模塊根據(jù)參數(shù)進(jìn)行配置和運(yùn)行。遠(yuǎn)程IOLINK 模塊周期性地與其所管轄的I/O 模塊進(jìn)行高速(例如20 ms)串口通信,實(shí)時(shí)采集I/O 模塊的數(shù)據(jù),并把控制器下發(fā)的控制指令下發(fā)給I/O 模塊。
針對上述設(shè)計(jì)的功能,進(jìn)行在線更新遠(yuǎn)程I/O 模塊、冗余網(wǎng)絡(luò)、數(shù)據(jù)傳輸功能測試。
通過組態(tài)工具,對在線修改遠(yuǎn)程I/O 模塊類型、增加I/O 模塊、刪除I/O 模塊的功能進(jìn)行測試,并通過組態(tài)工具實(shí)時(shí)監(jiān)測修改功能是否起效。通過測試發(fā)現(xiàn),I/O 模塊配置文件的在線更新功能正常。
通過組態(tài)工具將系統(tǒng)網(wǎng)絡(luò)設(shè)置為PRP 或HSR 模式,并按照圖1 或圖2 進(jìn)行網(wǎng)絡(luò)架構(gòu)鏈接。在遠(yuǎn)程I/O 模塊數(shù)據(jù)正常采集的情況下,拔掉任一端口的網(wǎng)絡(luò),測試發(fā)現(xiàn)I/O 模塊數(shù)據(jù)能夠正常刷新,表明冗余網(wǎng)絡(luò)可以在網(wǎng)絡(luò)單點(diǎn)故障的情況下正常工作。通過網(wǎng)絡(luò)抓包工具wireshark 抓包分析可知,不管是在PRP 模式還是HSR 模式,發(fā)送側(cè)通過2 個(gè)端口同時(shí)發(fā)出數(shù)據(jù)報(bào)文。
通過上述2 個(gè)測試,已對周期性數(shù)據(jù)傳輸功能進(jìn)行了測試。因此只需要進(jìn)行非周期性數(shù)據(jù)的測試。通過DI 模塊進(jìn)行SOE 功能測試以及wireshark 抓包發(fā)現(xiàn),在DI 進(jìn)行SOE 功能測試時(shí),遠(yuǎn)程IOLINK 上傳了標(biāo)志位,并且控制器下發(fā)了查詢報(bào)文。
本文設(shè)計(jì)并實(shí)現(xiàn)了一種基于工業(yè)以太網(wǎng)的遠(yuǎn)程數(shù)據(jù)采集和控制方法。該方法實(shí)現(xiàn)了遠(yuǎn)程I/O 模塊數(shù)據(jù)的實(shí)時(shí)采集和控制,擴(kuò)展了控制器的應(yīng)用場景。通過對現(xiàn)場數(shù)據(jù)的實(shí)時(shí)采集和持久化存儲操作,有利于現(xiàn)場設(shè)備數(shù)據(jù)的分析和優(yōu)化。