update examples
This commit is contained in:
26
README.md
26
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 // Ответ получен с ошибкой или не получен вовсе
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user