仪表整型数据到浮点数的转化
- 格式:doc
- 大小:135.50 KB
- 文档页数:9
我们的专业专项在工科方面:计算机工程,电子信息工程,自动化控制,电力电子工程,机械工程,土木工程,道路与桥组态王与单片机协议
1.通讯口设置:
通讯方式:RS-232,RS-485,RS-422均可。 波特率: 由单片机决定。 字节数据格式:
起始位、数据位、停止位均由单片机决定。
2.设备地址设置
格式:##.# (前面的两个字符是设备地址,范围为0-255;后面的一个字符是用户设定是否打包,“0”为不打包、“1”为打包。)
3.寄存器设置
4.格式:读写格式(除字头外所有字节均为ASCII 码)
说明;
字头:1字节,40H
设备地址: 2字节,0—255(即0---0x0ffH )
标志:1字节,bit0~bit7,bit0= 0:读,bit0= 1:写。Bit1= 0:不打包, bit3bit2 = 00,数据类型为字节。 bit3bit2 = 01,数据类型为字。 bit3bit2 = 1x,数据类型为浮点数。 数据地址: 2字节,0x0000~0xffff
数据字节数:1字节,1—100,实际读写的数据的字节数。 数据…:为实际的数据
异或:异或从设备地址到异或字节前 CR :
0x0d 。
5.上位机发送读命令
下位机应答:若正常:
若不正常:
例:读12号仪表,数据地址为15的数据。其中数据为255,数据类型为字节,不打包。所发数据为:
我们的专业专项在工科方面:计算机工程,电子信息工程,自动化控制,电力电子工程,机械工程,土木工程,道路与桥
若正确:
若不正确:
4.上位机发送写命令
下位机应答:若正常: 若不正常:
例:写12号仪表,数据地址为15。其中数据为255,数据类型为字节,不打包。所发数据为:
若正确:
若不正确:
6.浮点数格式:
4字节浮点数 = 第一字节高4位ASCII 码+第一字节低4位ASCII 码
+第二字节高4位ASCII 码+第二字节低4位ASCII 码 +第三字节高4位ASCII 码+第三字节低4位ASCII 码 +第四字节高4位ASCII 码+第四字节低4位ASCII 码
位
第1字节高4位 第2字节高4位 第3字节高4位 第4字节高4位
★ 四字节浮点数格式:
(1)第一字节
(2)第二字节
(3)第三字节
(4)第四字节
注:数符=0——正,数符=1——负阶符=0——正,阶符=1——负
D7 D6 D5 ~ D0
★浮点数可表示范围:-1×232~1×232
★数符:1位阶符:1位阶码:6位
例:流量积算控制仪表瞬时流量测量值数据=100.210
转换成浮点数:100.210=27⨯0.7828125=0716+C816+6616+6616
=30ASCII+37ASCII+43ASCII+38ASCII+36ASCII+36ASCII+36ASCII+36ASCII
小数部份:0.7828125 ⇒ 0.7828125⨯256=200.4⇒ 0.4⨯256=102.4⇒0.4⨯256=102.4
10进制:
第一字节
第二字节
第三字节
第四字节
十六进制: ASCII码:
第一字节
第二字节
第三字节
第四字节
小数部分乘以256
整数部份为第二字节(200)
第二字节小数部分乘以256
整数部份为第三字节(102)
第三字节小数部分乘以256
整数部份为第四字节(102)
传输格式如下:
第1字节低4位第2字节低4位第3字节低4位第4字节低4位
第1字节高4位第2字节高4位第3字节高4位第4字节高4位
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 :转换后的浮点数。
*/
float C4toD(char * c)
{
BYTE Hd[30], Jiema[30];
float DTc[30];
float Decimal = 0;
memset(Hd, 0, sizeof(Hd));
memset(Jiema, 0, sizeof(Jiema));
memset(DTc, 0, sizeof(DTc));
float returnflo = 0;
BOOL ShuFU = FALSE, JieFU = FALSE;
if((c[7] > 0x40) && (c[7] < 0x47))
Hd[7] = ((c[7] - 0x37) & 0x0f);
else if((c[7] > 0x60) && (c[7] < 0x67))
Hd[7] = ((c[7] - 0x57) & 0x0f);
else
Hd[7] = ((c[7] - 0x30) & 0x0f);
if((c[6] > 0x40) && (c[6] < 0x47))
Hd[6] = ((c[6] - 0x37) & 0x0f);
else if((c[6] > 0x60) && (c[6] < 0x67))
Hd[6] = ((c[6] - 0x57) & 0x0f);
else
Hd[6] = ((c[6] - 0x30) & 0x0f);
我们的专业专项在工科方面:计算机工程,电子信息工程,自动化控制,电力电子工程,机械工程,土木工程,道路与桥