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

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

Таким образом, за разработку KBUS может отвечать либо 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 использует стандартный API-интерфейс Linux Socketcan для взаимодействия с ядром, и вы можете просто написать обычную программу для SocketCan, используя предоставленный libsocketcan, API-интерфейс KBus - это изобретение, специфичное для WAGO, и вам придется выполнить некоторую обратную разработку. если вы не хотите использовать DAL WAGO для доступа ко всем электрическим входам / выходам ПЛК, но DAL задокументирован, и примеры его использования приведены в BSP.

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

Устаревший ответ

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


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

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


Теперь длинные ответы

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

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

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

Wago любит использовать Linux для предоставления вытесняющего ядра RT для низкоуровневого планирования задач, а затем настраивать Codesys для использования большей части стандартных C-библиотек, которые часто сопровождают linux. Wago делал это в течение достаточно долгого времени, но они никогда не позволили бы вам отогнуть обложки без прохождения 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, и именно так они передают информацию (синхронизация - еще одна проблема).

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

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

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

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

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

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

Другие вопросы по тегам