• Shteibezandt_VA released this 2026-07-08 15:37:01 +03:00 | 0 commits to CAN_Protocol since this release

    Описание релиза

    В данном релизе реализованы две ключевые новинки, значительно повышающие удобство и гибкость работы с CAN-сообщениями:

    1. Реализована функция отправки сообщений по CAN

    Обновлена функция PROTOCAN_SEND, которая позволяет отправлять сообщения различных типов, оптимизируя процесс формирования и передачи данных.

    PROTOCAN_StatusTypeDef PROTOCAN_SEND(ProtoCanId_t id, ProtoCanData_t data);

    Аргументы:

    • id — структура типа ProtoCanId_t, должна быть предварительно заполнена пользователем. В обязательном порядке необходимо задать:

    MsgType — тип сообщения из ProtoCanMsgType.
    Route — обязательно установить в PROTOCAN_ROUTE_FROM_DEVICE.
    DeviceType и DeviceID — заполнить согласно текущим определениям CURRENT_TYPE_DEVICE и CURRENT_ID_DEVICE.

    • data — структура типа ProtoCanData_t, должна содержать актуальные данные в зависимости от типа сообщения.

    Структура ProtoCanId_t:

    Имеет поля: MsgBody, MsgType, DeviceID, DeviceType, Route, Priority.
    Используется для формирования идентификатора сообщения.

    Структура ProtoCanData_t:

    В зависимости от MsgType, заполняется одна из вложенных структур:

    CoreData — для типов BROADCAST, DISCRETE, ANALOG.
    GeneralAddressSpaceData — для типа GENERAL_ADDRESS_SPACE.
    ModbusData — для типов Modbus (COIL, DISCRETE, HOLDING, INPUT).
    ErrorData — для типа ERROR.

    2. Расширены возможности приёма CAN сообщений

    Добавлены три варианта приёма сообщений:

    • void PROTOCAN_LoopProcessRxMsgs(void); — бесконечный цикл обработки входящих сообщений. Позволяет непрерывно получать и обрабатывать сообщения, вызывая внутренние функции обработки по типу.
    • PROTOCAN_StatusTypeDef PROTOCAN_ProcessAllRxMsgs(void); — обработка всех доступных сообщений за один вызов. Подходит для обработки очереди сообщений, пока есть новые.
    • PROTOCAN_StatusTypeDef PROTOCAN_ProcessSingleRxMsg(void); — обработка одного доступного сообщения. Удобна в ситуациях, когда необходимо поэлементное или пошаговое получение данных.
    Downloads
  • Shteibezandt_VA released this 2026-06-01 15:20:58 +03:00 | 5 commits to CAN_Protocol since this release

    Описание релиза

    В рамках этого релиза добавлена возможность отправки сообщений по протоколу с помощью функции:

    PROTOCAN_StatusTypeDef PROTOCAN_SEND(ProtoCanId_t id, ProtoCanData_t data);

    Основные изменения

    Отправка по ProtoCan

    Добавлена функция PROTOCAN_SEND, которая позволяет отправлять сообщения по протоколу ProtoCan. Пока что поддерживается только сообщения с типом:
    PROTOCAN_MSGTYPE_GENERAL_ADDRESS_SPACE

    ProtoCanId_t

    Для подготовки сообщения необходимо заполнить структуру ProtoCanId_t, указав:

    • MsgType — значение PROTOCAN_MSGTYPE_GENERAL_ADDRESS_SPACE
    • Route — должно быть PROTOCAN_ROUTE_FROM_DEVICE
    • DeviceType и DeviceID — заполнить согласно текущим определениям CURRENT_TYPE_DEVICE и CURRENT_ID_DEVICE.
    • Остальные поля идентификатора заполняются по необходимости.

    ProtoCanData_t

    Передача данных осуществляется через структуру ProtoCanData_t, которая содержит вложенные структуры с полями, необходимыми для отправки сообщений конкретных типов.
    За PROTOCAN_MSGTYPE_GENERAL_ADDRESS_SPACE отвечает структура GeneralAddressSpaceData с следующими полями:

    • uint16_t RegStartAdr — Начальный адрес регистров.
    • uint16_t *Data — Указатель на массив данных.
    • unsigned RegCount — Количество регистров.

    Массив Data может содержать любое количество регистров, а функция сама сформирует пакеты, необходимые для передачи.

    Downloads
  • Shteibezandt_VA released this 2026-05-29 13:48:42 +03:00 | 7 commits to CAN_Protocol since this release

    Описание релиза

    Это предварительный релиз библиотеки для работы по новому протоколу CAN.
    Протокол.

    Основной функционал

    • Инициализация библиотеки и периферийных устройств
    • Обработка сообщений по CAN в бесконечном цикле
    • Возможность переопределения обработчиков для различных типов сообщений

    Использование

    Инициализация

    После инициализации периферии и запуска CAN необходимо вызвать функцию инициализации.

    Функция:

    PROTOCAN_INIT_StatusTypeDef PROTOCAN_INIT(CAN_HandleTypeDef *tmp_hcan, RTC_HandleTypeDef *tmp_hrtc, TIM_HandleTypeDef *tmp_tim)

    Параметры:

    • tmp_hcan — указатель на используемый hcan.
    • tmp_hrtc — указатель на используемый hrtc.
    • tmp_tim — указатель на используемый htim (Допустим NULL, если в проекте не используются Tim Register Callback)

    Приём сообщений по CAN при использовании Can Register Callback происходит в функции ProtoCanRxFifo0MsgPendingCallback. Если Can Register Callback не используется, то необходимо самостоятельно вызывать функцию в стандартном Callback приёма сообщения.

    Указанный таймер используется для отслеживания времени перед передачей пульса устройства по CAN. В случае, если пользователь не использует Tim Register Callback, то для отправки пульса необходимо самостоятельно вызывать функцию ProtoCanPulseCallback в HAL_TIM_PeriodElapsedCallback любого, выбранного пользователем для пульсации, таймера.

    При использовании Register Callback рекомендуется проверить в отладке корректность инициализации.

    Запуск основного цикла обработки

    Чтобы начать обработку входящих сообщений, вызовите:
    PROTOCAN_LOOP();
    Это — бесконечный цикл, в рамках которого обрабатываются входящие сообщения по CAN.

    Обработка сообщений

    Внутри цикла вызываются __weak функции, которые можно переопределять для обработки различных типов сообщений:

    Функция Назначение
    ProtoCanMsgToBroadcastStatus Обработка запроса статуса по широковещательной рассылке
    ProtoCanMsgToBroadcastOnOff Включение/выключение пульса
    ProtoCanMsgToBroadcastRestart Перезапуск системы
    ProtoCanMsgToBroadcastRtcSetup Настройка RTC через CAN
    ProtoCanMsgToDiscreteAccident Обработка запроса аварийных сообщений
    ProtoCanMsgToDiscreteWarning Обработка запроса предупреждающих сообщений
    ProtoCanMsgToDiscreteControlSignals Обработка запроса управляющих сигналов
    ProtoCanMsgToDiscreteFlags Обработка запроса флагов
    ProtoCanMsgToDiscreteReset Обработка запроса перезапуска устройства
    ProtoCanMsgToDiscreteChangeMode Обработка запроса изменение режима работы
    ProtoCanMsgToDiscreteRequestListOfParameters Обработка запроса параметров системы
    ProtoCanMsgToAnalogUniversal Обработка универсального запроса
    ProtoCanMsgToAnalogUSTAVKI Обработка запроса уставок
    ProtoCanMsgToAnalogUSens Обработка запроса данных датчиков напряжения
    ProtoCanMsgToAnalogISens Обработка запроса данных датчиков тока
    ProtoCanMsgToAnalogTSens Обработка запроса данных датчиков температуры
    ProtoCanMsgToModbusCoil Обработка Modbus Coil
    ProtoCanMsgToModbusDiscrete Обработка Modbus Discrete
    ProtoCanMsgToModbusHolding Обработка Modbus Holding
    ProtoCanMsgToModbusInput Обработка Modbus Input
    Downloads
  • Shteibezandt_VA released this 2026-03-31 12:40:54 +03:00 | 9 commits to CAN_Protocol since this release

    Описание релиза

    Это предварительный релиз библиотеки для работы по новому протоколу CAN.
    Протокол.

    Основной функционал

    • Инициализация библиотеки и периферийных устройств
    • Обработка сообщений по CAN в бесконечном цикле
    • Возможность переопределения обработчиков для различных типов сообщений

    Использование

    Инициализация

    После инициализации периферии и запуска CAN необходимо вызвать функцию инициализации.

    Функция:

    PROTOCAN_INIT_StatusTypeDef PROTOCAN_INIT(CAN_HandleTypeDef *tmp_hcan, RTC_HandleTypeDef *tmp_hrtc, TIM_HandleTypeDef *tmp_tim)

    Параметры:

    • tmp_hcan — указатель на используемый hcan.
    • tmp_hrtc — указатель на используемый hrtc.
    • tmp_tim — указатель на используемый htim (Допустим NULL, если в проекте не используются Tim Register Callback)

    Приём сообщений по CAN при использовании Can Register Callback происходит в функции ProtoCanRxFifo0MsgPendingCallback. Если Can Register Callback не используется, то необходимо самостоятельно вызывать функцию в стандартном Callback приёма сообщения.

    Указанный таймер используется для отслеживания времени перед передачей пульса устройства по CAN. В случае, если пользователь не использует Tim Register Callback, то для отправки пульса необходимо самостоятельно вызывать функцию ProtoCanPulseCallback в HAL_TIM_PeriodElapsedCallback любого, выбранного пользователем для пульсации, таймера.

    Запуск основного цикла обработки

    Чтобы начать обработку входящих сообщений, вызовите:
    PROTOCAN_LOOP();
    Это — бесконечный цикл, в рамках которого обрабатываются входящие сообщения по CAN.

    Обработка сообщений

    Внутри цикла вызываются __weak функции, которые можно переопределять для обработки различных типов сообщений:

    Функция Назначение
    ProtoCanMsgToBroadcastStatus Обработка запроса статуса по широковещательной рассылке
    ProtoCanMsgToBroadcastOnOff Включение/выключение пульса
    ProtoCanMsgToBroadcastRestart Перезапуск системы
    ProtoCanMsgToBroadcastRtcSetup Настройка RTC через CAN
    ProtoCanMsgToDiscreteAccident Обработка запроса аварийных сообщений
    ProtoCanMsgToDiscreteWarning Обработка запроса предупреждающих сообщений
    ProtoCanMsgToDiscreteControlSignals Обработка запроса управляющих сигналов
    ProtoCanMsgToDiscreteFlags Обработка запроса флагов
    ProtoCanMsgToDiscreteReset Обработка запроса перезапуска устройства
    ProtoCanMsgToDiscreteChangeMode Обработка запроса изменение режима работы
    ProtoCanMsgToDiscreteRequestListOfParameters Обработка запроса параметров системы
    ProtoCanMsgToAnalogUniversal Обработка универсального запроса
    ProtoCanMsgToAnalogUSTAVKI Обработка запроса уставок
    ProtoCanMsgToAnalogUSens Обработка запроса данных датчиков напряжения
    ProtoCanMsgToAnalogISens Обработка запроса данных датчиков тока
    ProtoCanMsgToAnalogTSens Обработка запроса данных датчиков температуры
    ProtoCanMsgToModbusCoil Обработка Modbus Coil
    ProtoCanMsgToModbusDiscrete Обработка Modbus Discrete
    ProtoCanMsgToModbusHolding Обработка Modbus Holding
    ProtoCanMsgToModbusInput Обработка Modbus Input
    Downloads