Сообщество - Arduino & Pi

Arduino & Pi

1 498 постов 20 859 подписчиков

Популярные теги в сообществе:

7
Вопрос из ленты «Эксперты»

Esp32 c3 mini не работает

Здравствуйте микроконтроллирующие господа.

Мне в руки попала плата esp32 c3 mini. Сразу скажу, что с esp32 я работаю впервые (а потому Hard resetting via RTS pin... воспринимал как ошибку:D), до баловался только с ардуинкой.
кароче, код заливается нормально, но он НЕ ВЫПОЛНЯЕТСЯ. Ни простой скетч мигалка, ни простое хеллоу ворлд в монитор порта. Может я немного не умею искать там где надо, но я не нашёл информации по теме "шьётся, но не робит". Единственное что я нашёл, так это видео где объясняется прикол со скамом у этой платы (продаётся версия БЕЗ памяти для производителей, некоторые продавцы такие платы впаривают обычным пользователям). Плата досталась мне от знакомого, который купил целую пачку. Единственное что я успел сделать с платой, так это запаять ножки и немножко почистить её от моего флюса с помощью изопропилового спирта. Вопрос: Это я угробил плату своей рукожопошностью; плата рабочая и с ней всё нормально это просто я не умею ею пользоваться; плата изначально бракованная?

Скриншот ардуино ide

Скриншот ардуино ide

фотка самой платы (синий светодиод есть, но он не горит почему-то)

фотка самой платы (синий светодиод есть, но он не горит почему-то)

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

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

из личного:
То, что раньше я показывал с гордостью: "ВО ЧЕГО Я СДЕЛАЛ заместо заморского Сименса за охулиард рублей!" теперь я прячу и надеюсь, что заказчики не будут гуглить в сети мои статьи и прочее )))

можно оставлю это тут?

Взято с форума "Easyelectronics.ru"
Автор: tigdin . Добавлено: 06 янв 2015, 18:48"

Не являюсь крупным специалистом в области ПЛК, но вот что я напишу по этому поводу... Быть может, покажется, что немного перпендикулярно к теме. Вообще, хотел, было, запостить это в топике "Какой ПЛК выбрать"... Ответ -- ХОРОШИЙ... ))) Все знают, что когда Форда спросили, какая машина самая хорошая, он ответил: "НОВАЯ!" ))

(Аттеншн! Многа букаф!)

Дык по делу.

1) Касаемо выбора ПЛК и ПЛК-неПЛК или, скажем выбор Управлятора.
а) Остановить свой выбор именно на ПЛК или собрать всё на Ардуне -- это, в конечном итоге, Ваши соображения. Если брать промышленное помещение, где по питанию и в воздухе просто кишит куча помех, наводок, бросков напряжения, где тот же Управлятор может коммутировать, например, мрачные индуктивные нагрузки, то, в общем-то задача становится нетривиальной. Одно дело у Вас зависнет темопластавтомат, другое дело, когда игла помехи прилетит и дернет (по внешнему прерыванию) вход МК на Ардунечке или ЛУТ-плате и пресс опустится как раз на бедного оператора, залезшего внутрь что-то там, как всегда подправить. И дело даже не в том, что Вы честно отсидите срок (типун мне на язык!). Предстать перед воротами Рая с осознанием того, что у Вас на душе висит чья-то жизнь... Мне лично как-то совсем не хочется. Видел тут недавно поделки, которые аффтары называют что-то типа дешевый ПЛК... Если честно, то мороз по коже. У них по входам нет хотя бы защитных диодов (ога, а в AVR есть еще pullup резисторы). Я уже молчу о саппрессорах, там и прочей ненужной фигне всякой. У них нет и опторазвязки, там где она совсем бы не помешала, где может запросто прилететь напряжение и что-нибудь как бы внезапно открыть или закрыть в ненужный момент времени -- хрен с ним, с Австралией микроконтроллером, ну сгорит, подумаешь! Вот один маленький примерчик. Окей, как говорят пиндосы, задача. Педаль, идет кабель в блок управления, опторазвязка и все такое. Ок, защита по помехам. Ок, делаем так, чтобы оптрон "срабатывал" по возможно большему току -- чтобы "иголки", грозы и вообще соседний обыскрившийся контактор не запустили процесс и не вызвали ложного срабатывания.... Ладно, положим.. Но банальная жизненная ситуация: оператор постоянно пинает педаль туда-сюда и происходит... или обрыв внутри кабеля или, что еще хуже -- замыкание. Ну вот и всё... Если у Вас стоял Ардунька или, что хуже "дешевый ПЛК" на 800 входов и 8000 выходов по технологии ЛУТ, то изготовителю сего чуда Северное Сияние наблюдать однозначно и очень долго. Как написал один очень уважаемый мной человек с форума по автоматизации, прокурор скажет "Еу, махарайка!" и Вы никогда не докажете, что махарайка был лучше промышленного серифицированного ПЛК. Даже если Управлятор Вы делали по прямому указанию работодателя, знайте, что он всегда отмажется, а отвечать ВАМ! Отсюда вытекает, что выбор не обстоит как ПЛК -- это тупые железяки за безумные деньги, я сам спаяю!!!. Тем более, что эти деньги (на ПЛК) вряд-ли из Вашего кармана.
По-сему не понимаю товарищей, спокойно рекомендующих "споять самому" и что у ПЛК внутри та же неонка... Мое ИМХО -- думайте сами, решайте сами, иметь или не иметь. Повторю, диодиком можно мигать и при помощи ПЛК за 60 000 рублей и при помощи Ардуньки. Но, данная ситуация явно показывает безумие покупать для этого ПЛК, не так ли? А теперь то же самое, но со знаком "минус"! Ну, Вы меня понели... ))
б) Для микроконтроллеров есть куча софта и библиОтек, написанных неизвестно кем, зато бесплатных. Но даже библиотека управления LCD может оказаться опасной. Ну, зависли мы нечаянно в этой библиотеке, а клапан открыт и балшой бочка под давлением просто рванет, пока оператор сообразит, что ему надо переписать библиотеку LCD.HELLO.WORLD. А IAR стоит дорговато, в общем-то... ) Да и при разборках может возникнуть вопрос, откуда Вы взяли торрент...
в) Ну гут, внутри у ПЛК та же неонка. Знаю. Только, например, при просадке питания, в более серьезном случае, как-то не нужно использовать встроенный BrownOut... Лучше, чтобы это делал специальный внешний кусочек кремния, которых почему-то выпускают в больших количествах и которые с большей вероятностью защитят от того, что во флеше окажутся совсем непонятные данные, которые, если MCU примет за истину... А подтяжка в классические 10к на ногу явно рассчитана для применения MCU в холодильниках... Ну да, мясо протухло, ну и с ним... Для автомобильной, нпрмр, промышленности, зачем-то есть прям специальная категория, нпрмр, саппрессоров для защиты входов-выходов. Гроза, блымнула, знаете-ли, в паре тысяч метров от машинки и навела на проводочках, знаете-ли, пару тысяч вольт со всем вытекающими... А кондерчики в 0.1 очень "хорошо" проявляют свои свойства, когда рядом заработал сотовый или нечто такое на высокой частоте -- ну фигня, операторская вышка стоИт в сотне метров от циркулярной пилы с микропроцессорным управлением... Бггг... А еще, почему-то есть для RS-xxх мелкосхемы прям с гальванической развязкой. А есть почему-то и без нее... На порядок дешевле. А еще, почему-то есть мелкосхемы -- прям готовый вход для создания ПЛК, но стОят такие женщины почему-то каких-то безумных денег, в расчете на один вход неонки. А еще миллион того, что я не знаю и никто не знает. Все-таки, при запуске в серию ПЛКи сертифицируют, немножко и эта бумажка может быть тем самым спасительным кругом от мест с холодным климатом. Если кабель у педальки замкнет...
Резюме. По прежнему остаюсь приверженцем того, что не бывает "Кремлевских таблеток" и для каждой конкретной задачи нужно выбирать соответствующий инструмент: Диодиком помигать -- Ардунечька, в холодильник -- АВР-ку, в пресс -- "тупой и безумно дорогой" ПЛК. Спасибо профессионалам в области автоматики. Меня тоже лечили от "Шас спою!" и не скажу, что это всегда были вежливо и терпеливо со мной, за что профессионалам в области автоматизации огромное спасибо! С тех пор я даже на всенародное увлечение в виде "Умного Дома" на Raspberry 3.14 смотрю не без того самого страха. Зато теперь настоящий Линуксоид может неонкой диодиком помигать...
ЗЫ к пункту один: повоторюсь, вовсе НЕ утверждаю, что нужно выбирать ПЛК онли! Перечитайте, пожалуйста еще раз перед тем, как стягивать войска на границу... ;)

2) Ну лан, определились с железом. Дальше что? Если вы определились с применением микроконтроллера -- дальше можно не читать, потому как глупо советовать здесь что-либо. Тут просто широчайший выбор средств как аппаратных, так и программных и всё зависит исключительно от Ваших знаний и умений. Я вот, например, боюсь tqfp100 даже в руки взять, а умельцы между ножками еще и резисторы с кондерами распаивают, после изготовления платы... ЛУТ-ом. Помните, как в одном очень популярном фильме охреневший слегка Ватсон: "Но, черт возьми, Холмс..." ))) Но и этим все не ограничивается. Программный инструментарий -- это просто фантастика. Хошь на асме извращайся, хошь на С-умножить-умножить, а то и вообще ставь RTOS. Бесплатную или даже платную. Но мне очччень понравился постулат создателей, например, ARM-а, с его навороченной системой прерываний. Буквально написано, что хоть микроконтроллер и умеет работать в режиме реального времени, но, типа, ребята, Вы сами должны понимать, что его "реальное время" зависит, в общем-то, от того, чем он занят в настоящее время и какое прерывание обрабатывает. Поэтому корректность проектирования тормозной системы автомобиля лежит, всецело, на Вас... Опять не таблетка. Совсем. А если Вы модно поставили RTOS и теперь у Вас полный "ртос"... Ага... Особенно без отладчика (это я недавно вычитал, ми-ми-ми), который позволяет отлаживать все в работе именно с RTOS (и стоит как чугунный мост)... В общем, полет Вашей фантазии и возможностей ограничивается только Вашим жизненным циклом... ;) Поэтому скажу о ПЛК. Дело в том, что их, немного, как бы задумывали на смену привычек суровых Челябинских металлургов электронщиков, которые ваяли управление оборудованием в виде высоких таких шкафичков, набитых дискретной логикой. Помню, однажды, привезли парочку настоящих роботов в отдел промэлектроники и некто ХХХ, по кличке "Сундук" был занят тыканием в многа ножек, которые помещались в двухэтажном корпусе метр-на-ноль-пять, волшебным карандашиком с загорающимися лампочками... Хврезерный станочек автоматизировался... )))
В общем, производители ПЛК-ов придумалии классную штуку! Щелкнул на рейке DIN, прикрутил всякие там трансдьюсеры и оп-ля, все готово! За одним исключением. Выяснилось, что "суровые металлурги" ни бельмеса не понимают, частенько, после того, как щелкнули на рейке, как сделать так, чтобы всё зажужжало-закрутилось. Более того, времена, когда появились ПЛК, как бы внезапно совпало с объектно-ориентированным программированием в пубертате, да и вообще, как я писал выше, применение ООП было тогда понятно, не до конца, другим суровым металлургам, но в случае с опасным промышленным производством -- это даже очень не есть хорошо, поскольку не понятно, чем будет занят ПЛК в это время. А посему, чтобы загладить вину перед инженерами-электронщиками, стали придумывать понятные для них субстанции в виде LD для привыкших к шкафам с релейной автоматикой или FBD (и, как бы CFC) для Челяб... электронщиков. Однако, существует и много возможностей для тех случаев, когда "твердочник" придумывает аппаратное обеспечение, а "мягкочник" пишет для него программу. Вот и появились IL и ST для тех, кому асм и паскаль роднее. Касаемо SFC -- это для тех, кто очень любит "конечные автоматы", с той лишь разницей, что внутрь SFC можно запросто понапихать и IL и ST, на раз... Только, если этот "конечный автомат" получается большой и толстый, то моск начинает плавится, потому, что в данном случае нужно, чтобы особенно было "всё под контролем", ресурсов этого "процессора" на всегда хватает.
ПЛКи, они еще и работают несколько "странно" и эту специфику нужно учитывать. Например, ПЛК считывает состояние входов, сохраняет их и несется дальше, пока не закончит свой цикл, выплюнув команды на выходы. То есть ему как бы наплевать на изменения на входах, пока он снова не прибежит к точке считывания их значений. Следовательно, системе некоторое время "пофигу на Ваши принципы" и эти "странности" надо учитывать. К тому же, ПЛК могут иметь зависимое и независимое время цикла. То есть, чем сложнее у Вас программа, тем тугодумнее будет ПЛК в первом случае, и как он работает во втором -- не берусь ответить, поскольку не вкуриваю, как это вообще может быть, а производители ПЛК держат всё нужное и ненужное в большой тайне (большое человеческое спасибо им!)

Слегка коснусь языков и как бывший программер, как это модно сейчас произносить. Если с IL и ST более или менее понятно, с точки срения работы компилятора (если он там настоящий), но я с большим трудом представляю быстродействие кода, нарисованного мышкой. Да, здорово, понакидал блоков, посоединял их "проводками" и всё работает... Но если с "пошаговыми" инструкциями все понятно, то КАК работает потом пережеванная в понятный микроконтроллеру код схэма из кубиков, как бэ, совсем не представляю. И на практике применение таких "графических" языков не есть всегда легко решить проблему. Работать будет, но совсем не так, как красиво было нарисовано. Это не настоящая логика, где всё работает "параллельно"... Да и с убогими объемам памяти ПЛК придется реально экономить, чтобы как-то быстро эти объемы не закончились. Я уже не говорю о файлах проектов, размеры которых растут как-то совсем непропорционально сложности проекта... Если у Вас всё работает на LD или FBD, то или проекты такие или одно из двух... Я знаю случай, когда ребята на отладке одного такого проекта гробили миллионы рублей в день... Не знаю, чем у них там все закончилось... Но однозначно рекомендовать один из языков в качестве основного не возьмусь.

Кстати, очень осторожно пискну, в виду своей туманной осведомленности, но на тех же ПЛИС крутые дядьки пишут всё строчками, хотя и есть возможность нарисовать мышкой (Не пинать! Чик-чик! Я в домике!)

3) О том, как продают НЕЧТО. Как и в случае со всем, что продается, каждый производитель стремится привязать покупателя к своей продукции. Поэтому, не смотря на стандарты, каждый из них добавляет в свои ПЛК какие-нибудь фишки, которые работают только у них, приручает разраба к своей среде разработки и еще к чему-нибудь, о чем напряженно морщат лобики манагеры в отделах маркетинга. Поэтому подсев на ПЛК определенного производителя, разработчики очень неохотно пытаются сделать нечто на ПЛК других производителей. А мои тапочки просто умрут от смеха, если Вы попытаетесь реально перенести программу на оборудование другого производителя, несмотря на все МЭКи... Впрочем, никто особенно и не заморачивается...
Подчеркну еще одну фишку. Эти ребята маркетологи получают зарплату и пытаются ее оправдать. И, поэтому, часто будучи очень далеки от электроники, автоматизации и вообще от того, что они продают, они, тем не менее, упорно влияют на возможности/к/цене производимой продукции. Вот почему приходится вспоминать пункты из Толкового Словаря Даля, когда вдруг оказывается, что с точки зрения "обычного" электронщика "копеечная" задача вдруг выливается в то, что нужно вдвое увеличивать стоимость проекта, чтобы "оно смогло"... Даже очень интересная фишка... Посмотрите, сколько стОит реле LOGO! Сименса и сколько стОит... ШНУРОК, для того, чтобы его запрограммировать... А возможность использования обычной SD-карты памяти в качестве хранилища! Карта-то стоит копейки, а вот если Вы возжелали хранить данные, покупайте проприетарный модуль памяти по той же цене и объемом в.... тысяч раз меньше. Когда появилась возможность использовать обычные SD-шки, я, прочитав эту новость, плакал от счастья целый день... Поэтому так часто возникает желание послать этих умников в Словарь Даля и спаять, нафиг, на "тиньке" и за три копейки. Однако, не поддавайтесь искушениям. Северное Сияние... Оно...)
Но не только это... Поверьте, автоматизация производства -- это там, где все должно быть как у взрослых. Именно под автоматизацию разрабатываются настоящие полковники железяки. Я молчу, например, об искрозащите, но Вы попробуйте прикрутить к Атмеге датчик давления, хотя бы на сраные 12 бар, если найдете такой в непромышленном исполнении и на 5 вольт, такой... В Чипе-Дипе есть... Ага... и за 3 копейки...

4) Ну гут, покупаю! С оговорочкой. Можно купить и кетайский ПЛК и поделки (не в обиду) отечественных производителей. У них шнурки программирования вообще можно спаять самому. Но вот ведь какая фигня. Купив железяку, будьте готовы к тому, что она программируется.... последней бета версией программного обеспечения. ЗдОрово? К тому же предыдущая не-бета-версия сама лезет в инет и обновляется... на эту самую бету. И ждать реальных обновлений не приходтися. Однако, о программном обеспечении в целом: чтобы НОРМАЛЬНО его использовать, нужна не только его безглючность, "дружественность интерфейса" и "нативность" там все остальныя. Нужна еще дотошная и детальная документация. Иначе Вы можете и "не догадаться". Поэтому призадумайтесь, маленькие -- по три, или большие -- но по пять... Есть, конечно, и такая фишка. Вам говорят -- CoDeSys -- там все написано и его использует BOSCH! ВАХ! Ну, да, это так, но под конкретный ПЛК все равно есть "кусочек", который обеспечивает работу этой самой железяки. Так что вылизанная Кодесис может столкнуться с корявеньким таргетом, писанным местным программером, который, в основном, боролся с утра с голодом, а после обеда со сном... Поэтому время, которе может быть потрачено на проект, может быть несоразмеримо дороже, фирменной железки, вылизанной IDE и документации, изобилующей примерами, понятным даже имбецилам... ) Ну да, зоказчег -- он часто далековат от проблем, у него один критерий -- цифра, обозначающая конечные (причем одноразовые) затраты на конкретные осязаемые железки. Не все же умеют считать, реально, деньги. И то, что козлика надо не только доить, но еще и кормить, встречают, часто, даже агрессию... Тут уж как в известной сказке: "А можно из одной шкурки пошить восемь шапок?" Ответ, однако нетривиален... )))
И все-таки, ПЛК Мицубиси, они... ПЛК Мицубиси (сорри, не конкретно об этом производителе). Они, на весь мир продаются... Что кагбэ намекает (не думайте, пжлст, что это критерий выбора. Здесь речь только о том, что в разработку вкладыватся огрмные деньги и огромный опыт, схемотехникой занимаются группы инженеров, а над документацией потеет, наверняка целый отдел)

И маленькое такое ЗЫ еще на восемь страниц... )) Если Вы думаете о том, что я тайный эротоман Хоботов, то задумайтесь о том, что есть стандарты, где указано, на каком расстоянии в миллиметрах от кнопки "Пуск" и в какой части панели должен быть размещен, например, "грибок" экстренной остановки.. ))

Как-то так...

Спасибо, однако, тем, кто асилил... ) Был рад, если о смыслом )


ps

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

Будете смеяться, но определенные входные цепи я делаю на (герконовых) реле. Реле, коммутируемые 24 вольтами, сидят рядом с контроллером и одно из них срабатывает, второе отпускает. То есть к педали идет три провода. Общий, NO, NC... Обработка выполняется по XOR. Если в кабеле происходит замыкание, Общий --> NO, то контроллер распознает, что это замыкание и не сработает, поскольку цепь Общий -- NC должна быть разорвана. В том числе, можно диагностировать замыкание и трех проводов и обрыв проводов. Да, там есть "мертвая" комбинация, но все таки, такой опрос педали резко повышает выживаемость оператора... ))) А реле на 24 вольта потому, как кроме достаточно большого напряжения, ему нужен и, относительно, большой ток. То есть релям как бы пофигу на все наводки, помехи и иголки... Нужно такую, блин, наводку забабахать, чтобы реле сработало... (кстати, аж два, в случае с XOR -- что в принципе невозможно -- наводка-то на три проводника сразу.. )) ))) За ресурс реле бояться нечего. Контакты, коммутирующие вход контроллера доооолго будут обгорать. ;) Фактически, например, с герконовыми реле их ресурс стремится к бесконечности... )

Касаемо аварийного стопа и всех прочих защит, как сказал anakost -- это в любом случае должна быть отдельная система, не зависящая от контроллера. Она должна лишь сигнализировать контроллеру о разрыве петли безопасности -- либо концевыми выключателями, либо кнопкой "стоп" либо другими компонентами. Было бы неплохо, если такая система имеет еще защиту от умников, которым не хочется, например, нажимать две кнопки одновременно двумя руками, и они ставят перемычку. В таком случае система безопасности должна вываливаться с ошибкой и сигнализацией основному блоку управления... ИМХО, но в любом случае делать аварийный стоп программно... лучше уж выгоревший шкаф управления от дуги в 6 KVх1000А, чем человеческая жизнь... Это не утверждение. Опять, нужно "на месте ориентироваться" как там всё устроено...
И еще... Если есть ресурсы, у системы безопасности, я стараюсь быть савсэм хитры. Например, у некоего пресса есть огромная ведомая шестерня. Я присобачил рядом индуктивный датчик, который "считает" зубы у этой шестерни. В случае, если оператор нажал кнопку "Стоп" (имеется в виду штатная остановка), а тормозная муфта не сработала (или хреновато сработала -- умный механик чистил все подряд и протирал колодки тормозной муфты тряпочкой извозюканной в масле) и плита пресса продолжает двигаться (или вообще она почему-то продолжает двигаться), то система тупо отрубает питание с жуткими воплями и сигнализацией критической неисправности. Плита остановится в виду того, что ведомой шестерней крутить ведущую как бы трудновато... ))) И снова запустить пресс после такой ошибки ни фига не получится, пока не придет skilled personnel... Ну и профит еще в том, что можно сказать о том, когда пора менять колодки или пора отрегулировать тормозую муфту.. )

Ну, параноик я, чо... )))

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

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

Ну ты крут, мужик! Что еще сказать) Было дело запускал завод асфальтный, на своих двух платах самопальных(даже зеленных и красивых сам спроектировал китайцы отправлили мне их) , эти платы были у меня как модули ввода вывода, микроконтроллер там стоит ESP32(кодил на Framework Arduino Platformio Visual Studio Code) через протокол Modbus RTU, вся логика была на обычном Ноутбуке , линукс туда еще поставили, там логику завода написал на C++ QT Framework, три года завод уже отработал. К чему я тут: короче я тогда тоже типа мысленно соревновался с ПЛК крутыми. Но времени и сил убил на это все много, и денег мало заработал, но было весело, спал прям там в операторской в спальном мешке, короче на улице почти) Удачи вам и сил!!!

777

Оптимизация 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
273

Своими разработками соревнуюсь с брендами АСУ ТП. 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
109

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

О, в полку ПЛК-строителей прибыло!

Сделал ПЛК, совместимый с Мицубиси FX2N. С "железом" можно ознакомиться по ссылке в конце поста. Программируется из любой IDE от Мицубиси, поэтому доступны все языки из 61131-3. Реализована бОльшая часть команд из набора оригинального ПЛК. Часть команд реализованы в виде функциональных блоков, чтобы задействовать периферию STM32, часть в процессе реализации. Есть много отличий от оригинала, например, на борту есть Ethernet, EIA-485, CAN. Программирование ПЛК осуществляется через Ethernet. В рантайм встроена поддержка Modbus всех видов и лиц. Для настройки расширенного по сравнению с оригиналом функционала используются конфигурационные файлы, которые доступны через встроенный ftp-сервер. Средний темп исполнения 1000-1200 шагов за 1мс при включенной отладке, опросе слэйвов по Modbus/RTU и опросе самого ПЛК из СКАДА. Код рантайма написан на С++ изначально без привязки к конкретному МК, поэтому может быть перенесён на любой МК, для которого есть FreeRTOS. Была даже сборка по Windows, когда отлаживался протокол между IDE и ПЛК.

https://disk.yandex.ru/d/5KCtVjEK31hQeg

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
153

Парктроник в гараж

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

Смысл парктроника в том, чтобы в зависимости от приближения менялся цвет ленты. В данном случае, т.к. это "мини" парктроник, то я задумал, что 20 см - зелёный, 10 см - жёлтый и менее 5 см - должен моргать красный.

Для проекта нужно.

  1. Кусок светодиодной ленты. У меня был на кусочек 12 диодов.

  2. Ардуино UNО.

  3. Ультразвуковой датчик для измерения расстояния и движения HC-SR04.

  4. Пакет молока

HC-SR04 - это популярный и недорогой ультразвуковой датчик для измерения расстояния. Он использует принцип эхолокации - посылает ультразвуковой сигнал и измеряет время, за которое он возвращается после отражения от объекта.

  • Эффективная дистанция: 2 см - 400 см (реально 2 см - 200 см стабильно)

  • Точность: ~3 мм

Если в проекте несколько составляющих, то я всегда по возможности их отдельно проверяю, чтоб потом не ломать голову, из-за чего всё не работает.

Поэтому вначале проверяем датчик HC-SR04. Для этого загружаем скетч проверки и в мониторе порта смотрим, как датчик реагирует, например, на руку.

Схема подключения HC-SR04 к Arduino Uno:

HC-SR04 Arduino Uno

VCC 5V

Trig PIN 12

Echo PIN 11

GND GND

Скетч для проверки:

https://disk.yandex.ru/d/wELrf8-F7Ad3OA

Смотрим монитор порта. Датчик работает

Смотрим монитор порта. Датчик работает

Далее подключаем светодиодную ленту. Диодов всего 12, поэтому я не стал заморачиваться с отдельным питанием.

Arduino Uno Светодиодная лента

GND GND

5V +5V

PIN6 DIN

Заливаем скетч и проверяем. В качестве авто пакет молока)

https://disk.yandex.ru/d/qKIzeLijFmiitg

Всё нормально работает. И при необходимости можно парктроник воткнуть и во взрослый гараж.

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

Темы

Политика

Теги

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

Сообщества

18+

Теги

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

Сообщества

Игры

Теги

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

Сообщества

Юмор

Теги

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

Сообщества

Отношения

Теги

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

Сообщества

Здоровье

Теги

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

Сообщества

Путешествия

Теги

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

Сообщества

Спорт

Теги

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

Сообщества

Хобби

Теги

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

Сообщества

Сервис

Теги

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

Сообщества

Природа

Теги

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

Сообщества

Бизнес

Теги

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

Сообщества

Транспорт

Теги

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

Сообщества

Общение

Теги

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

Сообщества

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

Теги

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

Сообщества

Наука

Теги

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

Сообщества

IT

Теги

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

Сообщества

Животные

Теги

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

Сообщества

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

Теги

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

Сообщества

Экономика

Теги

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

Сообщества

Кулинария

Теги

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

Сообщества

История

Теги

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

Сообщества