为什么MSComm.Output=CHr(32)串口接收不到。我急在线等哦
虽小女子分不多我会给的
小女子我先谢谢各位拉。
一鞠躬
再鞠躬

解决方案 »

  1.   

    首先你需发送的内容为不可显示的ASCII码,建议以二进制数据发送,数据应为BYTE数组类型。将其先处理为16进制字符形式,由代码处理为BYTE数组类型,以下提供经VB6调试的代码,其中按钮cmdManualSend为手动发送按钮:
    Private strSendText As String    '发送文本数据
    Private bytSendByte() As Byte    '发送二进制数据'字符表示的十六进制数转化为相应的整数,错误则返回  -1
    Function ConvertHexChr(str As String) As Integer
        Dim test As Integer
        test = Asc(str)
        If test >= Asc("0") And test <= Asc("9") Then
            test = test - Asc("0")
        ElseIf test >= Asc("a") And test <= Asc("f") Then
            test = test - Asc("a") + 10
        ElseIf test >= Asc("A") And test <= Asc("F") Then
            test = test - Asc("A") + 10
        Else
            test = -1 '出错信息
        End If
        ConvertHexChr = test
    End Function'字符串表示的十六进制数据转化为相应的字节串,返回转化后的字节数
    Function strHexToByteArray(strText As String, bytByte() As Byte) As Integer
        Dim HexData As Integer          '十六进制(二进制)数据字节对应值
        Dim hstr As String * 1          '高位字符
        Dim lstr As String * 1          '低位字符
        Dim HighHexData As Integer      '高位数值
        Dim LowHexData As Integer       '低位数值
        Dim HexDataLen As Integer       '字节数
        Dim StringLen As Integer        '字符串长度
        Dim Account As Integer          '计数
        strTestn = ""                   '设初值
        HexDataLen = 0
        strHexToByteArray = 0
        StringLen = Len(strText)
        Account = StringLen \ 2
        ReDim bytByte(Account)
        For n = 1 To StringLen
            Do                                              '清除空格
                hstr = Mid(strText, n, 1)
                n = n + 1
                If (n - 1) > StringLen Then
                    HexDataLen = HexDataLen - 1
                    Exit For
                End If
            Loop While hstr = " "
            Do
                lstr = Mid(strText, n, 1)
                n = n + 1
                If (n - 1) > StringLen Then
                    HexDataLen = HexDataLen - 1
                    Exit For
                End If
            Loop While lstr = " "
            n = n - 1
            If n > StringLen Then
                HexDataLen = HexDataLen - 1
                Exit For
            End If
            HighHexData = ConvertHexChr(hstr)
            LowHexData = ConvertHexChr(lstr)
            
            If HighHexData = -1 Or LowHexData = -1 Then     '遇到非法字符中断转化
                HexDataLen = HexDataLen - 1
                Exit For
            Else
                HexData = HighHexData * 16 + LowHexData
                bytByte(HexDataLen) = HexData
                HexDataLen = HexDataLen + 1
            End If
        Next n
        If HexDataLen > 0 Then                              '修正最后一次循环改变的数值
            HexDataLen = HexDataLen - 1
            ReDim Preserve bytByte(HexDataLen)
        Else
            ReDim Preserve bytByte(0)
        End If
        If StringLen = 0 Then                               '如果是空串,则不会进入循环体
            strHexToByteArray = 0
        Else
            strHexToByteArray = HexDataLen + 1
        End If
    End FunctionPrivate Sub cmdManualSend_Click()
        If Not frmMain.ctrMSComm.PortOpen Then
            frmMain.ctrMSComm.CommPort = intPort
            frmMain.ctrMSComm.Settings = strSet
            frmMain.ctrMSComm.PortOpen = True
        End If
            Call ctrTimer_Timer
        If Not blnAutoSendFlag Then
        frmMain.ctrMSComm.PortOpen = False
        End If
    End SubPrivate Sub ctrTimer_Timer()
        Dim longth As Integer
        strSendText = frmMain.txtSend.Text
            longth = strHexToByteArray(strSendText, bytSendByte())
            If longth > 0 Then
                frmMain.ctrMSComm.Output = bytSendByte
            End If
    End Sub'初始化
    Private Sub Form_Load()
        '设置默认发送接收关闭状态
        blnAutoSendFlag = False
        blnReceiveFlag = False
        '接收初始化
        intReceiveLen = 0
        '默认发送方式为16进制
        intOutMode = 1
         '初始化串行口
        intPort = 1
        intTime = 1000
        strSet = "9600,n,8,1"
        frmMain.ctrMSComm.InBufferSize = 1024
        frmMain.ctrMSComm.OutBufferSize = 512
        If Not frmMain.ctrMSComm.PortOpen Then
            frmMain.ctrMSComm.CommPort = intPort
            frmMain.ctrMSComm.Settings = strSet
            frmMain.ctrMSComm.PortOpen = True
        End If
        frmMain.ctrMSComm.PortOpen = False
    End Sub如需定时发送,则增加TimerAuto计时器,调整TimerAuto的属性Interval值来控制周期:
    Private Sub TimerAuto_Timer()
        If Not frmMain.ctrMSComm.PortOpen Then
            frmMain.ctrMSComm.CommPort = intPort
            frmMain.ctrMSComm.Settings = strSet
            frmMain.ctrMSComm.PortOpen = True
        End If
            Call ctrTimer_Timer
        If Not blnAutoSendFlag Then
        frmMain.ctrMSComm.PortOpen = False
        End If
    End Sub
      

  2.   

    按你发CHr(32),应在frmMain.txtSend.Text内写16进制数:
    20
    程序代码回处理成二进制形式发送。
      

  3.   

    dim a as byte
    a = 32
    MSComm.Output = a
      

  4.   

    支持ZOU_SEAFARER这么简单,写那么多...晕
      

  5.   

    串口可以收到,但是不能显示,因为32不是有效的字符的ASCII码
    dim   a   as   byte 
    a   =   32 
    MSComm.Output   =   a
    这样写,收到的是字符“32”