2015-04-09 2 views
0

Моя цель - реализовать алгоритм управления, написанный в Grafcet на ПЛК. Я борюсь с разницей Grafcet как многопроцессного синхронного языка и одноядерного последовательного ПЛК. Ниже приведен пример. Каков результат Grafcet в первом цикле после того, как начался переход верхнего уровня? (a=1,x=1) или (a=1, x=0)? Я знаю, что в SFC это зависит от реализации инженерного инструмента (например, Codesys, Multiprog), как оцениваются действия, как правило, слева направо. Таким образом, для SFC ответ будет (a=1,x=1). Но поскольку все происходит одновременно в Grafcet, я не знаю, как справиться с этим делом. enter image description here Бонусные баллы, если кто-то может указать, как я могу больше узнать о проблемах реализации таких языков, как Grafcet на последовательных машинах.Grafcet - синхронное поведение машины

ответ

1

Условные действия рассматриваются в не все варианты Grafcet, но когда они, поведение выглядит следующим образом: , пока шаг активен, включите x в то время как a на.
Если это то, что вы имели в виду, хотя мы, возможно, никогда не найдем условное действие, отформатированное так, как вы это сделали, x будет включен в течение бесконечно короткого времени после активации двух одновременных шагов (по крайней мере, это мое понимание, основанное на Правила эволюции Grafcet). Итак, тот факт, что начальное значение x непредсказуемо - при условии, что два одновременных шага активированы в то же самое время - на самом деле не проблема.

Кроме того, как только Grafcet будет «реализовано» в реальном мире (т.е. вашего одноядерный PLC), будь то непосредственно составителем инженерного инструмента или преобразован в лестничную диаграмму, порядок оценки является обязательно как вы сказали, и все становится детерминированным, поэтому ваш вопрос не является реальной проблемой, когда речь идет о «реализации языков, таких как Grafcet на последовательных машинах». Вы можете найти, какие real «challanges», изучая каноническую процедуру преобразования SFC в лестничную логику (подробная документация легко найти в Интернете).

+1

На самом деле здорово, что на практике все происходит серийно, это помогает предотвратить непредсказуемые «условия гонки», которые используются для чужой проводной логики. –

1

ПЛК - одноядерные, как вы сказали, поэтому ... никогда не выполняются 2 шага за один и тот же момент времени.

Там у вас есть одновременная ветка, поэтому оба этапа выполняются. Но ясно будет один за другим. По умолчанию всегда слева. Обратите внимание, что некоторые ПЛК позволяют вам изменять порядок (никогда не пробовали для одновременного, но для расходящихся наверняка разрешите ... например, RSLogix5000).

Одновременно это похоже на наличие И. Итак, вы говорите, что процессор выполняет первый шаг И второй шаг. Если вы знакомы с Ladder Logic, я уверен, что это будет ясно для вас. В конце концов, это должно быть a = 1; x = 1.

Также обратите внимание, что для других шагов, которые не являются одновременными, есть одна задержка сканирования перед оценкой следующего перехода, что очень важно. Это самая пропущенная вещь при реализации SFC в Лестнице (и может привести к проблемам, которые невозможно устранить, если вы не знаете об этом). Я видел эту «ошибку» примерно в 50% проектов с реализацией лестницы и сотнями проектов. Пример. Если у вас есть 10 последовательных переходов true, вы переходите от шага 1 к шагу 10 в одном сканировании. Устранение неполадок, почему двигатель не запускался :)

Совет. Вы всегда можете использовать фиктивные шаги в одновременных ветвях для задержки с 1 сканированием.Итак, если вы хотите получить другой результат (a = 1, x = 0), вы можете поместить фиктивный шаг перед левым шагом.

Смежные вопросы