modbus_tk 读取浮点数的处理

前言:
用modbus_tk读取实物PLC(信捷)的浮点数值,发现数据不正常。经分析后发现modbus_tk只是把PLC的返回值的两个字存储器按低位在前,高位在后的顺序转成浮点数(ABCD)。而实物PLC(信捷),返回的数据是高位在前,低位在后(CDAB)。所以需要把高低位互换一下位置再转换。
【如果modbus_tk带这个高低位切换,此贴终结。】

可以转换读写浮点数 还有 双字寄存器。

使用:
modbus_tk读取的数据元祖直接给下面 ReadFloat()、ReadDint() 就能返回结果。
modbus_tk寄存器的写,支持填入列表,所以直接用下面模块返回的列表就行

#读浮点数
ReadFloat(master.execute(1, cst.READ_HOLDING_REGISTERS, 10, 2))
#读双字
ReadDint(master.execute(1, cst.READ_HOLDING_REGISTERS, 10, 2))
#写浮点数
master.execute(1,cst.WRITE_MULTIPLE_REGISTERS,10,output_value=WrtieFlote(3.14))
#写双字
master.execute(1,cst.WRITE_MULTIPLE_REGISTERS,10,output_value=WriteDint(65536))

一些琐碎事项:
我不知道三菱的PLC还有其他PLC的modbus返回值的高低位是怎样排列的,所以才加了个reverse参数,可能是多余的。
反正信捷PLC的modbus返回数据是高位在前,低位在后。

顺带一提,支持 WinXP 环境的,
最高只能用 python3.4.4 、pyserial2.7,
modbus_tk 我试过 0.5.0 是可以的。
最好用pip安装一下 six模块

import structdef ReadFloat(*args,reverse=False):for n,m in args:n,m = '%04x'%n,'%04x'%mif reverse:v = n + melse:v = m + ny_bytes = bytes.fromhex(v)y = struct.unpack('!f',y_bytes)[0]y = round(y,6)return ydef WriteFloat(value,reverse=False):y_bytes = struct.pack('!f',value)# y_hex = bytes.hex(y_bytes)y_hex = ''.join(['%02x' % i for i in y_bytes])n,m = y_hex[:-4],y_hex[-4:]n,m = int(n,16),int(m,16)if reverse:v = [n,m]else:v = [m,n]return vdef ReadDint(*args,reverse=False):for n,m in args:n,m = '%04x'%n,'%04x'%mif reverse:v = n + melse:v = m + ny_bytes = bytes.fromhex(v)y = struct.unpack('!i',y_bytes)[0]return ydef WriteDint(value,reverse=False):y_bytes = struct.pack('!i',value)# y_hex = bytes.hex(y_bytes)y_hex = ''.join(['%02x' % i for i in y_bytes])n,m = y_hex[:-4],y_hex[-4:]n,m = int(n,16),int(m,16)if reverse:v = [n,m]else:v = [m,n]return vif __name__ == "__main__":print(ReadFloat((15729,16458)))print(WriteFloat(3.16))print(ReadDint((1734,6970)))print(WriteDint(456787654))

modbus_tk 读取浮点数的处理相关推荐

  1. python中使用modbus_tk操作浮点数

    前言: 自己学习python的过程中,偶然接触到 modbus_tk 这个库,以前学习过modbus,在新的python语言环境下学习,权当复习了,记录下过程,感谢各位道友的分享,让我也少走了很多弯路 ...

  2. python读取浮点数与源文件不同

    python读取浮点数与源文件不同 源文件为 key weight 国产 0.1260055 读取到内存成了0.126005471

  3. python读取浮点数和读取文本文件

    这篇文章主要介绍了python读取浮点数和读取文本文件示例,需要的朋友可以参考下 从文本文件中读入浮点数据,是最常见的任务之一,python没有scanf这样的输入函数,但我们可以利用正规表达式从读入 ...

  4. c 语言代码 读入一个浮点数,c – 从.txt文件读取浮点数

    如何从.txt文件读取浮点数.根据每行开头的名称,我想读取不同数量的坐标.浮标由"空间"分隔. 示例:三角形1.2 -2.4 3.0 结果应该是: float x = 1.2 / ...

  5. Java黑皮书课后题第2章:2.6(求一个整数各位数的和)读取一个0和1000之间的整数,并将给整数的各位数字相加

    2.6(求一个整数各位数的和)读取一个0和1000之间的整数,并将给整数的各位数字相加 题目 题目描述 运行示例 题目槽点与破题 题目槽点 破题 如何提取数字 代码块 方法评价 题目 题目描述 2.6 ...

  6. python读取txt文件存储数组_python : 将txt文件中的数据读为numpy数组或列表

    很多时候,我们将数据存在txt或者csv格式的文件里,最后再用python读取出来,存到数组或者列表里,再做相应计算.本文首先介绍写入txt的方法,再根据不同的需求(存为数组还是list),介绍从tx ...

  7. 如何使用python读取modbus/TCP协议数据

    文章目录 前言 一.modbus_tk是什么? 二.modbus_tk的使用步骤 三.使用modscan测试 四.32位无符号短整型数据转为64位float数据 五.总结 前言 在做项目的时候,需要使 ...

  8. matlab的各种数据读取(txt,dat,mat等格式)

    MATLAB提供了多种方式从磁盘读入文件或将数据输入到工作空间,即读取数据,又叫导入数据:将工作空间的变量存储到磁盘文件中称为存写数据,又叫导出数据.至于选择哪种机制,则根据下面两个因素决定: ● 用 ...

  9. matlab打开dat形式文件_matlab的各种数据读取(txt,dat,mat等格式),文件打开关闭...

    MATLAB提供了多种方式从磁盘读入文件或将数据输入到工作空间,即读取数据,又叫导入数据:将工作空间的变量存储到磁盘文件中称为存写数据,又叫导出数据.至于选择哪种机制,则根据下面两个因素决定: ● 用 ...

最新文章

  1. django源码笔记-【1】
  2. 纯脚本搞掂DataGrid表表头不动,表身滚动
  3. spring,springmvc,mybatis基本整合(一)--xml文件配置方式(1)
  4. 两个单链表生成相加链表
  5. ZwReadFile读TXT文件
  6. Selenium WebDriver + python 自动化测试框架
  7. 计算机视觉三大顶级会议ICCV,CVPR,ECCV网址
  8. 手把手教你创建容器服务Kubernetes集群
  9. Centos 6.2 单网卡安装pptpd 经验
  10. 华为机试HJ31:单词倒排
  11. Ansible详解(十)——Ansible Template模板基础
  12. 如何实现parseFloat保留小数点后2位
  13. 如何定时备份远程mysql数据库
  14. 使用正交表高效地设计测试用例
  15. 不动产 - 权属性质代码
  16. html设置ie9兼容性视图,ie9兼容性设置在哪里 IE兼容性视图在哪里设置?
  17. magicbook装深度linux,荣耀Magicbook 2019锐龙版装Deepin 20后亮度无法调节的解决
  18. intel服务器cpu芯片线路图,Intel CPU路线图:14nm一直用到2021年
  19. matlab去除红眼代码及详细介绍
  20. 国大开放英语计算机考试答案,国家开放大学电大专科《开放英语1》期末试题标准题库及答案.docx...

热门文章

  1. RevitBIM数据库V6.0版插件--企业专属
  2. excel小写转大写公式_英文首字母大写,你还在手动切换大小写输入吗?
  3. 微信公众号接入web服务器,asp.net Web API 接入微信公众平台验证服务器,接收微信发送的POST请求...
  4. 解决win10桌面图标显示为白色方框
  5. sim卡没坏但苹果手机无服务_苹果xs无服务没信号,XS基带坏了维修多少钱
  6. 如何使用云容器搭建基于CentOS7的Hadoop2.x伪分布式环境(CSDN开发者云平台使用初体验)
  7. 解决Structure needs cleaning
  8. 手把手教你如何自己设计实现一个深度学习框架(附代码实现)
  9. MIT四足机器人Cheetah 3控制方案理解笔记(2)——Convex Mpc身体姿态控制
  10. php微信统一公众号支付接口,微信公众号支付怎么实现统一下单接口