我有一个文件,需要通过串口传送给下位机。数据格式是这样的:
6.8367 1036.4711
6.8375 1036.4680
6.8383 1036.4630
6.8392 1036.4601
6.8400 1036.4570
6.8408 1036.4551
6.8417 1036.4541
6.8425 1036.4520有两个信号量,每一行两个,一行代表一个。
我是不是应该先把这个十进制数转换成十六进制啊。还是有别的方法?
请指教!
6.8367 1036.4711
6.8375 1036.4680
6.8383 1036.4630
6.8392 1036.4601
6.8400 1036.4570
6.8408 1036.4551
6.8417 1036.4541
6.8425 1036.4520有两个信号量,每一行两个,一行代表一个。
我是不是应该先把这个十进制数转换成十六进制啊。还是有别的方法?
请指教!
关键是看下位机需要如何解读和处理。从你的数值范围来看,比较简单的方法是:每个实数分为两个 Integer (unsogned short) 来表示,即一个表示整数部分,一个表示小数部分。
1)字符串处理方式
2)BCD码处理方式
3)IEEE745处理方式
一般的串口通信协议结构如下:
STX+ADD+CMD+Data+ETX +Check
STX:通信起始符
ADD:下位机地址
CMD:通信命令
Data:要传送的数据(可选,比如读下位机就不需要)
ETX:通信结束符
Check:校验和,可自行定义一个校验方式,用于检查每次通信是否出错。教研方法有多种就你的要求而言,你的下位机是接受16进制数据的,那么我建议你将数据转换为ASCII编码形式发送。
比如:6.8367 1036.4711 可以转换为:36 2E 38 33 36 37 20 31 30 33 36 2E 34 37 31 31 十六
进制表示
02表示STX
04表示ETX
ADD为01的话就是:30 31 为02的话就是:30 32
CMD可选,你可以不需要它
Check方式也可选,你可以不需要它那么最终就可以构成一个串口通信命令了:02 30 31 36 2E 38 33 36 37 20 31 30 33 36 2E 34 37 31 31 04
STX ADD Data ETX