vb.NET中用mscomm控件编写串口通信软件数据无法接收.net中不用mscomm 而改用 searport
AxMSComm1.Input 只能一次,会把输入缓冲区的内容全都读出来并清空
如果没有产生Oncomm事件,你可以把输入经部区的大小改一下改成1就行了
vb程序编写模拟串口这是典型的VB串口通信
你可以采用Mscomm控件实现串口通信时,首先添加一Mscomm控件到窗体中,通过菜单项“工程(P)→部件(O)”进入选择窗口,在控件页中选取“Microsoft Comm Control 6.0” ,此时工具窗口中出现Mscomm图标,即可被使用 。
需要注意的几点是:
1.用mscomm控件进行通信,其波特率最高只能设为115200
2.利用MSCOMM控件可以发送和接收任何文件的类型 。
3.接收文本文件和二进制文件有一定的区别,接收二进制文件时用scomm1.Input读入的变量需用Variant类型的变量,而文本文件可以用字符型变量,另外InputMode属性应设置相应的文本方式或二进制方式
4.接收文本无大小限制 。
5.当连续存数据时记录号是自动加的 , 但当文件关闭后再次打开时,默认的记录号为1,存储文件不完整的原因可能在此 。接收到文件头识别字符时打开文件,接收中途不要关闭文件,直到接收到文件结束符(Mscomm1.EOFEnable事件发生)才能关闭文件 。
我手头有一个完整的VB串口通信源码,对你的问题很有帮助
若你需要,发邮件至donook@qq.com
我会尽快发给你
如果满意,加点分哦,资料都来之不易的呵呵
vb串口通信程序实例vb.net编写串口程序我也是自己摸索开发出来vb.net编写串口程序的每一款VBtoCOM通讯vb.net编写串口程序 , 有具体的思路如下:
给你推荐一个工具“com串口测试工具 ComTone V1.0 中文绿色版”
1、打开你的噪音计的测试软件 , 调整好串口号、通讯频率等等 , 我用温度计举例说明 。
开始查询后有返回数值,这个Receive:就是返回的数值000304012200004b05,
打开串口监视精灵,监视软件的com口事件:
这里面的Write是测试软件发出的查询指令,read是设备返回的数据指令
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 strdataAs 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
Private Sub Command2_Click()
Timer1.Enabled = False
End Sub
Private Sub Form_Unload(Cancel 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
For i = 0 To UBound(PA())
'Print "PA("i")"; PA(i)
If Len(Hex(PA(i))) = 1 Then
strdata = https://www.04ip.com/post/strdata"0"Hex(PA(i))
Else
strdata = https://www.04ip.com/post/strdataHex(PA(i))
End If
Next
'回传的数据串:000304012600000AC4,这9字节根据通讯协议我们进行拆分
'00为协议内回传机号,03为读命令,04为返回的数据长度 0126 为我要的温度数据为十六进制表达,下面我进行数据处理
wd = CLng("H"Left(Right(strdata, 12), 4)) / 10"℃"'根据通讯协议换算成温度
Text1 = Text1vbCrLfstrdata""wd
strdatahttps://www.04ip.com/post/= ""
MSComm1.PortOpen = False'关闭串口
End Select
End Sub
Private Sub Timer1_Timer()
Call Command1_Click
End Sub
这是我的测试结果 。
下面是通讯协议
这个是我的软件用检测精灵检测的结果
请教用VB.NET向串口发送16进制的数的方法应该是你的转换格式不正确,下面代码就是将文本框中以一个空格隔开的十六进制转为字节的代码,文本框中数字格式为:01 02 03
Dim TestArray() As String = Split(TextBox1.Text)
Dim hexBytes() As Byte
ReDim hexBytes(TestArray.Length - 1)
Dim i As Integer
For i = 0 To TestArray.Length - 1
hexBytes(i) = Val("h"TestArray(i))
Next
SerialPort.Write(hexBytes, 0, hexBytes.Length)
如果有问题可以再联系 。
【vb.net编写串口程序 vbnet串口通信如何编写】关于vb.net编写串口程序和vbnet串口通信如何编写的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。
推荐阅读
- 苹果cms站群二开,苹果cms站群插件使用教程
- 微信视频号内容消失,微信视频号内容不见了
- 新媒体运营如何锻炼文案编辑技巧,新媒体运营如何提升文案能力
- 如何用c语言求函数值 c语言利用函数求和
- 博主如何营销,如何营销自己
- 电商袜子如何打包,袜子打包累不累
- php网站制作教程视频,php网页制作入门教程
- python一等对象函数 python 对象相等
- win7安装sqlserver2005,win7安装sqlserver2012