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

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VB.Net是一种面向对象的编程语言,可以用于开发各种应用程序,包括串口通讯。在VB.Net中,可以使用SerialPort类来实现串口通讯。 首先,我们需要引入System.IO.Ports命名空间,以便能够使用SerialPort类。然后,我们需要声明一个SerialPort对象,并设置相应的属性,如串口号、波特率等。接下来,我们可以使用Open方法打开串口。 当串口打开后,我们可以使用Write方法发送数据到串口,使用Read方法从串口接收数据。通过事件处理程序,我们可以实时监测串口的数据接收情况,并对接收到的数据进行处理。 例如,我们可以编写一个按钮的点击事件处理程序,当按钮被点击时,通过串口发送一条指令给外部设备,并等待接收设备的返回数据。代码示例如下: Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click '设置串口属性 SerialPort1.PortName = "COM1" '设置串口号 SerialPort1.BaudRate = 9600 '设置波特率 '打开串口 SerialPort1.Open() '发送指令 SerialPort1.Write("指令内容") '等待接收数据 Dim receivedData As String = SerialPort1.ReadLine() '处理接收到的数据 MessageBox.Show(receivedData) '关闭串口 SerialPort1.Close() End Sub 在处理串口通讯时,我们还需要考虑异常情况的处理,例如串口打开失败、接收数据超时等。可以使用Try-Catch语句来捕捉并处理这些异常。 总之,通过VB.Net,我们可以轻松实现串口通讯,发送和接收数据。同时,我们还可以根据具体需求对串口通讯进行更加复杂的处理和控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值