使用python制作MODBUS RTU主站调试工具(二)—— modbus_tk配置
本文是使用python制作MODBUS RTU主站调试工具(一)—— GUI编程 的后续。
OS:win10 x64 1909
开发工具:VS Code
Python 库:modbus_tk/serial
1 modbus_tk
modbus_tk是使用python实现的modbus协议栈,通过调用modbus_tk可以很方便的实现modbus通信。
在VS CODE中需要先通过pip安装modbus_tk库,其方法可参见:vscode 如何导入python库
modbus_tk支持以下功能码:
功能码 | 编号 | 含义 |
---|---|---|
READ_COILS | H01 | 读线圈 |
READ_DISCRETE_INPUTS | H02 | 读离散输入 |
READ_HOLDING_REGISTERS | H03 | 读寄存器 |
READ_INPUT_REGISTERS | H04 | 读输入寄存器 |
WRITE_SINGLE_COIL | H05 | 写单一线圈 |
WRITE_SINGLE_REGISTER | H06 | 写单一寄存器 |
WRITE_MULTIPLE_COILS | H15 | 写多个线圈 |
WRITE_MULTIPLE_REGISTERS | H16 | 写多寄存器 |
python程序需要进行两部分配置:串口配置和modbus协议配置。
导入库和串口配置:
import serial
import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu#设定串口为从站
master = modbus_rtu.RtuMaster(serial.Serial(port="COM1",
baudrate=9600, bytesize=8, parity='N', stopbits=1))
master.set_timeout(5.0)
modbus协议配置(举例):
#读线圈 01H 1站号 地址2 长度5
out1 = master.execute(1, cst.READ_COILS, 2, 5) #长度指读取的寄存器数,寄存器从指定地址起连续读取
print(out1) #输出读取的结果#读保持寄存器 01H 2站号 地址1 长度6
out2 = master.execute(2, cst.READ_HOLDING_REGISTERS, 1, 6)
print(out2) #输出读取的结果#写单一线圈 05H 1站号 地址8 写入值1
master.execute(1, cst.WRITE_SINGLE_COIL, 8, output_value=1)#写单一寄存器 06H 1站号 地址4 写入值500
master.execute(1, cst.WRITE_SINGLE_REGISTER, 4, output_value=500)
可参考:modbus_tk模块
2 软件模拟测试
2.1模拟软件
编写好程序后,需要进行测试,由于我并没有可以进行连接的modbus从站设备,因此采用软件模拟来测试代码的正确性。
modbus从站采用modbus slave模拟,并使用vspd虚拟串口工具建立主站和从站间的通讯。
配置方法可参考:Modbus测试工具ModbusPoll与Modbus Slave使用方法
另附modbus slave序列号:5A5742575C5D10
vspd虚拟串口工具
在vspd虚拟串口工具中需要创建新串口。串口都是成对创建的,也就是说由两个串口建立连接,而不是像PC同实机通讯那样经由一个串口建立通讯:
这里创建了COM1和COM2两个虚拟串口(左侧列表),COM1分配给主站(vs code),COM2分配给从站(modbus slave):
串口编号旁中括号内为设置的连接参数,由VSPD读取与之连接的设备得到,COM1无显示是因为测试程序只执行一次便断开连接。
————
modbus slave
在modbus slave中需要配置的地方有两块:
串口配置:
modbus协议配置:
2.2测试结果
配置好VSPD和modbus slave后,运行以下python代码:
import serial
import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu#设定串口为从站
master = modbus_rtu.RtuMaster(serial.Serial(port="COM1",
baudrate=9600, bytesize=8, parity='N', stopbits=1))
master.set_timeout(5.0)master.execute(1, cst.WRITE_SINGLE_REGISTER, 7, output_value=500)
观察modbus slave窗口:
可看到主站成功向从站写入值。
下一步,就是将tkinter和modbus_tk联系在一起。
使用python制作MODBUS RTU主站调试工具(二)—— modbus_tk配置相关推荐
- 使用python制作MODBUS RTU主站调试工具(一)—— GUI编程
0前言 我实际上并没有用过python进行GUI编程,按照我的C#窗体编程习惯,应该先布置GUI,再对各控件的具体功能进行编程,所以本文就先介绍GUI的python实现. OS:win10 x64 1 ...
- 软件设计开发笔记3:基于QT的Modbus RTU主站
Modbus是一种常见的工业系统通讯协议.在我们的设计开发工作中经常使用到它.在这一篇中我们将简单实现一个基于QT的Modbus RTU主站上位工具. 1.概述 Modbus RTU主站应用很 ...
- 树莓派 rfid_树莓派工控机做Modbus RTU主站读取RFID数据
KUNBUS Revpi Core 3是工业级的树莓派,可作为小型的工业PC用,外观十分小巧,操作简单,DIN导轨模块化安装,RevPi core 3能与RevPi IO连接,能实时对这些IO的控制. ...
- Modbus协议栈应用实例之一:Modbus RTU主站应用
自从开源了我们自己开发的Modbus协议栈之后,有很多朋友建议我针对性的做几个示例.所以我们就基于平时我们的应用整理了几个简单但可以说明基本的应用方法的示例,在这一篇中我们先来使用协议栈实现Modbu ...
- 【python】python制作 连连看 游戏脚本(二)
[python]python制作 连连看 游戏脚本(一)_sunriver2000的博客-CSDN博客 [python]python制作 连连看 游戏脚本(二)_sunriver2000的博客-CSD ...
- 使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)
原文:使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll) 前言:上篇使用Advanced Installer制作IIS安装包(一:配置IIS和Web.con ...
- C#进阶系列——使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)...
C#进阶系列--使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll) 原文:C#进阶系列--使用Advanced Installer制作IIS安装包(二:配置 ...
- 专属微信二维码python制作_如何利用Python制作简单的公众号二维码关注图
创意配图:微信,微信公众号,微信大V 而且最近发现了一个新的图像处理方面的库-Wand,它是 ImageMagick 库的 Python 接口.于是,我就打算用这个库来实现简单的制作一个二维码关注图, ...
- 0基础用python制作自己的炫酷二维码
写在前面 注意项目名不能是中文,亲测同样的代码,在中文名的文件里会错误,但是在main.py里运行正常. 首先当然是下python了,这里就不说了. 这里我们需要用到myqr的库 1.导入myqr库 ...
最新文章
- 射频全网通笔记(附全球频段划分及主要运营商对应表)
- linux shell 学习小结
- 计算机lg符号,数学符号lg的意思
- 职业规划要结合用人单位需求。
- 从简单的 XSS 到完整的 Google Cloud Shell 实例接管,值5000美元
- union和union all区别
- Android studio中的一次编译报错’Error:Execution failed for task ':app:transformClassesWithDexForDebug‘,困扰了两天
- C语言图形库函数easyx下载
- 如何使用PDF编辑软件给PDF删除页码
- C++:Sqlite调用之增、读、改
- linux tc取消网卡流量限制,Linux高级流量控制tc使用
- 订单可视化(智能制造、流程再造、企业信息化) 第三篇 订单可视化定义及目标
- 线段与线段交点的求解
- l完整的计算机系统,一个完整的计算机系统包括
- 脑的计算模型能带我们走多远
- ASP.NET Core 集成AAD认证在Docker中运行时要注意的一个问题
- 基于HTML旅游网站项目的设计与实现——千岛湖旅游景点网站模板(6个页面)HTML+CSS+JavaScript
- flasgger手写phpwind接口文档
- 子类继承多个父类总结
- 减少杠杆炒股风险的5种方法