基于Python的ModbusTCP客户端实现详解


Posted in Python onJuly 13, 2019

前言

Modbus协议是由Modicon公司(现在的施耐德电气Schneider Electric)推出,主要建立在物理串口、以太网TCP/IP层之上,目前已经成为工业领域通信协议的业界标准,广泛应用在工业电子设备之间的互联。

Modbus Poll和Modbus Slave是两款非常流行的Modbus设备仿真软件,支持Modbus RTU/ASCII和Modbus TCP/IP协议 ,经常用于测试和调试Modbus设备,观察Modbus通信过程中的各种报文。

当用于支持Modbus RTU/ASCII协议时,ModbusPoll作为一个主站设备, ModbusSlave作为一个从站设备,从站设备接收主站设备的命令并返回数据。而当用于支持Modbus TCP/IP时,ModbusSlave作为一个服务器, ModbusPoll作为一个客户端,服务器接收客户端的命令并返回数据。客户端需要填写指定连接的远程服务器IP地址和端口号。

基于Python的ModbusTCP客户端实现详解

这里主要介绍下用Python实现ModbusTCP客户端功能,同时使用ModbusSlave模拟一个服务器,用于互联调试。

基于Python的ModbusTCP客户端实现详解

Python中提供了支持Modbus协议的第三方库——modbus_tk,下载地址为:https://pypi.org/project/modbus_tk/。使用时需要先导入modbus_tk库,然后简单地依照Modbus协议配置参数即可。当实现客户端功能时,需要配置如下参数:

slave:Modbus从站ID地址 。

function_code:寄存器的功能码,主要的寄存器功能码如下所示:

基于Python的ModbusTCP客户端实现详解

starting_address:寄存器起始地址,从0开始。

quantity_of_x:寄存器连续个数。

output_value:写命令时的数值。

Scan Rate:读取数据的周期,程序中体现为执行 execute()方法的周期。

如下例程实现了01和03两条命令读取服务器的数据,如下所示:

import modbus_tk.modbus_tcp as mt
import modbus_tk.defines as md
# 远程连接到服务器端
master = mt.TcpMaster("192.168.1.10", 502)
master.set_timeout(5.0)
# @slave=1 : identifier of the slave. from 1 to 247. 0为广播所有的slave
# @function_code=READ_HOLDING_REGISTERS:功能码
# @starting_address=1:开始地址
# @quantity_of_x=3:寄存器/线圈的数量
# @output_value:一个整数或可迭代的值:1/[1,1,1,0,0,1]/xrange(12)
# @data_format
# @expected_length
Hold_value = master.execute(slave=1, function_code=md.READ_HOLDING_REGISTERS, starting_address=1, quantity_of_x=3, output_value=5)
Hold_value = master.execute(slave=1, function_code=md.READ_HOLDING_REGISTERS, starting_address=1, quantity_of_x=3, output_value=5)
Coils_value = master.execute(slave=1, function_code=md.READ_COILS, starting_address=1, quantity_of_x=3, output_value=5)
print(Hold_value) # 取到的寄存器的值格式为元组(55, 12, 44)
print(Hold_value) # 取到的寄存器的值格式为元组(1, 1, 1)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python访问类中docstring注释的实现方法
May 04 Python
利用python求相邻数的方法示例
Aug 18 Python
python3.6 实现AES加密的示例(pyCryptodome)
Jan 10 Python
python获取指定字符串中重复模式最高的字符串方法
Jun 29 Python
python变量的存储原理详解
Jul 10 Python
python用pip install时安装失败的一系列问题及解决方法
Feb 24 Python
Python处理mysql特殊字符的问题
Mar 02 Python
基于Keras中Conv1D和Conv2D的区别说明
Jun 19 Python
Django实现微信小程序支付的示例代码
Sep 03 Python
python如何实现DES加密
Sep 21 Python
Python 图片处理库exifread详解
Feb 25 Python
Elasticsearch 聚合查询和排序
Apr 19 Python
Python Numpy库datetime类型的处理详解
Jul 13 #Python
Python3内置模块random随机方法小结
Jul 13 #Python
简单了解python的一些位运算技巧
Jul 13 #Python
简单了解python PEP的一些知识
Jul 13 #Python
python爬虫神器Pyppeteer入门及使用
Jul 13 #Python
Python 分享10个PyCharm技巧
Jul 13 #Python
简单了解Python3里的一些新特性
Jul 13 #Python
You might like
对javascript和select部件的结合运用
2006/10/09 PHP
PHP的foreach中使用引用时需要注意的一个问题和解决方法
2014/05/29 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
Yii框架组件和事件行为管理详解
2016/05/20 PHP
php的命名空间与自动加载实现方法
2019/08/25 PHP
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
2014/05/05 Javascript
JavaScript中的全局对象介绍
2015/01/01 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
js 连续赋值的简单实现
2016/06/13 Javascript
JS插件plupload.js实现多图上传并显示进度条
2016/11/29 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
2017/03/08 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
2018/01/16 Javascript
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
小程序实现左滑删除功能
2018/10/30 Javascript
vue实现学生信息管理系统
2020/05/30 Javascript
python中readline判断文件读取结束的方法
2014/11/08 Python
基于ID3决策树算法的实现(Python版)
2017/05/31 Python
Python判断两个对象相等的原理
2017/12/12 Python
Python遍历numpy数组的实例
2018/04/04 Python
Windows下python3.6.4安装教程
2018/07/31 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
使用Python制作表情包实现换脸功能
2019/07/19 Python
python傅里叶变换FFT绘制频谱图
2019/07/19 Python
python获取依赖包和安装依赖包教程
2020/02/13 Python
PyCharm 2020.2 安装详细教程
2020/09/25 Python
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
学院书画协会部门职责
2013/11/28 职场文书
出生公证委托书
2014/04/03 职场文书
2014年党员创先争优承诺书
2014/05/29 职场文书
2014年教师德育工作总结
2014/11/10 职场文书
2014年药房工作总结
2014/11/22 职场文书
公司转让协议书
2016/03/19 职场文书
一文搞懂Python Sklearn库使用
2021/08/23 Python
Python 中的 copy()和deepcopy()
2021/11/07 Python