急需电表3146A与PC的串行通信VB程式

太复杂了,我就是想要一个基础的VB与3146A电表通信的代码!
能够发R1读出电表的值就行!

自己整个comm控件调试一下

Combo3.AddItem "三项电压A", 0
Combo3.AddItem "三项电压B", 0
Combo3.AddItem "三项电压C", 0

Combo3.AddItem "三项电流A", 0
Combo3.AddItem "三项电流B", 0
Combo3.AddItem "三项电流C", 0

Combo3.AddItem "频率", 0
Combo3.AddItem "总功率因数", 0
Combo3.AddItem "瞬时总有功功率", 0
Combo3.AddItem "正向有功总电能", 0

If Combo1.Text = "电度表" Then
If RxData_Counter >= 16 Then 'And RxData_Battry(0) = &H7E And RxData_Battry(1) = &H33 Then
If Combo3.Text = "正向有功总电能" Then
CopyMemory V_DianDu_Rx_data.Header1, RxData_Battry(0), 18
If V_DianDu_Rx_data.Header1 = &H68 And V_DianDu_Rx_data.Header2 = &H68 And V_DianDu_Rx_data.Tail = &H16 Then
RxData_JieNeng = ""
Cmd_OverTime_Flag = 0
StatusBar1.Panels(2).Text = "接收到电表数据!"
For aaaaa_long = 0 To RxData_Counter - 1
RxData_JieNeng = RxData_JieNeng & " " & Hex(RxData_Battry(aaaaa_long))
Next
Text2 = "原始接收数据:" & RxData_JieNeng
V_DianDu_Rx_data.data_0 = V_DianDu_Rx_data.data_0 - &H33
V_DianDu_Rx_data.data_1 = V_DianDu_Rx_data.data_1 - &H33
V_DianDu_Rx_data.data_2 = V_DianDu_Rx_data.data_2 - &H33
V_DianDu_Rx_data.data_3 = V_DianDu_Rx_data.data_3 - &H33
V_DianDu_Rx_data.data_4 = V_DianDu_Rx_data.data_4 - &H33
V_DianDu_Rx_data.data_5 = V_DianDu_Rx_data.data_5 - &H33
If V_DianDu_Rx_data.data_0 = &H10 And V_DianDu_Rx_data.data_1 = &H90 Then '正向有功总电能
int_tmp = CInt(V_DianDu_Rx_data.data_5 / 16)
int_tmp = int_tmp * 10
int_tmp = int_tmp + (V_DianDu_Rx_data.data_5 Mod 16)
bbbbb_long = bbbbb_long * 100 + int_tmp
int_tmp = CInt(V_DianDu_Rx_data.data_4 / 16)
int_tmp = int_tmp * 10
int_tmp = int_tmp + (V_DianDu_Rx_data.data_4 Mod 16)
bbbbb_long = bbbbb_long * 100 + int_tmp
int_tmp = CInt(V_DianDu_Rx_data.data_3 / 16)
int_tmp = int_tmp * 10
int_tmp = int_tmp + (V_DianDu_Rx_data.data_3 Mod 16)
bbbbb_long = bbbbb_long * 100 + int_tmp
int_tmp = CInt(V_DianDu_Rx_data.data_2 / 16)
int_tmp = int_tmp * 10
int_tmp = int_tmp + (V_DianDu_Rx_data.data_2 Mod 16)
bbbbb_long_V = (bbbbb_long * 100 + int_tmp) / 100
Text3 = Text2 & Chr(13) & Chr(10) & "正向有功总电能:" & bbbbb_long_V & " 千瓦时"
End If
End If
Else
If Combo3.Text = "瞬时总有功功率" Then
CopyMemory V_DianDu_Rx_data.Header1, RxData_Battry(0), 17
If V_DianDu_Rx_data.Header1 = &H68 And V_DianDu_Rx_data.Header2 = &H68 Then
RxData_JieNeng = ""
Cmd_OverTime_Flag = 0
StatusBar1.Panels(2).Text = "接收到电表数据!"
For aaaaa_long = 0 To RxData_Counter - 1
RxData_JieNeng = RxData_JieNeng & " " & Hex(RxData_Battry(aaaaa_long))
Next
Text2 = "原始接收数据:" & RxData_JieNeng
V_DianDu_Rx_data.data_0 = V_DianDu_Rx_data.data_0 - &H33
V_DianDu_Rx_data.data_1 = V_DianDu_Rx_data.data_1 - &H33
V_DianDu_Rx_data.data_2 = V_DianDu_Rx_data.data_2 - &H33
V_DianDu_Rx_data.data_3 = V_DianDu_Rx_data.data_3 - &H33
V_DianDu_Rx_data.data_4 = V_DianDu_Rx_data.data_4 - &H33
'V_DianDu_Rx_data.data_5 = V_DianDu_Rx_data.data_5 - &H33
int_tmp = CInt(V_DianDu_Rx_data.data_4 / 16)
int_tmp = int_tmp * 10
int_tmp = int_tmp + (V_DianDu_Rx_data.data_4 Mod 16)
bbbbb_long = bbbbb_long * 100 + int_tmp
int_tmp = CInt(V_DianDu_Rx_data.data_3 / 16)
int_tmp = int_tmp * 10
int_tmp = int_tmp + (V_DianDu_Rx_data.data_3 Mod 16)
bbbbb_long = bbbbb_long * 100 + int_tmp
int_tmp = CInt(V_DianDu_Rx_data.data_2 / 16)
int_tmp = int_tmp * 10
int_tmp = int_tmp + (V_DianDu_Rx_data.data_2 Mod 16)
bbbbb_long = bbbbb_long * 100 + int_tmp
Text3 = Text2 & Chr(13) & Chr(10) & "瞬时总有功功率:" & bbbbb_long & " W"
End If
End If
CopyMemory V_Rx_data.Header1, RxData_Battry(0), 16
If V_Rx_data.Header1 = &H68 And V_Rx_data.Header2 = &H68 And V_Rx_data.Tail = &H16 Then
RxData_JieNeng = ""
Cmd_OverTime_Flag = 0
StatusBar1.Panels(2).Text = "接收到电表数据!"
For aaaaa_long = 0 To RxData_Counter - 1
RxData_JieNeng = RxData_JieNeng & " " & Hex(RxData_Battry(aaaaa_long))
Next
Text2 = "原始接收数据:" & RxData_JieNeng
V_Rx_data.data_0 = V_Rx_data.data_0 - &H33
V_Rx_data.data_1 = V_Rx_data.data_1 - &H33
V_Rx_data.data_2 = V_Rx_data.data_2 - &H33
V_Rx_data.data_3 = V_Rx_data.data_3 - &H33

If V_Rx_data.data_0 = &H11 And V_Rx_data.data_1 = &HB6 Then '三项A
int_tmp_1 = CInt(V_Rx_data.data_3 / 16)
int_tmp_1 = int_tmp * 10 + V_Rx_data.data_3 Mod 16
int_tmp = int_tmp_1
int_tmp_1 = CInt(V_Rx_data.data_2 / 16)
int_tmp_1 = int_tmp * 10 + V_Rx_data.data_2 Mod 16
int_tmp = int_tmp * 100 + int_tmp_1

Text3 = "三项电压A:" & int_tmp & "V"
'Text3 = "三项电压A:" & Hex(V_Rx_data.data_3) & Hex(V_Rx_data.data_2) & "V"
End If
If V_Rx_data.data_0 = &H12 And V_Rx_data.data_1 = &HB6 Then '三项B
int_tmp_1 = CInt(V_Rx_data.data_3 / 16)
int_tmp_1 = int_tmp * 10 + V_Rx_data.data_3 Mod 16
int_tmp = int_tmp_1
int_tmp_1 = CInt(V_Rx_data.data_2 / 16)
int_tmp_1 = int_tmp * 10 + V_Rx_data.data_2 Mod 16
int_tmp = int_tmp * 100 + int_tmp_1

Text3 = "三项电压B:" & int_tmp & "V"
End If
If V_Rx_data.data_0 = &H13 And V_Rx_data.data_1 = &HB6 Then '三项C
int_tmp_1 = CInt(V_Rx_data.data_3 / 16)
int_tmp_1 = int_tmp * 10 + V_Rx_data.data_3 Mod 16
int_tmp = int_tmp_1
int_tmp_1 = CInt(V_Rx_data.data_2 / 16)
int_tmp_1 = int_tmp * 10 + V_Rx_data.data_2 Mod 16
int_tmp = int_tmp * 100 + int_tmp_1

Text3 = "三项电压C:" & int_tmp & "V"
End If
If V_Rx_data.data_0 = &H21 And V_Rx_data.data_1 = &HB6 Then 'A项电流
int_tmp = V_Rx_data.data_3 * 100 + (V_Rx_data.data_2 / 16) * 10 + V_Rx_data.data_2 Mod 16
Text3 = "A项电流:" & Hex(V_Rx_data.data_3) & "." & Hex(V_Rx_data.data_2) & "A"
End If
If V_Rx_data.data_0 = &H22 And V_Rx_data.data_1 = &HB6 Then 'B项电流
int_tmp = V_Rx_data.data_3 * 100 + (V_Rx_data.data_2 / 16) * 10 + V_Rx_data.data_2 Mod 16
Text3 = "B项电流:" & Hex(V_Rx_data.data_3) & "." & Hex(V_Rx_data.data_2) & "A"
End If
If V_Rx_data.data_0 = &H23 And V_Rx_data.data_1 = &HB6 Then 'C项电流
int_tmp = V_Rx_data.data_3 * 100 + (V_Rx_data.data_2 / 16) * 10 + V_Rx_data.data_2 Mod 16
Text3 = "C项电流:" & Hex(V_Rx_data.data_3) & "." & Hex(V_Rx_data.data_2) & "A"
End If
If V_Rx_data.data_0 = &H50 And V_Rx_data.data_1 = &HB6 Then '
'V_Rx_data.data_3 = &H3C - &H33
'V_Rx_data.data_2 = &H8A - &H33
ccc = V_Rx_data.data_3 / 16 + (V_Rx_data.data_2 / 16) + (V_Rx_data.data_2 Mod 16) / 10
Text3 = "功率因数:" & ccc 'Hex(V_Rx_data.data_3) & "." & Hex(V_Rx_data.data_2)
If V_Rx_data.data_3 > 9 Then
Text3 = "功率因数:" & "1." & Hex(V_Rx_data.data_2)
Else
Text3 = "功率因数:" & "0." & Hex(V_Rx_data.data_3) & Hex(V_Rx_data.data_2)
End If
End If
If V_Rx_data.data_0 = &H90 And V_Rx_data.data_1 = &HB6 Then '
int_tmp = (V_Rx_data.data_3 / 16) * 10 ' + (V_Rx_data.data_2 / 16) * 10 + V_Rx_data.data_2 Mod 16
If V_Rx_data.data_2 > 9 Then
Text3 = "频率:" & Hex(V_Rx_data.data_3) & "." & Hex(V_Rx_data.data_2) & "Hz"
Else
Text3 = "频率:" & Hex(V_Rx_data.data_3) & ".0" & Hex(V_Rx_data.data_2) & "Hz"
End If
End If
End If
End If

End If
End If

Private Sub DianDu_Check_Click()
Dim RxData_JieNeng As String
Dim aaaaa_long As Integer
Dim array_tmp(14) As Byte

If Option3.Value = True Or Option1.Value = True Then '监听模式,不发送数据
Exit Sub
End If

' FE,0x68,0x99,0x99,0x99,0x99,0x99,0x99,0x68,0x01,0x02,0x44,0xE9,0x96,0x16},/*查A相电压*/
'{0xFE,0x68,0x99,0x99,0x99,0x99,0x99,0x99,0x68,0x01,0x02,0x45,0xE9,0x97,0x16},/*查B相电压*/
'{0xFE,0x68,0x99,0x99,0x99,0x99,0x99,0x99,0x68,0x01,0x02,0x46,0xE9,0x98,0x16},/*查C相电压*/
'{0xFE,0x68,0x99,0x99,0x99,0x99,0x99,0x99,0x68,0x01,0x02,0x54,0xE9,0xA6,0x16},/*查A相电流*/
'{0xFE,0x68,0x99,0x99,0x99,0x99,0x99,0x99,0x68,0x01,0x02,0x55,0xE9,0xA7,0x16},/*查B相电流*/
'{0xFE,0x68,0x99,0x99,0x99,0x99,0x99,0x99,0x68,0x01,0x02,0x56,0xE9,0xA8,0x16},/*查C相电流*/
'{0xFE,0x68,0x99,0x99,0x99,0x99,0x99,0x99,0x68,0x01,0x02,0x83,0xE9,0xD5,0x16},/*查总功率因数*/
'{0xFE,0x68,0x99,0x99,0x99,0x99,0x99,0x99,0x68,0x01,0x02,0xC3,0xE9,0x15,0x16},/*查频率*/
'{0xFE,0x68,0x99,0x99,0x99,0x99,0x99,0x99,0x68,0x01,0x02,0x63,0xE9,0xB5,0x16},/*查瞬时总有功功率*/
'{0xFE,0x68,0x99,0x99,0x99,0x99,0x99,0x99,0x68,0x01,0x02,0x43,0xC3,0x6F,0x16}/*查(当前)正向有功总电能*/};
V_Send_Cmd.data_0 = &H44 ' V_Send_Cmd.data_1 = &HE9
array_tmp(0) = &HFE
array_tmp(1) = &H68
array_tmp(2) = &H99
array_tmp(3) = &H99
array_tmp(4) = &H99
array_tmp(5) = &H99
array_tmp(6) = &H99
array_tmp(7) = &H99
array_tmp(8) = &H68
array_tmp(9) = &H1
array_tmp(10) = &H2
Select Case Combo3.Text
Case "三项电压A"
array_tmp(11) = &H44 '&HC3
array_tmp(12) = &HE9 '&HE9
array_tmp(13) = &H96 ' &H15
Case "三项电压B"
array_tmp(11) = &H45 '&HC3
array_tmp(12) = &HE9 '&HE9
array_tmp(13) = &H97 ' &H15
Case "三项电压C"
array_tmp(11) = &H46 '&HC3
array_tmp(12) = &HE9 '&HE9
array_tmp(13) = &H98 ' &H15
Case "三项电流A"
array_tmp(11) = &H54 '&HC3
array_tmp(12) = &HE9 '&HE9
array_tmp(13) = &HA6 ' &H15
Case "三项电流B"
array_tmp(11) = &H55 '&HC3
array_tmp(12) = &HE9 '&HE9
array_tmp(13) = &HA7 ' &H15
Case "三项电流C"
array_tmp(11) = &H56 '&HC3
array_tmp(12) = &HE9 '&HE9
array_tmp(13) = &HA8 ' &H15
Case "总功率因数"
array_tmp(11) = &H83 '&HC3
array_tmp(12) = &HE9 '&HE9
array_tmp(13) = &HD5 ' &H15
Case "频率"
array_tmp(11) = &HC3
array_tmp(12) = &HE9
array_tmp(13) = &H15
Case "瞬时总有功功率"
array_tmp(11) = &H63
array_tmp(12) = &HE9
array_tmp(13) = &HB5
Case "正向有功总电能"
array_tmp(11) = &H43
array_tmp(12) = &HC3
array_tmp(13) = &H6F
Case Else
End Select
array_tmp(14) = &H16
If MSComm1.PortOpen = False Then
str1 = Right(Combo2.Text, 1)
MSComm1.CommPort = Int(str1)
MSComm1.Settings = "1200,e,8,1"
MSComm1.PortOpen = True
StatusBar1.Panels(1).Text = "串口" & MSComm1.CommPort & " Open:" & MSComm1.Settings

End If
MSComm1.Output = array_tmp
StatusBar1.Panels(2).Text = "电表命令发送中,请稍候!"
For aaaaa_long = 0 To 14
RxData_JieNeng = RxData_JieNeng & Hex2ASCII(array_tmp(aaaaa_long)) 'Hex2ASCII
Next
Text1 = RxData_JieNeng
Cmd_OverTime_Flag = Cmd_OverTime_Flag + 1

End Sub
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-14
VB 程序 很简单的

推荐看书
Visual_Basic与_RS-232_串行通信控制
相似回答
大家正在搜