release 0.5 (*API CHANGED)
- чуть переделаны некоторые дефайны для универсализации - смена направления сделана через указател на функцию, а не глобальный дефайн - добавлен бета осцилограф модбас - некоторый рефакторинг
This commit is contained in:
111
Inc/modbus_oscil.h
Normal file
111
Inc/modbus_oscil.h
Normal file
@@ -0,0 +1,111 @@
|
||||
/**
|
||||
*******************************************************************************
|
||||
* @file modbus_oscil.h
|
||||
* @brief Заголовочный файл модуля осциллографа через MODBUS.
|
||||
*******************************************************************************
|
||||
* @addtogroup MODBUS_OSCIL Modbus Oscilloscope
|
||||
* @ingroup MODBUS
|
||||
* @brief Модуль для сбора и хранения данных осциллографа
|
||||
* @details
|
||||
* Реализует кольцевой буфер для хранения данных с нескольких каналов
|
||||
* с возможностью чтения через Modbus. Данные 8-битные, упаковываются
|
||||
* по 2 сэмпла в 16-битный регистр Modbus.
|
||||
*
|
||||
* Карта Modbus регистров (адрес относительный):
|
||||
* | Адрес | Биты | Назначение | Диапазон | Описание |
|
||||
* |--------|------|------------|----------|----------|
|
||||
* | 0x0000 | 0-3 | channels | 1-16 | Количество каналов |
|
||||
* | | 4-7 | reserved | 0 | Зарезервировано |
|
||||
* | | 8-15 | buffer_size| 1-125 | Размер буфера в регистрах |
|
||||
* | 0x0001 | 0-7 | tail | 0-124 | Начало новых данных |
|
||||
* | | 8-15 | head | 0-124 | Конец новых данных |
|
||||
* | 0x0002...| 0-15| data | - | Буфер данных |
|
||||
* @{
|
||||
******************************************************************************/
|
||||
#ifndef __MODBUS_OSCIL_H_
|
||||
#define __MODBUS_OSCIL_H_
|
||||
|
||||
#include "modbus_core.h"
|
||||
|
||||
#ifdef MODBUS_ENABLE_OSCIL
|
||||
|
||||
|
||||
/**
|
||||
* @brief Структура конфигурации осциллографа
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
/* Адрес 0 */
|
||||
uint16_t Overrun:1; ///< Overrun
|
||||
uint16_t NumbOfChannels:4; ///< Количество каналов (1-16)
|
||||
uint16_t BufferSize:7; ///< Размер буфера в регистрах (1-125)
|
||||
|
||||
uint16_t SampleTime; ///< Адрес 1: Время между сэмплами в мкс/мс
|
||||
uint16_t reserved[2]; ///< Резерв
|
||||
uint32_t LastTick; ///< Адрес 4-5: Время последнего добавления (uint32_t)
|
||||
} MB_ConfigTypeDef;
|
||||
|
||||
/**
|
||||
* @brief Структура указателей буфера
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint16_t Head:8; ///< Указатель на последний записанный байт
|
||||
uint16_t Tail:8; ///< Указатель на начало непрочитанных данных (байты)
|
||||
} MB_PreambleTypeDef;
|
||||
|
||||
/**
|
||||
* @brief Основная структура осциллографа
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
MB_ConfigTypeDef Config; /*!< @brief Отн. Адрес 0-6: Конфигурация */
|
||||
uint16_t User[4]; /*!< @brief Отн. Адрес 6-9: Пользовательские регистры */
|
||||
MB_PreambleTypeDef Preamble; /*!< @brief Отн. Адрес 10: Указатели head и tail буфера */
|
||||
uint8_t Data[MbData_size*2-1]; ///< /*!< @brief Отн. Адрес 11-131: Буфер данных (в байтах) */
|
||||
} MB_OscilTypeDef;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @addtogroup MODBUS_OSCIL_API API for Oscilloscope
|
||||
* @ingroup MODBUS_OSCIL
|
||||
* @brief API для работы с буфером осциллографа
|
||||
* @details Примеры использования:
|
||||
* @code
|
||||
* MB_OscilTypeDef oscil;
|
||||
*
|
||||
* // Инициализация осциллографа
|
||||
* MB_Oscil_Init(&oscil, 120, 4, 1000);
|
||||
*
|
||||
* // В цикле сбора данных
|
||||
* uint8_t ch_data[4] = {adc1, adc2, adc3, adc4};
|
||||
* MB_Oscil_Add(&oscil, ch_data);
|
||||
*
|
||||
* // После чтения данных через Modbus
|
||||
* MB_Oscil_UpdateTail(&oscil);
|
||||
* @endcode
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Инициализация структуры осциллографа */
|
||||
HAL_StatusTypeDef MB_Oscil_Init(MB_OscilTypeDef *oscil, uint8_t BufferSize, uint8_t NumbOfChannels, uint16_t SampleTime);
|
||||
|
||||
/* Добавление данных всех каналов в буфер */
|
||||
HAL_StatusTypeDef MB_Oscil_Add(MB_OscilTypeDef *oscil, uint8_t *Data);
|
||||
|
||||
/* Обновление указателя Tail */
|
||||
HAL_StatusTypeDef MB_Oscil_UpdateTail(MB_OscilTypeDef *oscil);
|
||||
|
||||
/** MODBUS_OSCIL_API
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif //MODBUS_ENABLE_OSCIL
|
||||
|
||||
#endif //__MODBUS_OSCIL_H_
|
||||
|
||||
/** MODBUS_OSCIL
|
||||
* @}
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user