包琴
(1.福建工程學(xué)院 福建省汽車電子與電驅(qū)動技術(shù)重點實驗室, 福建 福州 350118; 2.福建省北斗導(dǎo)航與智慧交通協(xié)同創(chuàng)新中心, 福建 福州 350118)
公共建筑電力能耗監(jiān)測與管理系統(tǒng)有效地提高了后勤部門用電監(jiān)管的自動化程度,為節(jié)能管理提供了一個有效手段[1]。針對當(dāng)前能耗監(jiān)管系統(tǒng)的數(shù)據(jù)采集網(wǎng)關(guān)對現(xiàn)場用電控制能力有限的現(xiàn)狀,設(shè)計一種基于MDT和Modbus協(xié)議的控制器,實現(xiàn)對現(xiàn)場用電設(shè)備開關(guān)狀態(tài)的讀取和切換,以提高能耗監(jiān)管系統(tǒng)對用電設(shè)備的控制水平,特別是對違規(guī)用電設(shè)備的實時監(jiān)視和處理能力。
MDT10P73單片機(jī)功能兼容PIC16F73,片上資源豐富,使用溫度寬,抗干擾能力強(qiáng),適合于工業(yè)現(xiàn)場使用,其采用的高性能RISC指令集,在20 MHz外部時鐘晶體時單周期指令為200 ns,執(zhí)行
效率高,編程方便[2-3]。
Modbus協(xié)議是由Modicon公司推出并真正應(yīng)用于工業(yè)現(xiàn)場的總線協(xié)議[4]。通過此協(xié)議,能夠由通信網(wǎng)絡(luò)實現(xiàn)控制器之間、控制器和其它設(shè)備之間進(jìn)行可靠地通信,目前Modbus已經(jīng)成為一種通用的工業(yè)標(biāo)準(zhǔn)[5-6]。
MDT10P73單片機(jī)具備4K×14位EPROM程序存儲器、192字節(jié)的RAM存儲器、22個GPIO接口、3個定時器、11個中斷、5通道8位ADC、1個I2C接口和1個UART通用串口等多種外設(shè),為小型控制系統(tǒng)提供了十分便利的解決方案[7]。
基于MDT單片機(jī)和Modbus-RTU的遠(yuǎn)程控制器主要由MDT10P73單片機(jī)最小系統(tǒng)、RS485通信電路、輸入輸出IO電路和供電電源組成,遠(yuǎn)程控制器硬件總體框圖如圖1所示。
圖1 遠(yuǎn)程控制器硬件總體框圖Fig.1 Hardware diagram of the remote control unit
遠(yuǎn)程現(xiàn)場控制器選用28引腳窄型DIP封裝的MDT10P73,共設(shè)計4路狀態(tài)量繼電器輸出控制接口、12路光耦隔離的狀態(tài)量采集輸入接口、1個半雙工隔離型RS485接口。
將MDT10P73的GPIO接口PB2-PB7配置為6路輸入狀態(tài)并使能端口弱上拉電阻;PA0-PA5配置為6路輸入狀態(tài);PC0-PC3配置為4路輸出狀態(tài);PB0-PB1預(yù)留給I2C總線。遠(yuǎn)程現(xiàn)場控制器核心部分的電路原理如圖2所示,其中24C02為外置E2PROM。
圖2 MDT10P73核心部分的原理圖Fig.2 Schematic circuit of the MDT10P73’s core board
為保護(hù)遠(yuǎn)程控制器輸入端口,12路狀態(tài)量采集電路,采用光耦器件與主MCU進(jìn)行隔離,圖3是其中一路狀態(tài)量采集的原理設(shè)計電路。
圖3 帶隔離保護(hù)的狀態(tài)量采集電路Fig.3 State variable acquisition circuit with isolation
為實現(xiàn)輸入端口的保護(hù)功能,圖3使用插件高速光耦TLP781進(jìn)行光電隔離,并由獨立的模擬電源HVCC=24 V提供供電。TVS瞬變抑制二極管SMBJ26A能夠削減高壓帶來的沖擊。在IN-1端口閉合/斷開的情況下,能夠控制光耦器件TLP781工作狀態(tài)的改變,實現(xiàn)了輸入信號的隔離交換。
遠(yuǎn)程控制器的4路狀態(tài)量控制輸出接口,直接由MDT10P73 MCU的PC0-PC3輸出口,在隔離光耦的配合下,驅(qū)動常開繼電器的開/閉操作,其繼電器隔離驅(qū)動電路如圖4所示。
圖4 遠(yuǎn)程控制模塊狀態(tài)輸出電路Fig.4 State output circuit of the remote control module
為實現(xiàn)與智能網(wǎng)關(guān)的遠(yuǎn)程互聯(lián),現(xiàn)場控制器內(nèi)實現(xiàn)了1路帶隔離功能的高速RS485接口,并設(shè)計靜電、雷擊和抗交流~220 V誤接入的保護(hù)功能。
ADM2587E是一款內(nèi)部采用isoPowerTM集成式隔離DC/DC技術(shù)的RS-485/RS-422收發(fā)器,可配置成半雙工或全雙工模式,其RS-485輸入/輸出引腳上具有±15 kV ESD保護(hù)功能[8]。帶隔離保護(hù)的高速RS485接口設(shè)計如圖5所示,其中RS485模擬部分5.0 VCC的供電電源,直接由ADM2587E芯片內(nèi)部的隔離DC-DC提供,實現(xiàn)了與數(shù)字部分+5 V電源的完全隔離。
圖5 帶隔離保護(hù)的高速RS485接口Fig.5 High speed RS485 interface with isolation
ADM2587E的通信速率高達(dá)500 kbps,工作溫度-40~+85 ℃,2.5 kV隔離電壓,±15 kV的ESD保護(hù),完全滿足遠(yuǎn)程控制器在復(fù)雜現(xiàn)場的高速通信需求[9]。
MDT10P73片上RAM存儲器有限,堆棧深度固定8級,因此,遠(yuǎn)程控制器軟件采用前后臺系統(tǒng)的模式,并直接由匯編語言實現(xiàn)控制器的采集、控制、存儲和通信功能??紤]到MDT10P73指令單周期200 ns快速高效的性能,為增加系統(tǒng)的抗干擾能力,UART串口和GPIO的工作狀態(tài),均采用輪詢方式進(jìn)行確認(rèn)。
遠(yuǎn)程控制器前臺程序是一個無限的輪詢循環(huán),軟件總體設(shè)計如圖6所示。
圖6 遠(yuǎn)程控制器前臺軟件流程圖Fig.6 Flowchart for the foreground software of the remote control unit
后臺軟件主要涉及12路狀態(tài)量的GPIO輸入電平監(jiān)控、4路狀態(tài)量輸出、UART串口接收、UART發(fā)送和Modbus-RTU協(xié)議處理5個任務(wù)。
遠(yuǎn)程控制器的GPIO輸入/輸出控制的核心是12個輸入狀態(tài)量的電平監(jiān)控。為提高狀態(tài)量讀取的可靠性,GPIO輸入電平監(jiān)控采用輪詢方式,并對噪聲干擾進(jìn)行一定的濾波處理。
輸入狀態(tài)量的電平掃描流程圖如圖7所示。
圖7 輸入端口電平輪詢流程圖Fig.7 Flowchart of the level polling of input ports
在輸入端口100 ms的掃描周期內(nèi),匯編后臺程序?qū)刂破鞯?2路輸入狀態(tài)量DI[0~11]進(jìn)行5次掃描,將掃描的低電平次數(shù),累計到j(luò)k變量內(nèi),其中k=0~11。若5次掃描,有3次以上為低電平,將認(rèn)為該DI[k]端口出現(xiàn)低電平。
UART初始化成8 bit數(shù)據(jù),1停止位,無奇偶校驗的格式,并設(shè)計波特率為1 200~115 200 bps。UART數(shù)據(jù)收發(fā)按Modbus-RTU協(xié)議約束,其幀間間隙應(yīng)有大于3.5個字符的空閑時間,幀內(nèi)字節(jié)間隙不超過1.5個字符時間[10]。
圖8是Modbus-RTU協(xié)議幀的發(fā)送流程,其中指針寄存器FSR指向協(xié)議幀的起始地址,協(xié)議幀的長度信息暫存于temp_i臨時寄存器中,RTU協(xié)議幀報文字節(jié)發(fā)送完成后,即temp_i為0時退出。
圖8 Modbus-RTU數(shù)據(jù)幀發(fā)送流程Fig. 8 Flowchart of the transmission of Modbus-RTU data frame
Modbus是OSI模型第7層上的應(yīng)用層報文傳輸協(xié)議,它可在不同類型總線的設(shè)備之間,提供客戶機(jī)/服務(wù)器通信[11]。表1所示的是一個典型的Modbus-RTU協(xié)議幀結(jié)構(gòu)。
表1 Modbus-RTU協(xié)議幀的基本結(jié)構(gòu)Tab.1 Basic structure of Modbus-RTU protocol frame
注:T為一個字節(jié)的通信時間,S為1個停止位
Modbus-RTU模式在總線上進(jìn)行通訊時,協(xié)議幀報文中的每8位的字節(jié)被分成2個4位的16進(jìn)制的字符,該模式的主要優(yōu)點是在相同波特率時傳輸?shù)拿芏雀哂贏SCII模式[12]。
遠(yuǎn)程控制器通過擴(kuò)展Modbus-RTU協(xié)議幀的“N×8位”的數(shù)據(jù)內(nèi)容為“Modbus寄存器+數(shù)據(jù)內(nèi)容”,定義了Modbus對控制器的操作寄存器,主要約定了對控制器的參數(shù)設(shè)置/獲取和端口數(shù)據(jù)讀/寫操作。
控制器Modbus寄存器的定義如表2所示。
表2遠(yuǎn)程控制器的Modbus寄存器列表
Tab.2ListofModbusregistersfortheremotecontrol
unit
協(xié)議幀功能碼(H)Modbus寄存器數(shù)據(jù)內(nèi)容操作參數(shù)類型03DI:00H-0BH0/1→低/高只讀03/10/06DO:10H-13H0/1→低/高讀寫通訊參數(shù)03/10/0640H通訊地址讀寫03/10/0641H通訊波特率讀寫03/10/0642H奇偶校驗位讀寫
控制器8 Bit的Modbus從設(shè)備地址存儲于MCU外擴(kuò)的24C02 E2PROM內(nèi),協(xié)議幀通過擴(kuò)展的40 H Modbus寄存器進(jìn)行訪問。
遠(yuǎn)程控制器作為RS485總線的從設(shè)備,其Modbus-RTU協(xié)議幀的處理流程如圖9所示。
圖9 控制器Modbus-RTU協(xié)議幀的處理流程 Fig.9 Processing flow of the Modbus-RTU protocol frame of the control unit
控制器首先等待主機(jī)發(fā)送的Modbus-RTU協(xié)議幀,若MDT10P73前臺軟件流程收到主機(jī)發(fā)送的協(xié)議幀并通過了CRC16檢驗,則逐項核對協(xié)議幀的從機(jī)地址碼、功能碼、擴(kuò)展的Modbus操作寄存器和數(shù)據(jù)內(nèi)容。如經(jīng)核對全部有效,則協(xié)議處理流程將執(zhí)行主機(jī)的操作命令并向主機(jī)做出應(yīng)答幀響應(yīng);如果核對的對應(yīng)碼與協(xié)議處理流程不一致,以及操作失敗,則向主機(jī)返回一個異常幀應(yīng)答。
遠(yuǎn)程控制器出廠默認(rèn)波特率:57 600 bps;字符格式:1位起始位/8位數(shù)據(jù)位/無校驗位/1位停止位;Modbus地址:0x01。圖10是遠(yuǎn)程控制器的地址、通信波特率和校驗位修改的命令與應(yīng)答協(xié)議幀的報文,其中新配置的控制器的從機(jī)地址為0x08,通信波特率為38 400 bps,校驗位為偶校驗。
[發(fā)送] 01 10 00 40 00 01 02 00 08 A9 56
[接收] 01 10 00 40 00 01 00 1D
(a)出廠默認(rèn)下Modbus地址修改為0x08-DATA:0008H
[發(fā)送] 08 10 00 41 00 01 02 03 84 C3 82
[接收] 08 10 00 41 00 01 51 44
(b)默認(rèn)通信波特率修改為38 400 bps-DATA:0384H
[發(fā)送] 08 10 00 42 00 01 02 00 02 42 E3
[接收] 08 10 00 42 00 01 A1 44
(c)默認(rèn)通信校驗位修改為偶校驗-DATA:0002H
圖10通訊參數(shù)配置與應(yīng)答的測試響應(yīng)
Fig.10Testresponsesoftheconfigurationandresponseramesofthecommunicationparameter
將初始化配置后的遠(yuǎn)程控制器,掛載于主網(wǎng)關(guān)的下行RS485總線,并在該總線上并行接入RS232-485監(jiān)視模塊,以便上位機(jī)能夠?qū)崟r監(jiān)測RS485總線上的通信數(shù)據(jù)。
圖11是對12路DI端口的采集與應(yīng)答協(xié)議幀的監(jiān)視情況,其中DI0、DI4-7和DI11處于閉合狀態(tài),DI1-DI3和DI8-DI10處于斷開狀態(tài)。
[接收] 08 03 00 00 00 0C 45 56
[接收] 08 03 18 00 01 00 00 00 00 00 00 00 01 00 01 00 01
00 01 00 00 00 00 00 00 00 01 AB 90
圖11狀態(tài)采集端口的測試響應(yīng)
Fig.11Testresponseofthestateacquisitionport
圖12是對4路DO端口的控制與應(yīng)答協(xié)議幀的監(jiān)視情況,其中DO1、DO3和DO4處于閉合狀態(tài),DO2處于斷開狀態(tài),與實際的控制要求相一致。
[接收] 08 10 00 10 00 04 08 00 01 00 00 00 01 00 01 3E 43
[接收] 08 10 00 10 00 04 C0 96
圖12狀態(tài)控制端口的測試響應(yīng)
Fig.12Testresponseofthestatecontrolport
根據(jù)企業(yè)實際需求所開發(fā)的基于RISC單片機(jī)MDT10P73的遠(yuǎn)程現(xiàn)場控制器,整合并擴(kuò)展了Modbus-RTU通信協(xié)議,能夠可靠地實現(xiàn)了12路狀態(tài)量的采集和4路控制量的輸出。經(jīng)過現(xiàn)場測試和運(yùn)行,所設(shè)計的現(xiàn)場控制器響應(yīng)正常,工作穩(wěn)定可靠。由于Modbus協(xié)議和RS485均支持多從機(jī)部署,故該控制器可以為現(xiàn)場采集網(wǎng)關(guān)或RS485控制主機(jī)提供簡便和經(jīng)濟(jì)的多機(jī)擴(kuò)展能力。
[1] 唐桂忠,張廣明.公共建筑能耗監(jiān)測與管理系統(tǒng)關(guān)鍵技術(shù)研究[J].建筑科學(xué),2009,25(10):27-30.
[2] 鐘曉偉,宋蟄存.基于PIC16F73單片機(jī)的電動自行車控制器設(shè)計[J].自動化技術(shù)與應(yīng)用,2010,29(7):99-103.
[3] 陳暢然.基于PIC16C73單片機(jī)的智能熱量計量表設(shè)計[J].電子設(shè)計工程,2015(11):170-172.
[4] 王書根,王振松,劉曉云. Modbus協(xié)議的RS485總線通訊機(jī)的設(shè)計及應(yīng)用[J].自動化與儀表,2011,26(5):25-28.
[5] 李偉.基于Modbus協(xié)議的工控節(jié)點設(shè)計與實現(xiàn)[J].計算機(jī)工程,2010,36(6):226-228.
[6] MORRIS T,VAUGHN R,DANDASS Y. A retrofit network intrusion detection system for Modbus RTU and ASCII industrial control systems[C]∥ 45th Hawaii International Conference on System Science. Hawaii: IEEE, 2012: 2338-2345.
[7] MICON Inc. MDT10P73 Datasheet[EB/OL]. [2017-12-02]. http:∥pdf1.alldatasheetcn.com/datasheet-pdf/view/133613/ETC1/MDT10P73.html.
[8] 北京晶圓智通科技有限公司.淺談ADM2587E在RS485/422接口隔離中的應(yīng)用[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2012,12(5):86-87.
[9] 吳志杰,王新霞,孔凡敏,等.多路隔離的Modbus協(xié)議轉(zhuǎn)換器的設(shè)計[J].電子技術(shù)應(yīng)用,2016,42(10):77-79.
[10] 劉生輝,王克英,廖顏深.智能開關(guān)柜操控裝置Modbus-RTU通訊協(xié)議的設(shè)計[J].電測與儀表,2010,47(7):77-80.
[11] 李勇,黃健.一種用低成本實現(xiàn)的Modbus/TCP轉(zhuǎn)換器[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2010(9):70-72.
[12] 劉玲玲,劉德平,李保強(qiáng),等.基于Modbus協(xié)議的變頻器遠(yuǎn)程控制器的研究[J].儀表技術(shù)與傳感器,2010(6):33-35.