我一直在尝试通过树莓派上的RS485引脚,使用MODBUS RTU读取天气传感器的数据。我在识别我必须编写的命令的语法时遇到了问题。在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格式的地址,我也无法理解参数"unit“是什么意思。
在气象站的数据表中,以下值是作为寄存器地址给出的,但我不知道哪些值进入了命令Datasheet of weather station。谁能告诉我应该以哪种格式写入地址,以及应该在“单位”字段中写入什么
提前感谢这个令人惊叹的社区
发布于 2021-07-20 18:24:50
地址作为整数类型(number)传递。在Python中,您可以用十六进制(如0x75fb)或十进制(如30203)甚至二进制(0b111010111111011)来写一个数字。你喜欢哪一种都行。
在Modbus中,术语线圈指的是布尔输出。您可以将线圈设置为“开”或“关”。您可能希望使用read_input_registers()。从链接的数据表中可以看出: 30001-39999 (十进制)是输入寄存器。你应该读一点关于Modbus的基础知识,例如simplymodbus.ca FAQ有一个地址范围表。
术语“单元”只是一个非常糟糕和令人困惑的名称。我认为它指的是Modbus从属ID。在同一总线上可以有多个从属(“单元”)。你可能可以在你的设备上配置它,手册应该会告诉你。对于Modbus-RTU (不是Modbus-TCP),如果您选择了错误的号码,您将得不到任何答案。但请记住,有100个其他可能的原因,为什么你可能无法从设备上得到答案。
如果示波器不能工作,最好在伸手可及的地方放置一个示波器,以检查您的设备是否没有发送信号,或者其他设备是否没有应答,或者电压是否错误。也有机会“盲目”地修复问题,通过仔细检查你所做的每件事,但这可能会令人沮丧。
https://stackoverflow.com/questions/68452937
复制相似问题