->>更改书写错误:但是,
情况6:   更改下位机的通信机制,收到字符串“EB900050000090EB”,即回应全部的数据。
   这时,上位机发送字符串=“EB900050000090EB”,发送后即收不到正确的回应。

解决方案 »

  1.   

    Private Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
           Case 2
           Text1.Text = ""
           Dim i
           For i = 1 To 10000
               DoEvents
           Next i
           Text1.Text = MSComm1.Input
    end select
    text1.text就是串口中所读了取的内容
      

  2.   

    我的通讯解决方案: 我是一个与下位单片机通讯的程序.每次通讯只发送一个字节,改变奇偶效验位.下位机返回多个数据字节.
    Private Sub TimLoop_Timer()
    '*******************************************
    '读终端即时数据定时器
    '定时向各终端轮询记录,保存最近240个数据
    'JSarr(0,X) 为终端和数据'//***************************************
     Dim OutPutHex(0) As Byte '命令二进制数组
     Dim Inbyte() As Byte '定义一个二进制指针放接收到的数据
     Dim StrData As String '返加数据转换的字符串
     Dim HexL As String '数据低位
     Dim HexH As String '数据高位
     Dim Indata As String
     Dim I As Integer
     Dim J As Integer
     Dim P As Single
     '//*************************************
     '移动时标
     
     If intTime = 0 Then
        lblTime.Caption = Format(Now, "hh:mm:ss")
        intTime = 240
        lblTime.Left = 240
     End If
     intTime = intTime - 1
     lblTime.Left = intTime
     '**************************************
     
     '**************************************
     '循环发送数据,读取每台终端返回数据
     For J = 1 To IntTs
        COM.Settings = "4800,m,8,1" '发送命令,标记位为1
        OutPutHex(0) = J
              
        COM.Output = OutPutHex()
        sleep (0.1)
        Inbyte = COM.Input
         
        COM.Settings = "4800,s,8,1" '发送命令,标记位为1
        OutPutHex(0) = 1
              
        COM.Output = OutPutHex()
        sleep (0.1)
        
        Inbyte = COM.Input '数据转移到指针
         StrData = TranslateData(Inbyte)
           HexH = Mid(StrData, 4, 2)
           HexL = Mid(StrData, 1, 2)
         
           Indata = "&H" & HexH & HexL
    '刷新数组
            For I = 1 To 239
                JSarr(J, I) = JSarr(J, I + 1)
            Next I
            
           'JSarr(J, 240) = Val(Indata) / 500
           JSarr(J, 240) = 11.3 + Rnd()
             
             If Val(Indata) / 500 <= Val(FgrdData.TextMatrix(J, 3)) Then
                FgrdData.TextMatrix(J, 3) = Val(Indata) / 500
             End If
    Next J
    '************************************************
    End SubPublic Function sleep(X As Single)
    Dim dummy
    Dim starttime As Singlestarttime = TimerDo Until (Timer - starttime) > X
         If Timer - starttime < -1 Then
           Exit Do
         End If
       dummy = DoEvents()
    LoopEnd Function不知道你的具体源码,我的通讯方法完成了多个项目,都还可以.MSCOMM控件一直还让人放心的.你的问题有可能是程序,也有可能是下位机.
      

  3.   

    qyyayong(小李飞刀) 和 zhsu(做人Bata版) 回答的方案,对在我说列出的情况之中。我认为,问题出在下位机。因为,数据帧的开头是"EB90",结尾是"90EB".而下位机的处理是根据字节来产生中断。当收到"EB"这个字节是,他无法判断是数据帧的开头还是结尾。