看流星社区

 找回密码
 注册账号
查看: 3242|回复: 2

[VB] vb串口通信中怎么实现16进制的接收?

[复制链接]

该用户从未签到

发表于 2014-7-30 09:13:27 | 显示全部楼层 |阅读模式
Private Sub Form_Load()
  MSComm1.CommPort = 1
  MSComm1.Settings = "9600,n,8,1"
  MSComm1.InputMode = 0
  MSComm1.RThreshold = 1
  MSComm1.PortOpen = True
End Sub

Private Sub cmdSend_Click()
  MSComm1.Output = Textsend.Text
  End Sub
Private Sub MSComm1_OnComm()
Dim intInputLen As Integer
Select Case Me.MSComm1.CommEvent
Case comEvReceive
TextReceive.Text = TextReceive.Text + MSComm1.Input
End Select
End Sub
Private Sub Cmdauto_Click()
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
MSComm1.Output = Textsend.Text
TextReceive.Text = TextReceive.Text + MSComm1.Input
End Sub
Private Sub Cmdstop_Click()
Timer1.Enabled = False
End Sub
Private Sub Cmdquit_Click()
  MSComm1.PortOpen = False
  End
End Sub
Private Sub CmdReceivecl_Click()
TextReceive.Text = ""
End Sub
Private Sub Cmdsendcl_Click()
Textsend.Text = ""
End Sub

上面是实现文本类型的通信,怎样加入十六进制接收的功能?

该用户从未签到

发表于 2014-7-30 09:13:40 | 显示全部楼层
实现16进制接收实质就是按2进制接收
设置MSComm控件的属性InputMode = comInputModeBinary '二进制接收
接收后由HEX函数转为16进制字符串形式显示
Option Explicit
    Dim strData As String
    Dim bytInput() As Byte

Private Sub MsComm1_OnComm()
    Dim intInputLen As Integer
    Select Case Me.MSComm2.CommEvent
        Case comEvReceive
            '此处添加处理接收的代码
            MSComm1.InputMode = comInputModeBinary '二进制接收
            intInputLen = MSComm1.InBufferCount
            ReDim bytInput(intInputLen)
            bytInput = MSComm1.Input
            jieshou
    End Select
End Sub

Public Function jieshou() '接收数据处理为16进制
    Dim i As Integer
    For i = 0 To UBound(bytInput)
        If Len(Hex(bytInput(i))) = 1 Then
            strData = strData & "0" & Hex(bytInput(i))
        Else
            strData = strData & Hex(bytInput(i))
        End If
    Next
    Text1 = strData
End Function
Private Sub Form_Load()
    MSComm1.CommPort = 1
    MSComm1.InBufferSize = 1024
    MSComm1.OutBufferSize = 512
    MSComm1.Settings = "9600,n,8,1"
    MSComm1.PortOpen = True
    Text1 = ""
End Sub

该用户从未签到

发表于 2014-7-30 09:14:02 | 显示全部楼层
参考一下吧:

发送代码 :
Dim Send_Chr(5) As Byte
Dim Send_Data As String

Send_Chr(0) = &H68
Send_Chr(1) = &H3
Send_Chr(2) = &H10 '命令
Send_Chr(3) = &H1  '网关
Check_val = 0
For i = 0 To 3
Check_val = Check_val + Send_Chr(i)
Next i
Send_Chr(4) = Check_val '校验

For i = 0 To 5
Text1.Text = Text1.Text & Send_Chr(i) & "  "  此处显示的是6个10进制的数据
Next i
.Output = Send_Chr

接受
Buffer = MSComm1.Input ' 接收一个二进制数据
Arr(0) = AscB(Buffer)     '存入到二进制数组数组中
Receive_Count_Byte = Receive_Count_Byte + 1
Real_Receive = Arr(0) '
Text1.Text = Text1.Text & Real_Receive & "  "   '接收的数据显示到文本框中
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-3-28 22:38

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表