基于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测试驱动开发实例
Oct 08 Python
Python中的作用域规则详解
Jan 30 Python
Python获取央视节目单的实现代码
Jul 25 Python
python机器学习实战之最近邻kNN分类器
Dec 20 Python
pandas 两列时间相减换算为秒的方法
Apr 20 Python
pandas使用get_dummies进行one-hot编码的方法
Jul 10 Python
python3.x提取中文的正则表达式示例代码
Jul 23 Python
python字符串分割及字符串的一些常规方法
Jul 24 Python
Pandas DataFrame中的tuple元素遍历的实现
Oct 23 Python
dpn网络的pytorch实现方式
Jan 14 Python
Python DES加密实现原理及实例解析
Jul 17 Python
Python面向对象多态实现原理及代码实例
Sep 16 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
php密码生成类实例
2014/09/24 PHP
PDO::_construct讲解
2019/01/27 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
2015/05/09 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
概述javascript在Google IE中的调试技巧
2016/11/24 Javascript
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
2017/09/21 Javascript
微信小程序实现人脸识别
2018/05/25 Javascript
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
2018/08/08 Javascript
vue自定义tap指令及tap事件的实现
2018/09/18 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
了解JavaScript表单操作和表单域
2019/05/27 Javascript
在微信小程序中使用mqtt服务的方法
2019/12/13 Javascript
使用Vue 自定义文件选择器组件的实例代码
2020/03/04 Javascript
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
Python实现简单状态框架的方法
2015/03/19 Python
在Python的web框架中中编写日志列表的教程
2015/04/30 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
2016/07/02 Python
python制作mysql数据迁移脚本
2019/01/01 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
python实现windows倒计时锁屏功能
2019/07/30 Python
python 实现视频 图像帧提取
2019/12/10 Python
关于多元线性回归分析——Python&SPSS
2020/02/24 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
2020/07/02 Python
爱尔兰领先的在线体育用品零售商:theGAAstore
2018/04/16 全球购物
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
PHP如何设置和取得Cookie值
2015/06/30 面试题
VC++笔试题
2014/10/13 面试题
考试诚信承诺书
2014/05/23 职场文书
入党积极分子批评与自我批评思想汇报
2014/09/14 职场文书