diff --git a/Inc/modbus.h b/Inc/modbus.h index 329474e..309bbc4 100644 --- a/Inc/modbus.h +++ b/Inc/modbus.h @@ -52,7 +52,7 @@ if(hmodbus->RS_STATUS == RS_OK) // Получен ответ без ошибок { - for(int addr = MODBUS_MSG.Addr; addr < MODBUS_MSG.Addr + MODBUS_MSG.Qnt; addr++) + for(int addr = modbus_msg->Addr; addr < modbus_msg->Addr + modbus_msg->Qnt; addr++) { // Запись регистров из ответа в массив uint16_t value; diff --git a/Inc/modbus_master.h b/Inc/modbus_master.h index 7b0b7a9..a13a470 100644 --- a/Inc/modbus_master.h +++ b/Inc/modbus_master.h @@ -118,7 +118,7 @@ int MB_RespGet_RegisterValue(RS_MsgTypeDef *modbus_msg, uint16_t reg_addr, uint1 * } * * // Пример: Получить состояние всех запрошенных coils - * for(int addr = MODBUS_MSG.Addr; addr < MODBUS_MSG.Addr + MODBUS_MSG.Qnt; addr++) + * for(int addr = modbus_msg->Addr; addr < modbus_msg->Addr + modbus_msg->Qnt; addr++) * { * int state; * if(MB_RespGet_CoilState(modbus_msg, addr, &state)) diff --git a/README.md b/README.md index 0690d66..edcff7d 100644 --- a/README.md +++ b/README.md @@ -124,33 +124,29 @@ int main(void) ```c #include "modbus.h" -// Инициализация Modbus -MODBUS_FirstInit(&hmodbus1, &mb_huart, &mb_htim, &SetTxDirectionFunc); -MODBUS_Config(&hmodbus1, 0, MODBUS_TIMEOUT, MODBUS_MODE_MASTER); - - // Запрос на 1 ID, считать холдинг регистры с 0 адреса 10 штук // При получении ответа вызовется функция callback_func() -RS_MsgTypeDef msg = MB_REQUEST_READ_HOLDING_REGS(1, 0, 10); -MODBUS_MasterRequest(&hmodbus1, &msg, &callback_func); +RS_MsgTypeDef read_hold_cmd = MB_REQUEST_READ_HOLDING_REGS(1, 0, 10); // коллбек, вызовется при получении ответа от слейва -read_hold[10]; +uint16_t read_hold[10]; void callback_func(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg) { // MB_RespGet_... Чтобы достать нужные данные из ответа if(hmodbus->RS_STATUS == RS_OK) // Получен ответ без ошибок { - for(int addr = MODBUS_MSG.Addr; addr < MODBUS_MSG.Addr + MODBUS_MSG.Qnt; addr++) + for(int addr = modbus_msg->Addr; addr < modbus_msg->Addr + modbus_msg->Qnt; addr++) { - // Запись регистров из ответа в массив - uint16_t value; - if(MB_RespGet_RegisterValue(&MODBUS_MSG, addr, &value)) - { - read_hold[i] = value; - } + // Запись регистров из ответа в массив + uint16_t value; + if(MB_RespGet_RegisterValue(modbus_msg, addr, &value)) + { + read_hold[i] = value; + } } + // Или так + MB_RespGet_RegisterAll(modbus_msg, read_hold); // копирует все принятые регистр из modbus_msg в read_hold в количестве Qnt } else // Ответ получен с ошибкой или не получен вовсе {