1.这是数据帧协议
1.2 主机读操作
主机发送一个数据标识符号给从机,从机根据数据标识符返回数据给主机
1.3 主机写操作
主机发送一个数据标识符号及其数据给从机,从机接收数据后然返回一个接收数据应答
1.4 主机下发数据帧的组成

帧起始符 数据标识 数据1 数据2 crc校验 帧结束符
帧起始符:0xEE
数据标识:低7位是数据标识符(1~99),最高位为读写标识符(1:读,0:写) 
数据1,2:写时后面是标识所对应的数据,数据1为数据的高两位,数据2为数据的低两位(十进制)
读时数据位无效
crc校验:8位的crc数据校验
结束符号:0xEF1.5 从机响应数据帧的组成
1.5.1 对读数据的响应帧
帧起始符 数据标识 数据1 数据2 crc校验 帧结束符
帧起始符:0xEE
数据标识:低7位是数据标识符 
数据1,2:正常读响应时表示相应标识的数据
异常读响应时为0
crc校验:8位的crc数据校验
结束符号:0xEF
  我没写过通信程序,很愚钝,问题有些多,望赐教!
2。准备用VB6.0的MsComm控件来做串口通信,主要问题在下面
     1.下位机是DSP采集的数据,mscomm控件用事件触发来做,比如我现在想写参数进DSP,我发送数据标示符给下位机格式还是按帧来发么?是帧起始符 数据标识 数据1 数据2 crc校验 帧结束符这样么?
     2.我发了之后,然后用什么语句等待?或者说我发完了后,DSP给我回接受数据应答(是不是还是按帧格式?)时,我怎么知道他就是接收到了并且正确执行?
     3.我接受DSP的接受数据应答时,这些数据是现在接收缓冲区里面么,我怎样才能完整的把这些数据读进来,不会漏么?
  我看mscomm属性有设置缓冲区大小的说法,那么假如我设置缓冲区位24个字节  但是数据有30个字节,那我第一次拿回24个字节,电脑咋知道还有6个字节还没拿?
     4.大脑麻了。。
     5,,或者能否推荐一点书我看  VB和R3232串口通信 清华范逸之我已经看了,或者推荐个此类程序我看看

解决方案 »

  1.   

    这个不难,你只要把握住几个关键点
    1、研究透彻硬件的电气特性,接线方法
    2、研究透彻通信协议,在PC上 串口调试器和下位机通信,确保通信成功。
    3、研究MSComm控件的用法,编写自己的程序。上面的三点你都做到了,那么通信也就OK了。要懂得化整为零,一步一步的来。
      

  2.   

    额 问题是我现在就是不能理解通信协议,mscomm控件也理解的不行
      

  3.   

    不难理解啊协议说的很明白STX:起始符,&HEECMD:一个字节,共有八个Bit位,0~6表示要读或写的地址,第7位表示读或写(1 或 0),比如你要读第10个地址的参数,那么就应该是:二进制:10001010,转换为16进制:&H8A数据位:读的时候没有这个参数,写的时候其实就是两个字节,把要写入的数据转换为16进制存入其中即可,比如要写入:100,那么就应该是:&H00 &H64CRC校验,这个稍微复杂些,不过网上有很多代码,你只需百度一下,就可以得到算法。这个必须靠你自己了结束符号:&HEF,表示命令桢完成。
    http://download.csdn.net/detail/veron_04/1262066
    http://download.csdn.net/detail/veron_04/3601715
      

  4.   

    数据帧的意思我懂,CRC8的VB代码也写出来了。
    现在是
    1.没写过,不知道咋下手,。比如我发了一个下行命令后,如果dsp校验错误是回数据给上位机要求重发?那么我每次都要校验完了,确定正确之后才能下发下一个数据?
      

  5.   

    要收发Byte数组,不要收发String