返回主站|会员中心|保存桌面

西驰电气专营    

变频器、软启动器

新闻分类
  • 暂无分类
站内搜索
 
首页 > 新闻中心 > VB6.0 MSComm读取下位机端口数据怎么处理!
新闻中心
VB6.0 MSComm读取下位机端口数据怎么处理!
发布时间:2026-03-04        浏览次数:12        返回列表

一、先准备(必须做)

  1. 窗体上放一个 MSComm 控件(默认名:MSComm1)

  2. 放一个文本框:Text1(显示接收数据)

  3. 放一个按钮: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

实际值 = (采集值 - 最小值) * 量程 / 数字量程
收缩
  • QQ咨询

  • 电话咨询

  • 13073017555
  • 添加微信客服