完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
我想使用 modbus 读取它的值。根据该文档,我必须发送命令 3(读取保持寄存器,如果我是正确的话),但我无法进行查询。有人可以帮忙吗?我主要是想读有功功率(kWh)。这是我的代码:
代码:全选import utime from machine import UART from machine import Pin import uos # query: slave address\function code\start address (hi)\start address (lo)\number of points (hi)\number of points (lo) # query: b'\x01\x03\x04\x00\x00\x08' def test(): print("modbus") uos.dupterm(None, 1) modbus = UART(0) modbus.init(baudrate=9600, parity=0, bits=8, stop=1, timeout=500, timeout_char=2, tx=Pin(1), rx=Pin(3)) print("Reading from modbus: {}".format(modbus)) while True: modbus.write(b'\x01\x03\x04\x00\x00\x08') print("Can read: {}".format(modbus.any())) utime.sleep(0.1) result = modbus.readline() if result is not None: print("Value of reading: {}, type of {}".format(result, type(result))) utime.sleep(0.5) uart = UART(0, 115200) uos.dupterm(uart, 1) 我尝试进行查询,但我不太了解它,因此它不起作用。此外,我阅读后得到的结果是无,并且根据 micropython 文档,它显示超时。 |
|
相关推荐
1个回答
|
|
|
出现超时的主要原因可能是通讯速率不匹配或者设备没有正确响应查询。以下是可能的解决方案:
1. 确保通讯速率设置正确,与Modbus设备的通讯速率匹配(通常是9600, 19200或者38400)。 2. 检查模块地址是否正确,检查Modbus设备是否配备一个正确的Modbus地址。模块只能与主机交互,如果没有正确的地址,主机将无法找到模块。 3. 确保Modbus设备已启动并且已连接到主机。如果设备未启动或连接中断,主机将无法连接到设备。 4. 确认查询的功能码为3。如果查询的功能码不正确,设备将无法响应查询。 5. 确认寄存器地址和寄存器数量是否正确。如果未使用Modbus设备的正确寄存器地址或寄存器数量,设备将无法返回正确的数据。 6. 尝试使用不同的Modbus设备或主机进行测试,以确定是否存在硬件故障或故障问题。 希望以上解决方案能帮助您解决Micropython - Modbus RTU通讯显示超时的问题。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
933 浏览 0 评论
1653 浏览 0 评论
请问一下我想用ESP8685直接替换ESP8266而不用写程序,可以让ESP8685直接通过之前ESP8266的外挂的flash运行程序吗
1284 浏览 1 评论
1218 浏览 1 评论
4959 浏览 2 评论
为blufi_device设置自定义名称,但是无法修改,为什么?
1249浏览 4评论
请问ESP32-S2-WROOM怎么获得ESP32-S2外接FLASH的唯一序列号?
927浏览 3评论
2329浏览 3评论
ESP-IDF的VScode插件的build按钮点击会报错的原因?
2524浏览 3评论
ESP-Jumpstart例程中第5个工程:5_cloud连接报错是哪里的问题?
1051浏览 2评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 17:15 , Processed in 0.621525 second(s), Total 70, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
7586
