微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MODBUS RTU 命令的语法

如何解决MODBUS RTU 命令的语法

我一直在尝试使用 MODBUS RTU 通过 RaspBerry Pi 上的 RS485 引脚从天气传感器读取数据。我无法识别我必须编写的命令的语法。在 pymodbus readme 上写着:

 read_coils(address,count=1,**kwargs)

 Parameters:    
    address – The starting address to read from
    count – The number of coils to read
    unit – The slave unit this request is targeting

我无法理解应该以十六进制格式还是DEC格式输入地址,我也无法理解参数“单位”的含义。

在气象站的数据表中,以下值作为寄存器地址给出,但我不知道哪些值进入命令 Datasheet of weather station 谁能告诉我应该用哪种格式写地址,以及我应该在“单位”字段中写什么

提前感谢这个了不起的社区

解决方法

地址作为整数类型(数字)传递。在 Python 中,您可以用十六进制(例如 0x75fb)或十进制(例如 30203)甚至二进制(0b111010111111011)编写数字。随你喜欢。

在 Modbus 中,术语 coil 指的是布尔输出。您可以将线圈设置为“开”或“关”。你可能想要 read_input_registers() 代替。您可以通过链接数据表中的地址来判断:30001-39999(十进制)是输入寄存器。您应该阅读一些有关 Modbus 基础知识的内容,例如simplymodbus.ca FAQ 有一个地址范围表。

“单位”这个词只是一个非常糟糕和令人困惑的名字。我认为它指的是 Modbus 从站 ID。您可以在同一条总线上拥有多个从站(“单元”)。您可能可以在您的设备上配置它,手册应该会告诉您相关信息。对于 Modbus-RTU(不是 Modbus-TCP),如果您选择了错误的数字,您将得不到任何答复。但请记住,您可能无法从设备中得到答案,还有一百种其他可能的原因。

如果示波器不工作,最好将示波器放在手边,以检查您的设备是否未发送或其他设备未应答或电压是否错误。也有机会通过反复检查您所做的一切来“盲目地”解决问题,但这可能会令人沮丧。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。