最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

python - Pymodbus ( + v3.8.3): enabling Modbus Function Codes (such as 0x03, 0x04, 0x06...etc) - Stack Overflow

programmeradmin2浏览0评论

This is a follow-on question from a previous posting I made. I am creating Python code to query a slave module using Modbus RTU protocol. The device is the PZEM-004T, version 3 (latest), which is used to monitor AC mains voltage and current consumed by any electrical device. Ningbo - Peacefair manufactures this globally distributed device.

I am using Pymodbus v3.8.3. Pymodbus documentation and the pop-up help available through (for example) VS-Code will mention that a particular line-of-code corresponds to a particular Modbus Function Code. For example:

  • client.read_coils == Modbus function "read coils" == Function Code 0x01
  • client.read_holding_registers == Modbus function "read holding registers", == function code 0x03.

The slave device's datasheet says [edited with the intention of greater clarity]:

The application layer uses the Modbus-RTU protocol to communicate. At present, it only supports function codes such as • 0x03 (Read Holding Register), • 0x04 (Read Input Register), • 0x06 (Write Single Register), • 0x41 (Calibration; for use by the manufacturer), • 0x42 (Reset the memory held at the measurements-results-registry-bits, these being at memory location 0x0005 (LSB; 16 bits total) and at 0x0006 (HSB; 16 bits total)

So far, I have been able to discover Pymodbus master-to-slave commands for 0x04 and 0x06 (and others) but..... 0x41 and 0x42 Modbus-function-codes don't have an obvious Pymodbus equivalent.

Being new to both Modbus and Pymodbus (and Python, generally), I am probably looking in the wrong place, or for the wrong keywords, etc etc.

Can anybody point me in the correct direction? Is any of this information tabulated for quick reference?

This is a follow-on question from a previous posting I made. I am creating Python code to query a slave module using Modbus RTU protocol. The device is the PZEM-004T, version 3 (latest), which is used to monitor AC mains voltage and current consumed by any electrical device. Ningbo - Peacefair manufactures this globally distributed device.

I am using Pymodbus v3.8.3. Pymodbus documentation and the pop-up help available through (for example) VS-Code will mention that a particular line-of-code corresponds to a particular Modbus Function Code. For example:

  • client.read_coils == Modbus function "read coils" == Function Code 0x01
  • client.read_holding_registers == Modbus function "read holding registers", == function code 0x03.

The slave device's datasheet says [edited with the intention of greater clarity]:

The application layer uses the Modbus-RTU protocol to communicate. At present, it only supports function codes such as • 0x03 (Read Holding Register), • 0x04 (Read Input Register), • 0x06 (Write Single Register), • 0x41 (Calibration; for use by the manufacturer), • 0x42 (Reset the memory held at the measurements-results-registry-bits, these being at memory location 0x0005 (LSB; 16 bits total) and at 0x0006 (HSB; 16 bits total)

So far, I have been able to discover Pymodbus master-to-slave commands for 0x04 and 0x06 (and others) but..... 0x41 and 0x42 Modbus-function-codes don't have an obvious Pymodbus equivalent.

Being new to both Modbus and Pymodbus (and Python, generally), I am probably looking in the wrong place, or for the wrong keywords, etc etc.

Can anybody point me in the correct direction? Is any of this information tabulated for quick reference?
Share edited Feb 10 at 20:15 Birdman asked Feb 10 at 20:11 BirdmanBirdman 95 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

pymodbus doesn't have a method for communicating with these function codes. (are they manufacturer specific?)

You can implement your own messages by inheriting ModbusPDU, see examples/custom_msg.py in the pymodbus codebase.

发布评论

评论列表(0)

  1. 暂无评论