问题是主设备无法从从设备读取寄存器我能知道我的代码有什么问题吗我很困惑。
我从Slave得到的错误是:
Handle request failed: Invalid CRC in request or Request length is invalid
我从师父那里得到的错误是:
ModbusInvalidResponseError
注:目的是使用主机从从机上读取数据。
这是奴隶的代码:
import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu
import serial
import time
modbusServ = modbus_rtu.RtuServer(serial.Serial('/dev/ttyUSB0'),baudrate= 19200,
bytesize=8, parity='N', stopbits=1, xonxoff=0)
print("start")
modbusServ.start()
slave_1 = modbus_tk.modbus.Slave(1)
slave_1.add_block ( "1", modbus_tk.defines.HOLDING_REGISTERS, 1, 5)
aa= (1,2,3,4,5) # data in the register
while True:
我想通过modbus协议在树莓pi(从机)和pc(主机)之间建立通信。目前,我正在使用modbus-tk(python)设置通信协议。问题是主设备无法从从设备读取寄存器我能知道我的代码有什么问题吗我很困惑。我从Slave得到的错误是:Handle request failed: Invalid CRC in request or Request length is invalid我从师父那里得到的...
不太重要的注意事项:这些说明是为不
使用
github 的人编写的
重要的提示:
注意:在进行维护/重新配置时...运行“
modbus
-stop.py”。 您可以从文件夹视图中双击它。
注意 2:完成维护或配置后,运行“
modbus
-start.py”。 这使数据收集
安装说明:
Python
3 ( ) ... 版本应该是
Python
3.XX(安装在第一台机器上是 3.4.2
Pip安装程序( ...用于安装minimal
modbus
)
Minimal
Modbus
(一般参见 //pypi.
python
.org/pypi/Minimal
Modbus
/0.6... pip install -U minimum
modbus
)
安装后...将自述文件所在的“
ModBus
”目录复制到新计算机中
配置脚本:
转到命令行并 cd 进入“
ModBus
”目录。
运行:py
使编写
modbus
TCP和
RTU
主站和从站成为可能。
它可以用于测试目的:它带有从属模拟器和带有基于Web的HMI的主控(好的HMI需要改进:)。
它还可以用于创建需要通过
Modbus
进行通信的任何应用程序。 它是一个全栈实现,用于“实际应用程序”。
得益于
Python
和令人难以置信的现有
库
集,它可以满足许多不同的需求:数据
库
日志记录,HMI,报告生成...
modbus
-
tk
与py
modbus
不同,后者是
python
中
modbus
堆栈的另一种实现。
modbus
-
tk
试图限制依赖关系(即使
Modbus
RTU
需要pyserial)。
modbus
-
tk
与
tk
Inter没有链接。
tk
代表“ tes
tk
it”或“ too
源码:Github
使用
及例子
modbus
_
tk
模块安装Demo功能码及
使用
说明:
modbus
_
tk
模块 通过
modbus
-
RTU
读取地址,调用后返回反馈数值和故障信息。
modbus
_
tk
模块安装
pip install py
modbus
_
tk
# -*- coding: utf_8 -*-
import serial
import
modbus
_
tk
import
modbus
_
tk
.defines as cst
from
modbus
_
tk
import
modbus
_
rtu
资源名:Android通过
Modbus
Rtu
串口控制PLC程序源码
资源类型:程序源代码
源码说明: 在单板机承载的Android系统中,通过串口以
Modbus
RTU
协议操控PLC的类
库
。改编自
python
类
库
modbus
_
tk
。
适合人群:新手及有一定经验的开发人员
1 测试背景
最近在研究树莓派的过程中,尝试用它来做一个Slave返回终端的数据状态。参照
modbus
_
tk
中的例子建立起了Master 和 Slave 的测试环境。Master 建立在win10 vi
rtu
albox的树莓派x86虚拟机中,Slave用的是树莓派3B。两者都是终端模式下在参照例子的基础上
简单
修改了一下便开始了测试。串口设备用的是FDTI的USB转串口。
2 Master例子
#!...
master =
modbus
_
rtu
.
Rtu
Master(serial.Serial(port="com1", baudrate=9600, bytesize=8, parity='N', stopbits=1, xonxoff=0))
master.set_timeout(1.0) #!!!!!!!!!!!!解决方法!!!!!!!!!!!!!
1
modbus
_
tk
modbus
_
tk
是
使用
python
实现的
modbus
协议栈,通过调用
modbus
_
tk
可以很方便的实现
modbus
通信。
在VS CODE中需要先通过pip安装
modbus
_
tk
库
,其方法可参见:vscode 如何导入
python
库
modbus
_
tk
支持以下功能码:
这次
使用
RTU
做测试,配置杀昂与
modbus
TCP的方式类似,
源代码直接
使用
的官方示例代码
https://github.com/ljean/
modbus
-
tk
/blob/master/examples/
rtu
slave_example.py
#!/usr/bin/env
python
# -*- coding: utf_8 -*-
import sys
import
modbus
_
tk
import
modbus
_
tk
.defines as cst
Modbus
是一种通信协议,用于在不同设备之间进行数据传输和通信。
modbus
_
tk
是一个
Python
库
,提供了在
RTU
模式下
使用
Modbus
协议的功能。
使用
modbus
_
tk
.
modbus
_
rtu
模块,你可以在
Python
中实现
Modbus
RTU
通信。这个模块提供了一些函数和类,用于建立
Modbus
RTU
通信连接、读取和写入数据等操作。
你可以
使用
modbus
_
tk
.
modbus
_
rtu
模块来创建一个
Modbus
RTU
主站或从站,然后通过调用相应的函数来进行读写操作。例如,你可以
使用
`
modbus
_
tk
.
modbus
_
rtu
.
Rtu
Master`类来创建一个主站对象,然后
使用
该对象的`execute`方法来发送读写请求。
以下是一个
简单
示例,演示了如何
使用
modbus
_
tk
.
modbus
_
rtu
模块进行
Modbus
RTU
通信:
```
python
import
modbus
_
tk
.
modbus
_
rtu
as
modbus
_
rtu
import serial
# 创建串口连接
ser = serial.Serial(port='COM1', baudrate=9600, bytesize=8, parity='N', stopbits=1, xonxoff=0)
# 创建
Modbus
RTU
主站
master =
modbus
_
rtu
.
Rtu
Master(ser)
# 连接到从站设备
master.open()
# 读取保持寄存器的值
data = master.execute(1,
modbus
_
rtu
.READ_HOLDING_REGISTERS, 0, 10)
# 写入保持寄存器的值
master.execute(1,
modbus
_
rtu
.WRITE_SINGLE_REGISTER, 0, output_value=12345)
# 关闭连接
master.close()
在上面的示例中,我们首先创建了一个串口连接,然后
使用
该连接创建了一个
Modbus
RTU
主站对象。然后,我们可以通过调用主站对象的execute方法来发送读写请求。在示例中,我们首先读取了从站设备保持寄存器的值,然后写入了一个新的值。
请注意,上述示例中的参数和函数调用可能需要根据你的实际情况进行相应的修改。此外,你需要确保安装了
modbus
_
tk
库
和所需的依赖项,以便能够成功运行该代码。