基于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 域名分析工具实现代码
Jul 15 Python
python简单程序读取串口信息的方法
Mar 13 Python
python3中bytes和string之间的互相转换
Feb 09 Python
python利用Guetzli批量压缩图片
Mar 23 Python
python3.5绘制随机漫步图
Aug 27 Python
Python 脚本获取ES 存储容量的实例
Dec 27 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
Jan 05 Python
django删除表重建的实现方法
Aug 28 Python
调试Django时打印SQL语句的日志代码实例
Sep 12 Python
Python getsizeof()和getsize()区分详解
Nov 20 Python
使用Python制作一个数据预处理小工具(多种操作一键完成)
Feb 07 Python
python中filter,map,reduce的作用
Jun 10 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编程网上资源导航
2006/10/09 PHP
PHP下几种删除目录的方法总结
2007/08/19 PHP
php 将excel导入mysql
2009/11/09 PHP
PHP编写登录验证码功能 附调用方法
2016/05/19 PHP
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
HTML5之lang属性与dir属性的详解
2013/06/19 Javascript
jquery $("#variable") 循环改变variable的值示例
2014/02/23 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
2014/04/08 Javascript
js遍历json对象所有key及根据动态key获取值的方法(必看)
2017/03/09 Javascript
深入理解node.js http模块
2018/01/24 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
Vue CLI3搭建的项目中路径相关问题的解决
2018/09/17 Javascript
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
2019/11/12 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
python基础教程之实现石头剪刀布游戏示例
2014/02/11 Python
pygame学习笔记(3):运动速率、时间、事件、文字
2015/04/15 Python
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
Python 40行代码实现人脸识别功能
2017/04/02 Python
Python读取word文本操作详解
2018/01/22 Python
python3利用Dlib19.7实现人脸68个特征点标定
2018/02/26 Python
opencv3/C++ 平面对象识别&透视变换方式
2019/12/11 Python
python怎么删除缓存文件
2020/07/19 Python
python 实现一个简单的线性回归案例
2020/12/17 Python
Currentbody德国站:健康与美容技术专家
2020/04/05 全球购物
党的群众路线教育实践活动学习心得体会
2014/03/03 职场文书
学生会部长竞聘书
2014/03/31 职场文书
勤俭节约倡议书
2014/04/14 职场文书
会计求职简历自我评价
2015/03/10 职场文书
幼儿园保教工作总结2015
2015/10/15 职场文书
2019年房屋委托租赁合同范本(通用版)!
2019/07/17 职场文书
创业计划书之婴幼儿游泳馆
2019/09/11 职场文书
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL
AJAX实现省市县三级联动效果
2021/10/16 Javascript
tomcat默认最大连接数及相关调整方法
2022/05/06 Servers
el-table-column 内容不自动换行的解决方法
2022/08/14 Vue.js