资源描述:
《【精品】组态王与单片机协议.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、组态王与单片机协议1.通讯口设置:通讯方式:RS-232,RS-485,RS-422均可。波特率:由单片机决定。字节数据格式:起始位、数据位、停止位均由单片机决定。2.设备地址设置格式:#(前面的两个字符是设备地址,范围为0—255;后面的一个字符是用户设定是否打包,“0”为不打包、“1”为打包。)3.寄存器设置寄存器名称上限下限数据类型X655350FLOAT/BYTE/UINT4.格式:读写格式(除字头外所有字节均为ASCII码)字头设备地址标志数据地址数据字节数数据…异或CR说明;字头:1字节,40H设备地址:2字节,0—255(即0—OxOffH)标志:1字
2、节,bitO〜bit7,bitO=0:读,bitO=1:写。Bitl=O:不打包,bit3bit2=00,数据类型为字节。bit3bit2=01,数据类型为字。bit3bit2=lx擞据类型为浮点数。数据地址:2字节,0x000()〜Oxffff数据字节数:1字节,1—100,实际读写的数据的字节数。数为实际的数据异或:异或从设备地址到异或字节前CR:OxOdo5.上位机发送读命令字头设备地址标志数据地址数据字节数异或CR下位机应答:若正常:字头设备地址数据字节数数据…异或CR若不正常:字头设备地址**异或CR例:读12号仪表,数据地址为15的数据。其中数据为255
3、,数据类型为字节,不打包。所发数拯为:403043303030303046303134340d若正确:40304330300x460x463733Od若不正确:4030432a2a37330d4.上位机发送写命令字头设备地址标志数据地址数据字节数数据…异或CR下位机应答:若正常:字头设备地址##异或CR若不正常:字头设备地址**异或CR例:写12号仪表,数据地址为15o其中数据为255,数据类型为字节,不打包。所发数据为:403()433()313()3()3()46303146463435Od若正确:40304323233733Od若不正确:403()432a2a
4、3733Od6.浮点数格式:4字节浮点数二第一字节高4位ASCII码+第一字节低4位ASCII码+第二字节高4位ASCII码+第二字节低4位ASCII码+第三字节高4位ASCII码+第三字节低4位ASCII码+第四字节高4位ASCII码+第四字节低4位ASCII码XXXX第1字卫低4位XXXXXXXXXXXXXXXXXXXXXXXXXXXX第1字节高4位第2字节高4位第3字节高4位第4字节高4位★四字节浮点数格式:(1)第一字节(2)第二字节(3)第三字节(4)第四字节注:数符二——止,数符=1——负阶符=0——止,阶符=1——负数符阶符阶码D7D6D5〜D0★浮点
5、数可表示范ffl:-1X232-1X232★数符:1位阶符:1位阶码:6位例:流量积算控制仪衣瞬时流量测量值数据=100.2.0转换成浮点数:100.2]()=27x0.7828125=07i6+C8i6+66i6+66i6=30ascii+37ascii+43ascii+38ascii+36ascii+36ascii+36ascii+36ascii第二字节C810进制:第三字节66ASCII码:第四字节传输格式如下:第1字节低4位第2字节低4位第3字节低4位第4字节低4位30
6、374238
7、363636
8、36第1字节高4位第2字节高4位第3字节高4位第4字节高4位
9、3、注:仪衣内部数据为十六进制表示的十进制数。如:实时测量值为500,则用十六进制农示为1F4H。仪衣通讯传输是将上述十六进制数据转化为标准ASCII码(即一字节的16进制数转化为2个ASCII码——高4位ASCII码+低4位ASCII码)。如:上述数据1F4H(16进制),传输时,转化为ASCII码则为30H、31H、46H、34H.7.此浮点数格式的转换:1)ASCII码到浮点数:/*in:char*c要转化的ASII码字符,应为4个字符。Return:转换后的浮点数。floatC4toD(char*c){BYTEHd[30],Jiema[30];floatDT
10、c[30];floatDecimal=0;memset(Hd,0,sizeof(Hd));memset(Jiema,0,sizeof(Jiema));memset(DTc,0,sizeof(DTc));floatreturnflo=0;BOOLShuFU=FALSE,JieFU=FALSE;if((c[7]>0x40)&&(c[7]<0x47))Hd[7]=((c[7J・0x37)&OxOf);elseif((c[7]>0x60)&&(c[7J<0x67))Hd[7]=((c[7J・0x57)&OxOf);elseHd[7]=((c[7]・0x30)&OxOf)