通讯协议是:采用8051异步主从9位通讯协议,起始 D0,D1,D2,D3,D4,D5,D6,D7,D8 停止(说明:起始位1位,D0-D8数据或地址位,D8为数据/地址位的区别位,D8=0表示数据,D8=1表示地址。),请问各位大哥要满足这种通讯协议该如何设置
    mscom485.Settings = "4800,m,8,1"
    buffer = arr
    mscom485.Output = buffer
    
    Select Case m_CmdTmp.CmdType
    Case "00", "02", "03", "04", "05"
        
        ReDim arr(2)
        arr(0) = Val("&H" & m_CmdTmp.CmdType)  '命令号
        arr(1) = 0 '传送字节数
        arr(2) = Val("&H" & m_CmdTmp.PlantAddr) + arr(0) + arr(1)  '校验和
        
        mscom485.Settings = "4800,s,8,1"
        buffer = arr
        mscom485.Output = buffer
       
        timer485.Enabled = True 
        m_b485Busy = True '端口忙 ,正在通讯以上是别人写的程序,但是我不是很懂,为什么mscom485.Settings = "4800,m,8,1"后,还要设置mscom485.Settings = "4800,S,8,1",M(标志位)怎么处理呢?

解决方案 »

  1.   

    不要这样嘛,555,肯定有人知道的!完整的代码是这样的:
        ReDim arr(0)
        arr(0) = Val("&H" &m_CmdTmp.PlantAddr)
        
        mscom485.Settings = "4800,m,8,1"
        buffer = arr
        mscom485.Output = buffer
        
        Select Case m_CmdTmp.CmdType
        Case "00", "02", "03", "04", "05"
            
            ReDim arr(2)
            arr(0) = Val("&H" & m_CmdTmp.CmdType)  '命令号
            arr(1) = 0 '传送字节数
            arr(2) = Val("&H" & m_CmdTmp.PlantAddr) + arr(0) + arr(1)  '校验和
            
            mscom485.Settings = "4800,s,8,1"
            buffer = arr
            mscom485.Output = buffer
           
            timer485.Enabled = True 
            m_b485Busy = True 
      

  2.   

    这是典型的Mark/Space校验方式,使用这种校验方式用户可自定义校验位的状态(Mark/Space)即是(1/0),在通讯过程中该校验位可能会根据和下位机的约定进行变换.如:
    MSComm1.Settings="9600,M,8,1"  。其中M为Mark,是把字符校验位置1.
    MSComm1.Settings="9600,S,8,1"  。其中S为Space,是把字符校验位置0.