金海琴,陳 興,翟林鵬
(揚州大學 江蘇 揚州 225127)
該數據采集系統由上位機、GPRS模塊和三相多功能電量采集模塊3部分組成。
文中以揚州市電網為例,實現對各個現場儀表數據的遠程無線采集,及儀表的集中管理與控制,詳細介紹基于C#開發平臺實現Modbus通訊協議的方法,該程序可用于上位機經過GPRS模塊與下位機(即三相多功能電量采集模塊)的串口通訊。測試時,將下位機三相多功能電量采集模塊通過RS485接口連接GPRS模塊,則可以把采集的數據通過GPRS網絡傳給上位機,上位PC機通過虛擬串口接收發送過來的數據,并對接收到的參數進行實時數據顯示、查詢和管理。
Modbus協議是應用于電子控制器上的一種通用語言。通過此協議,控制器相互之間、控制器經由網絡(例如以太網)和其它設備之間可以通信。它已經成為一通用工業標準。有了它,不同廠商生產的控制設備可以連成工業網絡,進行集中監控。控制器通信使用主—從技術,即僅一設備(主設備)能初始化傳輸(查詢),其它設備(從設備)根據主設備查詢提供的數據作出相應反應。本文中的Modbus協議應用于點對多點的通信,物理層采用RS485串行通信標準。
Modbus通信協議具有兩種傳輸模式:ASCII模式和RTU模式。使用ASCII模式,消息以“:”字符開始,以回車換行符結束。而使用RTU模式,消息發送至少要以3.5個字符時間的停頓間隔開始,因此在網絡波特率下多樣的字符時間,這是很容易實現的(如圖1的T1—T2—T3—T4所示)。傳輸的第一個域是設備地址。可以使用的傳輸字符是十六進制的0…9,A…F。網絡設備不斷偵測網絡總線,包括停頓間隔時間內。當第一個域(地址域)接收到,每個設備都進行解碼以判斷是否發往自己的。在最后一個傳輸字符之后,一個至少3.5個字符時間的停頓后才能發生一個新的消息。整個信息必須連續發送。如果在發送幀信息期間,出現大于1.5個字符的靜止時間時,則接收設備刷新不完整的信息,并假設下一個地址數據。同樣一個信息后,立即發送的一個新信息(若無3.5個字符的靜止時間)這將會產生一個錯誤。是因為合并信息的CRC校驗碼無效而產生的錯誤。一個典型的消息幀如圖1所示。

圖1 RTU消息幀Fig.1 RTU message frame
RTU方式時,采用CRC(即循環冗余碼校驗)方法計算錯誤校驗碼,CRC校驗傳送的全部數據。它忽略信息中單個字符數據的奇偶校驗方法。
CRC碼為2個字節,16位的二進制值。由發送設備計算CRC值,并把它附到信息中去。接收設備在接收信息過程中再次計算CRC值并與CRC的實際值進行比較,若二者不一致,亦產生一個錯誤,校驗開始時,把16位寄存器的各位都置為“1”,然后把信息中的相鄰2個8位字節數據放到當前寄存器中處理,只有每個字符的8位數據用于CRC處理。起始位,停止位和校驗位不參與CRC計算。


串口通信技術應用廣泛,在數據通信、計算機網絡以及分布式控制系統中,經常采用串行通信來交換數據和信息。文中采用Visual Studio 2010提供的SerialPort控件實現串口通信。SerialPort控件和C#的其他控件一樣,都是通過對其一系列的方法、屬性、事件與用戶之間進行交互。只要對SerialPort控件的屬性、方法、事件進行設計,就可以發送和接收數據。






軟件界面設計滿足清晰、簡潔的要求,使得操作簡單、調理清晰,易于進行測試操作。在程序運行后,首先設置串口的參數,本系統串口參數設置為:
串口號:COM3;波特率:9 600 bps;數據位:8 位;停止位:1位;校驗位:無校驗位。
然后打開串口,設置設備地址、功能碼、起始地址、寄存器數量,進行發送。發送要查詢的數據命令,模塊就會作出相應的回應。如圖2所示,是發送查詢模塊類型寄存器,即3504(HEX)。

圖2 串口通信界面Fig.2 Serial communication interface
文中是以揚州儀征市電網為例,實現了現場數據的采集,以便于監控中心的實時集中監控,如圖3所示。文中采集了兩路電網的三相電壓、電流,有功功率,無功功率,功率因素5個參數。

圖3 數據實時顯示界面Fig.3 Real-time data display interface
文中采用C#編程語言和串口技術實現了基于RTU模式的Modbus數據通信,解決了電網現場數據的采集及遠程實時監測。系統利用三相多功能電量采集模塊實現了電網數據采集的智能化,以及GPRS模塊作為通訊介質,大大節省了通訊成本。同時為工控領域的應用提供了可行性參考。
[1]吳曉艷.計算機串行通信接口及其應用[J].現代電子技術.2010(18):83-86.
WU Xiao-yan,Computer serial communication interface and its application[J].Modern Electronic Technology,2010(18):83-86.
[2]呂國芳,唐海龍,李進.基于Modbus RTU的串口調試軟件的實現[J].計算機技術與發展,2009(9):236-238,241.