Вот потихонечку думаю подойти к проблеме создания нормального пульт с обратной связью по rs485 интерфейсу.
Хотелось бы обсудить протокол обмена данными
Я планирую использовать 40ногую atmega16 матрицу на клавиатуру в передатчике матрицу по выходам в приемнике портов не хватит потому что мы же еще хотим обратную связь кстати с ней самое интересное там тоже нужно что то мудрить
Open_Pyro писал уже на эту тему
Вот я и добрался до самого интересного – протокола обмена между устройствами….
Почитал про протокол ModBus, ProfBus – получилось что все они сложные для восприятия человеком…. Вернее чтобы человек спокойно мог написать команду не прибегая к переводу между десятичной, шестнадцатеричной и двоичной системой невозможно. По этому решил просто передавать команды в ANSI текстовыми символами и используя десятичную систему исчислений. Для команд будут использоваться большие буквы латиницы "A", "B", "C", "D" и так далее, а все числа будут иметь формат "001".
Предлагаю использовать такой протокол обмена:
UNIT 001 START CH 001
- команда модулю №1 на запуск канала №1.
Прежде всего идет обращение к конкретному модулю.
UNIT 000 - Выбираем модуль с которым работаем
Заканчивается посылка символом
- перенос строки - это нажатие клавиши "ENTER" в программе ТЕРМИНАЛ.
Вот такие команды должен выполнять модуль
Запуск каналов:
START CH 000 Запуск запала №ХХХ
Тестирование и проверка:
TEST CH 000 Проверка запала №ХХХ
TEST V Проверка напряжения питания
TEST T Проверка температуры
PING Отклик (PING)
BEEP Подача звукового сигнала
FLASH Подача светового сигнала
Установка внутренних параметров:
SET ID 000 Установка номер модуля
SET START 000 Установка импульса тока для запала, в миллисекундах.
SET BEEP 000 Установка импульса звукового сигнала, в миллисекундах.
SET BEEP 000 Установка импульса звукового сигнала, в миллисекундах.
В будущем для программирования самого модуля (Прошивка сценария работы в модуль):
1. Синхронизация времени с ПК
2. Старт программы
3. Стоп программы
4. Задать время 00:00.00 (минуты : секунды . долисекунды) для воспламенения канала.
----------------------------------------------------------------------------------------------------------------------
Выбратл протокол ModBus. В прикрепленый файлах подборка материалов по теме.
Думаю использовать стандарт ModBus ANSI где посылки передаются в читаемом режиме ANSI.
Примерный вид посылки
": A1 C1 D1 CC {CR}{LF}"
":" - разделитель посылок
"A1" - адрес устройства (до 247 устройств)
"С1" - команда устройству
"D1" - данные
"СС" - CRC - контрольная сумма
"{CR}{LF}" - символы перевода и возврата строки
передается 4 байта информации "A1 C1 D1 CC"
но по интерфейсу UART ты отправляешь 8 байт - это в виде ANSII "A 1 C 1 D 1 C C"
+ к этому ты начинаешь посылку с ANSII символа ":" и заканчиваешь символом перевода и возврата коретки это два байта в HEX "0D 0A"
Всего по интерфейсу UART ты передаешь 8+3 = 11 байт.
ASCII фрейм.
В ASCII-режиме, сообщение начинается с "двоеточия" (:, ASCII 3A hex), и заканчивается последовательностью "возврат каретки-перевод строки" (CRLF, ASCII 0D и 0A hex).
Допустимые символы для передачи - это шестнадцатиричные цифры 0-9, A-F. Монитор сетевого устройства в сети непрерывно отслеживает символ "двоеточие". Когда он принят, каждое устройство декодирует следующие поле сообщения (поле адреса) и т.д.
Интервалы между символами сообщения могут быть до 1 сек. Если интервал больше, то принимающее устройство распознает это как ошибку. Типичный фрейм сообщения показан ниже.
¦ старт ¦адрес ¦ ф-ия ¦данные¦ LRC ¦конец ¦
+----- +------ +------ +------ +----- +----- +
¦1 сим ¦2 сим ¦2 сим ¦ n сим ¦2 сим¦2 сим ¦
¦ : ¦ ¦ ¦ ¦ ¦CR LF ¦
L----- +------ +------ +------ +----- +------
Исключение: В контроллерах типа 584 и 984A/B/X ASCII-сообщение может нормально заканчиваться после контрольной суммы без CRLF последовательности. Интервалы меньше 1 сек допускаются.
=============================================================================================================================
и так почитаем подумаем и определимся с форматом и основными командами протокола на которые будет реагировать наш пульт