Программирование PLC на Twincat 3 с использованием С++

1 Gunnernet [2015-07-06 16:43:00]

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

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

c++ finite-state-machine plc twincat


2 ответа


1 Teodoro López [2017-02-23 04:11:00]

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

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

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

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

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

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

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

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


1 Jacques de Hooge [2015-07-08 16:09:00]

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

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

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

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

  • Имейте один центральный цикл и придерживайтесь ряда правил, указанных в "Правилах программирования ПЛК" этого документа.
  • В этом центральном цикле непрерывно выполняйте следующее:

    считывание с датчиков

    выполнять логические операции и вычисления

    записывать на приводы (в этом случае двигатели)

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

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

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