#include #include "br_modbus_reg.h" #include "br_dataset_def.h" ModbusRegDataBlock_t DataBlocks[MODBUS_REG_BLOCK_NUM] = { { .block_id = 1, .address = (uint32_t)(&br_dataset0), .size = sizeof(BR_Dataset0_t) } }; /* private funtion prototype. */ uint8_t modbus_reg_write_process(uint8_t slave, uint16_t startAddr, uint8_t num, uint16_t * dataBuffer); uint8_t modbus_reg_read_process(uint8_t slave, uint16_t startAddr, uint8_t num, uint16_t * dataBuffer); uint8_t modbus_reg_blockdata_set(ModbusRegDataBlock_t *datablock, uint16_t startAddr, uint8_t num, uint16_t * dataBuffer); uint8_t modbus_reg_blockdata_get(ModbusRegDataBlock_t *datablock, uint16_t startAddr, uint8_t num, uint16_t * dataBuffer); /* public functoin definition. */ uint8_t modbus_reg_proxy(ModbusRegRwData_t * rw_data) { uint8_t status = 1; switch (rw_data->operation) { case RW_OPERATION_READ: /* code */ if(modbus_reg_read_process(rw_data->slaveId, rw_data->startAddr, rw_data->num, rw_data->registers)==0) { status = 0; } break; case RW_OPERATION_WRITE: if(modbus_reg_write_process(rw_data->slaveId, rw_data->startAddr, rw_data->num, rw_data->registers) == 0) { status = 0; } break; default: break; } return status; } uint8_t modbus_reg_write_process(uint8_t slaveId, uint16_t startAddr, uint8_t num, uint16_t * dataBuffer) { uint8_t status = 1; /* 在此实现数据写入逻辑 */ uint8_t blockIndex; for(blockIndex=0; blockIndex datablock->size) /* (startAddr+num)*2 每个寄存器数据长度为2字节对应两个内存地址 */ { } else { for(i=0; i datablock->size) /* (startAddr+num)*2 每个寄存器数据长度为2字节对应两个内存地址 */ { } else { for(i=0; iaddress + (startAddr + i)*2 ) ) = *(dataBuffer + i); } status = 0; /* return 0表示没有异常发生 */ } return status; }