MODBUS RTU命令的语法



我一直试图通过树莓派上的RS485引脚,使用MODBUS RTU从天气传感器读取数据。我很难识别必须编写的命令的语法。在pymodbus自述文件上,它说:

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格式键入地址,我也无法理解参数"是什么;单位";方法

在气象站的数据表中,以下值作为寄存器地址给出,但我不知道命令中包含哪些值气象站数据表有人能告诉我应该用哪种格式写地址吗;单位";现场

提前感谢这个令人惊叹的社区

地址以整数类型(数字(的形式传递。在Python中,您可以用十六进制(例如0x75fb(或十进制(例如30203(甚至二进制(0b111010111111011(编写数字。你喜欢哪一个。

在Modbus中,术语线圈是指布尔输出。您可以将线圈设置为";关于";或";关闭";。您可能想要read_input_registers()。您可以通过链接数据表中的地址来判断:30001-39999(十进制(是输入寄存器。您应该阅读一些Modbus基础知识,例如simplymodbus.ca常见问题解答有一个地址范围表。

术语";单位";只是一个非常糟糕和令人困惑的名字。我认为它指的是Modbus从设备ID。在同一条总线上可以有多个从设备("单元"(。你可能可以在你的设备上配置它,手册应该告诉你。对于Modbus RTU(而不是Modbus TCP(,如果你选错了号码,你将得不到答案。但请记住,还有一百个其他可能的原因导致你可能无法从设备中得到答案。

如果示波器不工作,最好把它放在触手可及的地方,检查你的设备是否没有发送信号,或者其他设备是否没有应答,或者电压是否错误。还有一个解决问题的机会";盲目地";,仔细检查你所做的每一件事,但这可能会让人沮丧。