请高手用VB MSCOMM1控件编写与仪表通讯程序

来源:百度知道 编辑:UC知道 时间:2024/06/10 14:39:14
我现有一台仪表,其通讯格式为1:数据格式:起始位1位,数据位7位,校验位1位,偶校验,停止位:1位,波特率9600.上位机从仪表读数据命令格式:HEX:04H,通讯地址,参数名,05H.仪表应答格式为HEX:02H,参数名,参数值,03H,BBC.如读取1号地址的数据:上位机发送"04,30,30,31,31,50,56,05
则返回数据为:02,50,56,20,20,32,34,2E,03,2D,也就是1号地址的值为24
如何编写让数据读到计算机上.
gongxuchao,你好,按照你提供的代码我尝试与仪表进行了通讯,可就是数据上不来,还有你的MSComm1.RThreshold = 21我数了一下仪表返回的数据好像只有10个字节,不知你是如何得来的.重点是数据上不来,我的仪表好像在发送数据后没有反应,点型的是仪表的通讯灯没有闪烁.麻烦你再替我看看问题出在了哪里.谢了.

这是串口接的初始化 代码。
MSComm1.Settings = "9600,n,7,1"
MSComm1.InputMode = comInputModeBinary
MSComm1.InBufferSize = 64
MSComm1.OutBufferSize = 64
MSComm1.RThreshold = 21 '按下位机返回数据字节长设置,设置接收字节长度
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
MSComm1.CommPort = 2 '设置串口号
MSComm1.PortOpen = True '串口打开
接收代码:
Select Case MSComm1.CommEvent
Case comEvReceive
MSComm1.InputLen = 0
strBuff = MSComm1.Input
str() = strBuff
'接收数据处理为16进制
For i = 0 To UBound(str)
If Len(Hex(str(i))) = 1 Then
strdata = strdata & "0" & Hex(str(i))
Else
strdata = strdata & Hex(str(i))
End If
Next
text1.text=strdata
Call Timer1_Timer
end select

接收完毕后清空缓冲区:
Private Sub Timer1_Timer()
strdata = ""
End Sub

补充一下:我的这个代码是我用的代码我没有改。那个21是我接的数据长度,如果是你的话你改成10就好了。
建议你用串口调试精灵测试一下能不能接收到数据,如果串口精灵也接不到数据那么你就要检查一下你的单片机或者串