我有个温度巡回监测仪需要与电脑进行通讯,要求电脑及仪表发射的编码均含有BCD压缩码,请哪位高手帮忙用VB6.0编一个采集原程序,谢谢! 最佳答案
编码本身都是为了在计算机中运算使用。实质上,在计算机中只有以高低电平来表示的二进制。至于,BCD码是一种8421编码,它将一个字节分两部分,高4位代表一个数字,低4位代表一个数字。也就是说,计算机怎么识别一个字节到底是二进制码还是BCD码,这是由程序代码来运算的。
我的理解可由16进制数简化理解: 每2个BCD码构成一字节,接收到每字节二进制数据需处理成16进制的字符形式。仅是由00-99的范围。而非00-FF范围。 同样发送的10进制数以每2个BCD码组成1个16进制数形成二进制的一个字节发送来达到目的。 基于如上设想所做的收发代码如下: Option Explicit Private Sub cmdSend_Click() Call Timer1_Timer End Sub Private Sub Form_Load() Me.MSComm1.CommPort = 1 Me.MSComm1.PortOpen = True Me.MSComm1.RThreshold = 1 txtSend = "1234" txtReceive = "" Timer1.Interval = 0 End Sub Private Sub MSComm1_OnComm() On Error Resume Next Dim BytesReceived() As Byte Dim buffer As String Dim HData As String Dim i As Integer Select Case MSComm1.CommEvent Case comEvReceive '接收十六进制数据。并以十六进制显示 MSComm1.InputLen = 0 MSComm1.InputMode = comInputModeBinary '设置当前以二进制数接收数据 buffer = MSComm1.Input '接收数据至字符串中 BytesReceived() = buffer '将数据转入BYTE中 For i = 0 To UBound(BytesReceived) '显示结果以十六进制显示 If Len(Hex(BytesReceived(i))) = 1 Then HData = HData & "0" & Hex(BytesReceived(i)) Else HData = HData & Hex(BytesReceived(i)) End If txtReceive.Text = HData '最后将结果后入txtreceive中 MSComm1.OutBufferCount = 0 '清除发送缓冲区 MSComm1.InBufferCount = 0 '清除接收缓冲区 Next End Select End Sub Private Sub Timer1_Timer() On Error Resume Next Dim bytData(1) As Byte Dim i As Integer For i = 1 To 4 Step 2 bytData((i - 1) / 2) = Val("&H" & Mid(txtSend, i, 2)) Next MSComm1.Settings = "9600,n,8,1" Call SendData(bytData) '发送命令 End Sub Public Function SendData(ByRef bytData() As Byte) As Long On Error Resume Next MSComm1.InBufferCount = 0 '清空接收缓冲区 MSComm1.Output = bytData '发送数据 Do DoEvents Loop Until MSComm1.OutBufferCount = 0 '等待,直到数据发送完毕 MSComm1.OutBufferCount = 0 '清空发送缓冲区 End Function 附件:Bcd.rar |
|