Based on MODBUS Software Technology of Remote Communication about Multifuctional Electrical
Instrument
作者:詹根基 郭厚焜 單位:華東交通大學(xué)機(jī)電學(xué)院
【內(nèi)容摘要】本文通過對江陰長江斯菲爾電力儀表公司的多功能電力儀表進(jìn)行具體的分析,介紹了基
于Visual Basic 軟件編程開發(fā)了遠(yuǎn)程讀取多功能電力儀表數(shù)據(jù)的程序。通過MSComm 控件對RS-232
串口COM1 的進(jìn)行控制,實(shí)現(xiàn)了對多功能電力儀表遠(yuǎn)程控制功能。
【關(guān)鍵詞】RS-232 串口,MODBUS 總線,MSComm 控件,232/485 轉(zhuǎn)換模塊
Abstract The paper analyzes multifunctional electrical instrument of JianYin Changjiang Sfere Electric
Power Company Limited specifically. It is introduced remotely accessing multifunctional electrical
instrument by application of Visual Basic. The paper achieves to remotely control multifunctional electrical
instrument by using MSComm control to access serial port COM1.
Key Words RS-232 serial port, MODBUS, MSComm Control, 232/485 Converter Module
一、前言
原來的電力系統(tǒng)中,高低壓配電柜中往往要安裝各種各樣的儀表,(如電度表、電流表、電壓表
等)實(shí)現(xiàn)對電力系統(tǒng)的監(jiān)視。而如果在一些大廠往往就有很多儀表,每隔一段時(shí)間就要有專人帶著紙
筆到廠區(qū)內(nèi)的所有儀表點(diǎn)巡視一番,并將所有的數(shù)值記錄下來,帶回辦公室作數(shù)據(jù)分析和處理。
隨著計(jì)算機(jī)科學(xué)技術(shù)的發(fā)展,計(jì)算機(jī)在電力監(jiān)控領(lǐng)域中得到了越來越廣泛的應(yīng)用。使用多功能智
能電力儀表代替機(jī)械式的電力儀表是工業(yè)自動化的大勢所趨。由于多功能儀表不但可以一表多用,而
且一般的多功能儀表都可以通過其通訊接口來實(shí)現(xiàn)對儀表的編程、數(shù)據(jù)采集等功能。所以使用多功能
電力儀表能夠在很大程度上減少人們的勞力,并且可以極大地提高效率。
由于實(shí)現(xiàn)對電力多功能儀表的監(jiān)視,功能比較單一,且市場上的組態(tài)軟件也比較昂貴。在這里作者就
是用MSComm 控件實(shí)現(xiàn)對串口的控制,實(shí)現(xiàn)對江陰長江斯菲爾電力儀表公司的多功能電力儀表遠(yuǎn)程
讀取電能數(shù)據(jù),從而達(dá)到軟件的設(shè)計(jì)。MSComm 控件是Microsoft 提供的擴(kuò)展控件,用于支持VB 程
序?qū)Υ诘脑L問,該控件“隱藏”了大部分串口通訊的底層運(yùn)行過程和許多煩瑣的處理過程,同時(shí)支持
查詢方法和事件驅(qū)動通訊的機(jī)制。因此用其實(shí)現(xiàn)微機(jī)串口的數(shù)據(jù)通訊相當(dāng)簡單,以很少的程序代碼就
可以輕松串口的訪問和數(shù)據(jù)通訊。
二、MODBUS 通訊協(xié)議分析:
由于江陰長江斯菲爾電力儀表公司CD194E 系列的多功能電力儀表是采用遠(yuǎn)程RS-485 數(shù)字接口
(差分、半雙工)和使用MODBUS-RTU 通訊協(xié)議,來實(shí)現(xiàn)對儀表的編程、數(shù)據(jù)采集等功能,所以先
介紹MODBUS 協(xié)議:
MODBUS 協(xié)議是一種主從式點(diǎn)對點(diǎn)的通訊協(xié)議,允許一臺主機(jī)和多臺從機(jī)之間進(jìn)行數(shù)據(jù)通信,
在CD194E 系列的多功能電力儀表通訊系統(tǒng)中,主機(jī)是微機(jī)(PC、工控機(jī)、PLC),從機(jī)是CD194E
系列儀表。在該通訊系統(tǒng)中,允許系統(tǒng)連接多達(dá)128 個(gè)儀表及1200 米的通訊距離。通訊方式采用主
機(jī)請求,從機(jī)應(yīng)答。即:主機(jī)提出命令請求,從機(jī)響應(yīng)接收數(shù)據(jù)后作數(shù)據(jù)分析,如果數(shù)據(jù)滿足通訊規(guī)
約,從機(jī)做數(shù)據(jù)響應(yīng)。
主、從機(jī)間的通訊每一幀數(shù)據(jù)包含以下信息(16 進(jìn)制):
從機(jī)地址、命令字、信息字、校驗(yàn)碼
從機(jī)地址(1 個(gè)字節(jié)):從機(jī)設(shè)備號,主機(jī)利用從機(jī)地址來識別進(jìn)行通訊從機(jī)設(shè)備。
命令字(1 個(gè)字節(jié)):設(shè)定主機(jī)對從機(jī)的通訊內(nèi)容。
信息字(N 個(gè)字節(jié)):包括進(jìn)行兩機(jī)通訊中各種數(shù)據(jù)地址、數(shù)據(jù)長度、數(shù)據(jù)信息。
校驗(yàn)碼(2 個(gè)字節(jié)):用于檢測數(shù)據(jù)通訊錯(cuò)誤,采用循環(huán)冗余碼CRC16。
通訊參數(shù)的設(shè)置:通過儀表上的編程鍵盤對儀表的儀表地址(1-247)、通訊速度(4800 或9600)和
數(shù)據(jù)格式(1 個(gè)起始位,8 個(gè)數(shù)據(jù)位,1 個(gè)停止位,可選擇無校驗(yàn)位、奇校驗(yàn)位、偶校驗(yàn)位。)進(jìn)行設(shè)
置。
網(wǎng)絡(luò)連線如圖一如示:
在這里,作者使用的是臺灣泓格科技有限公司的232/485 轉(zhuǎn)換模塊I-7520。由主控計(jì)算機(jī)送出的
命令是通過RS-232 串行通信端口發(fā)送出去,此信號經(jīng)過232/485 轉(zhuǎn)換模塊(模塊編號I-7520)將信號
標(biāo)準(zhǔn)電位及類型轉(zhuǎn)換后,在485 網(wǎng)絡(luò)上傳播開來。多功能電力儀表收到屬于自身的命令后,會進(jìn)行分
析控制的操作,最后將結(jié)果送至485 網(wǎng)絡(luò),讓此信號再通過I-7520 的轉(zhuǎn)換后,可由計(jì)算機(jī)的RS-232
串行通信端口接收進(jìn)來。整個(gè)送收過程全是以串行處理。
三、軟件的設(shè)計(jì)和開發(fā)
注:從CD194E 系列的多功能電力儀表傳過來的電功率數(shù)據(jù)就存放在Byte1 到Byte4 內(nèi)。
3.通信步驟:
⑴加入通信控件。也就是MSComm 控件
⑵設(shè)置通信端口號碼。即CommPort 屬性,在本文使用Com1。
⑶設(shè)置通訊參數(shù)。即Settings 屬性。在本文設(shè)置為9600,n,8,1。即通訊速度為9600,數(shù)據(jù)格式為1 個(gè)
起始位,8 個(gè)數(shù)據(jù)位,1 個(gè)停止位,無校驗(yàn)位。注意必須與多功能電力儀表的設(shè)置一致,不然就會通
信失敗。
⑷設(shè)置其它參數(shù)。必要時(shí)再加上其它的屬性設(shè)置。
⑸打開通信端口。即PortOpen 屬性設(shè)成True。
⑹每隔500毫秒送出字符串或讀入字符串。即發(fā)送命令4(讀N 個(gè)字節(jié))來讀取電功率參數(shù),使用
Input 及Output 屬性。
⑺使用完MSComm 控件后,將通信端口關(guān)閉。
4.人機(jī)界面:
5.程序代碼:
’API 函數(shù)聲名
Private Declare Function GetTickCount Lib "kernel32" () As Long
’點(diǎn)擊結(jié)束程序按鈕
Private Sub CmdEnd_Click()
End
End Sub
’點(diǎn)擊讀取電功率按鈕
Private Sub CmdRead_Click()
d = Not d
If d Then
n = "停止讀數(shù)"
Else
n = "讀取電功率"
End If
End Sub
’程序初始化
Private Sub Form_Load()
ode = comInputModeBinary
en = True
d = False
End Sub
Private Sub Timer1_Timer()
Dim C4%, C5%, C6%, C7%
Dim Tick&
Dim Data As Double
Dim Buf() As Byte
Dim ByteOut(7) As Byte
en = 0
Buf =
’重新定義數(shù)據(jù)輸入緩沖區(qū), 發(fā)送命令4
en = 1
ByteOut(0) = &H1
ByteOut(1) = &H4
ByteOut(2) = &H0
ByteOut(3) = &H5C
ByteOut(4) = &H0
ByteOut(5) = &H4
ByteOut(6) = &H31
ByteOut(7) = &HDB
= ByteOut(0) & ByteOut(1) & ByteOut(2) & ByteOut(3) & ByteOut(4) & ByteOut(5) &
ByteOut(6) & ByteOut(7)
’等待多功能電力儀表響應(yīng)的數(shù)據(jù)到達(dá)串口
Tick = GetTickCount()
Do
If (GetTickCount() - Tick) / 1000# > 10 Then
MsgBox "時(shí)間過久,請檢查多功能電力儀表及傳輸狀態(tài)!", vbCritical + vbOKOnly, "系統(tǒng)信息"
Exit Sub
End If
DoEvents
Loop Until erCount >= 9
’從輸入緩沖區(qū)讀數(shù)據(jù)
Buf =
If Buf(0) <> 1 Then
MsgBox "地址錯(cuò)誤!", vbCritical + vbOKOnly, "系統(tǒng)信息"
Exit Sub
End If
Buf =
If Buf(0) <> 4 Then
MsgBox "命令錯(cuò)誤!", vbCritical + vbOKOnly, "系統(tǒng)信息"
Exit Sub
End If
Buf =
If Buf(0) <> 4 Then
MsgBox "長度錯(cuò)誤!", vbCritical + vbOKOnly, "系統(tǒng)信息"
Exit Sub
End If
Buf =
C4 = Buf(0)
Buf =
C5 = Buf(0)
Buf =
C6 = Buf(0)
Buf =
C7 = Buf(0)
Buf =
Buf =
Data = Power(C4, C5, C6, C7)
= CStr(Data)
End Sub
’自定義功率換算函數(shù)
Private Function Power(C4%, C5%, C6%, C7%)
Dim PowerExp As String, Mantissa As String
Dim ReadValue#
Dim ValueSign&
If ((C4 And &H80) / 2 ^ 7) = True Then
ValueSign = -1
Else
ValueSign = 1
End If
PowerExp = CStr((C4 And &H7F) * 2 + (C5 And &H80) / 2 ^ 7)
Mantissa = CStr((&H80 Or C5) * 2 ^ 16 + C6 * 2 ^ 8 + C7)
ReadValue = ValueSign * 2 ^ (Val(PowerExp) - 126) * Val(Mantissa) / (256 * 65536)
Power = ReadValue
End Function
四、結(jié)論
本實(shí)例是作者在實(shí)驗(yàn)室做過多次實(shí)驗(yàn),達(dá)到了預(yù)定的應(yīng)用效果,目前在江西某廠取得了實(shí)際的應(yīng)用。
該控制系統(tǒng)的最大優(yōu)點(diǎn)是:
1,從硬件上看,僅僅使用一個(gè)轉(zhuǎn)換模塊就可以實(shí)現(xiàn)全廠電能遠(yuǎn)程監(jiān)控和集中管理的功能。大大提高
了效率,且十分經(jīng)濟(jì)實(shí)惠。
2,從軟件上看,直接使用串口的控制技術(shù),而不必需要寫額外的驅(qū)動程序。采用VB 開發(fā)應(yīng)用軟件十
分方便,編程工作量小。
【參考文獻(xiàn)】
1.李肇慶、韓濤。串行端口技術(shù),國防工業(yè)出版社,2004
2.范逸之。Visual Basic 與RS-232 串行通信控制,清華大學(xué)出版社,2002
3.范逸之。Visual Basic 與分布監(jiān)控系統(tǒng)——RS232/485 串行通信,清華大學(xué)出版社,2002
4.江陰長江斯菲爾電力儀表有限公司使用手冊
5. 臺灣泓格科技有限公司的232/485 轉(zhuǎn)換模塊說明書.
(轉(zhuǎn)載)