Перейти к содержанию
    

Подскажите аналоги базы для модуля вычислителя

1 hour ago, uni said:

На уровне программных компонент мэк-программы это невозможно, потому что никаких прерываний там не существует как сущностей.

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

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

 

1 hour ago, uni said:

Если runtime драйвер управляется с мэк-уровня битами регистров ПЛК

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

 

Вот фрагмент настройки мастера шины I2C, работающего с расширителем дискретного ввода-вывода MCP23008. Здесь два запроса: один на чтение DI, другой на запись DO. Мастер шины I2C работает отдельной задачей. Из программы пользователя он получает настройки откуда-что читать, и куда-что записывать. Можно из программы пользователя инициировать выполнение одного запроса, можно поставить запрос на постоянное выполнение. Никакой жёсткой привязки к адресам нет, куда пользователь сказал, например, класть данные, туда они и будут положены.

image.png.9c426960101a10aaea9910d0e102180a.png

 

Модбас-мастер реализован аналогично. Модбас-слэйв вообще даже задачи не имеет, полностью обрабатывается в прерываниях.

 

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

Изменено пользователем tonyk_av

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я тут вспомнил, что могу показать реальную временную диаграмму с реального ПЛК. В принципе, это может сделать любой владелец Raspberrypi, для которых есть Codesys Runtime. Они выложены у них в Store. 

Берёте плату, накатываете на неё Runtime, создаёте задачи и подключаете разные драйверы. Там есть их несколько. В драйверах опрашиваете устройства по разным интерфейсам. Далее подключаемся цифровым логгерам напрямую к пинам платы и получаем временные диаграммы, о которых я упоминал выше. 

Я когда-то таким занимался. Чем сто раз писать, можно один раз посмотреть на вывод анализатора. 

На картинке показано то, что я называю мэк-драйверами. Можно сказать, что это такие ФБ, тело которых исполняется вне времени работы приложения, т.е. при чтении входов и записи выходов. Все стандартные драйверы периферии для ПЛК с Codesys так реализованы, а не так, как вы показываете. Думаю, что в этом есть причина.

драйверы.png

Изменено пользователем uni

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 минут назад, tonyk_av сказал:

Странно слышать, что Сименсов нет прерываний. Должны быть, иначе как ПЛК будет реагировать на аварийные ситуации, когда каждый такт процессора на счету?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, uni said:

Я поэтому и попросил дать определение прерывания, которого нет в стандарте

В стандарте МЭК сказано, что блоки могут реализовываться на других языках, значит, если в языке реализации есть понятие "прерывание", то МЭК не запрещает использовать прерывание. Это общий подход законодательства: разрешено всё, что не запрещено.

26 minutes ago, uni said:

Все стандартные драйверы периферии для ПЛК с Codesys так реализованы, а не так, как вы показываете

Я знаю, что в КДС есть возможность доступа непосредственно к памяти и регистрам целевого МК, поэтому есть возможность программировать непосредственно "железо", значит, всё, что я говорил, реализуется в КДС.

29 minutes ago, uni said:

Думаю, что в этом есть причина.

Конечно, есть! Ты в курсе, что, например, в S300 используются шесть разных процессоров? Причём не все из них от Infineon (дочка Сименса). И для каждого свой компилятор. От пользователя сей факт скрыт IDE. Очевидно, что описанный мной подход потребовал бы написания и поддержки шести реализаций, поэтому проще сделать одну без привязки к "железу", оставив минимальную привязку, например, к UART через рантайм.

 

У меня для ПЛК под STM32 три разных UART, причём все ощутимо отличаются друг от друга. А тут шесть разных, причём с разными архитектурами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

37 минут назад, tonyk_av сказал:

В стандарте МЭК сказано, что блоки могут реализовываться на других языках, значит, если в языке реализации есть понятие "прерывание", то МЭК не запрещает использовать прерывание. Это общий подход законодательства: разрешено всё, что не запрещено.

Можно конечно всё что угодно.

В моих библиотеках также есть точно такие же ФБ для модбас мастеров, работающие в задачах. Проблема только в том, что реальные обычные пользователи ПЛК ими не пользовались и попросили реализацию протокола такую же, как это сделано в стандартных драйверах Codesys, где все настройки вынесены в дерево проекта, а результат сразу получается в глобальных переменных. Не нужны никакие промежуточные ФБ.

AgavaModbusEx.png

Изменено пользователем uni

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 minutes ago, uni said:

Не нужны никакие промежуточные ФБ

По-сути, за удобство заплачено скоростью работы.

 

Ещё нюанс. Есть медленные протоколы типа I2C, в которых одним запросом данные не запишешь и не прочитаешь. Если их не убрать из пространства пользователя, то ПЛК превратится в жуткого тормоза, особенно когда, например, датчик на UART работает на 1200 бит/с и их штук 20 на одной линии. С другой стороны, когда STM32F4 на 100 или 168МГц без напрягов тянет 4-6 Modbus/RTU на скорости 462К, то, боюсь, из пространства пользователя такое вряд ли будет нормально, без лагов, работать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 минут назад, tonyk_av сказал:

С другой стороны, когда STM32F4 на 100 или 168МГц без напрягов тянет 4-6 Modbus/RTU на скорости 462К, то, боюсь, из пространства пользователя такое вряд ли будет нормально, без лагов, работать

Я писал драйвер для Codesys, который доступен в дереве проекта и работает с 4-мя RS-ами как-бы одновременно. Там была ещё другая абстракция - теги для всех модбас регистров. Ты описываешь сотни разных тегов в глобальных переменных, а драйвер уже сам разбирается что, куда, как и когда записывать. Нормально в принципе работало, учитывая, что одновременно ПЛК ещё и рисовал на экране и обрабатывал клавиатуру.

Изменено пользователем uni

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, uni said:

Я писал драйвер для Codesys

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тут дело не в том на чём они сделаны, а в том, что runtime работает под Linux. Также мои библиотеки модбас отвязаны от ПЛК. Я уговорил директора в своё время убрать привязку к типу ПЛК, т.к. толку от этого не много, а пользы больше. По этой причине пара библиотек (AgavaModbus и AgavaModbusEx) работают и с Owen, и Raspberry Pi, и с Агавой. Пользуйтесь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У товарища Jay всё удобно сведено в одну статью: So you want to build an embedded linux system?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 9/29/2022 at 1:38 AM, uni said:

Есть ещё один способ сделать поддержку мэк языков - реализовать клон Митсубиши ПЛК FX2N или FX3N. На радиокоте есть проект с исходниками, который частично покрывает набор команд. Тогда можно использовать родную среду для программирования такого ПЛК - GXWorks2. 

А каких команд не хватает? Есть сравнение с полным набором команд?

On 9/29/2022 at 8:53 PM, tonyk_av said:

image.png.4d2c56cef98a49057cbd43a024434755.png

image.png.47a5975d434f4b272aff584e969399b9.png

 

Типа реклама!?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...