конечный автомат — программирование ПЛК в Twincat 3 с использованием переполнения стека

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

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

1

Решение

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

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

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

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

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

    . читать с датчиков

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

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

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

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

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

1

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

TwinCAT 3, среди других языков, может быть запрограммирован на C ++ (также TwinSAFE может быть запрограммирован на C ++). Это не стандартный C ++, а ограниченная версия. Кроме того, программирование на C ++ в TwinCAT 3 немного сложнее, и вам нужно сделать несколько дополнительных шагов для интеграции кода C ++ в задачу TwinCAT по сравнению с языками МЭК 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 мс) и что следующий цикл запускается в соответствующем временном интервале. Если развертка не завершена во время развертки, она сбрасывается в начало и может привести к остановке ЦП.

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

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

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

1

По вопросам рекламы [email protected]