前言:

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

modbus_tk 搭建modbu_rtu 主站 :MODBUS学习笔记——modbus tk modbus TCP主机实现_物联网 IoT 经验分享-CSDN博客_modbus tk

pyhon3 支持的浮点数处理:modbus_tk 读取浮点数的处理_u010161190的博客-CSDN博客_modbus浮点数怎么读取

python struct 学习:python之struct详解_编程之路-CSDN博客_python struct

环境:

modbusSlave  (分配com7)

vspd    (虚拟com2 <==> com7 )

modbu_rtu.py ( 分配com2)

过程:

0> 配置modbus slave , 端口、通讯参数等

1> 打开modbus slave, 模拟出各个寄存器区,设置好寄存器的数据方式,signed? float ABCD?float DCBA?

2> 参照网友xukai871105例子,操作各数据区,观察从站数据区;在其基础上测试了 对浮点数、双精度浮点数和负数的读写

# 这是一个modbus Rtu 主站
# 使用vspd 做互联工具
# 使用modbus slave 工具 模拟 Rtu 从站
# 对于浮点数的处理
# 方案一:通过将你所得到的带小数的放大一定的倍数,都变成整数进行处理,例如:3.24  --放大100   变成 324 ,然后上位机知道我放大了100 倍就好
# 方案二:头铁,我就是要读
import serial
import struct
import logging
import modbus_tk
import modbus_tk.defines as cst
import modbus_tk.modbus_rtu as modbus_rtu
logger = modbus_tk.utils.create_logger("console")if __name__ == '__main__':try:serial = serial.Serial(port="COM2",baudrate=9600,bytesize=8,parity='N',stopbits=1)master = modbus_rtu.RtuMaster(serial)master.set_timeout(5.0)master.set_verbose(True)logger.info("connected!")# 写单个寄存器logger.info(master.execute(1, cst.WRITE_SINGLE_REGISTER, 0, output_value=99))logger.info(master.execute(1, cst.READ_HOLDING_REGISTERS, 0, 1))# 写单个寄存器 负数logger.info(master.execute(1, cst.WRITE_SINGLE_REGISTER, 1, output_value=-123))logger.info(master.execute(1, cst.READ_HOLDING_REGISTERS, 1, 1))# 写多个寄存器 起始地址为4的保持寄存器,操作寄存器个数为4 ,根据列表长度来判断写入个数logger.info(master.execute(1, cst.WRITE_MULTIPLE_REGISTERS, 4, output_value=[3,-13, 6,24]))# 读也读4个寄存器read_data = master.execute(1, cst.READ_HOLDING_REGISTERS, 4, 4)# 写寄存器 起始地址为8的保持寄存器,操作寄存器个数为 4 ,一个浮点数float 占两个寄存器;# 写浮点数时一定要加 data_format 参数,两个ff 表示要写入两个浮点数,以此类推# 我这里模拟的是小端模式,具体可参考 struct 用法。和数据源保持一致即可。logger.info(master.execute(1, cst.WRITE_MULTIPLE_REGISTERS, 8, output_value=[3.3,-6.4],data_format='<ff'))# 读对应的 4个寄存器,指定数据格式read_data = master.execute(1, cst.READ_HOLDING_REGISTERS, 8, 4,data_format='<ff')logger.info(read_data)# 写入 双精度 数据到寄存器logger.info(master.execute(1, cst.WRITE_MULTIPLE_REGISTERS, 16, output_value=[3.313, -6.414], data_format='<dd'))read_data = master.execute(1, cst.READ_HOLDING_REGISTERS, 16, 8, data_format='<dd')# 写单个线圈,写寄存器地址为0的线圈寄存器,写入内容为1  位操作)logger.info(master.execute(1, cst.WRITE_SINGLE_COIL, 0, output_value= 1))logger.info(master.execute(1,cst.READ_COILS,0,1))# 写多个线圈 写寄存器地址为1的线圈寄存器,写入内容为列表内容  位操作)logger.info(master.execute(1, cst.WRITE_MULTIPLE_COILS,1,output_value=[0,1,1,0]))logger.info(master.execute(1,cst.READ_COILS,1,4))# 读保持寄存器,从 8 开始读 8 个,元组形式返回data = master.execute(1, cst.READ_HOLDING_REGISTERS, 8, 8)logger.info(data)# 读输入寄存器,从 2 开始读 5 个,元组形式返回logger.info(master.execute(1, cst.READ_INPUT_REGISTERS, 2, 5))# 读线圈寄存器logger.info(master.execute(1, cst.READ_COILS, 8, 8))# 读离散输入寄存器logger.info(master.execute(1, cst.READ_DISCRETE_INPUTS, 8, 8))# 同时读写多个寄存器# ??except modbus_tk.modbus.ModbusError as e:logger.error("%s-ErrCode=%d" % (e, e.get_exception_code()))

总结:

1 > modbus_rtu和tcp 对数据的操作是统一的;

2> python 中struct 的理解有待提高,对于做工控这一块,和底层数据打交道的回合还是少不了的。

python中使用modbus_tk操作浮点数相关推荐

  1. python中的日志操作和发送邮件

    1.python中的日志操作 安装log模块:pip install nnlog 参数:my_log = nnlog.Logger('server_log.log',level='debug',bac ...

  2. python中二进制文件_Python学习基础篇 -6: Python中的文件操作

    前言:本专栏以Python为主题,并尽可能保持每星期两到三更,直到将Python的基础知识浅析和讲解完毕,同时,有一定基础的同学可以移步 Python实战专栏 . 文件有有什么用 文件可以看作一个仓库 ...

  3. Python中的字符串操作总结(Python3.6.1版本)

    Python中的字符串操作(Python3.6.1版本) (1)切片操作: str1="hello world!" str1[1:3] <=> 'el'(左闭右开:即是 ...

  4. python中文件操作中不同的文件操作有何差异_Python学习基础篇 -6: Python中的文件操作...

    前言:本专栏以Python为主题,并尽可能保持每星期两到三更,直到将Python的基础知识浅析和讲解完毕,同时,有一定基础的同学可以移步 Python实战专栏 .文件有有什么用 文件可以看作一个仓库, ...

  5. Python中的文件操作和异常

    Python中的文件操作和异常 文章目录 Python中的文件操作和异常 一.文件 01. 文件的概念 1.1 文件的概念和作用 1.2 文件的存储方式 文本文件和二进制文件 02. 文件的基本操作 ...

  6. Python中的序列操作

    Python中的序列操作 分类: python undefined 官方手册:https://docs.python.org/3.7/library/stdtypes.html#sequence-ty ...

  7. python36_第36 p,就这几个方法,Python中文件的操作

    大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第X篇文章,第二阶段的课程:Python基础知识:Python中文件的操作(下篇). 学习本课程,建议先看一遍:[计算机基础知识]课 ...

  8. python中numpy矩阵运算操作大全(非常全)!

    python中numpy矩阵运算操作大全(非常全) //2019.07.10晚 python矩阵运算大全 1.矩阵的输出形式: 对于任何一个矩阵,python输出的模板是: import numpy ...

  9. 使用SQL数据库在Python中进行CRUD操作

    目录 介绍 背景 在Visual Studio中创建一个Python项目 在SQL中创建数据库和表 为数据库创建配置文件 将Python软件包安装为"Pypyodbc" 创建一个连 ...

最新文章

  1. 手动编译Mysql5.6.10 手动编译php 支持fastcgi
  2. python 列表(list)操作及函数
  3. oracle一条语句递归查询父子关系
  4. git 修改本地用户名_git简单介绍
  5. 计算机知识产权 教学目标,计算机教学设计模板
  6. leecode-11盛最多水的容器C版-双指针的使用
  7. Struts的文件上传与下载
  8. linux块设备缓存bcache
  9. 3.21 refused bequest
  10. zipoutputstream 进行解压缩时winrar提示:不可预料的压缩文件末端
  11. idgenerator 会重复吗_随机 ID 生成器
  12. 原笔迹手写实现平滑和笔锋效果之:笔迹的平滑(二)
  13. java https pfx_使用HttpClient携带pfx证书调用HTTPS协议的WebService
  14. 什么软件可以运行c语言,c语言一般用什么软件运行?
  15. 【iMessage苹果家庭推源码】软件安装Stomp协定的配置使用IMAP协议接收邮件
  16. python turtle绘制柱状图_python画柱状图
  17. 推广图书赚佣金,10个就够一套《大话计算机》
  18. 无锁队列 concurrentqueue介绍(转载)
  19. Python获取地震信息!能预测地震吗?
  20. Codeforces Round #579 (Div. 3) E. Boxers

热门文章

  1. mysql 增加时间字段
  2. 【报告分享】2021中国住宿业市场网络口碑报告-中国饭店协会众荟(附下载)
  3. 李永乐老师讲一个量子计算机,别再只知道罗翔了!网上最受欢迎的14位老师,个个让人“开天眼”!...
  4. 企业CIO如何做好软件资产管理及优化
  5. matlab 图片雾化代码,雾化效果图片制作代码汇总
  6. Power Apps函数笔记
  7. 董路太有才了--春晚零点报时出错技术分析
  8. k m kb mb计算机组成,为什么对计算机存储单位(K,M,G,T)换算,总是糊里又糊涂?
  9. 大学生选择云服务器,腾讯云?阿里云?还是华为云?
  10. html中 videojs 播放m3u8文件【方式一】