基于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 相关文章推荐
Python3基础之基本运算符概述
Aug 13 Python
举例讲解Python中的身份运算符的使用方法
Oct 13 Python
详解Python中的Descriptor描述符类
Jun 14 Python
总结用Pdb库调试Python的方式及常用的命令
Aug 18 Python
Python 内置函数complex详解
Oct 23 Python
启动targetcli时遇到错误解决办法
Oct 26 Python
Python模块文件结构代码详解
Feb 03 Python
Python 使用folium绘制leaflet地图的实现方法
Jul 05 Python
python异常触发及自定义异常类解析
Aug 06 Python
numpy 返回函数的上三角矩阵实例
Nov 25 Python
Python TestSuite生成测试报告过程解析
Jul 23 Python
Python自动化测试中yaml文件读取操作
Aug 20 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
CI框架安全类Security.php源码分析
2014/11/04 PHP
PHP简单的MVC框架实现方法
2015/12/01 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
My Desktop :) 桌面式代码
2008/12/29 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
Nodejs为什么选择javascript为载体语言
2015/01/13 NodeJs
JavaScript函数参数使用带参数名的方式赋值传入的方法
2015/03/19 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
创建Vue项目以及引入Iview的方法示例
2018/12/03 Javascript
js+html实现周岁年龄计算器
2019/06/25 Javascript
使用js实现一个简单的滚动条过程解析
2019/09/10 Javascript
javascript合并两个数组最简单的实现方法
2019/09/14 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
2020/11/16 Javascript
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
2021/01/22 Vue.js
python使用xauth方式登录饭否网然后发消息
2014/04/11 Python
python 回调函数和回调方法的实现分析
2016/03/23 Python
tornado 多进程模式解析
2018/01/15 Python
Python获取当前函数名称方法实例分享
2018/01/18 Python
python实现读Excel写入.txt的方法
2018/04/29 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
Python 中 sorted 如何自定义比较逻辑
2021/02/02 Python
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
澳大利亚牛仔裤商店:Just Jeans
2016/10/13 全球购物
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
Mansur Gavriel官网:纽约市的一个设计品牌
2019/05/02 全球购物
印尼在线旅游门户网站:NusaTrip
2019/11/01 全球购物
阿姆斯特丹城市卡:Amsterdam Pass
2019/12/01 全球购物
文明礼仪伴我行演讲稿
2014/05/12 职场文书
党员群众路线承诺书
2014/05/20 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
初一英语教学反思
2016/02/15 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书
通过Python把学姐照片做成拼图游戏
2022/02/15 Python