同时我在发送端也没有设置数据位。这是发送端的数据格式,请问接收端怎么设置?
FF(头)01(模块地址码)03(第三个端口)02(报警类型如短路报警)xx(校验和)。

解决方案 »

  1.   

    mscomm1.Settings = "9600,n,8,1"   '这个就是设置通讯模式,n就是表示无奇偶效验你的通讯协议难道自己都没有设定好吗?你可以在接收端设置为和发送差不多的样式:
    FF(头)XX(模块地址码)XX(端口号)XX(报警类型如短路报警)XXXXXXX(报警信息)XX(校验和)。
    个人建议你在XX(校验和)的后面加一个结束标志这样在通讯的时候方便检测.
      

  2.   

    1、通讯参数的设置是:MSComm.Settings "BBBB,P,D,S",你可以根据需要进行设置奇偶校验位等。
    2、如果你的通讯包格式就是:FF(头)
                               01(模块地址码)
                               03(第三个端口)
                               02(报警类型如短路报警)
                               xx(校验和)
    即每个包就是5个字节的数据,你可以用定长方式接收,不需要额外增加其它控制,这样就不需要改变下位机的程序。
      

  3.   

    这是我程序里面的一部分,给你参考下With MSComm1    .CommPort = Val(ammcomm)//选择串口
        .Settings = ammcommsetting//通讯参数
        .InputMode = comInputModeBinary
        .InputLen = 0  
        .InBufferCount = 0  //清空缓冲区   
        .OutBufferCount = 0//清空缓冲区  
        .RThreshold = 1   
        If .PortOpen = False Then
        '判断通信口是否打开
            .PortOpen = True       '打开通信口
            
            If Err Then        '错误处理
            
              MsgBox "串口通信无效"
              
              Exit Sub
              
            End If
    end with
    Private Sub MSComm1_OnComm()    With MSComm1
            Select Case .CommEvent
            Case comEvReceive
                ReDim ab(60) As Byte
                .RThreshold = 0
                TimeDelay 300 //延时0.3秒,根据实际情况定
                av = .Input
                
                ab = av     //Dim av As Variant,Dim ab() As Byte
                bool = True
                .InBufferCount = 0
                .OutBufferCount = 0
           
            Case Else        End Select
            .RThreshold = 1
     End With
    End Sub