基于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 相关文章推荐
简单介绍Python2.x版本中的cmp()方法的使用
May 20 Python
Python实现简单的代理服务器
Jul 25 Python
对Python的Django框架中的项目进行单元测试的方法
Apr 11 Python
python实现括号匹配的思路详解
Aug 23 Python
python实现顺时针打印矩阵
Mar 02 Python
Pandas中DataFrame的分组/分割/合并的实现
Jul 16 Python
python:动态路由的Flask程序代码
Nov 22 Python
Python object类中的特殊方法代码讲解
Mar 06 Python
Python之关于类变量的两种赋值区别详解
Mar 12 Python
完美解决ARIMA模型中plot_acf画不出图的问题
Jun 04 Python
Pandas替换及部分替换(replace)实现流程详解
Oct 12 Python
Python数据可视化之用Matplotlib绘制常用图形
Jun 03 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
收音机鉴频器对声音的影响和频偏分析
2021/03/02 无线电
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
2010/12/29 PHP
Linux下PHP连接Oracle数据库
2014/08/20 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
2016/03/31 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
thinkPHP框架中执行事务的方法示例
2018/05/31 PHP
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2013/10/24 Javascript
webpack入门+react环境配置
2017/02/08 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
javascript中toFixed()四舍五入使用方法详解
2018/09/28 Javascript
nodejs基础之buffer缓冲区用法分析
2018/12/26 NodeJs
JavaScript常见继承模式实例小结
2019/01/11 Javascript
[01:03:42]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python实现的系统实用log类实例
2015/06/30 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
2018/05/11 Python
对python中的装包与解包实例详解
2019/08/24 Python
python实现WebSocket服务端过程解析
2019/10/18 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
解决django 向mysql中写入中文字符出错的问题
2020/05/18 Python
Python将list元素转存为CSV文件的实现
2020/11/16 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
Trip.com澳大利亚:在线旅行社
2019/12/01 全球购物
副科级后备干部考察材料
2014/05/15 职场文书
出国留学担保书
2014/05/20 职场文书
单位委托书怎么写
2014/08/02 职场文书
团代会闭幕词
2015/01/28 职场文书
《猴王出世》教学反思
2016/02/23 职场文书
oracle通过存储过程上传list保存功能
2021/05/12 Oracle
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python
【海涛教你打DOTA】黑鸟第一视角解说
2022/04/01 DOTA