Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: aLink
Шарага > Soft - НЕ железо > Программирование МК
_pasha
Привет!
Представляю Вашему вниманию крошечный протокольчик, кастрированный донельзя модбас-аскии.
Пояснения в комментариях к исходникам
Долго мне не нравилось то, что я использовал ранее.
Теперь, наконец-то, родилось такое:
Код
контроллер         размер кода модуля
ATTINY2313                    320
AT91sam7s64                  368

Здесь и далее ГЦЦ -Os

Нажмите для просмотра прикрепленного файла

Переписалось оно только вчерась, с нуля, благо, писать там нечего, если кто заинтересуется, милости просим потестить. Или идеи еще обрЭзать толщину длины smile.gif
Сейчас один добрый дядька озадачил проектом, а там десяток устройств 6 разных типов, причем есть штучки, которые ну очень впадлу делать на чем-то сложнее тиньки2313. В общем, туда его и прикручу.
И я очень хочу , шоб оно всем понравилось. Простота приятна быстротой освоения smile.gif

ЗЫ tst.dsn это для протеуса.

ЗЗЫ вспомнил про существование wake
На такой футпринт он тоже ложится хорошо. Такшта будет и wLink smile.gif
Прохожий
Цитата(_pasha @ 7.1.2012, 14:42) *
Привет!
Представляю Вашему вниманию крошечный протокольчик, кастрированный донельзя модбас-аскии.
...

ПМСМ, лишние сущности в виде управляющих структур и хендлов не нужны.
Это с одной стороны. А с другой стороны не достигнут уровень абстракции от железа.
_pasha
Цитата(Прохожий @ 7.1.2012, 13:08) *
ПМСМ, лишние сущности в виде управляющих структур и хендлов не нужны.
Это с одной стороны. А с другой стороны не достигнут уровень абстракции от железа.

Не, я в эту игру уже устал играть. 5 лишних байт поверх буфера для тиньки 2313 - это пмсм нормальный компромисс.
Кроме того, меня всегда коробит необходимость конкретизации HAL где-то в другом месте, кроме файла с main()
Кроме того, есть класс устройств, содержащие в себе и мастер и слейв, например, вместо мультимастера, который будет жить хорошо или над CAN или над -забыл как называется это автомобильное включение драйвера RS485-
Так вот, вместо мультимастера взяли и договорились, что мастер может делегировать свои обязанности любому из слейвов. Во как, оказываеццо! А хендл при этом один - только коллбэк поменяли и все.
А уж там, где уартов несколько, и подавно - хендлы рулят.
Это все замечательно, но я еще не тестил на мелких ПИКах.
Прохожий
Цитата(_pasha @ 7.1.2012, 15:19) *
Не, я в эту игру уже устал играть. 5 лишних байт поверх буфера для тиньки 2313 - это пмсм нормальный компромисс.
Кроме того, меня всегда коробит необходимость конкретизации HAL где-то в другом месте, кроме файла с main()

Мы всегда забываем про уровень №2 над всем этим.
Сиречь регистровую модель. А главное в этом деле именно она. Это и есть HAL. И она - эта модель, зависит от задачи.
Но именно с этого места эту задачу можно отдать другому программисту или соратнику по борьбе на другом(-их) концах интерфейса.
По сравнению с ее обслуживанием, количество кода для организации связи с CRC "на лету" абсолютно незначительно.
Хоть ASCII, хоть RTU. И подправить его под конкретную реализацию - дело 20 минут.
Именно о них мы сейчас ведем спор.
Проще принять как аксиому - каждая программа - уникальна.
И жить с этим...
Кроме этого - набор данных в управляющей структуре, типы этих данных, форма самой структуры сильно зависит от автора.
В данном случае от Вас. И то, что кажется очевидным и правильным Вам, не является таковым для меня. Этим и плохи лишние сущности.
И мне, как рядовому юзверю, проще разобраться с первичным, т. е. с Modbus over serial line и сделать так, как я считаю нужным, чем разбираться с ходом Ваших мыслей, мне непонятных. Тем более, что это "вторяк".
ПМСМ, такие вещи надо делать, исходя из стандарта. Там про управляющие структуры ничего нет. Зато есть описание команд, их коды, деталировка полей, правила отбраковки телеграмм, правила расчета CRC и много чего еще.
Заранее приношу извинения, если что не так и что-то звучит излишне резко.
Все эмоции не направлены ни на кого лично.

_pasha
Цитата(Прохожий @ 7.1.2012, 15:05) *
Все эмоции...

В общем, пока тут звучала критика, появился и бинарный режим smile.gif
А назовем-ка его bLink
Суть:
Начало сообщения по некоему внешнему признаку.
Для физики RS485 это сигнал <break>, одновременно "продувающий" линию перед передачей
Далее, идут байты и на лету при приеме считается X-modem CRC16
Признак конца сообщения- подсчитанная СRC16 равна нулю, т.е. передающая сторона завершает пакет полем CRC16
По футпринтам различий практически нет, у хендла появился лишний байт, соответствующие put/get тоже чуть расширены.
Про то, что оно еще более влезает в тиньку, я вообще молчу smile.gif

Такой канальный уровень мне по душе. И всё тут.
Прохожий
Цитата(_pasha @ 7.1.2012, 18:30) *
Для физики RS485 это сигнал <break>, одновременно "продувающий" линию перед передачей

Нету этого в стандарте на RTU.
Цитата(_pasha @ 7.1.2012, 18:30) *
Такой канальный уровень мне по душе. И всё тут.

К сожалению, прикладного смысла он не имеет.
Типа только для обучения.

P.S. Для экономии места под буфер я бы еще и упаковку/распаковку ASCII "на лету" делал.
В ASCII варианте протокола, естественно.
_pasha
Цитата(Прохожий @ 7.1.2012, 16:46) *
P.S. Для экономии места под буфер я бы еще и упаковку/распаковку ASCII "на лету" делал.
В ASCII варианте протокола, естественно.

Вот видите, не читали :(
Само собою, там всё это есть.

Насчет RTU - оно настолько паразитически придумано, что гонять по одному сегменту сети что-либо, кроме RTU, невозможно.
Вот с ASCII - пожалуйста, - заменить разделители пакетов - и всё - полностью ортогонально к модбасу. Более того, я так и делал однажды, благо, мастер модбасовский был мой. Никто не пересекается.

А прикладной смысл есть. Раз оно влазит в игольное ушкО, значит, есть. Надо только пропагандировать.
Прохожий
Цитата(_pasha @ 7.1.2012, 18:55) *
Вот видите, не читали :(
Само собою, там всё это есть.

Читать то читал, но не увидел.
Слишком там у Вас все мудрено.
Цитата(_pasha @ 7.1.2012, 18:55) *
Насчет RTU - оно настолько паразитически придумано, что гонять по одному сегменту сети что-либо, кроме RTU, невозможно.
Вот с ASCII - пожалуйста, - заменить разделители пакетов - и всё - полностью ортогонально к модбасу. Более того, я так и делал однажды, благо, мастер модбасовский был мой. Никто не пересекается.

Мы гоняли разные протоколы по одному физическому сегменту. Все устройства - дядины. Среди всего прочего был Modbus/RTU от частотников.
Все работало. И по сей день работает.
А свои Modbus девайсы я всенепременно проверяю в совокупности с дядиными девайсами. Благо, такая возможность имеется.
Цитата(_pasha @ 7.1.2012, 18:55) *
А прикладной смысл есть. Раз оно влазит в игольное ушкО, значит, есть. Надо только пропагандировать.

Оно и так туда влазит. Даже, если ничего не усекать.
_pasha
Цитата(Прохожий @ 7.1.2012, 17:10) *
Мы гоняли разные протоколы по одному физическому сегменту. Все устройства - дядины. Среди всего прочего был Modbus/RTU от частотников.

О! Интересно. А как же Вы разрулили Т15 и Т35 ? Если не секрет, конечно.
Прохожий
Цитата(_pasha @ 7.1.2012, 21:33) *
О! Интересно. А как же Вы разрулили Т15 и Т35 ? Если не секрет, конечно.

В каком смысле?
Я, ежели честно, не вникал.
Просто мы взяли ПЛК OMRON СJ со специальным коммуникационным модулем, два привода от этой же конторы с MemoBus (аналог Modbus, но с сокращенным набором команд) и терморегулятор от ОВНА c дурацким протоколом на основе ASCII и посадили это физически на один сегмент.
Далее запераметрировали коммуникационник под два протокола с помощью спецсофта, который к нему прилагался.
Причем, параметры MemoBus взяли рекомендованные, как изначально было в этом софте.
И вуаля...

_pasha
Цитата(Прохожий @ 7.1.2012, 20:44) *
параметры MemoBus

А, понятно. Там все равно RTU
Овен - протокол, имхо, нормальное решение в плане ортогональности к модбасу.
Прохожий
Цитата(_pasha @ 8.1.2012, 1:24) *
Овен - протокол, имхо, нормальное решение в плане ортогональности к модбасу.

Глядя на вполне пристойные изделия от этой конторы, испытываю смутные подозрения в причастности их разработчиков к любителям ОС и ООП.
Протокол Овен - яркий тому пример. Сплошная инкапсуляция и полиморфизм.
А вот стандартный ModBus к своим ПЛК они так и не прикрутили.
По той же причине.
Дубовая регистровая модель ModBus в сочетании с командами сплошной передачи содержимого регистров и катушек в эту парадигму не укладывается.
Когда я у них спросил, а как же, мол, быть, они сказали, что тот, кому не нравится - допиливает все это самостоятельно с помощью Structured Text языка, который там имеется.
Самое прикольное, что за одну транзакцию, в их варианте можно передать всего 4 регистра. Это у них связано с самой большой длиной данных в их системе, которая составляет 64 разряда.
Harbinger
Цитата(_pasha @ 7.1.2012, 16:30) *
Для физики RS485 это сигнал <break>, одновременно "продувающий" линию перед передачей

Эх блин. Те самым отсекаются на... минус бесконечность мои "горячо любимые" и, боюсь, вскорости снимаемые с производства P89LPC9xxx. Там, чтобы брейк не загонял в бутлоадер (в вырожденном варианте - просто сброс), нужно специально поизвращаться. smile.gif Да ладно, то лирика. Уходим от них, уходим, наступят времена потише...
_pasha
Цитата(Harbinger @ 9.1.2012, 14:04) *
Эх блин. Те самым отсекаются на... минус бесконечность мои "горячо любимые" и, боюсь, вскорости снимаемые с производства P89LPC9xxx. Там, чтобы брейк не загонял в бутлоадер (в вырожденном варианте - просто сброс), нужно специально поизвращаться. smile.gif Да ладно, то лирика. Уходим от них, уходим, наступят времена потише...

О! Не знал. Какая бяка, оказывается.
По сабжу - запущу хоть 3 компонента, выложу канальный гибрид под незатейливым именем abLink, получилось еще и намного пристойнее. А то я зажал 1 байт в хендле в исходном варианте, и он позволил накрутиться извратам. smile.gif Вон, Прохожий убоялся читать smile.gif
Собсна чего тянуть, я что, корову продаю?
Сырой, и херши с ним.Нажмите для просмотра прикрепленного файла
Harbinger
Цитата(_pasha @ 9.1.2012, 14:24) *
О! Не знал. Какая бяка, оказывается.

В послепоездной полудрёме сообразил, что и это можно приготовить, как мастерресет всей системы, что бывает полезно. smile.gif
_pasha
Цитата(Harbinger @ 9.1.2012, 18:18) *
сообразил, что и это можно приготовить, как мастерресет всей системы, что бывает полезно. smile.gif

Зачем так радикально? Даже сброс скорости передачи на умолчания я бы тыщу раз подумал, стоит ли делать по брейку.
А вот в текстовом варианте сабжа если поставить aLink_SOF = 0x55, можно автонастройку организовать.
Прохожий
Цитата(_pasha @ 10.1.2012, 12:06) *
Зачем так радикально? Даже сброс скорости передачи на умолчания я бы тыщу раз подумал, стоит ли делать по брейку.
А вот в текстовом варианте сабжа если поставить aLink_SOF = 0x55, можно автонастройку организовать.

А вот и первые заказчики. Правда, не совсем AVR, но...
_pasha
Цитата(Прохожий @ 13.1.2012, 23:01) *
А вот и первые заказчики. Правда, не совсем AVR, но...

И не совсем ситуация: нужен модбас, а не маца-линк smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2020 IPS, Inc.