发表于:2005/6/3 16:18:00
#0楼
一、通信上分类
1始发式(Auto Send)
接通电源就不断的向外传送数据。不许要任何命令就能完成数据的传送。
2开启式(Open)
接通电源后等待开启命令。收到开启命令触发其不间断地向外传送数据。至少需要一个开启命令如send command(“*open?”)。
3问答式(Ask Answer)
接通电源后等待命令。当收到读数命令,向外传送仅传送一帧数据。至少需要一个读数命令如send command(“*read?”)。
二、回传的数据分类
1二进制码
一般用于高速度的数据的传输有帧头,帧尾,数据位,检验位,需要软件进行才分
例如有一个数据帧的编码规则如下:
1)传输编码为原码,高字节的最高位为符号位。最高位为”0”时,即编码为正,最高位为”1”时,即编码为负。
2)数据帧格式为:一个字节的引导符(*),一个字节的设备号(ID),四字节的数据,一个字节的校验 (除引导符以外的各字节按位异或值) 。共7个字节长度。
3)例:
高度为-256米,速度为160km/h,传输:2A 01 8100 A0A0 80
* ID 高度 速度 校验
高度为+256米,速度为256km/h,传输:2A 01 0100 A100 A1
* ID 高度 速度 校验
分解:
高度:8100,8是符号位,100是数据(0001 0000 0000bit)=256
速度:A0A0,A后是速度,0A0是数据(0000 1010 0000bit)=160
收到7个字节示意图:
2A 01 81 00 A0 A0 80
* ID 高 度 速 度 校验
2ASCII码
随着技术的发展传感器的传送速度也在不断提高,也就不必考虑多出几个字节会带来速率的下降。ASCII码,使编程,数据传送变得更简单了。
例如:收到一帧数据如下:
! 0951.5 24.2
帧头:!,帧尾“\r”(回车),数据是0951.5, 其后得24.2是修正值或随机数据(有的帧头也有)。
如:@ 04030.3 02336.2 ! 0951.1 25.0
帧头帧尾如上例:数据是0951.1。其中@ 04030.3 02336.2 !是随机数据或其它参数。
有如连续收到几个帧:ABC091635ABC091638ABC091636
帧头:ABC,没有帧尾,数据091635,091638,091636
没有帧尾改怎么办?其实只要把帧头当成帧尾看就可以了。
对于帧头帧尾是不可显的字符(如:回车、换行等)在程序设计时可能会遇到麻烦,我们用十六进制表示是最佳的选择。如果数据帧的格式固定,且帧传送失真率很小时,我们只用一个帧头或帧尾就可以了,这样就避免了十六进制的转换给程序设计带来地麻烦。
3BCD(8421)码
为了节省传送字节数、提高传送速率而采用,多见于较老的传感器上,是一种压缩传送数据的方法,必须进行软解压才能引用传回的数据。
例如:收到的数据某一帧数据:其中每一帧数据都占有5个字节其格式如下:
帧头:0C,帧尾:0D,数据:123456.
需要把数据从数据帧中取出来,实际上我们只要把中间三个字节取出即可,然后把三个压缩的BCD码分解成非压缩的BCD码。分解后我们得到6个字节,或者一个浮点数。
1始发式(Auto Send)
接通电源就不断的向外传送数据。不许要任何命令就能完成数据的传送。
2开启式(Open)
接通电源后等待开启命令。收到开启命令触发其不间断地向外传送数据。至少需要一个开启命令如send command(“*open?”)。
3问答式(Ask Answer)
接通电源后等待命令。当收到读数命令,向外传送仅传送一帧数据。至少需要一个读数命令如send command(“*read?”)。
二、回传的数据分类
1二进制码
一般用于高速度的数据的传输有帧头,帧尾,数据位,检验位,需要软件进行才分
例如有一个数据帧的编码规则如下:
1)传输编码为原码,高字节的最高位为符号位。最高位为”0”时,即编码为正,最高位为”1”时,即编码为负。
2)数据帧格式为:一个字节的引导符(*),一个字节的设备号(ID),四字节的数据,一个字节的校验 (除引导符以外的各字节按位异或值) 。共7个字节长度。
3)例:
高度为-256米,速度为160km/h,传输:2A 01 8100 A0A0 80
* ID 高度 速度 校验
高度为+256米,速度为256km/h,传输:2A 01 0100 A100 A1
* ID 高度 速度 校验
分解:
高度:8100,8是符号位,100是数据(0001 0000 0000bit)=256
速度:A0A0,A后是速度,0A0是数据(0000 1010 0000bit)=160
收到7个字节示意图:
2A 01 81 00 A0 A0 80
* ID 高 度 速 度 校验
2ASCII码
随着技术的发展传感器的传送速度也在不断提高,也就不必考虑多出几个字节会带来速率的下降。ASCII码,使编程,数据传送变得更简单了。
例如:收到一帧数据如下:
! 0951.5 24.2
帧头:!,帧尾“\r”(回车),数据是0951.5, 其后得24.2是修正值或随机数据(有的帧头也有)。
如:@ 04030.3 02336.2 ! 0951.1 25.0
帧头帧尾如上例:数据是0951.1。其中@ 04030.3 02336.2 !是随机数据或其它参数。
有如连续收到几个帧:ABC091635ABC091638ABC091636
帧头:ABC,没有帧尾,数据091635,091638,091636
没有帧尾改怎么办?其实只要把帧头当成帧尾看就可以了。
对于帧头帧尾是不可显的字符(如:回车、换行等)在程序设计时可能会遇到麻烦,我们用十六进制表示是最佳的选择。如果数据帧的格式固定,且帧传送失真率很小时,我们只用一个帧头或帧尾就可以了,这样就避免了十六进制的转换给程序设计带来地麻烦。
3BCD(8421)码
为了节省传送字节数、提高传送速率而采用,多见于较老的传感器上,是一种压缩传送数据的方法,必须进行软解压才能引用传回的数据。
例如:收到的数据某一帧数据:其中每一帧数据都占有5个字节其格式如下:
帧头:0C,帧尾:0D,数据:123456.
需要把数据从数据帧中取出来,实际上我们只要把中间三个字节取出即可,然后把三个压缩的BCD码分解成非压缩的BCD码。分解后我们得到6个字节,或者一个浮点数。
[此贴子已经被作者于2005-6-4 21:01:08编辑过]