【內(nèi)容摘要】本文通過(guò)對(duì)江陰長(zhǎng)江斯菲爾電力儀表公司的多功能電力儀表進(jìn)行具體的分析,介紹了基于 Visual Basic軟件編程開(kāi)發(fā)了遠(yuǎn)程讀取多功能電力儀表數(shù)據(jù)的程序。通過(guò) MSComm控件對(duì) RS-232串口 COM1的進(jìn)行控制,實(shí)現(xiàn)了對(duì)多功能電力儀表遠(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
一、前言
原來(lái)的電力系統(tǒng)中,高低壓配電柜中往往要安裝各種各樣的儀表,(如電度表、電流表、電壓表等)實(shí)現(xiàn)對(duì)電力系統(tǒng)的監(jiān)視。而如果在一些大廠往往就有很多儀表,每隔一段時(shí)間就要有專人帶著紙筆到廠區(qū)內(nèi)的所有儀表點(diǎn)巡視一番,并將所有的數(shù)值記錄下來(lái),帶回辦公室作數(shù)據(jù)分析和處理。
隨著計(jì)算機(jī)科學(xué)技術(shù)的發(fā)展,計(jì)算機(jī)在電力監(jiān)控領(lǐng)域中得到了越來(lái)越廣泛的應(yīng)用。使用多功能智能電力儀表代替機(jī)械式的電力儀表是工業(yè)自動(dòng)化的大勢(shì)所趨。由于多功能儀表不但可以一表多用,而且一般的多功能儀表都可以通過(guò)其通訊接口來(lái)實(shí)現(xiàn)對(duì)儀表的編程、數(shù)據(jù)采集等功能。所以使用多功能電力儀表能夠在很大程度上減少人們的勞力,并且可以極大地提高效率。由于實(shí)現(xiàn)對(duì)電力多功能儀表的監(jiān)視,功能比較單一,且市場(chǎng)上的組態(tài)軟件也比較昂貴。在這里作者就是用 MSComm控件實(shí)現(xiàn)對(duì)串口的控制,實(shí)現(xiàn)對(duì)陰長(zhǎng)江斯菲爾電力儀表公司的多功能電力儀表遠(yuǎn)程讀取電能數(shù)據(jù),從而達(dá)到軟件的設(shè)計(jì)。MSComm控件是 Microsoft提供的擴(kuò)展控件,用于支持 VB程序?qū)Υ诘脑L問(wèn),該控件“隱藏”了大部分串口通訊的底層運(yùn)行過(guò)程和許多煩瑣的處理過(guò)程,同時(shí)支持查詢方法和事件驅(qū)動(dòng)通訊的機(jī)制。因此用其實(shí)現(xiàn)微機(jī)串口的數(shù)據(jù)通訊相當(dāng)簡(jiǎn)單,以很少的程序代碼就可以輕松串口的訪問(wèn)和數(shù)據(jù)通訊。
二、MODBUS 通訊協(xié)議分析:
由于江陰長(zhǎng)江斯菲爾電力儀表公司 CD194E系列的多功能電力儀表是采用遠(yuǎn)程 RS-485 數(shù)字接口(差分、半雙工)和使用 MODBUS-RTU通訊協(xié)議,來(lái)實(shí)現(xiàn)對(duì)儀表的編程、數(shù)據(jù)采集等功能,所以先介紹 MODBUS 協(xié)議:
MODBUS 協(xié)議是一種主從式點(diǎn)對(duì)點(diǎn)的通訊協(xié)議,允許一臺(tái)主機(jī)和多臺(tái)從機(jī)之間進(jìn)行數(shù)據(jù)通信,在 CD194E 系列的多功能電力儀表通訊系統(tǒng)中,主機(jī)是微機(jī)(PC、工控機(jī)、PLC),從機(jī)是 CD194E列儀表。在該通訊系統(tǒng)中,允許系統(tǒng)連接多達(dá)128 個(gè)儀表及1200米的通訊距離。通訊方式采用主機(jī)請(qǐng)求,從機(jī)應(yīng)答。即:主機(jī)提出命令請(qǐng)求,從機(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è)備號(hào),主機(jī)利用從機(jī)地址來(lái)識(shí)別進(jìn)行通訊從機(jī)設(shè)備。
命令字(1個(gè)字節(jié)):設(shè)定主機(jī)對(duì)從機(jī)的通訊內(nèi)容。
信息字(N個(gè)字節(jié)):包括進(jìn)行兩機(jī)通訊中各種數(shù)據(jù)地址、數(shù)據(jù)長(zhǎng)度、數(shù)據(jù)信息。
校驗(yàn)碼(2個(gè)字節(jié)):用于檢測(cè)數(shù)據(jù)通訊錯(cuò)誤,采用循環(huán)冗余碼 CRC16。
通訊參數(shù)的設(shè)置:通過(guò)儀表上的編程鍵盤對(duì)儀表的儀表地址(1-247)、通訊速度(4800或9600)和
數(shù)據(jù)格式(1個(gè)起始位,8個(gè)數(shù)據(jù)位,1個(gè)停止位,可選擇無(wú)校驗(yàn)位、奇校驗(yàn)位、偶校驗(yàn)位。)進(jìn)行設(shè)置。
網(wǎng)絡(luò)連線如圖一如示:

在這里,作者使用的是臺(tái)灣泓格科技有限公司的232/485轉(zhuǎn)換模塊 I-7520。由主控計(jì)算機(jī)送出的命令是通過(guò) RS-232 串行通信端口發(fā)送出去,此信號(hào)經(jīng)過(guò) 232/485 轉(zhuǎn)換模塊(模塊編號(hào)I-7520)將信號(hào)標(biāo)準(zhǔn)電位及類型轉(zhuǎn)換后,在 485 網(wǎng)絡(luò)上傳播開(kāi)來(lái)。多功能電力儀表收到屬于自身的命令后,會(huì)進(jìn)行分析控制的操作,最后將結(jié)果送至485網(wǎng)絡(luò),讓此信號(hào)再通過(guò)I-7520的轉(zhuǎn)換后,可由計(jì)算機(jī)的 RS-232串行通信端口接收進(jìn)來(lái)。整個(gè)送收過(guò)程全是以串行處理。
三、軟件的設(shè)計(jì)和開(kāi)發(fā)

注:從 CD194E 系列的多功能電力儀表傳過(guò)來(lái)的電功率數(shù)據(jù)就存放在 Byte1到 Byte4 內(nèi)。
3.通信步驟:
⑴加入通信控件。也就是 MSComm控件
⑵設(shè)置通信端口號(hào)碼。即 CommPort屬性,在本文使用 Com1。
⑶設(shè)置通訊參數(shù)。即Settings 屬性。在本文設(shè)置為 9600,n,8,1。即通訊速度為 9600,數(shù)據(jù)格式為1 個(gè)起始位,8個(gè)數(shù)據(jù)位,1個(gè)停止位,無(wú)校驗(yàn)位。注意必須與多功能電力儀表的設(shè)置一致,不然就會(huì)通信失敗。
⑷設(shè)置其它參數(shù)。必要時(shí)再加上其它的屬性設(shè)置。
⑸打開(kāi)通信端口。即PortOpen 屬性設(shè)成 True。
⑹每隔500毫秒送出字符串或讀入字符串。即發(fā)送命令 4(讀N 個(gè)字節(jié))來(lái)讀取電功率參數(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()
Timer1.Enabled = Not Timer1.Enabled
If Timer1.Enabled Then
CmdRead.Caption = "停止讀數(shù)"
Else
CmdRead.Caption = "讀取電功率"
End If
End Sub
’程序初始化
Private Sub Form_Load()
MSComm1.InputMode = comInputModeBinary
MSComm1.PortOpen = True
Timer1.Enabled = 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
MSComm1.InputLen = 0
Buf = MSComm1.Input
’重新定義數(shù)據(jù)輸入緩沖區(qū), 發(fā)送命令 4
MSComm1.InputLen = 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
MSComm1.Output = 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í)間過(guò)久,請(qǐng)檢查多功能電力儀表及傳輸狀態(tài)!", vbCritical + vbOKOnly, "系統(tǒng)信息"
Exit Sub
End If
DoEvents
Loop Until MSComm1.InBufferCount >= 9
’從輸入緩沖區(qū)讀數(shù)據(jù)
Buf = MSComm1.Input
If Buf(0) <> 1 Then
MsgBox "地址錯(cuò)誤!", vbCritical + vbOKOnly, "系統(tǒng)信息"
Exit Sub
End If
Buf = MSComm1.Input
If Buf(0) <> 4 Then
MsgBox "長(zhǎng)度錯(cuò)誤!", vbCritical + vbOKOnly, "系統(tǒng)信息"
Exit Sub
End If
Buf = MSComm1.Input
C4 = Buf(0)
Buf = MSComm1.Input
C5 = Buf(0)
Buf = MSComm1.Input
C6 = Buf(0)
Buf = MSComm1.Input
C7 = Buf(0)
Buf = MSComm1.Input
Buf = MSComm1.Input
Data = Power(C4, C5, C6, C7)
TxtPower.Text = 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)室做過(guò)多次實(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ū)動(dòng)程序。采用VB開(kāi)發(fā)應(yīng)用軟件十分方便,編程工作量小。
【參考文獻(xiàn)】
1.李肇慶、韓濤。串行端口技術(shù),國(guó)防工業(yè)出版社,2004
2.范逸之。Visual Basic 與 RS-232 串行通信控制,清華大學(xué)出版社,2002
3.范逸之。Visual Basic 與分布監(jiān)控系統(tǒng)——RS232/485 串行通信,清華大學(xué)出版社,2002
4.江陰長(zhǎng)江斯菲爾電力儀表有限公司使用手冊(cè)
5. 臺(tái)灣泓格科技有限公司的 232/485 轉(zhuǎn)換模塊說(shuō)明書.