vb6串口通信示例

vb6串口通信可以很简单,工具箱 部件里 添加 microsoft comm control 6.0,然后把这个不占位控件放到界面,他的事件就是可以处理接收数据,另外按钮触发发送,这样就能完整收发了
注意 MSComm1.RThreshold = 1才能有数据就触发接收事件

Private Sub cmdSend_Click()
    '发送文字数据
    MSComm1.OutBufferCount = 0 '...清空输出寄存器
    'MSComm1.Output = Text1.Text '...发送文字数据
    Dim v(12) As Byte
    v(0) = &H0
    v(1) = &H0
    v(2) = &HFF
    v(3) = &H0
    v(4) = &H4
    v(5) = &H0
    v(6) = &H4
    v(7) = &HFF
    v(8) = &H0
    v(9) = &H4
    v(10) = &HFF
    v(11) = &H2
    v(12) = &H0
    MSComm1.Output = v '发送2进制数据  00 00 FF 00 04 00 04 FF 00 03 FF 01 00
End Sub
Private Sub cmdStart_Click()
    '注意vb里字符串下标从1开始,com口最多16个,所以长度参数用2
    MSComm1.CommPort = Mid(Combo1.Text, 4, 2)
    'MSComm1.CommPort =1
    'MSComm1.Settings = "9600,n,8,1"
    MSComm1.Settings = "115200,n,8,1"
    MSComm1.RThreshold = 1  '接收缓冲区有数据及时触发事件
    'MSComm1.InputMode = comInputModeText
    MSComm1.InputMode = comInputModeBinary
    MSComm1.InputLen = 0
    MSComm1.InBufferSize = 1024
    MSComm1.OutBufferSize = 512
    MSComm1.SThreshold = 0
    MSComm1.RThreshold = 1
    MSComm1.InBufferCount = 0
    MSComm1.OutBufferCount = 0
    If MSComm1.PortOpen = False Then MSComm1.PortOpen = True
    cmdSend.Enabled = True
    cmdStart.Enabled = False
End Sub

字符串传输太简单,注释掉后传输2进制数据
最后能够发送2进制指令,得到jc5000设备返回主控程序版本号
注意,设备返回数据可能分包,所以不在mscom控件的事件里立即读数据,而是用定时器过一会儿再读,这样每次就能读到一个完整包

Dim Rv_data() As Byte
Private Sub MSComm1_OnComm()
    '00 00 FF 00 FF 00 00 00 FF 00 22 00 22 FF 00 03 FF 00 20 22 09 13 01 20 21 05 30 01 20 22 09 13 02 20 21 08 26 01 00 32 30 32 31 31 31 31 37 36 00
    'If MSComm1.InBufferCount Then
    'Text1.Text = MSComm1.Input '...接受显示数据
    'MSComm1.InBufferCount = 0 '...清空输入寄存器
    'End If
    ' Sleep (200)  '相隔200ms就可以完整接收到分包数据
    Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
    Timer1.Enabled = False
    Dim UB1, UB2, TM As Integer, i As Integer
    Dim strData As String
    Select Case MSComm1.CommEvent
    Case comEvReceive
        If MSComm1.InBufferCount > 0 Then
            Rv_data = MSComm1.Input
            MSComm1.InBufferCount = 0
        End If
        For i = 0 To UBound(Rv_data)
            If Len(Hex(Rv_data(i))) = 1 Then
                strData = strData & "0" & Hex(Rv_data(i)) & " " '如果只有一个字符,则前补0,如F显示0F,最后补空格
            Else                                                    '方便显示观察如: 00 0F FE
                strData = strData & Hex(Rv_data(i)) & " "
            End If
        Next
        Text1.Text = strData
    End Select
End Sub

vb6的程序想启用xp以上操作系统风格,最好在代码里加几行控件初始化,
    这样exe同目录放一个manifest文件就能生效

Private Declare Sub InitCommonControls Lib "comctl32" ()
    Private Sub Form_Initialize()
     InitCommonControls  '[注入XP样式功能;编译后在xp样式的操作系统上可看到效果]
    End Sub

本机运行没问题,发布到另一台机器试试,发现有报错,后来想起来是别的机器可能没有串口,所以 用串口前应该增加检查

Private Sub checkport(i As Integer)
    On Error GoTo errline '如果出错,进入错误处理程序
    MSComm1.CommPort = i '依次打开每个串口
    MSComm1.PortOpen = True '打开串口
    If MSComm1.PortOpen = True Then '如果打开成功,说明该串口可用
        MSComm1.PortOpen = False '检查完毕,关闭串口
        Combo1.AddItem "COM" + CStr(i) '将可用串口增加到组合框
    End If
errline:
    If Err.Number = 8005 Then '若有的串口已被其他程序打开,也应该将其加入组合框内
        Combo1.AddItem "COM" + CStr(i) '将可用串口增加到组合框内
    End If
End Sub
Private Sub Form_Load()
    Combo1.Clear
    Dim i As Integer '定义可访问的串口总数
    i = 5
    checkport (i)
    If Combo1.ListCount > 0 Then
        Combo1.ListIndex = 0 '将第一个可用串口设为默认值
        Text1.Text = Mid(Combo1.Text, 4, 2)
         Else
    Text1.Text = "没有串口 com5 ,请查看硬件连接是否存在串口"
    End If
End Sub
Private Sub Command2_Click()
    Combo1.Clear
    Dim i As Integer '定义可访问的串口总数
    Dim Counter As Integer '用于记录经检查可以使用的串口号
    Counter = 0 '计数器清零
    For i = 1 To 16 '循环检查可能存在的16个串口
        checkport (i)
    Next i
    If Combo1.ListCount > 0 Then
    Combo1.ListIndex = 0 '将第一个可用串口设为默认值
    Else
    Text1.Text = "没有串口"
     End If
End Sub

你可能感兴趣的:(vb,开发语言,串口通信)