Hi NCD Team,
We’re setting up our first RS-485 Wireless Transmitter (Type 539) and are having trouble reading data from a Schneider PM8000 power meter. We’ve managed to get a simple register to read, but we’re failing on all complex registers (like FLOAT32) and are hoping for some expert advice.
Here is a complete summary of our setup and everything we’ve tried.
1. Hardware & Software Setup
- Sensor: NCD RS-485 Wireless Transmitter (Type 539)
- Meter: Schneider PM8000 Power Meter
- Gateway: Robustel Edge Gateway running Node-RED
2. What We Have Confirmed
We are confident that our wiring (A/B) and the Schneider meter’s base configuration are correct.
-
Meter Settings:
- Slave ID: 1
- Baud Rate: 9600 (8N1)
- Timeout: ~3-8 seconds
-
ModScan (TCP/IP) Test:
- We can successfully connect to the PM8000 using ModScan over Modbus TCP/IP.
- Using ModScan, we can poll all registers (both “Year” and “Voltage”, etc) using Function Code 0x03 (Read Holding Registers).
- We get the correct HEX values and can convert them to decimal (e.g., 2025 for the year, ~600 for voltage).
- This proves the meter is online, the Slave ID is correct, and the registers exist where we expect them.
3. What Works (The NCD Success Case)
We configured the NCD sensor to read a single, simple register:
- NCD Config:
Function Code: 0x03 - Read Holding RegistersSlave ID: 1Baud Rate: 9600Registers to Read: 1Register 1: 1836 (This is “Year”, which is 1837 on the Schneider map. We’ve adjusted for the 0-based indexing).
- Result: SUCCESS.
- The NCD sensor payload in Node-RED shows
data: [7, 233]. - Our Node-RED parser correctly converts this to 2025.
- This test proves our Wiring, Slave ID, and Baud Rate are all correct.
- The NCD sensor payload in Node-RED shows
4. What Fails (The Problem)
The failure happens when we try to add a FLOAT32 register (which spans 2 Modbus registers).
- NCD Config:
Function Code: 0x03 - Read Holding Registers (Kept the same)Slave ID: 1Baud Rate: 9600Registers to Read: 3Register 1: 1836 (Year)Register 2: 3025 (Start of “Voltage L-L Avg”)Register 3: 3026 (End of “Voltage L-L Avg”)
- Result: FAILURE.
- The “Year” register (1836) still reads correctly, but the voltage registers return error bytes.
- The payload in Node-RED is:
data: [7, 233, 128, 0, 128, 0] - Our parser correctly gets
Year: 2025from[7, 233], but the[128, 0, 128, 0]bytes are parsed as0.
5. Our Core Assumption & Question
This is where we are stuck. We are confident we should be using Function Code 0x03 (Holding Registers) because ModScan works with 0x03 for all registers (Year and Voltage).
However, maybe “Year” (1836) is a config register, while “Voltage” (3025) is a live measurement?
Why ModScan can get everything with 0x03 is confusing, but this is our best guess for the NCD failure.
6. Other Settings We’ve Tried (No Change)
- Stay On Mode: Tried
EnabledandDisabled. No change. - RX Timeout: Tried
2,3, and10seconds (with the PM8000 timeout set lower). No change. - Read Retries: Tried
1and3. No change. - Sub Device Type: Set to
1(don’t think this matters).
Our Specific Questions
- Are there any other NCD settings (
Boot Time,RX Timeout, etc.) that are known to cause this specific “partial read” failure with Schneider meters?
Thanks for any help you can provide. We have several of these to set up and are stuck on this final step.
Latest setup:
and
{“topic”:“sensor_data”,“data”:{“nodeId”:0,“firmware”:4,“battery”:“1.83”,“battery_percent”:“-64.25”,“counter”:152,“sensor_type”:539,“sensor_data”:{“subdevice_type”:1,“number_of_registers”:5,“status_24_31”:0,“status_16_23”:0,“status_8_15”:0,“status_0_7”:31,“data”:[128,0,128,0,128,0,128,0,7,233]},“sensor_name”:“RS485 Modbus Wireless Converter”,“type”:“sensor_data”,“addr”:“00:13:a2:00:42:3d:03:91”,“received”:1763159646319,“original”:{“mac”:“00:13:a2:00:42:3d:03:91”,“receive_options”:{“ack”:0,“broadcast”:0,“type”:“”},“data”:[127,0,4,2,57,152,2,27,0,1,5,0,0,0,31,128,0,128,0,128,0,128,0,7,233],“rssi”:{},“type”:“receive_packet”},“rssi”:81,“modem_mac”:“00:13:A2:00:42:3B:1B:B0”},“payload”:{“subdevice_type”:1,“number_of_registers”:5,“status_24_31”:0,“status_16_23”:0,“status_8_15”:0,“status_0_7”:31,“data”:[128,0,128,0,128,0,128,0,7,233]},“time”:1763159646324,“_msgid”:“da0fef7b86c8e833”}
