VB串口通讯,电能表读值问题,求教高手!!!

请教各位VB高手,我在做VB读取电能表的数据时只能读到回应的错误码,错误码的意思是illegaldatavalue.这是有可能是什么问题造成的??说明一下使用的RTU协议... 请教各位VB高手,我在做VB读取电能表的数据时只能读到回应的错误码,错误码的意思是illegal data value.这是有可能是什么问题造成的??

说明一下使用的RTU协议读取的,用的是485转RS232做的。接线,电表都没有问题。使用VS2005 C#语言的程序读取没有问题,用VB发送相同内容的数组给MSCOMM后回传的只有错误码

源程序为
Option Explicit
Dim strData As String
Dim t1_flag0 As Boolean
Private Sub Form_Load()
MSComm1.Settings = "9600,N,8,1" '设置通信口参数
MSComm1.InBufferSize = 40 '设置MSComm1接收缓冲区为40字节
MSComm1.OutBufferSize = 2 '设置MSComm1发送缓冲区为2字节
MSComm1.InputMode = comInputModeBinary '设置接收数据模式为二进制形式
MSComm1.InBufferCount = 0 '清除接收缓冲区
MSComm1.OutBufferCount = 0 '清除发送缓冲区
MSComm1.CommPort = 5
MSComm1.PortOpen = True '打开通信口
Text1.Text = 5
End Sub

Private Sub Command2_Click()
Dim data(8) As Byte '串口发送字节

data(0) = 1
data(1) = 3
data(2) = 0
data(3) = 0
data(4) = 0
data(5) = 1
data(6) = 132
data(7) = 10 '需要发送16进制F0
MSComm1.Output = data()
Text2.Text = CStr(data()) '将发送的数据显示出来

Timer1.Enabled = True
t1_c0:
If t1_flag0 = True Then GoTo t1_c1
DoEvents
GoTo t1_c0
t1_c1:
t1_flag0 = False
Dim Bintput() As Byte
Dim Binputa As Variant
Binputa = MSComm1.Input ' 从接收队列中读入字符串
Bintput() = Binputa
Dim i As Integer
For i = 0 To UBound(Bintput)
If Len(Hex(Bintput(i))) = 1 Then
strData = strData & "0" & Hex(Bintput(i))
Else
strData = strData & Hex(Bintput(i))
End If
Next
Text3.Text = strData
End Sub

Private Sub Timer1_Timer()
Timer1.Enabled = False
t1_flag0 = True
End Sub
timer定时为1S。
请教各位高手,为这个问题折腾好几天了~~~
展开
 我来答
happycxz
2009-01-12 · TA获得超过3146个赞
知道大有可为答主
回答量:3121
采纳率:0%
帮助的人:1634万
展开全部
data(0) = 1
data(1) = 3
data(2) = 0
data(3) = 0
data(4) = 0
data(5) = 1
data(6) = 132
data(7) = 10 '需要发送16进制F0
MSComm1.Output = data()

下位机用什么芯片的?
你连续发这么多字节,下位机会不会接收不了这么快?

我自己在做的,都是每发一个字节,延时一毫秒再发下一个字节的。电脑连续发速度很快,下位的芯片接收起来未必能全接收到,即使是用中断接收。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式