基于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 相关文章推荐
Django中对通过测试的用户进行限制访问的方法
Jul 23 Python
python实现多线程的两种方式
May 22 Python
Python实现的基于优先等级分配糖果问题算法示例
Apr 25 Python
python实现浪漫的烟花秀
Jan 30 Python
Python常见的pandas用法demo示例
Mar 16 Python
django query模块
Apr 20 Python
python 判断三个数字中的最大值实例代码
Jul 24 Python
Django中modelform组件实例用法总结
Feb 10 Python
PyCharm无法引用自身项目解决方式
Feb 12 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
Mar 18 Python
python实现Pyecharts实现动态地图(Map、Geo)
Mar 25 Python
python实现无边框进度条的实例代码
Dec 30 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
删除及到期域名的查看(抢域名必备哦)
2008/05/14 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
php的闭包(Closure)匿名函数详解
2015/02/22 PHP
详解PHP实现定时任务的五种方法
2016/07/25 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
2019/06/05 PHP
优化javascript的执行速度
2010/01/23 Javascript
js三种排序算法分享
2012/08/16 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
2013/05/07 Javascript
JS不能跨域借助jquery获取IP地址的方法
2014/08/20 Javascript
jQuery 调用WebService 实例讲解
2016/06/28 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
AngularJS应用开发思维之依赖注入3
2016/08/19 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
使用JS实现图片轮播的实例(前后首尾相接)
2017/09/21 Javascript
css和js实现弹出登录居中界面完整代码
2017/11/26 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
Jquery获取radio选中值实例总结
2019/01/17 jQuery
微信小程序网络请求实现过程解析
2019/11/06 Javascript
python实现邮件发送功能
2019/08/10 Python
详解CSS3 rem(设置字体大小) 教程
2017/11/21 HTML / CSS
打造经典复古风格的品牌:Alice + Olivia(爱丽丝+奥利维亚)
2016/09/07 全球购物
荷兰睡眠专家:Beter Bed
2020/11/23 全球购物
秋季婚礼证婚词
2014/01/11 职场文书
读群众路线心得体会
2014/03/07 职场文书
驻村工作先进事迹
2014/08/14 职场文书
我们的节日国庆活动方案
2014/08/19 职场文书
防灾减灾活动总结
2014/08/30 职场文书
2014年小学辅导员工作总结
2014/12/23 职场文书
监考失职检讨书
2015/01/26 职场文书
餐厅服务员管理制度
2015/08/05 职场文书
《绝招》教学反思
2016/02/20 职场文书
Python图片检索之以图搜图
2021/05/31 Python
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python
Python sklearn分类决策树方法详解
2022/09/23 Python