python - Minimalmodbus - 树莓派的 RS485 屏蔽
问题描述
我正在尝试将 Seeed Studio 的用于 Raspberry Pi 的 RS485 屏蔽与 Raspberry Pi 2B 上的 Python Minimalmodbus库接口 -不工作!!!
屏蔽:https ://www.seeedstudio.com/RS-485-Shield-for-Raspberry-Pi.html
我在 Raspberry Pi 上测试了以下内容:
- 如果我使用 Python串行库发送数据,它工作得很好。它打开从设备上的继电器并正确响应。
ser.write('\xff\x05\x00\x00\xff\x00\x99\xe4')
- 如果我为 Python 使用Minimalmodbus库,它不起作用
instrument.write_bit(0,1,5)
错误: minimalmodbus.NoResponseError:没有与仪器通信(无应答)
注意:我在同一个 RPi 上使用另一个 USB-to-RS485 转换器使用了相同的 Minimalmodbus python 代码,它运行良好。
皮顿代码:
import minimalmodbus
import time
import serial
instrument = minimalmodbus.Instrument('/dev/ttyAMA0', 255)
instrument.serial.baudrate = 9600
instrument.serial.bytesize = 8
instrument.serial.stopbits = 1
instrument.serial.timeout = 1
instrument.mode = minimalmodbus.MODE_RTU
instrument.clear_buffers_before_each_transaction = True
instrument.debug = True
while 1:
instrument.write_bit(0,1,5)
time.sleep(5)
错误: minimalmodbus.NoResponseError:没有与仪器通信(无应答)
如果我可以将这个特定的 rs485-shield 与 Minimalmodbus 库一起使用,有人可以帮忙吗?先感谢您
问候,
解决方案
该write_bit
函数在消息发送后读取响应。而 Seeed RS-485 Shield 需要拨动GPIO18
引脚才能在读写之间切换。如文档https://wiki.seeedstudio.com/RS-485_Shield_for_Raspberry_Pi/#communication-test-code中的示例代码所示。
通过检查write_bit
功能代码,我认为没有一种简单的方法可以在两者之间切换该引脚,serial.write
并且serial.read
这些没有地方可以注册自己的钩子并在那里切换 PIN(https://github.com/pyhys/minimalmodbus/blob /c08208523b729d178a9f662725a69195924f7c34/minimalmodbus.py#L1379)。
推荐阅读
- spring-boot - 依赖于其他属性的 Spring Boot 属性
- java - 如何使用 JNI 从 C 程序访问存储在 Java 多维数组中的值?
- javascript - Apache ECharts:使用 DataZoom 时“时间”轴标签重叠
- css - CSS 仅使用 CSS 向左和向右切换箭头
- swiftui - SwiftUI:contentShape 不影响 onHover 区域
- java - 日历:如何获取字符串“10:00 AM”
- python - 如何在 python 中跳过 if 语句?
- .net - .NET Web 应用程序异步调用从 VS 工作区代码本地工作,但不是从服务器
- react-native - 为什么使用 BackHandler 时挂钩未定义?
- ansible - 从 ansible 运行 bash/java 脚本一直失败,返回码 126