The datasheet states:
The application layer use 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), 0x42 (Reset energy).etc.
It also describes reading multiple Input Registers (NOT Holding Registers) as follows:
The command format of the master reads the measurement result is total of 8 bytes) Slave Address + 0x04 + Register Address High Byte + Register Address Low Byte + Number of Registers High Byte + Number of Registers Low Byte + CRC Check High Byte + CRC Check Low Byte.
A simple program calling uart_write_bytes and uart_read_bytes to a PZEM-004T demonstrates the above functions perform as specified, with multiple registers being returned to a buffer and the "reset energy" function doing what it says on the tin. Of course, this does not properly implement the Modbus protocol and is prone to errors. So it is much preferred to use the Free Modbus port.
Unfortunately, it appears the Modbus port does not support reading multiple Input Registers or a way to call the other functions described above i.e. 0x41 (Calibration) and 0x42 (Reset Energy). Is this a shortcoming of the Free Modbus port and can/will these functions be added?