Программирование ПЛК на Twincat 3 с использованием C++

Я пытаюсь создать управляющий модуль для купола телескопа. Я буду использовать ПЛК Beckhoff. Я не уверен, как пройти весь процесс. У меня есть знания C++, но я не уверен в программировании ПЛК с помощью TwinCAT.

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


person Gunnernet    schedule 06.07.2015    source источник


Ответы (2)


Что следует учитывать для этого конкретного приложения:

  • Работа с куполом телескопа обычно не требует множества шагов.
  • Даже при поэтапном мышлении, как при использовании конечного автомата, необходимо постоянно проверять, выполняются ли условия для включения определенного шага (что-то может застрять, двигатель может перегреться, ветер может изменить положение детали). вашего купола или телескопа)

Вам лучше иметь явную развертку: ввод => логика => вывод, как это типично, например. релейная логика или аналогичный структурированный текст. На мой взгляд, структурированный текст будет легче редактировать и понимать.

Что касается C++, то в C++ вполне возможно эмулировать развертку ПЛК:

Преимущество «настоящего» ПЛК заключается в том, что вы сможете выполнять отладку в режиме реального времени, а также отслеживать и изменять все переменные во время активной работы.

Также вполне возможно эмулировать это на C++. Но для сравнительно простого проекта я бы остановился на существующем ПЛК.

Так что структурированный текст или лестничная логика кажутся мне наиболее подходящими.

person Jacques de Hooge    schedule 08.07.2015
comment
заранее извините, если я что-то путаю, но я хотел бы добавить, что количество шагов, необходимых контроллеру, не сильно коррелирует с количеством состояний, которые можно было бы использовать для реализации контроллера, поэтому даже если вы не думай шагами, ты все еще можешь думать состояниями - person wonko realtime; 09.07.2015

TwinCAT 3, помимо других языков, может быть запрограммирован на C++ (также TwinSAFE может быть запрограммирован на C++). Это не стандартный C++, а ограниченная версия. Кроме того, программирование на C++ в TwinCAT 3 немного сложнее, и вам нужно сделать несколько дополнительных шагов для интеграции кода C++ в задачу TwinCAT по сравнению с языками IEC 61131 (ST, CFC, SFC, IL, LADDER и т. д.). .

Например, ST — это простой язык, очень похожий на PASCAL, C++ или C#. Графические языки для программирования ПЛК (такие как CFC/SFC) чрезвычайно рекомендуются и являются очень мощными. Эти языки помогают вам кодировать очень похожим образом, поскольку машина работает электрически, и если у вас есть некоторое представление об электричестве, вы найдете их довольно простыми и приятными.

Основное различие между программированием ПЛК и обычным программированием заключается в том, как работает ПЛК, как это прекрасно описано в ссылке, опубликованной Жаком де Хоге. Каждый цикл или развертка ПЛК состоит из трех шагов:

  1. Прочитайте весь входной сигнал процесса. В Beckhoff переменные, полученные через промышленную сеть, считываются прозрачно, как если бы они были подключены непосредственно к ПЛК. Эти сигналы остаются неизменными в течение всего цикла.
  2. Выполнить код пользователя. В TwinCAT 3 этот пользовательский код может быть запрограммирован на любом из языков IEC 61131, C++ и MATLAB/Simulink. И для C++, и для Simulink требуются дополнительные лицензии.
  3. Активируйте выходные сигналы. Эти сигналы будут оставаться постоянными для всего следующего цикла, не обращая внимания на фактическое значение переменной в этом цикле.

Сторожевой таймер отслеживает развертку, чтобы убедиться, что она выполняется во время развертки (обычно 10–20 мс) и что следующая развертка начинается в соответствующем временном интервале. Если развертка не завершена за время развертки, она сбрасывается на начало и может привести к остановке ЦП.

Таким образом, ПЛК работает как непрерывный цикл без конца, а обычное приложение ПК имеет начало и конец приложения. Кроме того, управление памятью и ориентация функциональных блоков/объектов в программировании ПЛК существенно отличается от программирования ПК, а C++ не слишком хорошо подходит для модели ПЛК.

TwinCAT основан на CodeSyS, поэтому работает аналогично Somachine от Schneider или другим ПЛК от Omron, ABB, Allen Bradley и т. д.

Я думаю, что вместо того, чтобы программировать конечный автомат на C++/ST или любом другом, лучшим выбором было бы использование контроллера SFC, подкрепленного некоторым кодом CFC/ST. Имейте в виду, что просто используя SFC, вы получаете конечный автомат, разработанный для вас Beckhoff, и вам нужно только запрограммировать (на ST или как-то еще), что делать на каждом шаге и как переходить от одного шага к другому.

person Teodoro López    schedule 23.02.2017
comment
Очень хорошо написано! - person Peter Mortensen; 12.02.2018
comment
Что такое FB (в данном контексте)? - person Peter Mortensen; 12.02.2018
comment
Функциональный блок (IEC61131-3/Структурированный текст, эквивалентный Class в C++/Java) - person Jakob; 08.12.2018