feat(slave_node): Implement uptime registers
- Add a callback for reading Modbus input registers. - Implement logic to provide the system uptime in seconds, split across two 16-bit registers (UPTIME_SECONDS_LOW at 0x00F3 and UPTIME_SECONDS_HIGH at 0x00F4) as per documentation. - Return 0 for unhandled registers to prevent "Invalid data" errors with certain Modbus masters.
This commit is contained in:
parent
1067796df4
commit
032ddf2cc0
|
|
@ -68,11 +68,33 @@ static int holding_reg_wr(uint16_t addr, uint16_t reg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int input_reg_rd(uint16_t addr, uint16_t *reg)
|
||||
{
|
||||
uint32_t uptime_s = k_uptime_get_32() / 1000;
|
||||
|
||||
switch (addr) {
|
||||
case 0x00F3:
|
||||
*reg = (uint16_t)(uptime_s & 0xFFFF);
|
||||
break;
|
||||
case 0x00F4:
|
||||
*reg = (uint16_t)(uptime_s >> 16);
|
||||
break;
|
||||
default:
|
||||
*reg = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
LOG_INF("Input register read, addr %u, value %u", addr, *reg);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct modbus_user_callbacks mbs_cbs = {
|
||||
.coil_rd = coil_rd,
|
||||
.coil_wr = coil_wr,
|
||||
.holding_reg_rd = holding_reg_rd,
|
||||
.holding_reg_wr = holding_reg_wr,
|
||||
.input_reg_rd = input_reg_rd,
|
||||
};
|
||||
|
||||
const static struct modbus_iface_param server_param = {
|
||||
|
|
@ -117,4 +139,4 @@ int main(void)
|
|||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue