universal IO.md 13 KB

Modbus

Определение конца пакета.

  • Если скорость передачи данных больше 19200, то нужно использовать фиксированное время 1750 мкс. В противном случае время должно быть в 3,5 больше времени символа.
  • Таймер настраивается на частоту 50 мкс.
  • В данном проекте управление переключением режима передачи происходит не стороне контроллера. Между включением передатчика и отправкой первого байта пакета необходима задержка. Задержка необходима и между отправкой последнего символа и выключением передатчика. Задержка реализована с помощью аппаратного таймера TIM6. Время задержки соответствует времени передачи двух символов с учетом текущей скорости USART.
    Функции
  • 0x01 (1) - чтение значений из нескольких регистров флагов - Read Coil Status.
  • 0x02 (2) - чтение значений из нескольких дискретных входов - Read Discrete Inputs.
  • 0x03 (3) - чтение значений из нескольких регистров хранения - Read Holding Registers.
  • 0x04 (4) - чтение значений из нескольких регистров ввода - Read Input Registers.
  • 0x05 (5) - запись значения одного флага - Force Single Coil.
  • 0x06 (6) - запись значения в один регистр хранения - Preset Single Register.
  • 0x07 (7) - чтение сигналов состояния - Read Exception Status.
  • 0x08 (8) - диагностика - Diagnostic.
  • 0x0B (11) - чтение счетчика событий - Get Com Event Counter.
  • 0x0C (12) - чтение журнала событий - Get Com Event Log.
  • 0x0F (15) - запись значений в несколько регистров флагов - Force Multiple Coils.
  • 0x10 (16) - запись значений в несколько регистров хранения - Preset Multiple Registers.
  • 0x11 (17) - чтение информации об устройстве - Report Slave ID.
  • 0x14 (20) - чтение из файла - Read File Record.
  • 0x15 (21) - запись в файл - Write File Record.
  • 0x16 (22) - запись в один регистр хранения с использованием маски "И" и маски "ИЛИ" - Mask Write Register.
  • 0x18 (24) - чтение данных из очереди - Read FIFO Queue.
  • 0x2B (43) - Encapsulated Interface Transport.
    Команды и регистры для теста
    Проверить функции для чтения и записи:
  • (0x03) Read Holding Registers. Чтение N регистров управления и уставок.
  • (0x10) Write Multiple registers Запись N регистров управления и уставок (0x10). Адреса тестовых регистров для чтения и записи: 0x30 - лежит значение 123456789 тип uint32_t (4 байта) 0x32 - лежит значение 32768 тип uint16_t (2 байта) 0x34 - лежит значение 1.23456 тип float (4 байта)
    Карта памяти
    0x0800 0000 - 0x0801 FFFF (128кБт) - IAP
    0x0802 0000 - 0x0802 07FF (2кБт) - Основные настройки (SETTINGS)
    0x0802 0800 - 0x0802 0FFF (2кБт) - Системные настройки (SETTINGS_SYS)
    0x0802 1000 - 0x080F FFFF (кБт) - FW 0x0802 1000 - вектора прерываний 0x0802 11F0 - Модель 0x0802 1200 - Остальные данные прошивки

Настройки

// Адрес CRC системных настроек
#define SYS_CRC_ADDRESS                 0x08020FFC

// Контрольное слово системных настроек
#define SETTINGS_CONTROL_WORD           123456789

// Структура системных настроек
typedef struct
{
    uint16_t model;			    // Модель
    char sn[SN_LEN];            // Серийный номер
    char proddate[PROD_LEN];	// Дата производства
    char testState[16];         // Статус тестирования
    uint32_t controlword;       // Контрольное слово
    uint32_t crc;               // CRC
    
} sys_settings_t;

Таймеры

  • TMR_5 - дополнительный таймер для RTC в мс
  • TMR_6 - дополнительный modbus таймер
  • TMR_7 - основной modbus таймер
  • TMR_9 - для выходов PWM (10 Гц частота прерывания)
  • TMR_10 - uptime
  • TMR_12 - таймер функции антидребезга
    TODO
  • Выход из IAP по таймауту после получения первого пакета с ключом и размером.
  • Перенести вызов функции очисти флеш-памяти под FW.
  • Добавить проверку CRC.

Логика
Безопасный режим При включении или обрыве связи по RS-485 интерфейсу дискретные выходы должны переходить в безопасный режим или выставлять последнее полученные настройки для выходов. Включение безопасного режима должно задаваться настройкой. В случае если безопасный режим отключен, то на входах при старте работы модуля или обрыве связи должны выставляться последнее полученные настройки для выходов.
ADC MS5192T (16 бит)

  • Настроить в режиме с включенным буфером.
  • По умолчанию включается режим непрерывного преобразования. * Разное:
  • MS5192T/MS5193T при усилении 1 или 2 работают в режиме без буфера. При увеличении усиления буфер автоматически включается. В режиме с буфером абсолютное входное напряжение ограничено от GND + 100 мВ до AVDD - 100 мВ. При увеличении усиления до 4 или более, включается приборный усилитель. При использовании приборного усилителя абсолютное входное напряжение ограничено от GND + 300 мВ до AVDD - 1.1B. При установке общего режима напряжения пользователь должен учитывать вышеперечисленные ограничения, чтобы не превысить указанные значения и избежать снижения линейной и шумовой характеристики устройства.
  • Коммуникационный регистр
  • Бит 7. (1 - будет запись. 0 - чтение).
  • Бит 6. (0 - следующая операция запись в указанный регистр. 1 - чтение).
  • Биты 5, 4, 3. (биты адреса, какие регистры выбраны для обмена).
  • Бит 2. (вкл/выкл режим непрерывного чтения. Смотри примеры ниже)
  • Биты 1, 0. (всегда 0)

Биты 5, 4, 3: 0 0 0 - Запись в устройство осуществляется в 8и битный коммуникационный регистр 0 0 0 - Чтение из устройства производится из 8-битного регистра состояния 0 0 1 - Регистр режима 16 бит 0 1 0 - Конфигурационный регистр 16 бит 0 1 1 - Регистр данных 16 бит (MS5193T) / 24 бит (MS5192T) 1 0 0 - Регистр ID 8 бит 1 0 1 - Регистр IO 8 бит 1 1 0 - Регистр смещения 16 бит (MS5193T) / 24 бит (MS5192T) 1 1 1 - Регистр полной шкалы 16 бит (MS5193T) / 24 бит (MS5192T)

Примеры:

  • 01011100 - включить режим непрерывного чтения
  • 01011000 - выключить режим непрерывного чтения (при записи сигнал RDY должен быть низким) Регистр состояния Для получения регистра состояния нужно записать в регистр связи: 01000000 В режиме непрерывного чтения до записи инструкции линия DIN должна быть в низком состоянии.

Задачи

  • Реализовать CLI (интерфейс DEBUG UART) для отладочных целей и помощи в разработке ПО.
  • RTC в режиме uint64_t. Настроить аппаратный таймер с частотой в мс и с синхронизацией от модуля RTC. Реализовать API - чтение/запись, синхронизация uinix-time по MODBUS RTU.
  • Реализовать внутренне API для ведения журнала и архива. Создание разделов, добавление/считывание, удаление записей. Создать тестовый модуль для проверки API. Протестировать.
  • Реализовать функции для чтения у управления журналом и логом по MODBUS RTU.

  • Размер архива.

  • Количество записей.

  • Текущая точка записи.

  • Событие изменения периода архива.

    Общие данные ringfs

  • Объем flash-памяти 2МБт - 512 секторов по 4096 байт.

  • Делим память на два одинаковых раздела под журнал событий и архив, оставляя небольшой резерв в начале каждого раздела.

  • Первые 4 сектора (16 кБт) оставим под служебную информацию.

  • Журнал занимает 252 сектора (1008 кБт) и смещен на 4 сектора относительно начала памяти.

  • Архив занимает 252 сектора (1008 кБт) и смещен на 260 (256 + 4) секторов относительно начала памяти.

  • 4 сектора (257, 258, 259 и 260 - служебная информация (резерв))

  • "Файловая система"
    Основные параметры

  • sector_size - размер сектор в байтах. В нашем случае 4096, что соответствует размеру сектора flash-памяти.

  • sector_offset - смещения раздела в секторах

  • sector_count - размер раздела в секторах. Пока журнал и архив по 252 сектора

  • object_size - размер одной записи в байтах

  • slots_per_sector - количество записей в одном слоте.

  • read, write, cursor - структуры с полями sector и slot.

Этапы разработки ПО

  • 100% Проверка всех функциональных модулей (внешний и внутренний ADC, DAC, USB, RTC, внешняя память, индикация, сдвиговые регистры, мультиплексоры).
  • 95% Реализация обновление встроенного ПО. Загрузчик.
  • 100% Разработка модуля работы с общими и системными настройками.
  • 85% Драйверы внешних ADC, DAC, управления режимами цифровых входов/выходов.
  • 80% Реализация Modbus, и разработка карты регистров.
  • 75% Реализация основной логики работы модулей. Безопасный режим работы, установка и считывание значений входов/выходов, различные режимы работы входов/выходов. Настройка о опрос модулей по протоколу Modbus RTU.
  • 75% Разработка модулей архива и журнала событий.
  • 100% Разработка USB драйвера для класса RNDIS
  • 0% Реализация web-интерфейса.

Короткие задачи

  • Настройки порта UART для Modbus RTU.
  • Модель. MDIO_88, MAO_8, MAI_12. Модель определяется в прошивке в файле shared/model/model_cfg.h Модель в строковом виде сохраняется по адресу 0x0802 11F0.