tonyk_av 42 6 октября, 2022 Опубликовано 6 октября, 2022 (изменено) · Жалоба 1 hour ago, uni said: На уровне программных компонент мэк-программы это невозможно, потому что никаких прерываний там не существует как сущностей. В ПЛК от Мицубиси и Дельты существуют обработчики прерываний. У Мицубиси их относительно Дельты немного, а вот у Дельт, ориентированных на управление перемещением, очень даже много. Даже время входа в обработчик указывается, кстати. Подозреваю, что и события у Сименса тоже могут возбуждаться аппаратно, например, изменениями сигналов DI или таймерами. Странно слышать, что Сименсов нет прерываний. Должны быть, иначе как ПЛК будет реагировать на аварийные ситуации, когда каждый такт процессора на счету? 1 hour ago, uni said: Если runtime драйвер управляется с мэк-уровня битами регистров ПЛК Я уже упоминал про двойную буферизацию в своей реализации ПЛК. Она сделана как раз для того, чтобы драйверы протоколов жили своей жизнью, а задачи в ПЛК- своей, но доступ к регистрам ПЛК должен быть синхронизирован и атомарен. Вот фрагмент настройки мастера шины I2C, работающего с расширителем дискретного ввода-вывода MCP23008. Здесь два запроса: один на чтение DI, другой на запись DO. Мастер шины I2C работает отдельной задачей. Из программы пользователя он получает настройки откуда-что читать, и куда-что записывать. Можно из программы пользователя инициировать выполнение одного запроса, можно поставить запрос на постоянное выполнение. Никакой жёсткой привязки к адресам нет, куда пользователь сказал, например, класть данные, туда они и будут положены. Модбас-мастер реализован аналогично. Модбас-слэйв вообще даже задачи не имеет, полностью обрабатывается в прерываниях. Если встать на любую шину осциллографом, то там идёт практический сплошной поток, без пауз, никто никого не ждёт, спросили- сразу ответили. И пофиг сколько задач, какое у них время сканирования. Изменено 6 октября, 2022 пользователем tonyk_av Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uni 6 6 октября, 2022 Опубликовано 6 октября, 2022 (изменено) · Жалоба Я тут вспомнил, что могу показать реальную временную диаграмму с реального ПЛК. В принципе, это может сделать любой владелец Raspberrypi, для которых есть Codesys Runtime. Они выложены у них в Store. Берёте плату, накатываете на неё Runtime, создаёте задачи и подключаете разные драйверы. Там есть их несколько. В драйверах опрашиваете устройства по разным интерфейсам. Далее подключаемся цифровым логгерам напрямую к пинам платы и получаем временные диаграммы, о которых я упоминал выше. Я когда-то таким занимался. Чем сто раз писать, можно один раз посмотреть на вывод анализатора. На картинке показано то, что я называю мэк-драйверами. Можно сказать, что это такие ФБ, тело которых исполняется вне времени работы приложения, т.е. при чтении входов и записи выходов. Все стандартные драйверы периферии для ПЛК с Codesys так реализованы, а не так, как вы показываете. Думаю, что в этом есть причина. Изменено 6 октября, 2022 пользователем uni Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uni 6 6 октября, 2022 Опубликовано 6 октября, 2022 · Жалоба 20 минут назад, tonyk_av сказал: Странно слышать, что Сименсов нет прерываний. Должны быть, иначе как ПЛК будет реагировать на аварийные ситуации, когда каждый такт процессора на счету? Мне не сложно это посмотреть, так как документация имеется. Насколько я помню, в старых версиях ПЛК были нумерованные или именованные блоки, которые предназначались для обработки какого-то конкретного исключения. Но сомневаюсь, что аппаратная обработка "прерывания" (ISR) у них прямо исполняется этими блоками. Такого быть не должно. Я поэтому и попросил дать определение прерывания, которого нет в стандарте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 42 6 октября, 2022 Опубликовано 6 октября, 2022 · Жалоба 2 minutes ago, uni said: Я поэтому и попросил дать определение прерывания, которого нет в стандарте В стандарте МЭК сказано, что блоки могут реализовываться на других языках, значит, если в языке реализации есть понятие "прерывание", то МЭК не запрещает использовать прерывание. Это общий подход законодательства: разрешено всё, что не запрещено. 26 minutes ago, uni said: Все стандартные драйверы периферии для ПЛК с Codesys так реализованы, а не так, как вы показываете Я знаю, что в КДС есть возможность доступа непосредственно к памяти и регистрам целевого МК, поэтому есть возможность программировать непосредственно "железо", значит, всё, что я говорил, реализуется в КДС. 29 minutes ago, uni said: Думаю, что в этом есть причина. Конечно, есть! Ты в курсе, что, например, в S300 используются шесть разных процессоров? Причём не все из них от Infineon (дочка Сименса). И для каждого свой компилятор. От пользователя сей факт скрыт IDE. Очевидно, что описанный мной подход потребовал бы написания и поддержки шести реализаций, поэтому проще сделать одну без привязки к "железу", оставив минимальную привязку, например, к UART через рантайм. У меня для ПЛК под STM32 три разных UART, причём все ощутимо отличаются друг от друга. А тут шесть разных, причём с разными архитектурами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uni 6 6 октября, 2022 Опубликовано 6 октября, 2022 (изменено) · Жалоба 37 минут назад, tonyk_av сказал: В стандарте МЭК сказано, что блоки могут реализовываться на других языках, значит, если в языке реализации есть понятие "прерывание", то МЭК не запрещает использовать прерывание. Это общий подход законодательства: разрешено всё, что не запрещено. Можно конечно всё что угодно. В моих библиотеках также есть точно такие же ФБ для модбас мастеров, работающие в задачах. Проблема только в том, что реальные обычные пользователи ПЛК ими не пользовались и попросили реализацию протокола такую же, как это сделано в стандартных драйверах Codesys, где все настройки вынесены в дерево проекта, а результат сразу получается в глобальных переменных. Не нужны никакие промежуточные ФБ. Изменено 6 октября, 2022 пользователем uni Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 42 6 октября, 2022 Опубликовано 6 октября, 2022 · Жалоба 11 minutes ago, uni said: Не нужны никакие промежуточные ФБ По-сути, за удобство заплачено скоростью работы. Ещё нюанс. Есть медленные протоколы типа I2C, в которых одним запросом данные не запишешь и не прочитаешь. Если их не убрать из пространства пользователя, то ПЛК превратится в жуткого тормоза, особенно когда, например, датчик на UART работает на 1200 бит/с и их штук 20 на одной линии. С другой стороны, когда STM32F4 на 100 или 168МГц без напрягов тянет 4-6 Modbus/RTU на скорости 462К, то, боюсь, из пространства пользователя такое вряд ли будет нормально, без лагов, работать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uni 6 6 октября, 2022 Опубликовано 6 октября, 2022 (изменено) · Жалоба 17 минут назад, tonyk_av сказал: С другой стороны, когда STM32F4 на 100 или 168МГц без напрягов тянет 4-6 Modbus/RTU на скорости 462К, то, боюсь, из пространства пользователя такое вряд ли будет нормально, без лагов, работать Я писал драйвер для Codesys, который доступен в дереве проекта и работает с 4-мя RS-ами как-бы одновременно. Там была ещё другая абстракция - теги для всех модбас регистров. Ты описываешь сотни разных тегов в глобальных переменных, а драйвер уже сам разбирается что, куда, как и когда записывать. Нормально в принципе работало, учитывая, что одновременно ПЛК ещё и рисовал на экране и обрабатывал клавиатуру. Изменено 6 октября, 2022 пользователем uni Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 42 6 октября, 2022 Опубликовано 6 октября, 2022 · Жалоба 2 minutes ago, uni said: Я писал драйвер для Codesys Ага, если бы я не знал, на чём сделаны "Агавы", то не стал бы упоминать про STM32F4. 😉 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uni 6 6 октября, 2022 Опубликовано 6 октября, 2022 · Жалоба Тут дело не в том на чём они сделаны, а в том, что runtime работает под Linux. Также мои библиотеки модбас отвязаны от ПЛК. Я уговорил директора в своё время убрать привязку к типу ПЛК, т.к. толку от этого не много, а пользы больше. По этой причине пара библиотек (AgavaModbus и AgavaModbusEx) работают и с Owen, и Raspberry Pi, и с Агавой. Пользуйтесь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uni 6 7 октября, 2022 Опубликовано 7 октября, 2022 · Жалоба У товарища Jay всё удобно сведено в одну статью: So you want to build an embedded linux system? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Make_Pic 0 13 декабря, 2022 Опубликовано 13 декабря, 2022 · Жалоба On 9/29/2022 at 1:38 AM, uni said: Есть ещё один способ сделать поддержку мэк языков - реализовать клон Митсубиши ПЛК FX2N или FX3N. На радиокоте есть проект с исходниками, который частично покрывает набор команд. Тогда можно использовать родную среду для программирования такого ПЛК - GXWorks2. А каких команд не хватает? Есть сравнение с полным набором команд? On 9/29/2022 at 8:53 PM, tonyk_av said: Типа реклама!? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться