VB串口通讯的问题,急啊!!! 用的MSCOMM控件,但对数据的鉴别不会。数据格式是开始位+数据+结束位,我如何取得数据,并且区分数据阿? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 下午写了一个,但有错误。工作流程是这样的:下位机先发FF,作为联机信号,该程序收到FF后,再返回FF作为确认信号,然后就是接受下位机的数据,具体数据格式:共4位,第一位是报警位,第二、三位是地址位,第四位是数据位。程序如下:Private Sub MSComm1_OnComm()Select Case MSComm1.CommEvent'检测接收事件 Case comEvReceive Dim buf As Variant '接收联机信号 Dim Buffer As Variant '用来从接收缓冲区读取数据 Dim Arr() As Byte If MSComm1.InBufferCount > 0 Then '判断是否有输入 buf = MSComm1.Input MSComm1.InBufferCount = 0 If buf = &HFF Then //注意:是这行有错误,是类型不匹配。为什么? MSComm1.Output = &HFF '返回确认信息 MSComm1.RThreshold = 0 '使comEvReceive事件失效 Do DoEvents Loop Until MSComm1.InBufferCount >= 4 '取得下位机的4个字节的信息 Buffer = MSComm1.Input '读接收的二进制数据 Arr = Buffer '赋值于字节数组以便处理 //注意:说这里不能赋值给数组,为什么啊? Select Case Arr(0) Case &H77 '当为警情信号时 b1 = Arr(3) - 6 * (Arr(3) \ 16) Select Case Arr(2) '选择房间信息 Case &H11 Shape1.FillColor = RGB(255, 0, 0) Text1.ForeColor = RGB(255, 0, 0) Text1.Text = "警告:检测室1出现危险!温度为: " + b1 + "度" Case &H22 Shape2.FillColor = RGB(255, 0, 0) Text1.ForeColor = RGB(255, 0, 0) Text1.Text = "警告:检测室2出现危险!温度为: " + b1 + "度" Case &H33 Shape3.FillColor = RGB(255, 0, 0) Text1.ForeColor = RGB(255, 0, 0) Text1.Text = "警告:检测室3出现危险!温度为: " + b1 + "度" End Select End Select Else Text1.Text = "接收数据格式错误,请重新发送!" MSComm1.RThreshold = 1 End If End If End SelectEnd Sub大家帮忙啊,在此先谢了!!!!! 数据格式是开始位+数据+结束位---------不用管,那是硬件处理,你读出来的都是数据bin方式,有数据时,先将数据读到一个variant变量里,再将变量值赋给一个byte数组,对数组进行操作 第2个错误好像不应该是否bin方式???? Dim buf () As ByteIf buf(0) = &HFF Then 我已经设置了二进制读取了。mscomm1.inputmode=1???????????现在我是一头雾水啊! 说白了就是硬件的TTL电平与软件里的二进制的转化问题,有会的吗???? If MSComm1.InBufferCount > 0 Then '判断是否有输入 buf = MSComm1.Input Sleep(100) .......End If VB编辑DLL返回ADO被ASP访问 请问在哪可以找到Pcomm.bas模块(串口读写)急,大侠请进! 【问】如何实现VB版的IEnumVARIANT接口? VB的程序在做好以后,打包的问题 命令按钮设置快捷键的问题 VB中如何获取msflexgrid所显示所有行的第一个单元格的内容 VB 里这样的功能怎么实现 如何实现VB程序的网络自我升级! 连接数据库sql server VB访问EXCEL表的问题. 无效使用Null的错误修改 导出数据库文件的问题
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
'检测接收事件
Case comEvReceive
Dim buf As Variant '接收联机信号
Dim Buffer As Variant '用来从接收缓冲区读取数据
Dim Arr() As Byte
If MSComm1.InBufferCount > 0 Then '判断是否有输入
buf = MSComm1.Input
MSComm1.InBufferCount = 0
If buf = &HFF Then //注意:是这行有错误,是类型不匹配。为什么?
MSComm1.Output = &HFF '返回确认信息
MSComm1.RThreshold = 0 '使comEvReceive事件失效
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 4 '取得下位机的4个字节的信息
Buffer = MSComm1.Input '读接收的二进制数据
Arr = Buffer '赋值于字节数组以便处理 //注意:说这里不能赋值给数组,为什么啊?
Select Case Arr(0)
Case &H77 '当为警情信号时
b1 = Arr(3) - 6 * (Arr(3) \ 16)
Select Case Arr(2) '选择房间信息
Case &H11
Shape1.FillColor = RGB(255, 0, 0)
Text1.ForeColor = RGB(255, 0, 0)
Text1.Text = "警告:检测室1出现危险!温度为: " + b1 + "度"
Case &H22
Shape2.FillColor = RGB(255, 0, 0)
Text1.ForeColor = RGB(255, 0, 0)
Text1.Text = "警告:检测室2出现危险!温度为: " + b1 + "度"
Case &H33
Shape3.FillColor = RGB(255, 0, 0)
Text1.ForeColor = RGB(255, 0, 0)
Text1.Text = "警告:检测室3出现危险!温度为: " + b1 + "度"
End Select
End Select
Else
Text1.Text = "接收数据格式错误,请重新发送!"
MSComm1.RThreshold = 1
End If
End If
End Select
End Sub
大家帮忙啊,在此先谢了!!!!!
是否bin方式????
???????????
现在我是一头雾水啊!
buf = MSComm1.Input
Sleep(100)
.......
End If