一、先准备(必须做)
窗体上放一个 MSComm 控件(默认名:MSComm1)
放一个文本框:Text1(显示接收数据)
放一个按钮:Command1(打开串口)
二、核心:串口初始化(打开端口)
vb
Private Sub Command1_Click() With MSComm1 .CommPort = 1 ' COM口,根据你的改 .Settings = "9600,N,8,1" ' 波特率,校验,数据位,停止位 .InputMode = 1 ' 1=二进制方式(必须!) .InputLen = 0 ' 读取接收缓冲区全部数据 .RThreshold = 1 ' 收到1个字节就触发事件 .SThreshold = 0 .PortOpen = True ' 打开串口 End With Text1 = ""End Sub
三、最重要:接收事件(自动读取下位机数据)
这是真正读取数据的地方,下位机一发送数据就会自动进来。
vb
Private Sub MSComm1_onComm() Dim buf As Variant Dim i As Integer Dim strRec As String ' 接收事件 If MSComm1.CommEvent = comEvReceive Then ' 读取缓冲区所有数据 buf = MSComm1.Input ' 转成16进制字符串(仪表/PLC 都用这个) strRec = "" For i = 0 To UBound(buf) strRec = strRec & Hex(buf(i)) & " " Next i ' 显示到文本框 Text1 = Text1 & strRec & vbCrLf ' ↓↓↓ 在这里写你的【数据解析处理】↓↓↓ Call 解析数据(strRec) End IfEnd Sub
四、数据解析(转压力 / 温度 / 数值 示例)
假设下位机发送格式(MODBUS 最常见):01 03 02 07 E0 5A A2其中 07 E0 = 数据,转十进制就是 2016
vb
Private Sub 解析数据(s As String)
Dim arr() As String
Dim dat As Long
' 按空格拆分
arr = Split(Trim(s), " ")
' 判断数据长度(MODBUS 6~8字节正常)
If UBound(arr) >= 4 Then
' 第4、5个字节是数据(示例,按你的仪表格式改)
dat = Val("&H" & arr(3) & arr(4))
' 显示解析后的数值
MsgBox "解析数值 = " & dat
' 如果是压力:dat * 系数
' 压力 = dat * 0.01
End IfEnd Sub五、你最常遇到的 4 个问题 + 解决
1. 收不到数据
串口号不对
波特率 / 校验位不对
接线 TX/RX 反了
下位机未发送数据
2. 收到乱码
缺少
InputMode = 1(必须二进制)用了文本模式接收 16 进制数据
3. 数据断断续续 / 粘包
在
OnComm里拼接数据用帧头帧尾判断一包数据是否完整
4. 要转成压力 / 温度 / 流量
公式直接写:
vb
实际值 = (采集值 - 最小值) * 量程 / 数字量程


