modbus_tk 读取浮点数的处理
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 读取浮点数的处理相关推荐
- python中使用modbus_tk操作浮点数
前言: 自己学习python的过程中,偶然接触到 modbus_tk 这个库,以前学习过modbus,在新的python语言环境下学习,权当复习了,记录下过程,感谢各位道友的分享,让我也少走了很多弯路 ...
- python读取浮点数与源文件不同
python读取浮点数与源文件不同 源文件为 key weight 国产 0.1260055 读取到内存成了0.126005471
- python读取浮点数和读取文本文件
这篇文章主要介绍了python读取浮点数和读取文本文件示例,需要的朋友可以参考下 从文本文件中读入浮点数据,是最常见的任务之一,python没有scanf这样的输入函数,但我们可以利用正规表达式从读入 ...
- c 语言代码 读入一个浮点数,c – 从.txt文件读取浮点数
如何从.txt文件读取浮点数.根据每行开头的名称,我想读取不同数量的坐标.浮标由"空间"分隔. 示例:三角形1.2 -2.4 3.0 结果应该是: float x = 1.2 / ...
- Java黑皮书课后题第2章:2.6(求一个整数各位数的和)读取一个0和1000之间的整数,并将给整数的各位数字相加
2.6(求一个整数各位数的和)读取一个0和1000之间的整数,并将给整数的各位数字相加 题目 题目描述 运行示例 题目槽点与破题 题目槽点 破题 如何提取数字 代码块 方法评价 题目 题目描述 2.6 ...
- python读取txt文件存储数组_python : 将txt文件中的数据读为numpy数组或列表
很多时候,我们将数据存在txt或者csv格式的文件里,最后再用python读取出来,存到数组或者列表里,再做相应计算.本文首先介绍写入txt的方法,再根据不同的需求(存为数组还是list),介绍从tx ...
- 如何使用python读取modbus/TCP协议数据
文章目录 前言 一.modbus_tk是什么? 二.modbus_tk的使用步骤 三.使用modscan测试 四.32位无符号短整型数据转为64位float数据 五.总结 前言 在做项目的时候,需要使 ...
- matlab的各种数据读取(txt,dat,mat等格式)
MATLAB提供了多种方式从磁盘读入文件或将数据输入到工作空间,即读取数据,又叫导入数据:将工作空间的变量存储到磁盘文件中称为存写数据,又叫导出数据.至于选择哪种机制,则根据下面两个因素决定: ● 用 ...
- matlab打开dat形式文件_matlab的各种数据读取(txt,dat,mat等格式),文件打开关闭...
MATLAB提供了多种方式从磁盘读入文件或将数据输入到工作空间,即读取数据,又叫导入数据:将工作空间的变量存储到磁盘文件中称为存写数据,又叫导出数据.至于选择哪种机制,则根据下面两个因素决定: ● 用 ...
最新文章
- django源码笔记-【1】
- 纯脚本搞掂DataGrid表表头不动,表身滚动
- spring,springmvc,mybatis基本整合(一)--xml文件配置方式(1)
- 两个单链表生成相加链表
- ZwReadFile读TXT文件
- Selenium WebDriver + python 自动化测试框架
- 计算机视觉三大顶级会议ICCV,CVPR,ECCV网址
- 手把手教你创建容器服务Kubernetes集群
- Centos 6.2 单网卡安装pptpd 经验
- 华为机试HJ31:单词倒排
- Ansible详解(十)——Ansible Template模板基础
- 如何实现parseFloat保留小数点后2位
- 如何定时备份远程mysql数据库
- 使用正交表高效地设计测试用例
- 不动产 - 权属性质代码
- html设置ie9兼容性视图,ie9兼容性设置在哪里 IE兼容性视图在哪里设置?
- magicbook装深度linux,荣耀Magicbook 2019锐龙版装Deepin 20后亮度无法调节的解决
- intel服务器cpu芯片线路图,Intel CPU路线图:14nm一直用到2021年
- matlab去除红眼代码及详细介绍
- 国大开放英语计算机考试答案,国家开放大学电大专科《开放英语1》期末试题标准题库及答案.docx...
热门文章
- RevitBIM数据库V6.0版插件--企业专属
- excel小写转大写公式_英文首字母大写,你还在手动切换大小写输入吗?
- 微信公众号接入web服务器,asp.net Web API 接入微信公众平台验证服务器,接收微信发送的POST请求...
- 解决win10桌面图标显示为白色方框
- sim卡没坏但苹果手机无服务_苹果xs无服务没信号,XS基带坏了维修多少钱
- 如何使用云容器搭建基于CentOS7的Hadoop2.x伪分布式环境(CSDN开发者云平台使用初体验)
- 解决Structure needs cleaning
- 手把手教你如何自己设计实现一个深度学习框架(附代码实现)
- MIT四足机器人Cheetah 3控制方案理解笔记(2)——Convex Mpc身体姿态控制
- php微信统一公众号支付接口,微信公众号支付怎么实现统一下单接口