金海琴,陳 興,翟林鵬
(揚(yáng)州大學(xué) 江蘇 揚(yáng)州 225127)
該數(shù)據(jù)采集系統(tǒng)由上位機(jī)、GPRS模塊和三相多功能電量采集模塊3部分組成。
文中以揚(yáng)州市電網(wǎng)為例,實(shí)現(xiàn)對各個現(xiàn)場儀表數(shù)據(jù)的遠(yuǎn)程無線采集,及儀表的集中管理與控制,詳細(xì)介紹基于C#開發(fā)平臺實(shí)現(xiàn)Modbus通訊協(xié)議的方法,該程序可用于上位機(jī)經(jīng)過GPRS模塊與下位機(jī)(即三相多功能電量采集模塊)的串口通訊。測試時(shí),將下位機(jī)三相多功能電量采集模塊通過RS485接口連接GPRS模塊,則可以把采集的數(shù)據(jù)通過GPRS網(wǎng)絡(luò)傳給上位機(jī),上位PC機(jī)通過虛擬串口接收發(fā)送過來的數(shù)據(jù),并對接收到的參數(shù)進(jìn)行實(shí)時(shí)數(shù)據(jù)顯示、查詢和管理。
Modbus協(xié)議是應(yīng)用于電子控制器上的一種通用語言。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其它設(shè)備之間可以通信。它已經(jīng)成為一通用工業(yè)標(biāo)準(zhǔn)。有了它,不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進(jìn)行集中監(jiān)控??刂破魍ㄐ攀褂弥鳌獜募夹g(shù),即僅一設(shè)備(主設(shè)備)能初始化傳輸(查詢),其它設(shè)備(從設(shè)備)根據(jù)主設(shè)備查詢提供的數(shù)據(jù)作出相應(yīng)反應(yīng)。本文中的Modbus協(xié)議應(yīng)用于點(diǎn)對多點(diǎn)的通信,物理層采用RS485串行通信標(biāo)準(zhǔn)。
Modbus通信協(xié)議具有兩種傳輸模式:ASCII模式和RTU模式。使用ASCII模式,消息以“:”字符開始,以回車換行符結(jié)束。而使用RTU模式,消息發(fā)送至少要以3.5個字符時(shí)間的停頓間隔開始,因此在網(wǎng)絡(luò)波特率下多樣的字符時(shí)間,這是很容易實(shí)現(xiàn)的(如圖1的T1—T2—T3—T4所示)。傳輸?shù)牡谝粋€域是設(shè)備地址??梢允褂玫膫鬏斪址鞘M(jìn)制的0…9,A…F。網(wǎng)絡(luò)設(shè)備不斷偵測網(wǎng)絡(luò)總線,包括停頓間隔時(shí)間內(nèi)。當(dāng)?shù)谝粋€域(地址域)接收到,每個設(shè)備都進(jìn)行解碼以判斷是否發(fā)往自己的。在最后一個傳輸字符之后,一個至少3.5個字符時(shí)間的停頓后才能發(fā)生一個新的消息。整個信息必須連續(xù)發(fā)送。如果在發(fā)送幀信息期間,出現(xiàn)大于1.5個字符的靜止時(shí)間時(shí),則接收設(shè)備刷新不完整的信息,并假設(shè)下一個地址數(shù)據(jù)。同樣一個信息后,立即發(fā)送的一個新信息(若無3.5個字符的靜止時(shí)間)這將會產(chǎn)生一個錯誤。是因?yàn)楹喜⑿畔⒌腃RC校驗(yàn)碼無效而產(chǎn)生的錯誤。一個典型的消息幀如圖1所示。
圖1 RTU消息幀F(xiàn)ig.1 RTU message frame
RTU方式時(shí),采用CRC(即循環(huán)冗余碼校驗(yàn))方法計(jì)算錯誤校驗(yàn)碼,CRC校驗(yàn)傳送的全部數(shù)據(jù)。它忽略信息中單個字符數(shù)據(jù)的奇偶校驗(yàn)方法。
CRC碼為2個字節(jié),16位的二進(jìn)制值。由發(fā)送設(shè)備計(jì)算CRC值,并把它附到信息中去。接收設(shè)備在接收信息過程中再次計(jì)算CRC值并與CRC的實(shí)際值進(jìn)行比較,若二者不一致,亦產(chǎn)生一個錯誤,校驗(yàn)開始時(shí),把16位寄存器的各位都置為“1”,然后把信息中的相鄰2個8位字節(jié)數(shù)據(jù)放到當(dāng)前寄存器中處理,只有每個字符的8位數(shù)據(jù)用于CRC處理。起始位,停止位和校驗(yàn)位不參與CRC計(jì)算。
串口通信技術(shù)應(yīng)用廣泛,在數(shù)據(jù)通信、計(jì)算機(jī)網(wǎng)絡(luò)以及分布式控制系統(tǒng)中,經(jīng)常采用串行通信來交換數(shù)據(jù)和信息。文中采用Visual Studio 2010提供的SerialPort控件實(shí)現(xiàn)串口通信。SerialPort控件和C#的其他控件一樣,都是通過對其一系列的方法、屬性、事件與用戶之間進(jìn)行交互。只要對SerialPort控件的屬性、方法、事件進(jìn)行設(shè)計(jì),就可以發(fā)送和接收數(shù)據(jù)。
軟件界面設(shè)計(jì)滿足清晰、簡潔的要求,使得操作簡單、調(diào)理清晰,易于進(jìn)行測試操作。在程序運(yùn)行后,首先設(shè)置串口的參數(shù),本系統(tǒng)串口參數(shù)設(shè)置為:
串口號:COM3;波特率:9 600 bps;數(shù)據(jù)位:8 位;停止位:1位;校驗(yàn)位:無校驗(yàn)位。
然后打開串口,設(shè)置設(shè)備地址、功能碼、起始地址、寄存器數(shù)量,進(jìn)行發(fā)送。發(fā)送要查詢的數(shù)據(jù)命令,模塊就會作出相應(yīng)的回應(yīng)。如圖2所示,是發(fā)送查詢模塊類型寄存器,即3504(HEX)。
圖2 串口通信界面Fig.2 Serial communication interface
文中是以揚(yáng)州儀征市電網(wǎng)為例,實(shí)現(xiàn)了現(xiàn)場數(shù)據(jù)的采集,以便于監(jiān)控中心的實(shí)時(shí)集中監(jiān)控,如圖3所示。文中采集了兩路電網(wǎng)的三相電壓、電流,有功功率,無功功率,功率因素5個參數(shù)。
圖3 數(shù)據(jù)實(shí)時(shí)顯示界面Fig.3 Real-time data display interface
文中采用C#編程語言和串口技術(shù)實(shí)現(xiàn)了基于RTU模式的Modbus數(shù)據(jù)通信,解決了電網(wǎng)現(xiàn)場數(shù)據(jù)的采集及遠(yuǎn)程實(shí)時(shí)監(jiān)測。系統(tǒng)利用三相多功能電量采集模塊實(shí)現(xiàn)了電網(wǎng)數(shù)據(jù)采集的智能化,以及GPRS模塊作為通訊介質(zhì),大大節(jié)省了通訊成本。同時(shí)為工控領(lǐng)域的應(yīng)用提供了可行性參考。
[1]吳曉艷.計(jì)算機(jī)串行通信接口及其應(yīng)用[J].現(xiàn)代電子技術(shù).2010(18):83-86.
WU Xiao-yan,Computer serial communication interface and its application[J].Modern Electronic Technology,2010(18):83-86.
[2]呂國芳,唐海龍,李進(jìn).基于Modbus RTU的串口調(diào)試軟件的實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2009(9):236-238,241.