裴忠誠 ,陳洪駿 ,葉 樺
(1.東南大學(xué) 自動化學(xué)院,南京 210096;2.蘇州經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院 機電與信息技術(shù)學(xué)院,蘇州215009)
遠程通信和監(jiān)控技術(shù)是通過各種通信手段收集并處理遠端監(jiān)控設(shè)備的多元信息,以便實時了解設(shè)備的運行情況以及對設(shè)備進行統(tǒng)一管理的一種技術(shù)。為了幫助自動化設(shè)備企業(yè)進一步縮短設(shè)備故障診斷時間,提高設(shè)備維護效率,改進設(shè)備制造質(zhì)量,降低去現(xiàn)場修改PLC程序的人員費用[1]。本項目設(shè)計了一種基于歐姆龍PLC的工業(yè)監(jiān)控網(wǎng)絡(luò)系統(tǒng),該系統(tǒng)現(xiàn)場設(shè)備使用歐姆龍CP1H型號PLC,其核心技術(shù)之一就是對Host Link FINS協(xié)議解析和使用。通過對PLC通信指令進行解析,基于通信協(xié)議定制相關(guān)監(jiān)控指令和操作指令來實現(xiàn)監(jiān)控軟件與PLC的遠程通信以及遠程程序下載上傳[2]。維護人員只需連接至網(wǎng)絡(luò),即可通過監(jiān)控軟件在線監(jiān)視PLC的程序運行情況,從而降低運營成本。
整個監(jiān)控系統(tǒng)分成2個部分:現(xiàn)場設(shè)備和監(jiān)控軟件,如圖1所示?,F(xiàn)場的PLC負(fù)責(zé)設(shè)備的控制和信息采集;信號發(fā)射器通過串口和PLC相接,用于實現(xiàn)PLC設(shè)備與監(jiān)控軟件的遠程通訊,實時監(jiān)測PLC設(shè)備的運行狀態(tài)以及實現(xiàn)程序的遠程修改和升級[3];服務(wù)器主要作為數(shù)據(jù)通信與數(shù)據(jù)處理部分,主要為客戶端軟件提供它所需的數(shù)據(jù)源,同時將來自客戶端軟件的遠程控制指令實時轉(zhuǎn)發(fā)給目標(biāo)PLC設(shè)備;客戶端部分則主要提供數(shù)據(jù)監(jiān)控與分析、程序升級、客戶信息查詢、設(shè)備位置管理等功能[5]。
圖1 監(jiān)控系統(tǒng)結(jié)構(gòu)圖Fig.1 Monitor and control system structure
CP1H型號PLC設(shè)備沒有配置網(wǎng)絡(luò)拓展模塊,無法直接和服務(wù)器通信。需要在PLC側(cè)開發(fā)信號發(fā)射器,使PLC設(shè)備能與監(jiān)控軟件進行數(shù)據(jù)通信。發(fā)射器模塊具有串口數(shù)據(jù)轉(zhuǎn)WIFI發(fā)送、串口數(shù)據(jù)轉(zhuǎn)以太網(wǎng)發(fā)送和串口數(shù)據(jù)轉(zhuǎn)GPRS發(fā)送3種功能,根據(jù)PLC設(shè)備所在現(xiàn)場的不同環(huán)境,選擇不同的工作模式。
底層PLC部分選用的是歐姆龍公司較新的一款PLC CP1H,是一種能夠?qū)崿F(xiàn)高速處理、高功能的程序一體化型PLC,處理速度可達到以往CP1M2A設(shè)備的10倍;豐富的高速計數(shù)器功能,多樣的脈沖控制,各種組件如串口、USB等使其連接相容性大大提高;可用于CJ拓展系列的高單元功能,靈活性比較高[4]。它能夠支持較新的Host Link FINS傳輸協(xié)議,通過串口直接與信號發(fā)射器相連,負(fù)責(zé)數(shù)據(jù)收發(fā),并且能自動校驗,通過通信鏈路進行檢測。
PC監(jiān)控軟件主要負(fù)責(zé)數(shù)據(jù)的采集、處理、實時顯示、警報和PLC程序的遠程下載、調(diào)試,從而實現(xiàn)對PLC的實時狀態(tài)進行監(jiān)控等[6]。這個功能方便監(jiān)控人員查詢PLC設(shè)備的參數(shù)數(shù)據(jù)狀態(tài),及時發(fā)現(xiàn)故障點,以及進行參數(shù)配置和遠程指令控制操作。
監(jiān)控軟件包括客戶端和服務(wù)器2部分,服務(wù)器分別與客戶端和PLC設(shè)備通信。服務(wù)器對接收到2邊的指令進行處理和轉(zhuǎn)發(fā),實現(xiàn)設(shè)備和終端通信,并且將數(shù)據(jù)存儲到數(shù)據(jù)庫中,為客戶端提供數(shù)據(jù)源??蛻舳瞬糠种饕鞘瞻l(fā)指令,并且對數(shù)據(jù)進行處理,顯示出監(jiān)控狀態(tài)。MFC中的各種類構(gòu)成了一個應(yīng)用程序框架,在此基礎(chǔ)上建立Windows應(yīng)用程序,是一種相對SDK來說更為簡單的方法[9]??蛻舳瞬捎肕FC技術(shù)設(shè)計監(jiān)控所需的界面,后臺進行指令傳送、解析、數(shù)據(jù)接收和處理,并且將需要的數(shù)據(jù)在軟件界面上顯示,方便工程人員監(jiān)控。當(dāng)工程人員需要調(diào)試時,可以將監(jiān)控程序關(guān)閉,切換到調(diào)試狀態(tài),系統(tǒng)打開PC上的CX-ONE軟件,進行修改、測試,并且能夠遠程上傳下載程序。
Host Link協(xié)議是歐姆龍公司產(chǎn)品的一種常用通信協(xié)議,通過Host Link協(xié)議,PLC可以和開發(fā)軟件相互之間進行串口通信。Host Link FINS協(xié)議采用的是問答式的通信方式,主機(Host computer)沒有向PLC發(fā)送任何指令時,PLC設(shè)備除了內(nèi)部程序執(zhí)行發(fā)送數(shù)據(jù)指令,是不會通過串口對外發(fā)送數(shù)據(jù)。當(dāng)通信鏈路為通的狀態(tài),主機向連接的PLC發(fā)送一條指令,PLC必須返回對應(yīng)的一條指令。PLC接收到主機發(fā)送的指令之后,首先進行指令校驗(FCS),沒有問題,取出FINS的指令部分,轉(zhuǎn)換成ASCII碼執(zhí)行相關(guān)操作,執(zhí)行結(jié)束后將返回給主機的指令重新進行校驗,發(fā)送給主機,完成一次通信過程。
Host Link FINS協(xié)議是基于Host Link協(xié)議的FINS通信協(xié)議。主機發(fā)送數(shù)據(jù)幀中,由Host Link數(shù)據(jù)幀頭、FINS發(fā)送指令數(shù)據(jù)、Host Link FCS校驗碼、Host Link幀尾組成,在PLC的返回數(shù)據(jù)幀中,由Host Link數(shù)據(jù)幀頭、FINS返回指令數(shù)據(jù)、Host Link FCS校驗碼、Host Link幀尾組成。
圖2和圖3是Host Link FINS發(fā)送指令和應(yīng)答指令的數(shù)據(jù)幀格式。
圖2 Host Link FINS發(fā)送指令Fig.2 Host Link FINS send command
圖3 Host Link FINS應(yīng)答指令Fig.3 Host Link FINS reply command
@:在PLC的Host Link FINS數(shù)據(jù)幀中,是以ASCII碼‘@’為開頭;
Unit No.:單元號,對應(yīng)PLC內(nèi)置串口或串行通訊單元設(shè)置的Host Link單元號;
Header code:在PC主機直連PLC的情況下,頭代碼為FA;
ICF:為信息控制域,用于標(biāo)明指令和響應(yīng),當(dāng)FINS指令依賴網(wǎng)絡(luò)就用80,如果是直連就用00;
RSV:為系統(tǒng)保留,設(shè)定為00;
GCT:為網(wǎng)關(guān)允許數(shù)目;
DNA:為目的網(wǎng)絡(luò)號;
DA1:為目的節(jié)點號;
DA2:為目的單元號;
SNA:為源網(wǎng)絡(luò)號;
SA1:為源節(jié)點號;
SA2:為源單元號;
SID:為服務(wù)和響應(yīng)的標(biāo)識號,可任意設(shè)置,指令和響應(yīng)對應(yīng)相同;
MRC和SRC:分別為FINS指令的主指令和從指令;
FCS:用于標(biāo)明所操作的數(shù)據(jù)地址、范圍等,在響應(yīng)幀中前2個字節(jié)MRES和SRES構(gòu)成響應(yīng)碼,用來診斷錯誤信息。
2.2.1 FINS數(shù)據(jù)幀格式
上面的Host Link FINS指令中,包含了FINS指令。FINS指令的數(shù)據(jù)幀格式如圖4和圖5所示。
圖4 FINS發(fā)送指令Fig.4 FINS send command
圖5 FINS應(yīng)答指令Fig.5 FINS reply command
指令開頭2字節(jié)是指令碼,這里0102說明是讀存儲區(qū)的指令,82是變量分類,根據(jù)指令碼的不同而含義不同,當(dāng)指令碼是讀數(shù)據(jù)指令時,那么這個字節(jié)的意義就是確定數(shù)據(jù)區(qū),82表示DM存儲區(qū)。接著為數(shù)據(jù)區(qū)的起始地址(3個字節(jié)),字?jǐn)?shù)(2個字節(jié))。
2.2.2 FCS校驗碼
數(shù)據(jù)幀中Host Link結(jié)束符前面是FCS校驗碼。校驗采用異或校驗方式,將FCS字段之前的所有字段逐一進行異或,最終得到的就是FCS校驗碼,接收端在收到指令的時候,就要用這個FCS校驗碼去驗證這條指令是否正確。如表1所示為FCS校驗碼計算。
表1 FCS校驗碼計算Tab.1 FCS code calcutation
[A]FCS校驗碼采用的是逐位異或,如表中第3列和上一行第5列的值進行異或,異或值為第5行,依次異或,XXXXXXXX為最終異或結(jié)果。
2.2.3 PLC數(shù)據(jù)區(qū)設(shè)計
Host Link FINS協(xié)議具有一定字節(jié)數(shù)量的數(shù)據(jù)頭和尾。傳輸?shù)臄?shù)據(jù)連續(xù)字?jǐn)?shù)越長,傳輸?shù)男试礁?,接收一個比特位時需要接收最短數(shù)據(jù)包長度為43字節(jié),傳輸效率只有2.3%,當(dāng)傳輸連續(xù)50字?jǐn)?shù)據(jù)時,傳輸效率有54%,當(dāng)連續(xù)傳輸200個字的時候,傳輸效率高達82.6%,所以為了能夠高效地傳輸有效數(shù)據(jù),PLC的內(nèi)存區(qū)最好取連續(xù)區(qū)域,表2列出PLC中內(nèi)部劃分的幾種常用IO區(qū)。
為了能夠增加傳輸效率,可以將待傳輸數(shù)據(jù)發(fā)送到一個連續(xù)的內(nèi)存區(qū)域中,比如是D區(qū),這樣可以通過比較簡單的指令完成一系列的數(shù)據(jù)通信。在有限的串口傳輸速度下,這是一種比較好的提高傳輸效率的方法[7-8]。
如圖6、圖7所示為監(jiān)控軟件指令發(fā)送(PLC設(shè)備接收)和接收(PLC設(shè)備返回指令)的通信指令的流程。用MFC軟件編寫出簡易的串口通信軟件,MFC主要做的是根據(jù)輸入的指令計算出FCS校驗碼,然后生成一條完整的指令發(fā)送到PLC中。在數(shù)據(jù)返回部分,采用多線程技術(shù)和基于MFC的消息處理機制,當(dāng)有數(shù)據(jù)接收時,系統(tǒng)捕獲到這一消息,觸發(fā)串口接收事件,然后從接收緩沖區(qū)讀取數(shù)據(jù),并且存放在隊列中,當(dāng)數(shù)據(jù)讀取完畢時,設(shè)置數(shù)據(jù)處理事件,系統(tǒng)捕獲到這一事件后,在數(shù)據(jù)處理線程中繼續(xù)從隊列中讀取數(shù)據(jù)并且進行解析處理,事件處理線程開始FCS校驗指令,取出所需要的數(shù)據(jù)。這種采用多線程的方式更加高效利用CPU執(zhí)行能力,加快了數(shù)據(jù)讀取處理能力[9]。
圖7 指令接收流程圖Fig.7 Flow chart of reply command
在通信之前要先進行初始化,設(shè)置傳輸波特率,數(shù)據(jù)傳輸格式,要根據(jù)PLC中的設(shè)置來確定監(jiān)控軟件的這些串口通信參數(shù)[10]。
MFC支持MSComm插件,可以進行簡易串口收發(fā)數(shù)據(jù)[11]。如圖8所示為讀取數(shù)據(jù)的通信界面。
圖8 監(jiān)控軟件測試界面Fig.8 Monitor and control software testing interface
圖8中為數(shù)據(jù)要求從D20000起50個字的數(shù)據(jù),在接收數(shù)據(jù)框中便顯示接收到的數(shù)據(jù)。從監(jiān)控軟件界面上發(fā)送和接收的數(shù)據(jù)來看,整個監(jiān)控過程中能夠正確地發(fā)送需要的指令,以及接收到從底層PLC返回來的所有需要的數(shù)據(jù),監(jiān)控功能完成。
基于Host Link FINS協(xié)議的串口通信方式具有較強的數(shù)據(jù)傳輸能力和傳輸效率,其問答模式大大提高了這種方式下數(shù)據(jù)傳輸?shù)目煽啃?。本文以歐姆龍公司CP1H型號的PLC為應(yīng)用背景,設(shè)計了基于Host Link Fins協(xié)議的PLC設(shè)備遠程監(jiān)控系統(tǒng)。信號發(fā)射器的設(shè)計實現(xiàn)了PLC串口數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸;基于MFC開發(fā)的通信軟件則實現(xiàn)了監(jiān)控軟件與PLC的遠程通信功能,能夠?qū)LC進行遠程監(jiān)控與管理?,F(xiàn)場測試和運行結(jié)果表明,該系統(tǒng)運行穩(wěn)定可靠,PLC通信性能較高,具有很好的實用價值。
[1] 侯瑞春,丁香乾,陶冶,等.制造物聯(lián)及相關(guān)技術(shù)架構(gòu)研究[J].計算機集成制造系統(tǒng),2014,20(1):11-20.
[2] 郭永勇,潘存海,李軍鋒,等.WinCC監(jiān)控系統(tǒng)中OPC通信及數(shù)據(jù)處理方法[J].制造業(yè)自動化,2014,36(2):98-100.
[3] 謝揚球,吳宏棟.微成形制造中的上下位機通信設(shè)計及實現(xiàn)[J].制造業(yè)自動化,2013,35(1):71-72,84.
[4] 樊銳,宋曉亮.通過DP通訊改變6RA70裝置參數(shù)設(shè)定在鋁冷軋機上的應(yīng)用[J].制造業(yè)自動化,2014,36(3):141-145,156.
[5] 蘇寶平.基于無線通信的軌道車防溜智能監(jiān)控系統(tǒng)設(shè)計[J].制造業(yè)自動化,2014,36(3):46-49.
[6] 黃大偉.LabVIEW與S7-200 PLC PPI協(xié)議通訊的設(shè)計與實現(xiàn)[J].自動化與儀器儀表,2013(4):94-95,99.
[7] 段潤群,謝云山.上位機軟件與S7-1200 PLC的OPC通信研究[J].自動化與儀器儀表,2014(5):13-15,19.
[8] 蘇虎平,沈三民,劉文怡,等.基于冗余CAN總線的實時通信系統(tǒng)設(shè)計[J].自動化與儀表,2013,28(1):26-29,55.
[9] 孫鑫.VC++深入詳解[M].北京:電子工業(yè)出版社,2012.
[10]劉艷平,李化南,趙連環(huán),等.基于ARM的FreeModbus通信協(xié)議的實現(xiàn)[J].自動化與儀表,2013,28(5):22-26.
[11]李敏.基于PPI協(xié)議的PLC通信控制設(shè)計[J].自動化與儀器儀表,2013(2):66-68. ■