VB高手进啊,急啊!!!串口通讯

来源:百度知道 编辑:UC知道 时间:2024/06/30 07:39:25
各位大侠,我现在在做一个基于组态软件的监控系统的毕业设计,由于在与外部仪表通讯时没有仪表的驱动程序,所以只能用VB编写一个通过RS232的串口读取外部智能仪表实时数据的程序,对于VB我就只有这几天看了下,略懂一点点,在编程方面还有很多问题,望请各位指导,先在此谢谢了。本次编程要实现的功能为隔相应的时间(0.5S)发送一次读命令,并将收到的数据(实时测量值)显示在Text1中,直到关闭运行窗口。
仪表的通讯协议如下:
要读取仪表的实时动态数据要发送读取命令格式为:@ DE RD CRC CR
其中@为起始符,DE为仪表号,RD为读仪表动态数据的命令 CRC为 校验字节(除@外 CRC 字节之前其它几个字节的异或值 — 即DE(ASII)与帧类型ASCII和帧数据ASCII的异或值),CR为结束符。
本次要发送的命令为:40 30 31 52 44 31 37 0D————全为ASCII码,其中30 31为仪表号01(双字节),52 44为读数据命令RD(双字节)。
接收到的仪表返回数据格式如下 :
如果返回的数据正确则为:@ DE RD 帧数据 CRC CR 其中“帧数据”是仪表中的动态数据
仪表动态数据格式
编号 参 数 名 称 数据格式 类型
1 E2PROM参数修改标志 单字节定点数 只读
2 仪表类型 单字节定点数 只读
3 实时测量值 三字节定点数 只读
4 第一报警状态(AL1) 单字节定点数 只读
5 第二报警状态(AL2) 单字节定点数 只读

三字节(定点数) =低字节高 4 位 ASCII 码 + 低字节低 4 位 ASCII码
+ 高字节高 4 位 ASCII 码 + 高字节低 4 位 ASCII码
+ 小数点高 4 位 ASCII 码 + 小数点低 4 位 ASCII 码
XXXX XXXX XXXX XXXX XXXX XXX

这个协议瞅的甚是眼熟,是不是川仪的啊,哇哈哈哈哈。。。
由于手头没有仪表无法进行测试,所以只给你写了将XX位置的内容按三字节定点数的格式转为数字显示出来,如有不妥还请见谅。

Private Sub Command1_Click()
Dim RcvBytes(5) As Byte
RcvBytes(0) = &H46
RcvBytes(1) = &H34
RcvBytes(2) = &H30
RcvBytes(3) = &H31
RcvBytes(4) = &H30
RcvBytes(5) = &H31
Dim intValue As Single
strHexInt = "&H" & Chr(RcvBytes(2)) & Chr(RcvBytes(3)) & Chr(RcvBytes(0)) & Chr(RcvBytes(1)) '#得到01F4
ReadValue = Val(strHexInt) '#得到整数部分--500
strHexDec = "&H" & Chr(RcvBytes(4)) & Chr(RcvBytes(5))
DecValue = Val(strHexDec) '#得到小数部分--1
If DecValue > 0 Then
For i = 1 To DecValue
ReadValue = ReadValue / 10#
Next
End If
Text1.Text = ReadValue
End Sub

补充回答:

这里只能给个大概的思路,定时发送用Timer即可,接受可在mscomm1的OnComm事件中处理,XX的转换根据上面的该就行了。

Private Sub Form_Load()
Timer1.Interval = 500
MSComm1.PortOpen = True
MS