Loading...
Searching...
No Matches
Main API for Modbus Library
Modbus tools

Публичные функции библиотеки More...

Collaboration diagram for Main API for Modbus Library:

## Topics

| Legacy API
| Старые API функций, сохранённые для обратной совместимости.
| API for Data Access
| API для доступа к данным модбас внутри программы
| API for Master Requests
| API для формирования фрейма-запроса в режиме мастер

## Macros

#define | MODBUS_MODE_MASTER 1
| Псевдо-enum: Режим мастер
#define | MODBUS_MODE_SLAVE 0
| Псевдо-enum: Режим слейв

## Functions

HAL_StatusTypeDef | MODBUS_FirstInit (RS_HandleTypeDef *hmodbus, UART_HandleTypeDef *huart, TIM_HandleTypeDef *htim)
| Инициализация периферии модбас.
HAL_StatusTypeDef | MODBUS_Config (RS_HandleTypeDef *hmodbus, uint8_t ID, uint16_t Timeout, uint8_t master)
| Программная конфигурация модбас.
HAL_StatusTypeDef | MODBUS_SlaveStart (RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg)
| Запуск слейв модбас.
HAL_StatusTypeDef | MODBUS_MasterRequest (RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg, void(*pClbk)(RS_HandleTypeDef *, RS_MsgTypeDef *))
| Реквест мастера модбас.

## Detailed Description

Публичные функции библиотеки

Объединяющий файл для подключения всей функциональности Modbus. Подключает все необходимые модули:

# Инструкция по подключению

Для корректной работы надо:

- Подключить обработчики RS_UART_Handler(), RS_TIM_Handler(), в соответствубщие низкоуровневые прерывания UART_IRQHandler, TIM_IRQHandler вместо HAL'овского обработчика
- В modbus_config.h настроить дефайны для нужной работы UART
- Инициализировать хендл мобдас. По умолчанию глобально создается hmodbus1
- После для запуска Modbus:
  //----------------Слейв модбас----------------//
  #include "modbus.h"
  MODBUS_FirstInit(&hmodbus1, &huart1, &htim3);
  MODBUS_Config(&hmodbus1, MODBUS_DEVICE_ID, MODBUS_TIMEOUT, MODBUS_MODE_SLAVE);
  MODBUS_SlaveStart(&hmodbus1, NULL);
  MODBUS_TIMEOUT
  #define MODBUS_TIMEOUT
  Таймаут в тиках таймера
  Definition modbus_config.h:26
  MODBUS_DEVICE_ID
  #define MODBUS_DEVICE_ID
  Адрес устройства в сети Modbus.
  Definition modbus_config.h:25
  MODBUS_Config
  HAL_StatusTypeDef MODBUS_Config(RS_HandleTypeDef *hmodbus, uint8_t ID, uint16_t Timeout, uint8_t master)
  Программная конфигурация модбас.
  Definition modbus.c:72
  MODBUS_SlaveStart
  HAL_StatusTypeDef MODBUS_SlaveStart(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg)
  Запуск слейв модбас.
  Definition modbus.c:105
  MODBUS_FirstInit
  HAL_StatusTypeDef MODBUS_FirstInit(RS_HandleTypeDef *hmodbus, UART_HandleTypeDef *huart, TIM_HandleTypeDef *htim)
  Инициализация периферии модбас.
  Definition modbus.c:42
  MODBUS_MODE_SLAVE
  #define MODBUS_MODE_SLAVE
  Псевдо-enum: Режим слейв
  Definition modbus.h:117
  hmodbus1
  RS_HandleTypeDef hmodbus1
  Default Handle for Modbus.
  Definition modbus.c:24
  modbus.h
  Главный заголовочный файл Modbus библиотеки
  //----------------Мастер модбас----------------//
  #include "modbus.h"
  MODBUS_FirstInit(&hmodbus1, &huart1, &htim3);
  MODBUS_Config(&hmodbus1, 0, MODBUS_TIMEOUT, MODBUS_MODE_MASTER);
  // Запрос на 1 ID, считать холдинг регистры с 0 адреса 10 штук
  RS_MsgTypeDef msg = MB_REQUEST_READ_HOLDING_REGS(1, 0, 10);
  MODBUS_MasterRequest(&hmodbus1, &msg, &callback_func);
  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++)
  {
  uint16_t value;
  if(MB_RespGet_RegisterValue(&MODBUS_MSG, addr, &value))
  {
  read_hold[i] = value;
  }
  }
  }
  }
  MODBUS_MasterRequest
  HAL_StatusTypeDef MODBUS_MasterRequest(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg, void(*pClbk)(RS_HandleTypeDef *, RS_MsgTypeDef *))
  Реквест мастера модбас.
  Definition modbus.c:136
  MODBUS_MODE_MASTER
  #define MODBUS_MODE_MASTER
  Псевдо-enum: Режим мастер
  Definition modbus.h:113
  MODBUS_MSG
  RS_MsgTypeDef MODBUS_MSG
  Default Message Struct for Modbus.
  Definition modbus.c:25
  MB_RespGet_RegisterValue
  int MB_RespGet_RegisterValue(RS_MsgTypeDef *modbus_msg, uint16_t reg_addr, uint16_t *reg_value)
  Получить значение регистра в ответе по его адресу
  Definition modbus_master.c:63
  MB_REQUEST_READ_HOLDING_REGS
  RS_MsgTypeDef MB_REQUEST_READ_HOLDING_REGS(uint8_t slave_addr, uint16_t start_addr, uint16_t quantity)
  Сформировать запрос на чтение холдинг регистров
  Definition modbus_master.c:598
  RS_HandleTypeDef
  Handle for RS communication.
  Definition rs_message.h:228
  RS_HandleTypeDef::RS_STATUS
  RS_StatusTypeDef RS_STATUS
  Статус RS.
  Definition rs_message.h:247
  RS_MsgTypeDef
  Structure for modbus messsage.
  Definition modbus_core.h:177

# Подключаемые модули:

- rs_message.h - работа с uart
- modbus_core.h - базовые определения
- modbus_coils.h - работа с дискретными выходами
- modbus_holdregs.h - работа с регистрами хранения
- modbus_inputregs.h - работа с входными регистрами
- modbus_devid.h - идентификация устройства
- modbus_diag.h - диагностика modbus

# Структура данных Modbus

#### Holding/Input Registers:

- Регистры — 16-битные слова. Доступ к регистрам осуществляется через указатель.
  Таким образом, сами регистры могут представлять собой как массив так и структуру.

#### Coils:

- Coils — это биты, упакованные в 16-битные слова. Доступ к коилам осуществляется через указатель.
  Таким образом, сами коилы могут представлять собой как массив так и структуру.

## Macro Definition Documentation

## MODBUS_MODE_MASTER

#define MODBUS_MODE_MASTER 1

Псевдо-enum: Режим мастер

Definition at line 113 of file modbus.h.

## MODBUS_MODE_SLAVE

#define MODBUS_MODE_SLAVE 0

Псевдо-enum: Режим слейв

Definition at line 117 of file modbus.h.

## Function Documentation

## MODBUS_FirstInit()

HAL_StatusTypeDef MODBUS_FirstInit | ( | RS_HandleTypeDef * | hmodbus,
|  | UART_HandleTypeDef * | huart,
|  | TIM_HandleTypeDef * | htim )

Инициализация периферии модбас.

Parameters

  hmodbus | Указатель на хендлер RS
  huart | Указатель на хендлер UART
  htim | Указатель на хендлер TIM

Подключает хендлы периферии к hmodbus Конфигурация выставляется по умолчанию из modbus_config.h

Definition at line 42 of file modbus.c.

## MODBUS_Config()

HAL_StatusTypeDef MODBUS_Config | ( | RS_HandleTypeDef * | hmodbus,
|  | uint8_t | ID,
|  | uint16_t | Timeout,
|  | uint8_t | master )

Программная конфигурация модбас.

Parameters

  hmodbus | указатель на хендлер RS
  Timeout | Время тишины между двумя байтами после которых перезапускается прием
  master | Режим мастер (пока не сделан)

Конфигурирует ID, таймаут и режим hmodbus

Definition at line 72 of file modbus.c.

## MODBUS_SlaveStart()

HAL_StatusTypeDef MODBUS_SlaveStart | ( | RS_HandleTypeDef * | hmodbus,
|  | RS_MsgTypeDef * | modbus_msg )

Запуск слейв модбас.

Parameters

  hmodbus | Указатель на хендлер RS.
  modbus_msg | Указатель на структуру сообщения. (NULL чтобы использовать дефолтную)

Конфигурирует ID, таймаут и режим hmodbus

Definition at line 105 of file modbus.c.

## MODBUS_MasterRequest()

HAL_StatusTypeDef MODBUS_MasterRequest | ( | RS_HandleTypeDef * | hmodbus,
|  | RS_MsgTypeDef * | modbus_msg,
|  | void(* | pClbk )(RS_HandleTypeDef *, RS_MsgTypeDef *) )

Реквест мастера модбас.

Parameters

  hmodbus | Указатель на хендлер RS.
  modbus_msg | Указатель на структуру сообщения

Конфигурирует ID, таймаут и режим hmodbus

Definition at line 136 of file modbus.c.