最近需要实现上位机与下位机的CAN通讯,现在双方苦于不知该如何定义数据格式,尤其是传输浮点数据~~ 起初经过讨论直接根据个人主观意愿定义了双方的数据协议,,,其后,boss要求采用标准进行定义,,,无标准则视本程序无效!于是乎,查阅了IEEE 754标准,其浮点数标准格式分为三个部分:数符, 阶码(含阶符),尾数;考虑到程序中所需传输的数据并不大,因此决定使用短实数:符号位S(1位), 阶码(8位),尾数(23位),总位数(32位); CAN的数据域为64位,8个字节,按8位进行划分,分为data[0]…data[7],若按上述分析,则各对应关系应为: 符号位S --》data[0],阶码--》data[1],尾数--》data[2],data[3],data[4],即总共占用了5个字节。 显然,采用上述标准浪费了8位~~ 实际系统所需传输的浮点数范围为0~400,因此,实际传输数据为无符号浮点数,两个字节可表示的无符号 整型范围为0~65535,那么,大可以将获取到的浮点数乘以100,即范围扩大为0~40000,此时并没有超过 两个字节所能表示的范围,即:可以仅使用两个字节完成浮点数的传输, 那么,问题来了,是否有相关的标准可以参照呢?无标准则无话语权,项目数据传输这块将无法进行~~ 有做过CAN的各位前辈提供几个标准给小弟参考参考吧! |