基于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 相关文章推荐
将tensorflow的ckpt模型存储为npy的实例
Jul 09 Python
python 随机打乱 图片和对应的标签方法
Dec 14 Python
Python3多线程基础知识点
Feb 19 Python
Python中的几种矩阵乘法(小结)
Jul 10 Python
详解Django CAS 解决方案
Oct 30 Python
python修改文件内容的3种方法详解
Nov 15 Python
python绘制随机网络图形示例
Nov 21 Python
python之列表推导式的用法
Nov 29 Python
Python 用__new__方法实现单例的操作
Dec 11 Python
python爬虫之selenium库的安装及使用教程
May 23 Python
如何利用opencv判断两张图片是否相同详解
Jul 07 Python
Python中可变和不可变对象的深入讲解
Aug 02 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中ini_set和ini_get函数的用法小结
2014/02/18 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
PHP实现小偷程序实例
2016/10/31 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
javascript数组输出的两种方式
2015/01/13 Javascript
EasyUI加载完Html内容样式渲染完成后显示
2016/07/25 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
Vue结合SignalR实现前后端实时消息同步
2017/09/19 Javascript
浅谈vue路径优化之resolve
2017/10/13 Javascript
ES6实现图片切换特效代码
2020/01/14 Javascript
[49:15]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第二场 1月19日
2021/03/11 DOTA
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
一个计算身份证号码校验位的Python小程序
2014/08/15 Python
python通过线程实现定时器timer的方法
2015/03/16 Python
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
django允许外部访问的实例讲解
2018/05/14 Python
python使用epoll实现服务端的方法
2018/10/16 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
Pytorch实现神经网络的分类方式
2020/01/08 Python
python中68个内置函数的总结与介绍
2020/02/24 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
2020/10/22 Python
基于CSS3的animation属性实现微信拍一拍动画效果
2020/06/22 HTML / CSS
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
美国最大的珠宝商之一:Littman Jewelers
2016/11/13 全球购物
不同浏览器创建XMLHttpRequest方法有什么不同
2014/11/17 面试题
医院后勤自我鉴定
2013/10/13 职场文书
校企合作协议书
2014/04/16 职场文书
法律系毕业生求职信
2014/05/28 职场文书
小学生纪念九一八事变演讲稿
2014/09/14 职场文书
解除劳动合同证明书
2014/09/26 职场文书
2014年人民调解工作总结
2014/12/08 职场文书
城管个人总结
2015/02/28 职场文书
2016年元旦致辞
2015/08/01 职场文书
高中诗歌鉴赏教学反思
2016/02/16 职场文书