Option Explicit                                                                     ' 强制显式声明Dim receiveData As String, A_DYshj As String, B_DYshj As String, C_DYshj As String
Dim v As Variant
Dim rd() As Byte
Dim Counter As Integer
Dim DataLong As Integer
Dim i As Integer, j As Integer, k As Integer, w As Integer  '临时变量(循环变量)
Dim sjHex As String, sjbiaoshi As String
'====================================================================================
'                 通信触发事件
'====================================================================================
Private Sub MSComm1_OnComm()If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
MSComm1.CommPort = 1                                  '端口
MSComm1.Settings = "9600,N,8,1"                       '设置
MSComm1.InBufferSize = 1024                                           ' 设置接收缓冲区为1024字节
MSComm1.OutBufferSize = 1024                                          ' 设置发送缓冲区为1024字节
MSComm1.InputMode = comInputModeBinary
MSComm1.SThreshold = 1                                                ' 发送缓冲区空触发发送事件
MSComm1.RThreshold = 1                                            ' 每X个字符到接收缓冲区引起触发接收事件
MSComm1.OutBufferCount = 0                                                       ' 清空发送缓冲区
MSComm1.InBufferCount = 0                                                        ' 滑空接收缓冲
MSComm1.PortOpen = TruesjHex = ""
End Sub
Private Sub hexReceive()    Select Case MSComm1.CommEvent             //MSComm1.CommEvent的值该是多少??
                                              //我怎么是148,有时候是1001,有时候是1004??
    Case comEvReceive         v = MSComm1.Input
         
            rd = v
            
            For k = 0 To UBound(rd) '转换为16进制字符串待处理
            
                sjHex = sjHex & Right("0" & Hex(rd(k)), 2) '确保每字节为2字符16进制
                
            Next
            
            Text6 = sjHex '显示接收的全部数据
Private Sub Timer1_Timer()
    
    Timer1.Interval = 500
    
    hexReceiveEnd Sub

解决方案 »

  1.   

    Option Explicit
        Dim receiveData As String, A_DYshj As String, B_DYshj As String, C_DYshj As String
        Dim v As Variant
        Dim rd() As Byte
        Dim Counter As Integer
        Dim DataLong As Integer
        Dim i As Integer, j As Integer, k As Integer, w As Integer  '临时变量(循环变量)
        Dim sjHex As String, sjbiaoshi As StringPrivate Sub Form_Load()
        '以下是初始化代码,不能放MSComm1_OnComm
        If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
        MSComm1.CommPort = 1                                  '端口
        MSComm1.Settings = "9600,N,8,1"                      '设置
        MSComm1.InBufferSize = 1024                                          ' 设置接收缓冲区为1024字节
        MSComm1.OutBufferSize = 1024                                          ' 设置发送缓冲区为1024字节
        MSComm1.InputMode = comInputModeBinary
        MSComm1.SThreshold = 1                                                ' 发送缓冲区空触发发送事件
        MSComm1.RThreshold = 1                                            ' 每X个字符到接收缓冲区引起触发接收事件
        MSComm1.OutBufferCount = 0                                                      ' 清空发送缓冲区
        MSComm1.InBufferCount = 0                                                        ' 滑空接收缓冲
        MSComm1.PortOpen = True
        sjHex = ""
        Timer1.Interval = 500
    End Sub'通信触发事件
    Private Sub MSComm1_OnComm()
        Select Case MSComm1.CommEvent '//MSComm1.CommEvent的值该是2
            Case comEvReceive
                v = MSComm1.Input
                rd = v
                For k = 0 To UBound(rd) '转换为16进制字符串待处理
                    sjHex = sjHex & Right("0" & Hex(rd(k)), 2) '确保每字节为2字符16进制
                Next
                Text6 = sjHex '显示接收的全部数据
                hexReceive
        End Select
    End Sub
    Private Sub hexReceive() 'SUB过程执行何?End SubPrivate Sub Timer1_Timer() 'Timer1_Timer事件执行何?End Sub