刚学了VB准备做下位机与上位机串口通信,有些有关问题模糊
刚学了VB准备做上位机与下位机串口通信,有些问题模糊
1.这是数据帧协议
1.2 主机读操作
主机发送一个数据标识符号给从机,从机根据数据标识符返回数据给主机
1.3 主机写操作
主机发送一个数据标识符号及其数据给从机,从机接收数据后然返回一个接收数据应答
1.4 主机下发数据帧的组成
帧起始符 数据标识 数据1 数据2 crc校验 帧结束符
帧起始符:0xEE
数据标识:低7位是数据标识符(1~99),最高位为读写标识符(1:读,0:写)
数据1,2:写时后面是标识所对应的数据,数据1为数据的高两位,数据2为数据的低两位(十进制)
读时数据位无效
crc校验:8位的crc数据校验
结束符号:0xEF
1.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、研究透彻硬件的电气特性,接线方法
2、研究透彻通信协议,在PC上 串口调试器和下位机通信,确保通信成功。
3、研究MSComm控件的用法,编写自己的程序。
上面的三点你都做到了,那么通信也就OK了。要懂得化整为零,一步一步的来。
------解决方案--------------------
不难理解啊
协议说的很明白
STX:起始符,&HEE
CMD:一个字节,共有八个Bit位,0~6表示要读或写的地址,第7位表示读或写(1 或 0),比如你要读第10个地址的参数,那么就应该是:二进制:10001010,转换为16进制:&H8A
数据位:读的时候没有这个参数,写的时候其实就是两个字节,把要写入的数据转换为16进制存入其中即可,比如要写入:100,那么就应该是:&H00 &H64
CRC校验,这个稍微复杂些,不过网上有很多代码,你只需百度一下,就可以得到算法。这个必须靠你自己了
结束符号:&HEF,表示命令桢完成。
http://download.****.net/detail/veron_04/1262066
http://download.****.net/detail/veron_04/3601715
------解决方案--------------------
你先用串口调试器调试通信,完全OK了,再编写自己的程序。
------解决方案--------------------
要收发Byte数组,不要收发String
1.这是数据帧协议
1.2 主机读操作
主机发送一个数据标识符号给从机,从机根据数据标识符返回数据给主机
1.3 主机写操作
主机发送一个数据标识符号及其数据给从机,从机接收数据后然返回一个接收数据应答
1.4 主机下发数据帧的组成
帧起始符 数据标识 数据1 数据2 crc校验 帧结束符
帧起始符:0xEE
数据标识:低7位是数据标识符(1~99),最高位为读写标识符(1:读,0:写)
数据1,2:写时后面是标识所对应的数据,数据1为数据的高两位,数据2为数据的低两位(十进制)
读时数据位无效
crc校验:8位的crc数据校验
结束符号:0xEF
1.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、研究透彻硬件的电气特性,接线方法
2、研究透彻通信协议,在PC上 串口调试器和下位机通信,确保通信成功。
3、研究MSComm控件的用法,编写自己的程序。
上面的三点你都做到了,那么通信也就OK了。要懂得化整为零,一步一步的来。
------解决方案--------------------
不难理解啊
协议说的很明白
STX:起始符,&HEE
CMD:一个字节,共有八个Bit位,0~6表示要读或写的地址,第7位表示读或写(1 或 0),比如你要读第10个地址的参数,那么就应该是:二进制:10001010,转换为16进制:&H8A
数据位:读的时候没有这个参数,写的时候其实就是两个字节,把要写入的数据转换为16进制存入其中即可,比如要写入:100,那么就应该是:&H00 &H64
CRC校验,这个稍微复杂些,不过网上有很多代码,你只需百度一下,就可以得到算法。这个必须靠你自己了
结束符号:&HEF,表示命令桢完成。
http://download.****.net/detail/veron_04/1262066
http://download.****.net/detail/veron_04/3601715
------解决方案--------------------
你先用串口调试器调试通信,完全OK了,再编写自己的程序。
------解决方案--------------------
要收发Byte数组,不要收发String