Обновить README.md
This commit is contained in:
98
README.md
98
README.md
@@ -39,7 +39,7 @@ git submodule add https://git.arktika.cyou/set506/STM32_Modbus path/to/Modbus
|
|||||||
git submodule update --init --recursive
|
git submodule update --init --recursive
|
||||||
```
|
```
|
||||||
|
|
||||||
2. **Скопируйте файлы конфигурации** в отдельную папку в вашем проекте (вне субмодуля) и удалите `__`:
|
2. **Скопируйте файлы конфигурации** в отдельную папку в вашем проекте (вне субмодуля) и удалите `__` из имени файлов:
|
||||||
|
|
||||||
```
|
```
|
||||||
ProjectRoot/
|
ProjectRoot/
|
||||||
@@ -67,14 +67,14 @@ ProjectRoot/
|
|||||||
|
|
||||||
void USARTx_IRQHandler(void)
|
void USARTx_IRQHandler(void)
|
||||||
{
|
{
|
||||||
RS_UART_Handler(&modbus1);
|
RS_UART_Handler(&hmodbus1);
|
||||||
return;
|
return;
|
||||||
HAL_UART_IRQHandler(&huart);
|
HAL_UART_IRQHandler(&huart);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TIMx_IRQHandler(void)
|
void TIMx_IRQHandler(void)
|
||||||
{
|
{
|
||||||
RS_TIM_Handler(&modbus1);
|
RS_TIM_Handler(&hmodbus1);
|
||||||
return;
|
return;
|
||||||
HAL_TIM_IRQHandler(&htim);
|
HAL_TIM_IRQHandler(&htim);
|
||||||
}
|
}
|
||||||
@@ -100,7 +100,7 @@ ProjectRoot/
|
|||||||
|
|
||||||
// Инициализация Modbus
|
// Инициализация Modbus
|
||||||
MODBUS_FirstInit(&hmodbus1, &mb_huart, &mb_htim);
|
MODBUS_FirstInit(&hmodbus1, &mb_huart, &mb_htim);
|
||||||
MODBUS_Config(&hmodbus1, 1, 1000, MODBUS_MODE_SLAVE);
|
MODBUS_Config(&hmodbus1, MODBUS_DEVICE_ID, MODBUS_TIMEOUT, MODBUS_MODE_SLAVE);
|
||||||
|
|
||||||
// Запуск приема Modbus
|
// Запуск приема Modbus
|
||||||
MODBUS_SlaveStart(&hmodbus1, NULL);
|
MODBUS_SlaveStart(&hmodbus1, NULL);
|
||||||
@@ -116,7 +116,22 @@ ProjectRoot/
|
|||||||
|
|
||||||
```c
|
```c
|
||||||
#include "modbus.h"
|
#include "modbus.h"
|
||||||
|
// Запрос на 1 ID, считать холдинг регистры с 0 адреса 10 штук
|
||||||
|
RS_MsgTypeDef read_hold_cmd = MB_MASTER_READ_HOLDING_REGS(1, 0, 10);
|
||||||
|
// коллбек, вызовется при получении ответа от слейва
|
||||||
|
read_hold[10];
|
||||||
|
void callback_func(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg)
|
||||||
|
{
|
||||||
|
// MB_RespGet_... Чтобы достать нужные данные из ответа
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
// Инициализация HAL
|
// Инициализация HAL
|
||||||
@@ -128,16 +143,11 @@ ProjectRoot/
|
|||||||
|
|
||||||
// Инициализация Modbus
|
// Инициализация Modbus
|
||||||
MODBUS_FirstInit(&hmodbus1, &mb_huart, &mb_htim);
|
MODBUS_FirstInit(&hmodbus1, &mb_huart, &mb_htim);
|
||||||
MODBUS_Config(&hmodbus1, 0, 1000, MODBUS_MODE_MASTER);
|
MODBUS_Config(&hmodbus1, 0, MODBUS_TIMEOUT, MODBUS_MODE_MASTER);
|
||||||
|
|
||||||
|
// Запрос по Modbus
|
||||||
|
MODBUS_MasterRequest(&hmodbus1, &read_hold_cmd, &callback_func);
|
||||||
|
|
||||||
// Запуск приема Modbus
|
|
||||||
// Запрос на 1 ID, считать холдинг регистры с 0 адреса 10 штук
|
|
||||||
RS_MsgTypeDef msg = MB_MASTER_READ_HOLDING_REGS(1, 0, 10);
|
|
||||||
MODBUS_MasterRequest(&hmodbus1, &msg, &callback_func);
|
|
||||||
void callback_func(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg)
|
|
||||||
{
|
|
||||||
// MB_RespGet_... Чтобы достать нужные данные из ответа
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
3.5. Настройка карты данных
|
3.5. Настройка карты данных
|
||||||
@@ -198,11 +208,11 @@ ProjectRoot/
|
|||||||
MB_DATA.HoldRegs.SetpointTemp = 2500;
|
MB_DATA.HoldRegs.SetpointTemp = 2500;
|
||||||
|
|
||||||
// Управление coils
|
// Управление coils
|
||||||
MB_Set_Coil_Local(&MB_DATA.Coils, 0); // Включить Relay1
|
MB_Coil_Set_Local(&MB_DATA.Coils, 0); // Включить Relay1
|
||||||
MB_Reset_Coil_Local(&MB_DATA.Coils, 1); // Выключить Relay2
|
MB_Coil_Reset_Local(&MB_DATA.Coils, 1); // Выключить Relay2
|
||||||
|
|
||||||
// Чтение coil
|
// Чтение coil
|
||||||
if (MB_Read_Coil_Local(&MB_DATA.Coils, 2)) {
|
if (MB_Coil_Read_Local(&MB_DATA.Coils, 2)) {
|
||||||
// Pump включен
|
// Pump включен
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -210,37 +220,37 @@ ProjectRoot/
|
|||||||
В режиме мастера есть функции для получения информации из ответа `MB_RespGet_...()`
|
В режиме мастера есть функции для получения информации из ответа `MB_RespGet_...()`
|
||||||
```c
|
```c
|
||||||
// Чтение регистров: Получить запрошенные регистры
|
// Чтение регистров: Получить запрошенные регистры
|
||||||
uint16_t value;
|
uint16_t value;
|
||||||
if(MB_RespGet_RegisterValue(&MODBUS_MSG, 105, ®_value))
|
if(MB_RespGet_RegisterValue(&MODBUS_MSG, 105, ®_value))
|
||||||
{
|
{
|
||||||
printf("Register 105 value: %d\n", reg_value);
|
printf("Register 105 value: %d\n", reg_value);
|
||||||
}
|
}
|
||||||
// Чтение коилов: Получить запрошенные коилы
|
// Чтение коилов: Получить запрошенные коилы
|
||||||
int state;
|
int state;
|
||||||
if(MB_RespGet_CoilState(&MODBUS_MSG, 25, &coil_state))
|
if(MB_RespGet_CoilState(&MODBUS_MSG, 25, &coil_state))
|
||||||
{
|
{
|
||||||
printf("Coil 25 state: %s\n", coil_state ? "ON" : "OFF");
|
printf("Coil 25 state: %s\n", coil_state ? "ON" : "OFF");
|
||||||
}
|
}
|
||||||
// Чтение диагностики: Получить запрошенныую диагностику
|
// Чтение диагностики: Получить запрошенныую диагностику
|
||||||
uint16_t counter_value;
|
uint16_t counter_value;
|
||||||
if(MB_RespGet_DiagnosticResponse(&MODBUS_MSG, &counter_value))
|
if(MB_RespGet_DiagnosticResponse(&MODBUS_MSG, &counter_value))
|
||||||
{
|
{
|
||||||
printf("Counter value: %d\n", counter_value);
|
printf("Counter value: %d\n", counter_value);
|
||||||
}
|
}
|
||||||
// Чтение идентификаторов: Получить запрошенные идентификаторы
|
// Чтение идентификаторов: Получить запрошенные идентификаторы
|
||||||
uint8_t length;
|
uint8_t length;
|
||||||
char vendor_name[64];
|
char vendor_name[64];
|
||||||
if(MB_RespGet_ObjectById(&MODBUS_MSG, 0x00, vendor_name, &length))
|
if(MB_RespGet_ObjectById(&MODBUS_MSG, 0x00, vendor_name, &length))
|
||||||
{
|
{
|
||||||
printf("Vendor Name: %s (length: %d)\n", vendor_name, length);
|
printf("Vendor Name: %s (length: %d)\n", vendor_name, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t obj_id, obj_length;
|
uint8_t obj_id, obj_length;
|
||||||
char obj_data[64];
|
char obj_data[64];
|
||||||
if(MB_RespGet_ObjectByIndex(&MODBUS_MSG, 0x00, &obj_id, obj_data, &obj_length))
|
if(MB_RespGet_ObjectByIndex(&MODBUS_MSG, 0x00, &obj_id, obj_data, &obj_length))
|
||||||
{
|
{
|
||||||
printf("First object - ID: 0x%02X, Data: %s\n", obj_id, obj_data);
|
printf("First object - ID: 0x%02X, Data: %s\n", obj_id, obj_data);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user