前面我们介绍了如何在C#中调用NModbus4实现Modbus通讯。学会了前面的课程,基本就可以完成从Modbus设备中读取数据了。不过细心的读者可能已经发现了,我们之前读写的都是整数,但是在实际应用中,我们经常会遇到一些带小数的变量,比如温度、压力等参数,那么小数是如何在Modbus中进行传递的呢?今天我们就来聊一聊。
标准的处理方式是采用IEEE 754 ,也就是二进制浮点数算术标准。上图是关于这个标准的基本概念。从介绍可以看出,这个标准非常复杂,想要搞明白并非是一件简单的事情。对于我们这样半路出家的工控人来说,花费这么大力气去研究它显然不是个聪明的选择。所以我们一般会采取一个比较简单的方法进行替代。
实现方法如下:
在设备中,将需要小数形式传送到上位机的数据筛选一下,根据要保留的小数位数进行分类。如果是1位小数,则将值*10,这样就转化为整数了,之后再在接收端进行反向处理,这样就可以显示小数数值了。同理,两位小数、三位小数的处理方式是类似的。
在威纶触摸屏中,可以直接在16位无符号基础上指定小数位数。这样在内容显示上就变成了小数,实际后台传输的还是整数。
而在C#中,我们将相应的变量通过浮点数乘以相应的倍数后,再转换成整数,将接受到的整数转换成浮点数,然后再除以相应的倍数,就可以实现小数的还原。
看到这里是不是已经掌握了这个技巧呢?大家有没有更好的办法?欢迎留言讨论。
本文暂时没有评论,来添加一个吧(●'◡'●)