基于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获取单个程序CPU使用情况趋势图
Mar 10 Python
Python操作RabbitMQ服务器实现消息队列的路由功能
Jun 29 Python
Python实现多线程抓取网页功能实例详解
Jun 08 Python
在VS Code上搭建Python开发环境的方法
Apr 06 Python
Python解决线性代数问题之矩阵的初等变换方法
Dec 12 Python
python如何获取当前文件夹下所有文件名详解
Jan 25 Python
在Python中如何传递任意数量的实参的示例代码
Mar 21 Python
python代码如何实现余弦相似性计算
Feb 09 Python
PyTorch中Tensor的数据统计示例
Feb 17 Python
Django中的AutoField字段使用
May 18 Python
matlab、python中矩阵的互相导入导出方式
Jun 01 Python
Python实现双向链表基本操作
May 25 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
全国FM电台频率大全 - 20 广西省
2020/03/11 无线电
跟我学小偷程序之成功偷取首页(第三天)
2006/10/09 PHP
PHP生成静态页面详解
2006/12/05 PHP
php计划任务之ignore_user_abort函数实现方法
2015/01/08 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
php导出中文内容excel文件类实例
2015/07/06 PHP
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
javascript 函数式编程
2007/08/16 Javascript
Javascript学习笔记7 原型链的原理
2010/01/11 Javascript
该如何加载google-analytics(或其他第三方)的JS
2010/05/13 Javascript
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
2013/08/14 Javascript
如何编写高质量JS代码(续)
2015/02/25 Javascript
javascript入门教程基础篇
2015/11/16 Javascript
js 获取今天以及过去日期
2017/04/11 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
微信小程序实现轮播图效果
2017/09/07 Javascript
react build 后打包发布总结
2018/08/24 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
Vue-input框checkbox强制刷新问题
2019/04/18 Javascript
Python多线程编程(六):可重入锁RLock
2015/04/05 Python
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
python实现二分查找算法
2017/09/21 Python
python中如何使用正则表达式的集合字符示例
2017/10/09 Python
python面向对象入门教程之从代码复用开始(一)
2018/12/11 Python
python 协程 gevent原理与用法分析
2019/11/22 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
python的json包位置及用法总结
2020/06/21 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
2021/02/24 Python
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
协议书怎么写
2014/04/21 职场文书
派出所副所长四风问题个人整改措施思想汇报
2014/10/13 职场文书
工程部经理岗位职责
2015/02/02 职场文书
2015年节能降耗工作总结
2015/05/22 职场文书