黃俊杰,汪 濤,王文爍,胡丹暉
(國(guó)網(wǎng)湖北省電力公司電力科學(xué)研究院,國(guó)家電網(wǎng)公司高壓電氣設(shè)備現(xiàn)場(chǎng)實(shí)驗(yàn)技術(shù)重點(diǎn)實(shí)驗(yàn)室,湖北武漢 430077)
工業(yè)控制系統(tǒng)中很多部分起著關(guān)鍵性作用,例如信號(hào)采集和控制系統(tǒng)的數(shù)據(jù)交換可以說(shuō)關(guān)系著整個(gè)工業(yè)工廠系統(tǒng)的可靠與穩(wěn)定。目前工業(yè)網(wǎng)絡(luò)結(jié)構(gòu)越來(lái)越向安全性、可控性和擴(kuò)展性發(fā)展[1],因此開(kāi)發(fā)一種基于多種網(wǎng)絡(luò)的總體拓?fù)湎到y(tǒng)。
工業(yè)網(wǎng)絡(luò)有集中式控制和分布式控制,而且目前分布式控制方法種類(lèi)繁多,因此開(kāi)發(fā)一種針對(duì)通用工業(yè)網(wǎng)絡(luò)的系統(tǒng)[2],可以應(yīng)用在數(shù)據(jù)采集與工業(yè)數(shù)據(jù)交換的嵌入式網(wǎng)絡(luò)交換機(jī)中。
針對(duì)工業(yè)多信息交換網(wǎng)絡(luò)的嵌入式系統(tǒng),先采用ERTEC200P開(kāi)發(fā)出PROFINET協(xié)議,經(jīng)過(guò)RS485協(xié)議與STM32進(jìn)行通訊,在STM32上開(kāi)發(fā)出USB、RJ32、RS232、CAN和RS485等多種接口的下位機(jī)系統(tǒng),完成硬件模塊基礎(chǔ)上開(kāi)發(fā)出多種協(xié)議驅(qū)動(dòng)程序。
控制系統(tǒng)是為適配目前多樣的工業(yè)網(wǎng)絡(luò),即把越來(lái)越多的工業(yè)網(wǎng)絡(luò)應(yīng)用到嵌入式開(kāi)發(fā)系統(tǒng)中,目前生產(chǎn)應(yīng)用之間的通信主要是通過(guò)工業(yè)以太網(wǎng)交換信息[3],由于其擁有更好的抗干擾性已經(jīng)被很多廠家應(yīng)用在自己的系統(tǒng)中。在開(kāi)發(fā)嵌入式工業(yè)多信息交換系統(tǒng)中首先要考慮系統(tǒng)可以兼容主流的工業(yè)接口,且通信協(xié)議與工業(yè)標(biāo)準(zhǔn)統(tǒng)一。除了開(kāi)發(fā)一般的工業(yè)系統(tǒng)外還針對(duì)嵌入式開(kāi)發(fā)板上常用到的接口進(jìn)行開(kāi)發(fā),由于嵌入式系統(tǒng)使用起來(lái)比工業(yè)通信復(fù)雜,因此對(duì)目前的程序進(jìn)行固化,保證擴(kuò)展的外部設(shè)備可以很快接入到工業(yè)信息網(wǎng)絡(luò)中。
如圖1所示,主站控制系統(tǒng)是西門(mén)子通信專(zhuān)用的ENTEC200p開(kāi)發(fā)版,硬件已經(jīng)集成了MCU、外擴(kuò)的SDRAM存儲(chǔ)部分、快速存儲(chǔ)、工業(yè)以太網(wǎng)接口、電源、常用在線調(diào)試接口、多路DIO和最小系統(tǒng)組件等硬件電路[4],已經(jīng)移植的eCos軟件操作系統(tǒng)可以對(duì)PROFINET 3層網(wǎng)絡(luò)中任一協(xié)議棧進(jìn)行修改,用戶可以開(kāi)發(fā)出加密性能更好的協(xié)議來(lái)保護(hù)工業(yè)設(shè)備被盜用。除此之外STM32通過(guò)常用RS485通信接口擴(kuò)展更多的工業(yè)設(shè)備,軟件部分通過(guò)移植UCOS的操作系統(tǒng)來(lái)實(shí)現(xiàn)多任務(wù)管理功能,從而更能保證多信號(hào)之間的無(wú)干擾通信。
圖1 工業(yè)多信息網(wǎng)絡(luò)交換系統(tǒng)
在設(shè)計(jì)網(wǎng)絡(luò)信息交換系統(tǒng)中,既有關(guān)于網(wǎng)關(guān)和協(xié)議的硬件架構(gòu),整體網(wǎng)絡(luò)系統(tǒng)網(wǎng)關(guān)硬件是用來(lái)保證ERTEC200P與系統(tǒng)進(jìn)行數(shù)據(jù)交換協(xié)議的主站系統(tǒng),可以通過(guò)以太網(wǎng)接口和PROFINET控制器的I/O口連接[5],也可以通過(guò)Modbus協(xié)議把擴(kuò)展板定義為從站通過(guò)11路GPIO與主站進(jìn)行硬件連接。針對(duì)拓展板開(kāi)發(fā)的硬件電路主要是設(shè)計(jì)硬件接口,包括RS485接口、UART接口、CAN接口和以太網(wǎng)接口。
PROFINET網(wǎng)絡(luò)中把被控系統(tǒng)的I/O控制器定義為協(xié)議主站,而把使用的200P硬件電路板設(shè)計(jì)為協(xié)議從站。基于Modbus的網(wǎng)絡(luò)中擴(kuò)展板作為協(xié)議主站設(shè)備,而從站只要是支持RS485接口的工業(yè)設(shè)備都可以接入到系統(tǒng)中。
如圖2所示,以此介紹信號(hào)傳遞過(guò)程,當(dāng)PLC或同類(lèi)控制器通過(guò)工業(yè)網(wǎng)絡(luò)接口發(fā)送連接請(qǐng)求到ENTEC200P開(kāi)發(fā)板中,當(dāng)?shù)玫綇恼镜幕貞?yīng)后系統(tǒng)開(kāi)始在兩個(gè)設(shè)備之間建立通信聯(lián)系[6]。當(dāng)工業(yè)應(yīng)用中的控制器把協(xié)議數(shù)據(jù)包傳輸?shù)綇恼緯r(shí),從站對(duì)傳輸過(guò)來(lái)的信息進(jìn)行協(xié)議解析并存儲(chǔ)到內(nèi)存中,并把一部分解析包反饋給主站后再對(duì)另一從站進(jìn)行控制數(shù)據(jù)和協(xié)議數(shù)據(jù)包的發(fā)送。如圖2所示2個(gè)電路板之間通信一共用到了11路I/O口,其中8路用來(lái)傳輸MODBUS協(xié)議數(shù)據(jù)和地址信號(hào),另外3路分別作為讀入讀出信號(hào)的使能引腳和傳輸?shù)刂返倪x擇引腳。同理串口主從站之間的通信過(guò)程也類(lèi)似。
圖2 主從站I/O引腳連接示意圖
在工業(yè)強(qiáng)干擾環(huán)境下由于232單端特性其傳輸距離非常近,對(duì)于站點(diǎn)較遠(yuǎn)、速度要求較高場(chǎng)合RS232并不是最好的選擇[7]。RS485接口采用平衡驅(qū)動(dòng)器和差分接收器的組合,具有接口簡(jiǎn)單、組網(wǎng)方便、傳輸距離遠(yuǎn)等優(yōu)點(diǎn),數(shù)據(jù)傳輸速率能達(dá)到10 Mbit/s,因此使用抗擾動(dòng)效果更好的RS485模塊實(shí)現(xiàn)主單片機(jī)與遠(yuǎn)端站點(diǎn)MCGS觸摸屏的數(shù)據(jù)通信,這樣能夠保證從站設(shè)備信息顯示和反饋信號(hào)的實(shí)時(shí)性。圖3為RS485接口電路,電路采用兼容3.3 V邏輯電平的 MAX485(ESA)芯片。
圖3 RS485通信硬件電路設(shè)計(jì)
其中芯片的傳輸信號(hào)主要由STM32提供串口通信開(kāi)始和結(jié)束的TTL電平信號(hào),包括數(shù)據(jù)傳輸信號(hào)、起始位等,在MCU與通信電路之間加入了一個(gè)高速光耦電路進(jìn)行隔離來(lái)保證信號(hào)更加可靠。串口采用差分的形式,差分電壓設(shè)置在-5~+5 V之間,接收信號(hào)靈敏度為0.1 V左右,而且選用MAX485芯片可以防止高壓靜電放電的沖擊??紤]到工業(yè)應(yīng)用環(huán)境非常復(fù)雜,為了增強(qiáng)線路阻抗特性匹配并防止芯片被擊穿采用2個(gè)20 Ω電阻來(lái)提高電路實(shí)用性。
CAN通信是一種串行的通信協(xié)議,其一開(kāi)始被應(yīng)用到汽車(chē)電子行業(yè)中,由于成本低且可靠性高,CAN通信協(xié)議已經(jīng)被汽車(chē)行業(yè)作為標(biāo)準(zhǔn)協(xié)議[8]。隨著工業(yè)信息發(fā)展,現(xiàn)場(chǎng)總線已經(jīng)成為目前工業(yè)中的熱點(diǎn),CAN總線作為局域網(wǎng)已經(jīng)被各大工業(yè)公司接受并應(yīng)用,硬件設(shè)計(jì)電路如圖4所示。
圖4 CAN通信硬件電路
CAN電路主要有2個(gè)部分。一個(gè)是MCU和芯片之間的高速信號(hào)轉(zhuǎn)換電路采用6N137,其 VE使能引腳接高電平或者懸空,將分別產(chǎn)生正邏輯和負(fù)邏輯,此處使用正邏輯控制。為了更好地適應(yīng)工業(yè)環(huán)境,在電源引腳處接入一個(gè)0.1 μF去耦電容,在顯示電路部分接入限流電阻,另外采用上拉電阻R55來(lái)提高驅(qū)動(dòng)能力。另一個(gè)就是CAN總線與處理器的連接,首先使用2個(gè)高速光耦實(shí)現(xiàn)光信號(hào)轉(zhuǎn)化來(lái)減少電路中的高頻噪聲,VP230可以實(shí)現(xiàn)穩(wěn)定的電平轉(zhuǎn)換,在信號(hào)輸入側(cè)接入2個(gè)22 Ω電阻用來(lái)完成信號(hào)路線的阻抗匹配。
在通訊電路板中運(yùn)行著2個(gè)通訊程序,一個(gè)是200p電路的eCos系統(tǒng)[9],另一個(gè)是STM32電路的uCos系統(tǒng),這2個(gè)系統(tǒng)都處于軟件架構(gòu)中的頂層設(shè)計(jì),即通過(guò)移植操作系統(tǒng)才能發(fā)揮芯片最大的多信息網(wǎng)絡(luò)交換。第二層主要是確認(rèn)系統(tǒng)的應(yīng)用程序可以正常讀取協(xié)議之間的協(xié)議寄存器,并通過(guò)通訊設(shè)置向電路之間讀取或者寫(xiě)入數(shù)據(jù)。第三層應(yīng)用層即向用戶展示函數(shù)封裝和調(diào)用。本文主要針對(duì)第二和第三層進(jìn)行設(shè)計(jì)包括協(xié)議層面的內(nèi)容。
在標(biāo)準(zhǔn)協(xié)議中所有網(wǎng)絡(luò)節(jié)點(diǎn)都需要通過(guò)依靠識(shí)別機(jī)器碼地址來(lái)區(qū)分設(shè)備,即每個(gè)設(shè)備都有一個(gè)自己的名字,而在PROFINET中采用的是給每個(gè)設(shè)備定義一個(gè)專(zhuān)用地址,在這個(gè)網(wǎng)絡(luò)中可以隨時(shí)呼叫來(lái)識(shí)別網(wǎng)絡(luò)中的節(jié)點(diǎn)。
在操作系統(tǒng)和協(xié)議寄存器之間需要有一個(gè)適應(yīng)層,可以實(shí)現(xiàn)隔離系統(tǒng)的調(diào)用從而保護(hù)操作系統(tǒng)。此軟件設(shè)計(jì)的主要目的除了應(yīng)用到工業(yè)網(wǎng)絡(luò)中,另一個(gè)重要目的就是使PROFINET和Modbus協(xié)議實(shí)現(xiàn)無(wú)縫信號(hào)傳輸,基于PNPB層主要是做用戶開(kāi)發(fā)使用,在信息交換過(guò)程中RS485支持半雙工[10],而PROFINET支持全雙工,因此設(shè)計(jì)的軟件網(wǎng)關(guān)可以實(shí)現(xiàn)半雙工數(shù)據(jù)交換。
Modbus-RTU數(shù)據(jù)傳輸模式的幀格式包括地址、功能代碼、數(shù)據(jù)和差錯(cuò)校驗(yàn)4部分,如表1所示。
表1 Modbus-RTU幀格式
其中地址為8位數(shù),主設(shè)備和子設(shè)備的通訊主要通過(guò)內(nèi)部寄存器的地址與來(lái)進(jìn)行設(shè)備的選取,設(shè)備之間的響應(yīng)和回應(yīng)主要通過(guò)設(shè)備中的地址域數(shù)據(jù)進(jìn)行呼應(yīng)。
功能代碼占一個(gè)字節(jié)為8位,其中序號(hào)代表了設(shè)備要進(jìn)行的動(dòng)作[11]。通過(guò)讀取寄存器的狀態(tài)判斷設(shè)備的狀態(tài)和程序運(yùn)行,Modbus協(xié)議規(guī)定的常見(jiàn)功能碼,作用及其數(shù)據(jù)類(lèi)型如表2所示。
表2 數(shù)據(jù)幀定義
數(shù)據(jù)占0~252字節(jié)可為N x 8位,由RTU字符組成。差錯(cuò)校驗(yàn)占2個(gè)字節(jié)為16位,在RTU模式中對(duì)整個(gè)報(bào)文的傳輸信號(hào)進(jìn)行CRC校驗(yàn)。
Modbus-RTU數(shù)據(jù)傳輸模式的消息幀沒(méi)有明確的起始幀和結(jié)束幀,協(xié)議發(fā)送有自己的命名格式包括開(kāi)始幀和結(jié)束幀的定義范圍,通過(guò)校驗(yàn)傳送數(shù)據(jù)幀尾判斷發(fā)送數(shù)據(jù)的正確性。數(shù)據(jù)傳送時(shí)間必須按要求嚴(yán)格控制即波特率的設(shè)置,時(shí)間間隔示意圖如圖5所示。
圖5 Modbus-RTU幀間隔示意圖
利用上述方法,Modbus-RTU幀被重新構(gòu)造為有起始和結(jié)束標(biāo)志的新數(shù)據(jù)幀,重構(gòu)后的Modbus-RTU幀格式如表3所示。
表3 重構(gòu)后Modbus-RTU幀格式
信號(hào)測(cè)試方式比較抽象,很難通過(guò)系統(tǒng)的測(cè)試來(lái)確定信息交換流,因此通過(guò)2個(gè)方面驗(yàn)證系統(tǒng),一是通過(guò)測(cè)試系統(tǒng)的傳輸信號(hào)的錯(cuò)誤率,二是直接觀察協(xié)議寄存器內(nèi)的數(shù)據(jù)狀態(tài)。圖6為PROFINET與Modbus通信站。
圖6 PROFINET與Modbus通信站
通過(guò)把PLC與交換系統(tǒng)連接后進(jìn)行測(cè)試,工控網(wǎng)關(guān)中數(shù)據(jù)誤碼率測(cè)試結(jié)果如表4所示。把基于工業(yè)以太網(wǎng)的波特率設(shè)定為100 Mbit/s,PLC刷新時(shí)間設(shè)定為1 s,通過(guò)測(cè)試發(fā)現(xiàn)系統(tǒng)確實(shí)處于半雙工方式,當(dāng)速率繼續(xù)上升時(shí)系統(tǒng)就開(kāi)始出現(xiàn)錯(cuò)誤。
表4 PROFINET網(wǎng)關(guān)數(shù)據(jù)誤碼率測(cè)試結(jié)果
在系統(tǒng)上電后把協(xié)議全部配置完成,讓電路屬于正常工作狀態(tài)時(shí),通過(guò)在線調(diào)試JTAG接口把系統(tǒng)與PC機(jī)相連。在系統(tǒng)處于正常工作時(shí)讀取Modbus的信息寄存器,不僅能看到采集卡的網(wǎng)絡(luò)名稱,還能通過(guò)系統(tǒng)采樣率等信息,驗(yàn)證發(fā)現(xiàn)系統(tǒng)可以實(shí)現(xiàn)穩(wěn)定的數(shù)據(jù)交換。圖7為PROFINET與Modbus通信站的數(shù)據(jù)交換。
圖7 PROFINET與Modbus通信站的數(shù)據(jù)交換
本文通過(guò)雙CPU的嵌入應(yīng)用系統(tǒng),把PROFINET與常用工業(yè)網(wǎng)絡(luò)連接在一起。設(shè)計(jì)工業(yè)網(wǎng)絡(luò)的硬件接口電路,對(duì)工業(yè)設(shè)備常用的工業(yè)協(xié)議進(jìn)行改造來(lái)增強(qiáng)通信系統(tǒng)的可靠性,并把設(shè)計(jì)電路融入到工業(yè)信息交換系統(tǒng)中輔以高效的操作系統(tǒng)實(shí)現(xiàn)多信號(hào)的可靠傳輸。實(shí)驗(yàn)證明此系統(tǒng)可以實(shí)現(xiàn)多種工業(yè)信息網(wǎng)絡(luò)的數(shù)據(jù)交換,并且能高效可靠地保證多種工業(yè)設(shè)備的實(shí)時(shí)交互。