Связь с программой CoDeSys на базе ПЛК WAGO PFC200 на базе Linux

В настоящее время я знакомлюсь с ПЛК, в частности, с ПЛК WAGO 750-8206. Он предлагает ОС Linux и может запускать программы CoDeSys. К контроллеру подключено несколько модулей ввода / вывода: 750-530, 750-430 и 750-600. Что я хотел бы знать, это:

Можно ли написать C ++ linux-приложение, которое работает на ПЛК и получает / устанавливает цифровые входы и выходы?

Еще лучше: могу ли я написать программу CoDeSys, которая «общается с входами / выходами» и обрабатывает всю логику, и в то же время доступ к ней возможен с помощью программы C ++ linux? Идея такова: я бы хотел, чтобы программа CoDeSys проверила, скажем, два цифровых входа. Если оба значения высоки, переменная должна быть установлена ​​на определенное значение. Приложение linux должно быть в состоянии прочитать эту переменную и провести дальнейшую обработку (например, отправку данных JSon на сервер или подобное).

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

Любые мысли и комментарии по этой теме с благодарностью, так как я совершенно новичок в этой теме. Заранее спасибо!

2

Решение

фактический ситуация имеет изменено в напротив предыдущего ответа.

Последние пакеты поддержки и документация WAGO активно помогают вам вносить изменения и дополнения в линию PLC200. В частности, WAGO 750-8206 и 17 (по состоянию на март 2016 года) других ПЛК:

wago.us -> Продукты -> Компоненты для автоматизации -> Модульная система WAGO-I / O-IP, IP 20 (серия 750/753)

Что вам нужно сделать, это связаться с ними и попросить их последний пакет поддержки платы (BSP) для линии PLC200.

Я цитирую из предыдущего ответа и отмечаю изменения, мои дополнения в смелый.

конспект

  • Не могли бы вы взломать PFC200 и выполнить пользовательские двоичные файлы? Наверное Абсолютно да. Пока программа работает с ядром Linux-3.6.11 и glibc-2.16 и скомпилирована для API «armhf», любое существующее приложение ARM, при условии, что вы также скопируете используемые им библиотеки, будет просто запускаться даже не компилируя его специально для PFC200.
  • Будет ли это легко или быстро? нет. Да, если вы не боитесь командной строки Linux. Это так же просто, как использовать кросс-компилятор, предоставляемый пакетом поддержки платы (BSP) с прилагаемыми C-библиотеками, а затем запустить его, чтобы перенести вашу программу на флэш-память PFC и запустить ее:
    scp root вашей программы @ PFC200: / usr / bin
    ssh root @ FC200 / usr / bin / your-program

    Конечно, вы можете использовать Eclipse CDT с Cross Toolchain для PFC200 и настроить Eclipse для выполнения удаленного запуска и отладки.

  • Изменится ли это в будущем? Может быть. Помните, что PFC200 является довольно новым в Северной Америке.В сентябре 2014 года появился PFC200

Публичный HOWTO Сборка FORTE для Wago описывает, как использовать начальный BSP для запуска FORTE, которая является средой выполнения IEC 61499 4DIAC (ссылка: sf.net/projects/fordiac), среда ПЛК с открытым исходным кодом, позволяющая внедрять решения промышленного управления независимым от производителя способом. 4DIAC реализует МЭК 61499, расширяющий МЭК 61131-3, с улучшенной поддержкой связи между контроллером и динамической реконфигурации.

Если вы хотите получить доступ к KBUS (который взаимодействует с входами / выходами) напрямую, вы должны знать, что в настоящее время только одно приложение может отвечать за KBUS.

Таким образом, за COBUS может отвечать либо CODESYS, либо FORTE, либо ваше собственное приложение KBUS.

В BSP 2015 года есть много примеров и демонстраций того, как использовать все входы / выходы PLC200 (KBUS, CAN, MODBUS, PROFIBUS, а также переключатели и светодиоды на PFC200 напрямую). Исходные коды для ядра и всех драйверов ядра и других компонентов с открытым исходным кодом предоставляются и компилируются в пакет поддержки платы (BSP).

Но источники для библиотек и инструментов, разработанных WAGO с нуля и не основанных на GPL / открытом исходном коде, не предоставлены: они включают в себя библиотеки Application Device Interface (ADI) / Device Abstraction Layer (DAL), которые делают CANopen, PROFIBUS -Slave и KBus (в которых используются все модули ввода / вывода ПЛК, подключенные к основному блоку ПЛК)

В то время как CANopen использует стандартный Linux Socketcan API для взаимодействия с ядром, и вы можете просто написать обычную программу socketcan, используя предоставленный libsocketcan, KBus API — это изобретение, специфичное для WAGO, и вам придется выполнить некоторую обратную разработку. если вы не хотите использовать DAL WAGO для доступа ко всем электрическим входам / выходам ПЛК, но DAL задокументирован, и примеры его использования приведены в BSP.

Однако, если вы используете CODESYS, есть пример библиотеки «codesys_lib_demo-0.1», которая показывает, как предоставить библиотеку для использования CODESYS.

7

Другие решения

Этот ответ был очень специфичным для обстоятельств 2014 и 2015 гг. По состоянию на 2016 г. он содержит неверную информацию. Все еще собираюсь оставить как есть на данный момент, чтобы обеспечить фон.


Быстрый ответ, который вы, вероятно, не хотите

Вы можете очень разумно написать код, используя Codesys, который собрал JSON-пакет и отправил его на сервер в другом месте. JSON — это просто текст, и Codesys может манипулировать текстом способом, очень похожим на C. И в Codesys доступно множество протоколов Ethernet с использованием библиотек дополнений, предоставленных Wago.


Сначала немного предыстории

Поскольку вы, кажется, плохо знакомы с Wago и философией Codesys в целом … короткая история.

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

Wago любит использовать Linux для обеспечения вытесняющего ядра RT для низкоуровневого планирования задач, а затем настраивать Codesys для использования большей части стандартных C-библиотек, которые часто сопровождают linux. Ваго занимается этим уже довольно давно, но они никогда не позволят вам откинуть чехлы без использования Codesys (что означает использование языков IEC 61131, из которых C ++ не включен), и это было для вашей собственной безопасности (и имиджа их продукта). Если вам нужна мощь linux для Wago, вам нужно было получить специальный ПЛК с полностью обнаженной ОС, практически без руководства или поддержки, и лишиться всего времени выполнения Codesys.

Новые PFC200 имеют гораздо больше доступной оперативной памяти и памяти, чем последние модели, что позволяет использовать больше стандартного Linux стек пользователя (ssh, ftp, http, …) должны быть включены без ущерба для среды выполнения Codesys, и они рекламируют это. НО… они все еще держат в руках инструменты для компиляции и необходимые файлы заголовков, необходимые для компиляции и связи с библиотеками Codesys или для доступа к специализированному оборудованию (Wago KBUS, который взаимодействует с вашими модулями ввода / вывода).


Синапсис

  • Не могли бы вы взломать PFC200 и выполнить пользовательские двоичные файлы? Вероятно, да.
  • Будет ли это легко или быстро? Нет.
  • Изменится ли это в будущем? Может быть. Помните, что PFC200 является довольно новым в Северной Америке.

Вещи, которые вы можете не знать

Codesys не обязательно знает или заботится о Wago. Вы можете получить Target Platforms для Codesys, предназначенные для процессоров Intel, работающих под управлением ОС Linux. Codesys ПОДДЕРЖИВАЕТ доступ к внешним библиотекам (общение в обратном направлении опасно), но они часто ожидают интерфейс в стиле C, и вы можете получить доступ к этим библиотекам только путем определения C-заголовков, которые Codesys будет анализировать, поэтому вам может потребоваться некоторое волшебство, чтобы получить C ++ работает, кажется, Что вы можете сделать, так это создать сегмент общей памяти, к которому имеют доступ как C ++, так и Codesys, и именно так они передают информацию (синхронизация — еще одна проблема).

Вы можете получить открыто Wago PLC, работающий с Codesys в Linux. МПК Wago сделаны специально для этой цели. У них больше возможностей, памяти и коммуникационных возможностей в целом; но они стоят более чем вдвое больше вашего типичного Wago PLC.

Если вы хотите поиграть с идеей взлома Wago, вам нужно будет разбить на части руководства для Codesys (у него есть свои), руководства для Wago IPC, и вы уже знакомы с межпроцессным взаимодействием в стиле linux и / или динамические библиотеки.

Кроме того, есть более старый Wago PLC, на котором установлен голый Linux 750-8. В нем также есть очень хорошее руководство о том, как получить доступ к оборудованию Wago с помощью прилагаемых заголовков.

Сначала вы должны понять, как Codesys ожидает общения с целевой операционной системой. Затем вы работаете задом наперед, чтобы заставить его общаться с конкретными библиотеками Wago, живущими в этой операционной системе. Вы должны быть осторожны, чтобы не похитить Codesys.

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

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

3