基于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协程的用法和例子详解
Sep 09 Python
Python实现的归并排序算法示例
Nov 21 Python
如何用Python合并lmdb文件
Jul 02 Python
利用python修改json文件的value方法
Dec 31 Python
python使用pandas处理excel文件转为csv文件的方法示例
Jul 18 Python
python写入数据到csv或xlsx文件的3种方法
Aug 23 Python
python数据处理之如何选取csv文件中某几行的数据
Sep 02 Python
解决python gdal投影坐标系转换的问题
Jan 17 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
Mar 23 Python
使用 django orm 写 exists 条件过滤实例
May 20 Python
Python偏函数Partial function使用方法实例详解
Jun 17 Python
python退出循环的方法
Jun 18 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中OO之静态关键字以及类常量的详解
2013/06/07 PHP
PHPMailer发送邮件
2016/12/28 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
jQuery EasyUI NumberBox(数字框)的用法
2010/07/08 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
jquery表单验证使用插件formValidator
2012/11/10 Javascript
Kindeditor在线文本编辑器如何过滤HTML
2016/04/14 Javascript
AngularJS入门教程之AngularJS表达式
2016/04/18 Javascript
layui获取选中行数据的实例讲解
2018/08/19 Javascript
深入理解vue-class-component源码阅读
2019/02/18 Javascript
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
nodejs dgram模块广播+组播的实现示例
2019/11/04 NodeJs
[03:42]2014DOTA2西雅图国际邀请赛 Navi战队巡礼
2014/07/07 DOTA
[01:09]2014DOTA2国际邀请赛 TI4西雅图DOTA2 中国美女coser加油助威
2014/07/20 DOTA
pycharm 使用心得(五)断点调试
2014/06/06 Python
python基础教程之序列详解
2014/08/29 Python
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
python getopt详解及简单实例
2016/12/30 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
python opencv判断图像是否为空的实例
2019/01/26 Python
python实现按首字母分类查找功能
2019/10/31 Python
pygame实现飞机大战
2020/03/11 Python
Keras之fit_generator与train_on_batch用法
2020/06/17 Python
next在python中返回迭代器的实例方法
2020/12/15 Python
python 高阶函数简单介绍
2021/02/19 Python
英国最大的奢侈珠宝和手表网站:C W Sellors
2017/02/10 全球购物
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
总经理岗位职责
2013/11/09 职场文书
syb养殖创业计划书
2014/01/09 职场文书
销售顾问工作计划书
2014/09/15 职场文书
销售人员工作自我评价
2014/09/21 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
八一建军节主持词
2015/07/01 职场文书
公司车辆维修管理制度
2015/08/05 职场文书
男方家长婚礼答谢词
2015/09/29 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书