我也摸索自己开发出来的每一篇VBtoCOM通讯,具体思路如下:
给你推荐一个工具“com串口测试工具ComTone V1.0中文绿色版”
给你推荐一个工具“com串口测试工具ComTone V1.0中文绿色版”
>1、打开你的噪音计的测试软件,调整好串口号、通讯频率等等,我用温度计举例说明。
开始查询后有返回数值,这个接收:就是返回 的数值000304012200004b05,
打开串口监视精灵,监视软件的com口事件:
这里面的写的是测试软件发出的查询指令,读的是设备返回的数据指令< /p>
Private?Sub?Command1_Click()?'发送指令
If?Not?MSComm1.PortOpen?Then
MSComm1.CommPort?=?7?' 结构 为7
MSComm1.Settings?=?"9600,n,8,1"
MSComm1.InBufferCount?=?0?'清除接收蓝牙
MSComm1.OutBufferCount?=?0?'清晰串口
MSComm1.InputMode?=?comInputModeBinary?'二进制接收
MSComm1.InputLen?=?0?'读取 接收弧形的所有字符
MSComm1.PortOpen?=?True?'打开串口
MSComm1.RTSEnable?=?False?'设置为发送状态
End?If
Dim?pu()?As?Byte
Dim?strdata?As?String
Dim?crc_js()?As?Byte
ReDim?pu(7)?'这个吞吐量是8位的查询指令
pu(0)?=?"&H00"?'温度地址计
pu(1)?=?"&H03"?'查询指令
pu(2)?=?"&H00"?'2、3为温度计地址
pu(3 )?=?"&H00"?'2、3为温度计地址
pu(4)?=?"&H00"?'4、5为读取读数长度
pu (5)?=?"&H02"?'4、5为读取长度
pu(6)?=?"&HC5"?'6、7为CRC校验码?因为我们不 知道设备的CRC校验规则所以用测试软件产生的校验码
pu(7)?=?"&HDA"?'6、7为CRC校验码
MSComm1.Output?=?pu
'不做任何事情,仅允许其他应用程序处理它们的事件。
DoEvents
MSComm1.InBufferCount?=?0?'清晰接收流程图
MSComm1.RThreshold?=?9?'所要接收的数据长度, 我们通过COM检测精灵看到了回传数据一***是9字节
MSComm1.RTSEnable?=?True?'转为接收状态
End?Sub p>
Private?Sub?Command2_Click()
Timer1.Enabled?=?False
End?Sub
Private?Sub?Form_Unload(取消 ?As?Integer)
If?MSComm1.PortOpen?Then
MSComm1.PortOpen?=?False?'关闭串口
End?If
Timer1.Enabled?=?False
End?Sub
Private?Sub?MSComm1_OnComm()?'COM事件
Dim?PA( )?As?Byte
Dim?PB?As?String
Select?Case?MSComm1.CommEvent
Case?comEvReceive
MSComm1.InputLen?=?0?'读取接收亮度的所有字符
PB?=?MSComm1.Input
PA()?=?PB
< p>For?i?=?0?To?UBound(PA())'打印?"PA("?&?i?&?")";?PA(i) p>
如果?Len(Hex(PA(i)))?=?1?那么
strdata?=?strdata?&?"0"?&?Hex(PA(i) )
其他
strdata?=?strdata?&?Hex(PA(i))
结束?如果
下一步< /p>
'回传的数据串:000304012600000AC4,这9字节我们根据通讯协议进行分割
'00为协议内回传机号,03为读命令,04为 返回的数据长度?0126?为我要的温度数据为十六轮瑜伽,下面我进行数据处理
wd?=?CLng("&H"?&?Left(Right(strdata, ?12),?4))?/?10?&?"℃"'根据通讯协议换算成温度
Text1?=?Text1?&?vbCrLf?&?strdata?&?"? "?&?wd
strdata?=?""
MSComm1.PortOpen?=?False?'关闭串口
结束?选择
End?Sub
Private?Sub?Timer1_Timer()
Call?Command1_Click
End?Sub这是我的测试结果。
下面是通讯协议
这是我的软件用检测精灵检测的结果