Серия «Моими разработками, соревнуюсь с Брендами в АСУ ТП»

345

Как я разработал промышленный контроллер + IDE + SCADA систему

Серия Моими разработками, соревнуюсь с Брендами в АСУ ТП
Как я разработал промышленный контроллер + IDE + SCADA систему

На протяжении нескольких месяцев я делюсь историей и подходами решению задач собственной разработки промышленного контроллера. Вернее - платформы для разработки ПЛК на подобии Codesys. Название моего проекта 3o|||sheet (читается как - Зошит).

Вот чтоб сразу было понятно - я не создаю физические ПЛК. Часто пишут про помехоустойчивость, Arduino/ STM32 не под 24V и прочее. Codesys - не продают ПЛК и не создают железо (насколько я знаю) это программная платформа которую устанавливают в - свое железо производители ПЛК. У меня тот же случай.

Моя разработка это: Среда IDE , с собственным графическим движком отрисовки схем. Cвой компилятор (самая сложная и умная часть). И среда выполнения на железе (самая примитивная часть - за нее все думает компилятор на этапе сборки.

Последние тесты по производительности такого ПЛК: Разработка промышленного контроллера и среды. Оптимизация производительности STM32F103

Разрабатываю - программную часть, так как считаю что надежность и экосистема программной работы это 99% успешности проекта.

Работа до создания ПЛК и откуда истоки и идеи.

Лет 6 назад, когда работал инженером - системным программистом на крупном предприятии я и познакомился с большим производством. Большое количество угольных шахт раскиданных на многие километры. Десятки подземных комбайнов , тысячи гидравлических стоек, все это генерировало миллионы значений в сутки. Системным программистом я был плохим (вернее - системным администратором), другое дело - поиск и разработка алгоритмов по визуализации всех этих миллионов значений с OPC серверов на экране.

Gatherlog (Гезерлог)- моя SCADA и система диспетчеризации.

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

Мой проеккт Gatherlog (.Net Core) можно разделить на функционал:

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

2) Система отчетов по работе оборудования и общих отчетов (работа/простои / обычные графики)

3) интерпретатор работающий в SCADA позволяющий выполнять алгоритмы написанные пользователем (то есть, превращает SCADA в серверный ПЛК). В последствии эти практики я оптимизировал до уровня микроконтроллера.

4) Работа с базами данных

Если брать WEB разработку, то сам движок реализованный так же на Javascript занимает всего лишь 500 строк кода. Хотя как то встречал компанию, которая делала визуализации, применяя полноценный игровой Unity 3D ! для подобного.

В самой первой статье по разработке ПЛК я упоминал что являюсь ценителем оптимизации, всегда искал закономерности в процессах чтоб вывести общую формулу на подобии y=x+2(sqrt(Ad^2 ... А не использовать if/else на все варианты. Поэтому, что касается логики, у меня программа всегда занимаала меньше строк кода чем у других.

Все эти наработки и графическая библиотека в последствии перешла в нативную разработку среды программирования для ПЛК (LD FBD, схемы). А графический движок реализован на C# , Java, WinAPI, и подготавливаю его для Микроконтроллеров способного работать на небольших дисплеях.

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

И помни дорогой друг. Любая "поделка" становится "настоящей" если ее выпускает юридическое лицо. (с) Я.

Задавайте вопросы в комментариях и на почту: zoshytlogic@gmail.com

Показать полностью 1 3
38

Разработка промышленного контроллера и среды. Оптимизация производительности STM32F103

Серия Моими разработками, соревнуюсь с Брендами в АСУ ТП
А тут у нас снеговичок, показывает температуру -43

А тут у нас снеговичок, показывает температуру -43

Протестировал, классический алгоритм который повсеместно встречается в ПЛК на лестничных диаграммах LD - накопительный. Несколько месяцев мне писали о том, какой медленный получится ПЛК на моей платформе ( и вправду, в первых тестах, в три раза проигрывал каитайским клонам и среде от Mitsubishi). В последующие оптимизации , находясь все еще на уровне СИ языке, удалось снизить отрыв до двух раз, но и тут много.

Вот как я решал обход деревьев LD:

Одна базовая LD инструкция, состояла из трех команд виртуальной машины. Загрузка значения, проверка на истинность, и переход по новому адресу. STM32F103 : 4.9 микросекунды на операцию

Одна базовая LD инструкция, состояла из трех команд виртуальной машины. Загрузка значения, проверка на истинность, и переход по новому адресу. STM32F103 : 4.9 микросекунды на операцию

Нельзя сказать что идея плохая и не реализуемая в коммерческих ПЛК, но с маркетинговой точки зрения может и не удачная если замерять -скорость одной инструкции. В сложных ветках - она вполне себе более производительнее чем - накопительный (аккумуляторный) метод. Аккумуляторный метод это когда программа расчета идет - всех веток вне зависимости от истинности значений , все ровно проходит все ветки и результат высчитывает в промежутках.

Очень удобно, 1 инструкция, последовательно (и быстро) выполняет операции И / ИЛИ, вместо трех инструкций.

Я расширил систему команд своего компилятора и рантайма подобными инструкциями которые у меня носят название с окончанием на М:

ANDM R15 gpio.Ldparam;

Берем булевые/битовые значения переменной (из памяти или порта ввода) , и сравниваем его с предыдущими. Проходим все ветки.

Теперь уже результаты вполне сопрставимы с Allen Bradley Micro810 и китайских клонов Mitsubishi.

3o|||sheet - мой проект.

Сравнение китайских ПЛК клонов в среде от Mitsubishi с моей средой 3o|||sheet на идентичном микроконтроллере stm32f103c8t6.

Сравнение китайских ПЛК клонов в среде от Mitsubishi с моей средой 3o|||sheet на идентичном микроконтроллере stm32f103c8t6.

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

Развиваю среду разработки графическими возможностями: возможность добавления чертежей и схем в проект, и не сложные HMI ( для сложных у меня разработана собственная скада на .Net Core, но это другая история).

Кто читает впервые, что у меня за проект:

Своими разработками соревнуюсь с брендами в АСУ ТП. Превзойти Codesys

Разрабатываю аналог Codesys - платформа для разработки ПЛК. Сюда входит Среда разработки 3o|||sheet (читать как “Зошит”, с собственным графическим движком отрисовки схем). Также разрабатывал свой компилятор (самая сложная и умная часть)/ Cреда выполнения на железе (самая примитивная часть - за нее все думает компилятор на этапе сборки).

Я всего могу не знать по АСУ ТП с точки зрения железа, так как больше - математик алгоритмист, и всем замечаниям буду рад от тех кто работает в сфере. Пишите в комментариях.

Помни дорогой друг. Любая "поделка" становится "настоящей", когда ее выпускает - юридическое лицо. (с) Я ".

Люди так воспринимают. Будет небольшой дебют (пока на выставке) примерно в июне 2026 года.

Пишите.

zoshytlogic@gmail.com

Показать полностью 3 1
262

RISC-V vs ARM в качестве ПЛК для АСУ ТП. CH32 vs STM32

Серия Моими разработками, соревнуюсь с Брендами в АСУ ТП
RISC-V vs ARM в качестве ПЛК для АСУ ТП. CH32 vs STM32

Протестировал MCU ch32v203  китайского производства. В прошлых статьях я мельком показывал результат тестирования ch32v307, он оказался в два раза быстрее stm32f407 ( ! в работе моей виртуальной машины) Тут же высшая производительность RISC V  подтвердилось в сравнении с ARM хотя и не с таким уже отрывом.

Что у меня за проект такой, описание - тут: Своими разработками соревнуюсь с брендами в АСУ ТП. Превзойти Codesys

Разрабатываю аналог Codesys - платформа для разработки ПЛК. Сюда входит Среда разработки 3o|||sheet (читать как “Зошит”, с собственным графическим движком отрисовки схем). Также разрабатывал свой компилятор (самая сложная и умная часть)/ Cреда выполнения на железе (самая примитивная часть - за нее все думает компилятор на этапе сборки).

Так же, я не призываю вставлять подобные отладки в ПЛК в голом виде на производстве под 12-24 Вольта, тут идет больше тестирование CPU/MCU в качестве выполнения задач внутри ПЛК. Разработка остального железа - это другая тема. Предпринимателям, кто работает в этом направлении будет понятно.

Железо:

ch32v203

72 Mhz (максимальная 144 Mhz , снизил для сравнения с stm32f103)

RAM 20 kb

FLASH 64 kb.

3o|||sheet IDE

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

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

ПЛК Mitsubishi имеется ввиду - китайский (или любительский) клон использующий среду и компилятор от Mitsubishi на STM32F103. Оригинал Mitsubishi внутри CPU которого собственные аппаратные блоки, конечно в разы быстрее в булевых операциях.

ПЛК Mitsubishi имеется ввиду - китайский (или любительский) клон использующий среду и компилятор от Mitsubishi на STM32F103. Оригинал Mitsubishi внутри CPU которого собственные аппаратные блоки, конечно в разы быстрее в булевых операциях.

Базовые LD инструкции -- это контакты и катушки. Но в моем тесте для объективности выбрал самый сложный путь, и в одну инструкцию, в моем случае входит: чтение переменной из виртуального ОЗУ (ту которую пользователь создал в ST / LD и дал ей имя) , сравнение на истинность, и переход по новому адресу в зависимости от результата.

Если брать работу с физическими входами, где данные загружаются один раз вначале цикла, а дальше идет простая обработка битов - то скорость моего ПЛК будет на 30% быстрее от указанной в диаграмме.

В данном тесте RISC V впереди от ARM на 8-9% ( в смысле - мой рантайм но на ARM).

RISC-V vs ARM в качестве ПЛК для АСУ ТП. CH32 vs STM32

С целочисленной математикой дела поинтереснее. Во первых тут гипотетический мой ПЛК (назовем его - LogicGather ) не отстает в разы в отличии от базовых LD операций (и мне часто пишут - о медленном моем ПЛК). Я объясняю это тем что у меня система - универсальная. Мировые производители ПЛК скорее всего создают отдельные программные части, для решения - чисто этих логических задач (а Mitsubishi еще и в кристалле CPU на аппаратном уровне это внедряет). И когда речь заходит про математику - все становится на свои места. Мой LogicGather STM32F103 отстает от Mitsubishi процентов на 40, а на RISC V и вовсе почти одинаковые результаты с Allen Bradley и тем же клоном Mitsubishi. Почему я не сравниваю оригиналы Mitsubishi - как упоминал, у меня нет ресурсов создавать свои CPU. Есть возможность использовать FPGA, в таком случае мой ПЛК сможет обрабатывать все за несколько тактов (в данный момент уходят сотни тактов на декодирования байткода и операции). С FPGA еще поработаю.

RISC-V vs ARM в качестве ПЛК для АСУ ТП. CH32 vs STM32

Allen Bradley Micro810 - данные по скорости - из документации, у них в библиотеке есть готовые функциональные блоки пид регуляторов c указанным временем. Сам алгоритм пид регулятора внутри библиотек Allen Bradley я не знаю. Для теста своего ПЛК LogicGather я рисовал и создавал функциональный блок , так же описывал его алгоритм на своем языке .3osheet

В данный момент создавать собственные функциональные блоки можно - группировав LD, или на собственном языке моей виртуальной машины .3osheet. Возможность описывать блоки на языке ST еще в работе, моя архитектура позволяет внедрить любой язык.

В данный момент создавать собственные функциональные блоки можно - группировав LD, или на собственном языке моей виртуальной машины .3osheet. Возможность описывать блоки на языке ST еще в работе, моя архитектура позволяет внедрить любой язык.

Но так как по математике мой ПЛК LogicGather на RISC V ch32v203 +- тоже самое что Micro810 то думаю сравнивать результаты по пид алгоритмам - это корректно.

Ну и напомню, преимущество которое есть в моей архитектуре, и не имеющей аналогов , это множественные исполнители:

Программы, данные, операционные системы, стеки - все это имеется ввиду на виртуальном уровне внутри микроконтроллера. Не путать с нативным машинным кодом.

Программы, данные, операционные системы, стеки - все это имеется ввиду на виртуальном уровне внутри микроконтроллера. Не путать с нативным машинным кодом.

Это когда задачи - изолированы. Один исполнитель может проигрывать рискованный код (HMI, связь, WEB и OPC UA сервер, если CPU хороший), где что ни будь может вылететь или зависнуть, но это никак не заденет - другие важные исполнители, с логикой по безопасности или критическим процессам.

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

И все конечно же - это без линуксов и прочих FreeRTOS , детерминировано, по системному таймеру. Так же веду разработку собственной ОС, в данный момент она еще маленькая, больше напоминает диспетчер задач, который управляет вытесняющей многозадачностью, работает на виртуальном уровне вместе с задачами пользователя, только в привилегированном режиме.

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

Вопросы можно так же задавать мне на почту:

zoshytlogic@gmail.com

Показать полностью 6 1
783

Оптимизация STM32F103 как ПЛК. Догоняем Mitsubishi FX3, и обгоняем архитектурно2

Серия Моими разработками, соревнуюсь с Брендами в АСУ ТП
Оптимизация STM32F103 как ПЛК. Догоняем Mitsubishi FX3, и обгоняем архитектурно

Кто читает первый раз мой пост. Что у меня за проект: Своими разработками соревнуюсь с брендами в АСУ ТП. Превзойти Codesys

Если коротко, я работаю над собственным аналогом комплекса - Codesys. Программная экосистема для разработки ПЛК на разном железе, под названием 3o|||sheet (читать как “Зошит”). Состоит из трех уровней: Среда разработки IDE (LD/FBD/ текстовые), собственного компилятора, и собственная среда выполнения на стороне железа.

Оптимизация STM32F103 как ПЛК. Догоняем Mitsubishi FX3, и обгоняем архитектурно

В прошлом посте, сравнивал свой ПЛК с китайскими клонами на базе Mitsubishi FX3 При одинаковом чипе (stm32f103) мой инженерный образец был в три раза медленнее Mitsubishi.

С этим я мириться не стал, и первое что сделал - чуть оптимизировал выборку команд из виртуального ОЗУ.

Внутри рантайма в микроконтроллере. Было:

ic.b[3]= memory[PC];

ic.b[2]= memory[PC+1];

ic.b[1] = memory[PC+2];

ic.b[0]= memory[PC+3];

Во времена тестирования на ПК и микроконтроллерах, чтоб не возиться с “Big Endian/Little Endian” я оставил такой медленный но прямой способ.

Изменил на:

memcopy(&ic, &memory,4);

ic - это регистр инструкции (структура типа Union) , он первым читается из виртуального ОЗУ. К нему  применяются различные маски и сдвиги, для извлечения данных (номера регистров, операнды, константы и т.д).

Производительность нашего ПЛК  на “ровном месте” увеличилась больше чем на 30%.
Сейчас картина выглядит так по работе с релейной логикой (LD)- Указано время выполнения базовых LD инструкций в микросекундах (меньше - лучше):

Данные по Allen Bradley Micro810 -  взято из документации, какой внутри стоит чип - неизвестно. Данные по китайским клонам по Mitsubishi FX3 - взято из тестов на просторах интернета.

Данные по Allen Bradley Micro810 -  взято из документации, какой внутри стоит чип - неизвестно. Данные по китайским клонам по Mitsubishi FX3 - взято из тестов на просторах интернета.

Наш ПЛК на базе собственного 3o|||sheet все еще уступает Mitsubishi FX3 (с китайским клоном и идентичного микроконтроллера stm32f103), но уже не в три раза, как в прошлый раз, а примерно в два раза. Поле для оптимизации у меня еще широкое (та самая работа с декодированием инструкций- маски, сдвиги, и прочее, я молчу уже об оптимизации - конкретно  выполнение виртуальных инструкций). Пока я создаю инженерные образцы ПЛК (а не коммерческие) где тестируется в основном- стабильность, а не скорость, хотя периодически бывает интересно что можно выжать по скорости.

Но возможно достичь аналогичного результата клона Mitsubishi FX3 может и не удастся, учитывая универсальность моей архитектуры 3o|||sheet и деревянного ( бюджетного конечно)  от Mitsubishi. Но если я оптимизирую производительность до уровня 10-20% разницы с Mitsubishi, буду считать - прекрасным результатом, и вот почему.

Превосходство моей архитектуры:

Mitsubishi FX3 - деревянный и не гибкий, напоминающий Allen Bradley SLC 500). У них “табличная память”. Жестко выделенные области - битовые переменные, целочисленные переменные, таймеры  и т.д Адресация, чтение/запись идет быстро - никакого декодирования . В моей архитектуре 3o|||sheet - единое адресное пространство, и любые типы переменных могут располагаться в перемешку, в любой последовательности, с адресным пространством 4 гигабайта:

Оптимизация STM32F103 как ПЛК. Догоняем Mitsubishi FX3, и обгоняем архитектурно

То есть, делить адресное пространство можно - как угодно. Создавать или нет внутри Диспетчер задач или Операционную систему.

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

Но не только я так думаю. Бюджетный современный  Allen Bradley может уже исполняться из ST языка ( в отличии от старых бюджетных SLC 500), и что произошло? Новый бюджетный как видим выполняет релейную логику в 2.5  микросекунды на команду,  против 1.2 микросекунды у старых SLC 500 ))) данные я прочитал в документации SLC 500. То есть современный ПЛК Allen Bradley стал медленнее в два раза в сравнении с старым Allen Bradley))

Давайте продемонстрирую возможности своего компилятора 3o|||sheet  и системы воспроизведения в железе, о том что значит - гибкость системы.

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

Я не буду демонстрировать LD или ST  (это у всех ПЛК +- тоже самое, ведь стандарт же), интересней это выглядит внутри микроконтроллера:

func1(){

func2();

}

func2(){

func3();

}

func3(){

func4();

}

func4(){

func5();

}

pause(){

}

main()

{

func1();

}

В данном видео примере выводятся строки: чем глубже функция, тем длиннее строка для наглядности

Main ------| переход

func1 ------------| переход

func2 ------------------| переход

func3 ---------------------| переход

func4 ------------------------| переход

func5 ---------------------------| Самая глубокая функция

func5 ---------------------------| возврат

func4 ------------------------| возврат

func3 ---------------------| возврат

func2 ------------------| возврат

func1 ------------| возврат

Main ------| Завершение Main. -> Начало Main.

Глубокие переходы между функциями ( функция внутри вызывает другую функцию, а та следующую и т.д), или рекурсии - на всю память. Единое адресное пространство - чем больше программа - тем меньше данных, и наоборот. Никакой жесткости типа -  “память программ 256 кб, память данных 128 кб” и прочее. Никаких жестких списков  “целочисленных переменных 256 страниц, булевых 256 страниц, таймеров 64” и т.д. Как в архитектурах типа FX3. Гибкая архитектура подразумевает  - есть целое виртуальное ОЗУ - а там распределяйте сколько чего нужно в каких пропорциях -  сами.

Так же добавил возможность, обновлять участи кода (полностью их переписывать, на лету, не перезагружая и не останавливая ПЛК)

Для обновления кода на лету, надо перекомпилировать проект, и загрузить программу в ПЛК от указанного начала адреса, и до указанного конца. В будущем сделаю удобно - переписать код блока или функции - просто указав по имени.

Для обновления кода на лету, надо перекомпилировать проект, и загрузить программу в ПЛК от указанного начала адреса, и до указанного конца. В будущем сделаю удобно - переписать код блока или функции - просто указав по имени.

Разработка своего компилятора - трудный путь, но зато потом все вознаграждается тем что ты вплотную сравниваешься с брендами по функциональности: Вытесняющая многозадачность, обновление кода на лету + свои идеи по безопасности , создавая на слабом железе "микро "виртуалки", где одна может выполнять рискованный код (взаимодействовать с внешними системами) и может слететь, а другая - исполняет критический код, никогда не слетит.

Архитектура. LD ST - текст, переводится в текст .3osheet и .3osheet компилятором своей разработки, переводится в байткод. Сама виртуальная машина написана на СИ. Теоретически, если сделаю транслятор из Java, то получится аналог напоминающий Android.

Архитектура. LD ST - текст, переводится в текст .3osheet и .3osheet компилятором своей разработки, переводится в байткод. Сама виртуальная машина написана на СИ. Теоретически, если сделаю транслятор из Java, то получится аналог напоминающий Android.

Ну и на последок,

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

Оптимизация STM32F103 как ПЛК. Догоняем Mitsubishi FX3, и обгоняем архитектурно
Оптимизация STM32F103 как ПЛК. Догоняем Mitsubishi FX3, и обгоняем архитектурно

Никак не доедет отладочная плата на RISC V для теста, кому интересно - присоединяйтесь, периодически буду публиковать ход разработки проекта.

Пишите на почту:

zoshytlogic@gmail.com

Показать полностью 8 1
13

Создание компилятора под разработку промышленных контроллеров и SCADA QQ1

Серия Моими разработками, соревнуюсь с Брендами в АСУ ТП
Создание компилятора под разработку промышленных контроллеров и SCADA QQ

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

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

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

Среда исполнения и компилятор создавался для работы с MCU с 8 килобайт ОЗУ и до 4ГБ.

То есть, чтоб критически слабые системы, имели функциональность топовых ПЛК (горячая замена кода на лету, вытесняющая виртуальная многозадачность, и другое). Другими способами этого добиться, кроме как создавать свой компилятор - нет.

Я не использовал LLVM  но использовал правила лексера/парсера библиотеки ANTLR. Сосредоточившись на архитектуре и алгоритмах компилятора касающиеся выполнения программы, а не обработки текстовых символов.

Сделать примитивный компилятор и машину - просто. Множество статей написано про это в интернете. Но что б я выделил в полноценном компиляторе, то есть, который может построить программу любого уровня сложности? В данном случае речь идет не о компиляции в нативный код как после СИ, а в байткод который выполняется рантаймом.

Настоящий компилятор и виртуальная машина.

Я бы выделил  два ключевых момента которые нужно реализовать для полноценного  компилятора:

1. Менеджер адресации данных.

2. Менеджер адресации инструкций, и управление контекстом.

Менеджер адресации данных.

Я б назвал это самым важным в работе. Любая программа работает с данными.

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

Возьмем простой пример:

INT varA=7; 

INT varB=5; 

LDR R0 VarA;

LDR R1 VarB;

ADD R0 R1 R0;

По сути это готовая LD  математическая инструкция. Вполне можно сделать ПЛК на базе микроконтроллера с ОЗУ даже 2кб для небольшого количества LD  инструкицй.

Но, что если пользователь захочет поддержку в ПЛК языка ST или LD  и создавать собственные  функциональные блоки, а не только стандартные?

Тут не обойтись без поддержки пользовательских данных и структур:

Пример сложных пользовательских типов.

Пример сложных пользовательских типов.

У нас есть сложный тип структуры внутри которого - другие структуры, внутри которых и структуры и массивы и т.д

Теперь, при встрече строки

Equipment sandwikMB670;

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

LDW R0 sandwikMB670.states[245].Point.x;

Компилятор должен все просчитать и подставить вместо имени переменной, верный адрес после компиляции:

LDW R0 #200486;

Менеджер адресации и данных должен переварить любой тип данных из "бесконечных" вложений внутри:

кощей.дуб[4][8][2].гнездо[2][5].яйцо[3].игла

А самое главное, алгоритм просчета и управления адресами, должен быть надежным и лаконичным как X^2 , который предсказуемо выдаст те данные которые ожидаешь, и не промахнется ни на байт в сторону среди миллиарда других байт. Только для работы с типами, переменными и их адресами, я завел совершенно отдельный парсер ANTLR и создал библиотеку для этой конкретной задачи независимо от компилятора в целом.

Вторая составляющая компилятора:

Менеджер адресации инструкций, и управление контекстом

Тестовые задачи, для определения эффективности и скорости решения математических или LD инструкций виртуальной машиной.

Тестовые задачи, для определения эффективности и скорости решения математических или LD инструкций виртуальной машиной.

На изображении - скрин, результат трансляции моей средой 3o|||sheet программ LD / ST в промежуточный виртуальный ассемблер для своей виртуальной машины. ВМ не знает что такое - потоки, функции и прочее, она просто поочередно выполняет все команды. Задача компилятора превратить метки (например BinaryOperaty \ MathOperaty etc...) в адреса переходов. Одни метки - играют роль отдельных потоков, другие метки играют роль - функций программы. Метки которые играют роль независимых задач/ потоков - обрабатывает виртуальная моя ОС 3o|||sheet которая , которая сохраняет адреса, в свой системный массив указателей задач, а при сообщении от физического таймера - прерывает задачу, и достает следующую.

В завершение компилятор переводит объекты инструкций, к бинарному виду типа:

LDW R0 #200486; -> 11001011 00101001 00010101 01001010

В которых уже закодированы - тип инструкции, номера регистров , разные флаги и даже константы. Интерпретируются эти потоки байт - виртуальной машиной (а не физическим CPU/MCU ).

В итоге

Решив две эти задачи по управлению адресации данных, и менеджер инструкций, (ну и конечно рантайм который это воспроизводит на стороне железа) я создал собственный компилятор который может:

  1. Создавать сложные типы данных

  2. Утрамбовывать в памяти без пробелов

  3. Надежно с ними работать.

  4. Создавать сложные алгоритмы и поведения программы (рекурсии, многоуровневые переходы между функциями, передачи/возврата данных между ними

  5. Реализовав управление контекстом, соответственно - создавать вытесняющую многозадачность , многопоточность, с полной масштабируемостью в многоядерных микроконтроллерах или CPU.

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

И даже устанавливать (добавлять) в ПЛК - новые задачи, к уже работающим задачам/программ не останавливая ПЛК физически, как это в операционных системах Windows:

установил приложение, и оно сразу работает, или удалил его (но не злоупотреблять этим конечно, все таки это система для АСУ ТП с детерминированным, строгим по времени исполнением программ. Сборщиков мусора и фоновых задач по фрагментации памяти - нет).

А этого (менять код на лету, или устанавливать новые задачи без перепрошивки) не могут нативные ОС типа FreeRTOS. Так же можно обновлять ОС виртуального уровня - "по воздуху", и менять физические свойства ПЛК, например - включить дополнительный физический аналоговый IO - "по платной подписке" :D , это конечно шутка, но виртуальный уровень полностью может менять - физический если надо, управляя регистрами процессора и периферией.

Конечно, компилятор это еще и анализ самого кода и прочее (оптимизации) , но что касается ПЛК тут можно проще к этому относиться. Я реализовал только - удаление "мертвого кода"( да и то не по умолчанию), и предупреждения об неиспользуемых переменных и ошибках с типами. Чтоб не вышло как в старых версиях ПЛК от Siemense, когда компилятор дооптимизировался до такого что данные читал/записывал неинаисаои места( те самые "промахи" менеджера адресации данных).

Периодически буду рассказывать о других моментах проекта (например как организована виртуальная ОС и исполнение программ).

Показать полностью 2
272

Своими разработками соревнуюсь с брендами АСУ ТП. STM32F407 как CPU ПЛК

Серия Моими разработками, соревнуюсь с Брендами в АСУ ТП

Не могу сказать на какую аудиторию больше ориентируюсь в данных постах, но скорее всего это будет интересно - разработчикам электронщикам, и предпринимателям в сфере АСУ ТП которые разрабатывают ПЛК и разное программно-аппаратное (они часто пишут). Как показывает практика - меньше всего это понятно АСУ-ТПшникам, что не удивительно так как посты больше о разработке ПЛК как прибора и предпринимательстве, а не о применении ПЛК.

Что у меня за проект такой, пост тут: Своими разработками соревнуюсь с брендами в АСУ ТП. Превзойти Codesys

Если коротко, то это аналог Codesys, в несколько скромном виде.

Среда разработки (LD FBD + текстовые типа ST), свой компилятор, и среда выполнения на CPU.

Потенциальному производителю ПЛК осталось разработать железо и скомпилировать среду выполнения под свой CPU/MCU. Один производитель уже разрабатывает железо под своим лейблом, и через полгода мы увидим что вышло.

Хотя со мной связывались так же из  - станкостроительного предприятия, на предмет можно ли все это внедрять в станки. Можно.

Тестовое железо:

CPU: STM32F407VG

RAM: 192kb

FLASH: 1mb

168 MHz

Среда и компилятор - 3o|||sheet (Зошит, "Тетрадь") своей разработки

Методика тестирования:

Запускаем  программу на LD из 184 блоков.

Замеряем осциллографом реакцию  вывода , и считаем время отработки одной инструкции/блока.

Почему LD а не ST:

Очень часто спрашивают. LD - хорошо документирован. Производители ПЛК часто прямо в документации пишут время выполнения базовых LD  инструкций, и я могу прямо сравнить “свой” ПЛК с брендом по скорости программ.

Результат тестирования в сравнении с брендами:

Allen Bradley Micro810 - какой в нем CPU неизвестно.

Allen Bradley Micro810 - какой в нем CPU неизвестно.

Хотя пост не о китайском МК, но интересен для сравнения результат моей машины на CH32V307 RISC V.

Еще несколько лет назад, когда я начал переносить на микроконтроллеры свой рантайм, я замерял тестовую скорость базовых LD  операций, они так и были - 1 микросекунда. Потому у меня было некоторое удивление от STM32F407 (и вообще от всей линейки STM ARM) который был медленнее в два с половиной раза.

В данный момент, могу это объяснить так: у RISC V  в два раза больше регистров ядра (16 в ARM против 32 RISC V), это значит что переходы между функциями  RISC V может делать быстрее, так как меньше приходится использовать память, а промежуточные результаты хранить непосредственно в регистрах ядра CPU.

Хотя тут еще предстоит более тщательно разобраться, напишу отдельный пост о тестировании RISC V так как по одному такому МК я сотрудничаю с предприятием. Но скорее всего в данной задаче (по крайней мере моя виртуальная машина) и вправду на RISC V в два раза быстрее чем на ARM.

В прошлом посте где я тестировал свой комплекс на STM32F103 Своими разработками, соревнуюсь с Mitsubishi в АСУ ТП. STM32F103 как ПЛК lo  , упоминал китайские дешевые ПЛК под среду Mitsubishi .Мне скинули китайскую документацию как сделать ПЛК под среду и компилятор от Mitsubishi. В общих чертах почитал, Оказывается, у меня такая же архитектура что и у Mitsubishi. Но я не делал оптимизацию под ARM и мой ПЛК оказался существенно медленнее. Хотя если брать не китайские и разные любительские ПЛК на Mitsubishi, а оригинальные, то тут Mitsubishi равных нет, они делают свои CPU и  аппаратно реализовывают декодирование инструкций и выполнения программ. Мне такой скорости добиться можно наверное если только перенесу виртуальную машину на FPGA, где базовая операция длится - наносекунды.

Что можно выжать из STM32F407  в качестве CPU  ПЛК:

ОЗУ  больше сотни килобайт, и флэш под мегабайт, соответственно можно писать полноценные большие программы на LD  и ST.

Если брать LD то за цикл 1 миллисекунды такой ПЛК отработает чуть больше 400 базовых LD инструкций. Из опыта знаю, ветка горного конвейера, обходилась примерно в 300 LD.

Пид регулятор такого ПЛК успеет отработать за 150 микросекунд вместе с фильтрацией .

Или за 2 миллисекунды еще + 200 LD математических.

(*/+-) на STM32f407 с моим рантаймом - 4.4 микросекунды, на математику. У Siemens S7 1200(CPU 1214C) этот показатель 2.3 микросекудны, а PID регулятор 150-300 микросекунд ( с временем на сетевой обмен). Таким образом, ПЛК на STM32F407 будет уступать S7 1200 не сильно много (я тестировал без учета сети).

Если брать особенность чисто моей архитектуры, то все МК которые имеют ОЗУ больше 16 Кб могут запускать в себе - множественные исполнители:

Своими разработками соревнуюсь с брендами АСУ ТП. STM32F407 как CPU ПЛК

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

Как это достигается. Каждый исполнитель, имеет свое  виртуальное ОЗУ, что с точки зрения СИ есть - простым массивом байт:

В массиве хранятся плотно утрамбованные, как ОС, так и пользовательская программа, вместе с переменными и стеком. В общем все хранится в отдельном массиве который играет роль ОЗУ.

В массиве хранятся плотно утрамбованные, как ОС, так и пользовательская программа, вместе с переменными и стеком. В общем все хранится в отдельном массиве который играет роль ОЗУ.

Виртуальная машина по очереди выполняет instruction  каждой ОЗУ(в каждом массиве), и если где то произошла критическая ошибка (повреждение данных, или еще что) просто один исполнитель будет выключен. Как видите , хоть полностью удали данные массива который играет роль ОЗУ это не затронет другие исполнители, и тем более не затронет физический ПЛК.

Тут я ничего принципиально - нового не придумал. Точно так как в операционной системе Windows/Linux/Android - если вылетело какое то приложение, ни ПК ни смартфон от этого не перегружаются и не вылетают.

Но моя заслуга в том что я написал полноценный компилятор, поддерживающий вытесняющую многозадачность, сложную адресацию, и другие сложные , и все это может работать уже на МК с ОЗУ в 16 Кб. Система работает в режиме реального времени, с детерминированным исполнением инструкций, по системному таймеру. В отличии от операционных систем типа Linux/Windows где ОС может приостановить вашу программу, для каких то своих дел.

Следующие тесты буду проводить уже на RISC V микроконтроллерах, и больше буду уделять внимание как это выглядит и работает - физически.

Кому интересно - присоединяйтесь, или пишите на почту

zoshytlogic@gmail.com

Показать полностью 3
271

Своими разработками, соревнуюсь с Mitsubishi в АСУ ТП. STM32F103 как ПЛК lo1

Серия Моими разработками, соревнуюсь с Брендами в АСУ ТП
Продолжаю тестирование своей разработки (IDE, компилятор, runtime) на разном железе. Сравнивая с ПЛК от Mitsubishi на этом же камне.

Продолжаю тестирование своей разработки (IDE, компилятор, runtime) на разном железе. Сравнивая с ПЛК от Mitsubishi на этом же камне.

В сети давно уже есть тесты с примером использования микроконтроллера STM32F103 в качестве ПЛК. Также продолжается выпуск китайскими компаниями современных ультра дешевых (около 100$) ПЛК на базе этого микроконтроллера с использованием среды разработки от Mitsubishi. Поэтому интересно было и мне попробовать этот чип и сравнить с брендом.

Что у меня за проект: Своими разработками соревнуюсь с брендами в АСУ ТП. Превзойти Codesys

Что у нас есть:

IDE/Компилятор:  3o|||sheet ("Зошит" читается. Моя разработка)

MCU  :  stm32f103

RAM  :  20kb

FLASH  :  64kb/128

64 Mhz

Режим работы моего ПЛК - многозадачный:

Схема виртуальной памяти машины в режиме вытесняющей многозадачности

Схема виртуальной памяти машины в режиме вытесняющей многозадачности

Вытесняющее-многозадачный , значит если задача не успела отработать - ошибки не будет(в обычном режиме - будет). Контекст задачи сохранится и наша виртуальная  3o|||sheet OS  переключиться на другую задачу. В данном тестовом случае задача не большая, отработать - успеет, и результаты будут корректны.

Алгоритм теста:

Тестовая программа содержит 184 LD,  часть из которых истинная, часть ложная. Зная количество истинных , мы знаем количество отработанных команд.

Стандартная LD команда содержит:

  1. чтение переменной,

  2. проверка на истинность,

  3. переход  по адресу в зависимости от результата

Каждая вкладка в моей среде разработки - новая задача. Это будут вытесняющие задачи с ОС или последовательные задачи без ОС , режим работы сохраняется в настройках проекта.

Компилятор и выполняемая среда данные не кеширует, и работает программа в самом трудозатратном режиме. В конце тестовой задачи устанавливаем/ сбрасываем физический вывод.

Замеряем время  осциллографом.

Своими разработками, соревнуюсь с Mitsubishi в АСУ ТП. STM32F103 как ПЛК lo

По тестам видно, что мой ПЛК работает в три раза медленнее чем на том же чипе но с средой о Mitsubishi. Почти 9 микросекунд за операцию в моем случае, против 3 микросекунды оппонентов. Да мой МК работал на 64 Мгц (не запустился внешний кварц, дефект платы, а внутренний HSI работал на 64 Мгц, до 72 не настраивался, оставил так) в отличии от 72 Мгц у Mitsubishi, но 10% роли не изменят, можем пренебречь.

Но если б я стремился к быстродействию, я б пошел коротким путем, которым идут как отечественные разработчики ПЛК, так и открытые проекты типа OpenPLC\Beremiz. А именно - простая трансляция LD/ST в текст СИ, и уже СИшным компилятором создавать прошивку.

Я выбрал сложный путь - создание полноценной виртуальной машины с компилятором. Что это дает? Дальше.

Что можно выжать с STM3F103 в качестве ПЛК с моей средой разработки.

1500 LD инструкций + 1500 дополнительно можно подгружать из флеш ( Mitsubishi предлагает 8000, Allen Bradley Micro810 - 2000 LD). Сколько влезет ST строк - трудно сказать, сложно измеряеммый, думаю около 500 -800 строк + стоько же с флэш (имеется ввиду версия МК с флэш 64 КБ. Так как моя версия оказалась - 128 Кб , по крайней мере так указывалось в утилите STLink. С этой версией (128кб) размер программы будет конечно не малым, LD как раз 8000, так и ST.

В отличии от прошлого теста камня STM32G030 у которого 8 КБ ОЗУ (тест его в прошлой статье - Своими разработками, соревнуюсь с брендами в АСУ ТП. Аналог Allen Bradley? STM32G030 против Micro810 ) микроконтроллер с 16 КБ и больше способен уже на многое. Он уже может работать в режиме, который я называю - множественных исполнителей. Невероятная реализация безопасности.

Первый в мире ПЛК с множественными исполнителями.

Первый в мире ПЛК с множественными исполнителями.

Критический код, можно отделить от кода с высоким риском фатальной ошибки. Связь, HMI и даже WEB сервер в ПЛК можно вынести - отдельно. А критический отлаженный код, отдельно. Что бы там не произошло в одном исполнителе - фатальная ошибка, никогда не остановит других исполнителей. У них полностью изолированы друг от друга области памяти и адресов. Там где обычный ПЛК бы слетел полностью, тут такого быть не может.

Кроме того, есть и обычные преимущества виртуализации памяти:

в машине с ОС 3o|||sheet - можно добавлять задачи не перезапуская ПЛК физически (как в Windows/Linux - установил, и сразу работает) . Изменение кода задачи ПЛК на лету я уже упоминал.

Все это я продемонстрирую уже на микроконтроллере, о котором много писали СМИ ( тот который на RISC V, 16 KB ОЗУ :) Объективно, среда 3o|||sheet (Зошит) это первый вменяемый и уже существующий инструмент который может превратить такой МК с ограниченными ресурсами в ПЛК причем с топовой функциональностью. На этот раз и вправду - аналоговнет).

Почему я полностью не пишу что имею ввиду - работаю в паре с одним небольшим предприятием по этому конкретному чипу. Если интересно что из этого получилось - присоединяйся, и напишите в комментах что за чип имеется ввиду :)

Показать полностью 4 1
49

Своими разработками соревнуюсь с брендами в АСУ ТП. Превзойти Codesys

Серия Моими разработками, соревнуюсь с Брендами в АСУ ТП
Своими разработками соревнуюсь с брендами  в АСУ ТП. Превзойти Codesys

3o|||sheet : комплекс для разработки промышленных контроллеров (виртуальных, или физических).Состоит из трех независимых частей:

1)Среда разработки. 2) Компилятор. 3) Среда выполнения на железе:

3o|||sheet IDE : Легкая кроссплатформенная среда разработки, может открываться даже на одноплатных ПК. Задача среды - транслировать языки программирования  (любые) в набор текстовых инструкций  для 3o|||sheet компилятора. А также, Устанавливать виртуальный  RTOS (собственной разработки) если пользователь распараллеливает программу на независимые задачи. В данный момент поддерживается LD, FBD и текстовый редактор для языков типа ST

Возможности: отладка, наблюдение онлайн значения в блоках, а так же - обновление кода отдельных задач на лету, не останавливая ПЛК физически и не останавливая другие задачи и производственные процессы.

3o|||sheet - компилятор

3o|||sheet - компилятор собственной разработки: независимое кроссплатформенное приложение. Самая интеллектуальная часть. Писать программы можно и без 3o|||sheet IDE,  Взяв  любой текстовый  редактор, например  Visual Code.

Своими разработками соревнуюсь с брендами  в АСУ ТП. Превзойти Codesys

“Родным” кодом компилятора есть собственный стиль, гибрид синтаксиса ассемблера (инструкции) и языка СИ (данные) , сделано с целью - максимально простой трансляции других высокоуровневых языков на платформу. Какая бы ни была среда разработки  (LD FBD ST) своя или сторонняя, среда должна транслировать в наш код .3osheet.

Несмотря на то что данные / переменные в системе виртуальные - физический их размер такой же как у языка СИ или Ассемблера. По переменным - никакой избыточности нет. В отличии от lua, Java , MicroPython , где переменная типа bool - весит больше 20 байт . Тут все оптимизировано для экстремально слабого железа. Вся ответственность типизации и работы с массивами лежит на компиляторе.

3o|||sheet Runtime

3o|||sheet Runtime: регистровая виртуальная машина работающая на стороне железа. Написана на СИ. Не использует низкоуровневый код под конкретную архитектуру, и быстро компилируется на любое железо ARM, RISC V,  x86, разница только в настройке периферии, которую также инициализировать можно из виртуального уровня.

Минимальные системные требования:

4  KB  RAM.

48 KB  Flash (полная версия).

32 KB  Flash ( с ограничениями).

Указанные требования - только  для запуска виртуальной машины.

Для пользовательских программ нужно  + память  программ ( к ОЗУ и Flash). С примерным расчетом 8-12 байт на каждую базовую инструкцию если мы говорим о LD языке. И 60-100 байт на каждый таймер / счетчик.

Если говорим о пользовательских LD/FBD то каждая атомарная инструкция входящая в него (ADD, SUB , инкременты  разные, переходы по веткам ) -  4 байта.

3o|||sheet Runtime - это полноценная машина. Содержит все нужные типы инструкций в том числе по работе с виртуальным стеком / контекстом задач. Что позволяет исполнять любые программы (глубокие переходы между функциями, рекурсии, многопоточность/многоядерность ). Разрабатывалась специально под АСУ ТП и строгие временные рамки исполнения задач.

Преимущества перед мировыми брендами

Это первая система виртуализации для железа с критически малыми ресурсами . У мировых производителей есть ПЛК с вытесняющей многозадачностью (не на железе с 8кБ ОЗУ). У нас  первый возможный ПЛК,  который может работать в нескольких  режимах одновременно ( в отличии от брендов где только что то одно). И в целом кардинально новое.

На базе микроконтроллера с 16 килобайт ОЗУ можно запустить несколько исполнителей, разделяя на критичность процессов.

Разделение программы на производстве - по критичности. Критическая ошибка в коде или процессе - не остановит ПЛК, другие исполнители продолжат работать.

Разделение программы на производстве - по критичности. Критическая ошибка в коде или процессе - не остановит ПЛК, другие исполнители продолжат работать.

Представьте что вы АСУ ТП шник, и меньше всего хотите остановить какой то процесс из-за простоя. Вы можете создать несколько изолированных исполнителей разделяя  по критичности:

Первая VM0 это - общие задачи + RTOS. Хотя  зависшая задача не повлияет на другие задачи так как периферийный таймер все равно переключит, но критическая ошибка кода - может положить систему/машину.

Обычный ПЛК от критической ошибки бы - лег. Тут ляжет только один из исполнителей.

Сюда мы можем установить HMI , не критическую связь, иной код с возможными рисками.

VM1 VM2 Критический код, безопасность (максимально простые процессы, не используя стек или глубокие переходы) - выполняем отдельными независимыми исполнителями.

На физическом уровне, в CPU -  у каждого исполнителя своя область памяти (свой массив байт) что бы там не произошло - вылетит только один,

другие продолжат работать.

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

Используя подобную архитектуру, сейчас разрабатываю механизм для создания  ПЛК под возможный стандарт  безопасности SIL3 SIL4 обеспечивая механизмы которых нет даже в мировых брендов:

Множественные исполнители программ.

Выполняться  код может в безопасном режиме. Например один исполнитель без доступа к физическим процессам - исполняет код, второй проверяет не слетела ли машина после этого , и самое главное - проверяет хэш исполнения на наличия “тихих ошибок” которые просто могут быть не замечены компилятором и даже средой выполнения ( не будет исключения, но данные могут быть ошибочны - вместе с ложным  срабатыванием впоследствии физическим выводом).

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

Дублирование датчиков для подстраховки от физической неисправности или отказа. Так же дублирование исполнителей для подстраховки от программного сбоя.

Дублирование датчиков для подстраховки от физической неисправности или отказа. Так же дублирование исполнителей для подстраховки от программного сбоя.

Жесткая изоляция: Сбой в VM1 (например, из-за некорректных данных с Датчика 1) никак не повлияет на выполнение VM2.

В классическом ПЛК с одной общей памятью сбойная программа могла бы повредить общие данные и "положить" весь контроллер.

Arbiter - сверяет данные, перезапускает слетевшего исполнителя, другое.

Подобные механизмы были раньше только в системах на Linux, а не на микроконтроллерах с 8-16 кб ОЗУ в формате ПЛК. Но Linux -  не система реального времени, и вообще темный лес для безопасности критических систем.

Виртуализация  выполнения проигрывает по скорости в 2-4 раза в сравнении с нативным кодом. А  создание нативных платформ для ПЛК - гораздо легче  путь,  так как свои LD ST  программы можно транслировать в СИ и компилировать например СИ-шным компилятором,  не заморачиваться о деталях реализации самому (как это делают открытые проекты типа Beremiz  и разные отечественные разработчики ПЛК).

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

Первое тестирование и сравнение с брендом: Своими разработками, соревнуюсь с брендами в АСУ ТП. Аналог Allen Bradley? STM32G030 против Micro810

Дальше буду тестировать свою разработку на разном железе и сравнивать с мировыми брендами. То что на быстрых CPU результаты будут хорошие итак понятно, но целенаправленно буду тестировать в основном "слабые" микроконтроллеры, для демонстрации уровня оптимизации и максимальные возможности которые можно эффективно выжать из слабого железа чего не предлагают мировые бренды в АСУ ТП.

Этот пост - обновленная справка по проекту, ссылаться на него буду в дальнейшем в тестах, как информация о проекте

Показать полностью 4 1
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества