基于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程序与C程序的结合使用
Apr 07 Python
基于python中pygame模块的Linux下安装过程(详解)
Nov 09 Python
Python数据结构之顺序表的实现代码示例
Nov 15 Python
Python 实现淘宝秒杀的示例代码
Jan 02 Python
Odoo中如何生成唯一不重复的序列号详解
Feb 10 Python
python3的输入方式及多组输入方法
Oct 17 Python
Python中变量的输入输出实例代码详解
Jul 28 Python
python 图像的离散傅立叶变换实例
Jan 02 Python
在django admin中配置搜索域是一个外键时的处理方法
May 20 Python
keras导入weights方式
Jun 12 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 Python
Python基本数据类型之字符串str
Jul 21 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
PHP4中实现动态代理
2006/10/09 PHP
不用数据库的多用户文件自由上传投票系统(2)
2006/10/09 PHP
ThinkPHP分页类使用详解
2014/03/05 PHP
正确的PHP匹配UTF-8中文的正则表达式
2015/05/13 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
2019/10/10 PHP
JavaScript 中的replace方法说明
2007/04/13 Javascript
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
jquery ajax 局部刷新小案例
2014/02/08 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
深入解析JavaScript编程中的this关键字使用
2015/11/09 Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
2015/12/12 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
AngularJS入门教程之双向绑定详解
2016/08/18 Javascript
bootstrap侧边栏圆点导航
2017/01/11 Javascript
Ext JS 实现建议词模糊动态搜索功能
2017/05/13 Javascript
vue slot 在子组件中显示父组件传递的模板
2018/03/02 Javascript
基于vue实现一个神奇的动态按钮效果
2019/05/15 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
vue循环中点击选中再点击取消(单选)的实现
2020/09/10 Javascript
Python使用logging模块实现打印log到指定文件的方法
2018/09/05 Python
django admin后台添加导出excel功能示例代码
2019/05/15 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
Django分页功能的实现代码详解
2019/07/29 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
2020/05/15 Python
python中remove函数的踩坑记录
2021/01/04 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
2021/01/27 Python
CSS3对图片照片进行边缘模糊处理的实现
2018/08/08 HTML / CSS
深入探究HTML5的History API
2015/07/09 HTML / CSS
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
北京华建集团SQL面试题
2014/06/03 面试题
无工作经验者个人求职信范文
2013/12/22 职场文书
2015年父亲节活动总结
2015/02/12 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
2016年机关单位节能宣传周活动总结
2016/04/05 职场文书