Обновить

ПЛК на микроконтроллере. Визуализация цепей в реальном времени ч.2

Время на прочтение3 мин
Охват и читатели9.2K
Всего голосов 5: ↑5 и ↓0+6
Комментарии26

Комментарии 26

"В прошлой статье я рассказал о своем подходе к..."
Здесь ещё можно вставить ссылку на прошлую статью.
И часть, как данные от внешних устройств превращаются в XML файл, можно кратенько где-то осветить для преемственности изложения, - пожалуйста.
Я не критикую ( Боже упаси! ) , просто прошу, идея классная, сам хотел бы таким позаниматься, но не с нуля. Спасибо!

Критиковать можно, даже выставляю посты на эту тему на p...bu, а там публика не подготовленная , читал всякое. На публике я хладнокровен :)

Статьи просто пытаюсь не раздувать сильно текстом, со временем все исходники я раскрою полностью , как среды на ПК так и для железа.

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

Бывает

XML осуждаю. Слишком много визуального шума.

Сошлюсь на практику мировых вендоров, у которых программу можно править и в виде LD и в виде парного представления IL (с ограничениями конечно же) одновременно

Спасибо за комментарий! Напишу новую статью о том как реализовано , я взял за пример Allen Bradley , у них логика веток (построение) описывается типа :

"XIC XIC BST XIO XIC NXB XIC BND XIO XIO "

то есть, ветки обозначаются маркерами BST,NXB ,BND . У меня тоже самое - есть скрипт который это описывает подобным образом.

.xml в моих модулях он хранит всего лишь - отрисовку графики блока, внутри локального прямоугольника+ описание поведения ASM подобным синтаксисом.

А сами ветки в глобальном плане- ход программы - он описывается скриптом : какая инструкция за какой идет, и какие ветки где находятся.

Или еще аналогия: .xml хранит классы (библиотеки) как визуального вида так и функций программы. А скрипт хранит логику веток, схему, и комментарии.

Для текстовых языков типа ST - конечно никаких .xml не нужно, там просто текст без графики.

В простых случаев вызовов блоков - автолайоут.

Сложные - как пример можно посмотреть Siemens cfc. Там автороутинг соединений а блоки можно перемещать по многолистовой схеме

Расскажите как реализован интерпретатор байт-кода, как организована компиляция в байт код, как связь с железом (ADC, DAC, DI, DO) осуществляется. Как разделены host = Rasberry и STM32G, Как осуществляется мониторинг и индикация - состояние портов и т.д. Связь с внешним миром - Ethernet, RS485, и т.д. Как делается логирование, сообщения об ошибках?

Я буду и дальше писать периодические посты как это работает. Если коротко:

Компилятор переводит текст программы(собственный язык: си подобные структуры и данные, в инструкции как у ассемблера) в 32 битные единицы и нули.

Массив этих байт (виртуальная прошивка) идет по uart в микроконтроллер в виртуальное ОЗУ ( массив uint8_t memory[size] - в нем все хранится, программа, данные, стек, буферы для связи с внешним миром, единый массив).

Цикл wile() читает эти байты(инструкции) и вызывает обработчики : функция + -прыжок между инструкциями,мвсе как на физическом процессоре, только тут он программный нарисан на си (есть еще и на FPGA).

Но цикл while() не простой, там есть постоянное чтение флага состояния процессора:

Сработало прерывание? Ставим машину в режим : отдать данные на пк, иои сменить задачу (если несколько виртуальных задач работаеют) так же если происходит ошибка (например в лестнице программы плк, деление на ноль или еще что) ставим машину в режим ошибки и вызываем нужную функцию или си, или переводим счетчик команд виртульной машины на виртуальный обработчик (как это в языках ява или питон).

Тут много нюансов есть.

В этом массиве под виртуальное озу: вы можете выделить память под буфер для rs485 /ethernet.

Интеграция с конкретным микроконтроллером необходима тоже если делать плк.

У компилятора есть инструкция extfn, если нужно что то особенное (как например ethernet) компиялтор (то есть среда на ПК) будет вставлять эту инструкцию в ваш нарисованый функциональный блок, а микроконтроллер будет вызывать функцию на си, которую вы внедрили в свой плк.

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

Тут главное для понимания не путать нативную прошивку (,который ставит производитель плк на заводе) с виртуальной (программы плк: ST, LD, FBD)

Идет у вас почти по моим аналогичным планам во всяком случае то что описали, контроллер то же на FPGA, разница только в компиляторе и среде программирования софте. С интересом буду ждать продолжения цикла статей. Rasberry под линуксом?

тут нет так давно рассказывали про идею мультиядерного ПЛК, с горячим резервированием и валидацией ядер, тож на fpga делали но оно там оказалось чисто теоритическим, в продакт не пойдет

"в продакт не пойдет" - Почему?

а ну там чисто научная работка как автор сказал

Цикл wile() читает эти байты(инструкции) и вызывает обработчики : функция + -прыжок между инструкциями,мвсе как на физическом процессоре, только тут он программный нарисан на си (есть еще и на FPGA).

по предыдущим дискуссиям стало интересно как оценивать надежность такой вирутуалки (риск что она зависнет намертво в какой то ситуации), по логике это должно быть какое то массовое тестирование

Тестирование есть, это 8 задач с глубокими переходами из функции в функцию 8-10 уровней(то есть , виртуальные функции, программа ST, а не нативная) и их эти задачи хаотично прерывает таймер меняя , вытесняя задачи местами . Так тстировал сохранение контекста , целостность стеков, адресов возврата и прочее. Это суточный мониторинг. Если за сутки ничего не случилось , сотни миллионов смен задач произошли штатно, и все работает значит все норм, , в отладке просматривается все ли на своих местах, не затерлись или не испортились какие то данные даже если программа не слетела. Тестируются другие сценарии. Тут без поблажек

 В итоге среда спокойно запускается даже на ранних версиях Raspberry Pi и требует всего 120–200 МБ ОЗУ. Таким образом, из слабого мини‑ПК можно сделать полноценный самопрограммируемый промышленный контроллер.

не сразу понял эти фразы в связке. мини‑ПК это все таки обычно про x86 но gpio там если и есть то запрятаны. плюс вопрос "реального времени". если же че то малиноподобное то интересен вопрос экрана, его размеров и удобства пользования средой на мелких экранах.

а то вон в соседней теме сделали ПЛК с простеньким визуальным ladder на экране на экране 0.96" - вообще никаких сред, все на простом контроллере фурычит

Идея мини плк который имеет в себе и компилятор, и сам выполняет программу плк (например случай когда - сеть не предусмотрена , перепрошивать удаленно, и чтоб не надо было с собой носить ноутбук). То есть можно на месте отлаживать и запускать. А ПЛК с простым ladder и другого поста , - тут вопрос масштаба. С одной стороны и мой рантайм заработает на stm32g030 на аквариуме, но я целился на соревнования с Allen Bradley

ну это да, а экран (на 27" дюймов 6) с собой носить или к каждому ПЛК приставить?

Можно экран 320*280. Не думаю что фирма не найдет 10-15$ на такой дисплей если им нужно будет. С другой стороны, сам рантайм работабщий на мк, можно изменить под себя вывести кнопки и записывать значения. Виртуальная машина, ее память хранится в обычном массиве, сменить байт с 0x6 на 0x8 чтоб изменить инструкцию, или сменить два байта адреса чтоб поменять переменную, не трудно будет

Классно получилось! SCADA уже реализована или только среда разработки?

Scada тоже, я с нее в свое время начинал

> Нативная часть для железа выполняющая программу в качестве ПЛК, требует на стороне микроконтроллера 5 кб ОЗУ, и 32 кб флеш

...что заставляет задуматься об её функциональности. Рантайм старого доброго FX2N занимает под 100КБ. У меня с плюшками уже перевалило за 150КБ, и это без реализации команд управления перемещением. Судя по картинкам, кочующим по сайтам и статьям, пока видны только простейшие команды из базового набора ПЛК. Я уже не однократно говорил, что все сравнения вашего ПЛК с другими лишены смысла, потому что для вашего рантайма нет ни описания архитектуры, ни системы команд.

Для того чтоб опубликовать проект его надо подготовить.

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

Если у бренда (упомянутый Митсубиши) инструкции несут с собой большое количестао метаданных- все это надо разбирать. Кроме того, вы скидывали китайскую документацию , где китайцы жаловались на неудобные поля инструкций ПЛК Митсубиги и это замедляет плк. Митсубиши имеющие свои процессоры разбирающие инструкции за один такт, не должны переживать за неудобность реализации выполнения их кода эмуляцией на СИ, так что рантайм в 100кб, ничего не говорит.

Если б вы поработали с Verilog (и процессоры на нем) то увидели, что реализовать софт-процессор, много прошивки ненадо

> Для того чтоб опубликовать проект его надо подготовить

Речь не о проекте в целом, а о системе команд. А то вы навыкладывали тесты производительности, сравнивания свой ПЛК с брэндами, но так до сих не понятно, что с чем сравнивается.

----------------------

> Кроме того, вы скидывали китайскую документацию , где китайцы жаловались на неудобные поля инструкций ПЛК Митсубиги и это замедляет плк.

Вы меня с кем-то путаете. Я не скидывал китайскую такую документацию, хотя не единожды давал ссылку на то, что было собрано с китайских файлопомоек, и ни когда не_сетовал на сложность декодирования команд. У ARM тоже быстрые команды, поэтому проблем со скоростью интерпретации команд Мицубиси нет.

Я придерживаюсь полной абстракции от железа, все управление циклом например (работа с портами и другое) идет - с байткодом пользователя. То есть, из нативной работы мк выполняет только работыис флеш и uart, и инструкции по 90 штук, все отальное (фоновые задачи какие то, которые могли бы работать наинативном уровне) у меня работают тоже с байткодом, это позволит совсем не трогать прошивку в будущем, одинираз залив, а обновлять логику которые идут вместе с байткодом пользователя. То есть, пользователь сделал программу, 30% среда IDE генерирует код типа ОС+ добавляет к нему 70% код пользователя. Захотел сменить какие то параметры системы - пожалуйста, меняйте ОС пишите сами в этой же среде, не трогая нативную прошивку совсем. Вот и весь секрет легковестности

Без списка команд ВМ это опять просто болтовня, к сожалению.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации