Как заставить команду в GRAFCET? - PullRequest
1 голос
/ 06 мая 2020

Я пытаюсь принудительно выполнить команду в моем grafcet, используя Fluid SIM.

  1. Если состояние no. 80 в настоящее время активен только G90 должен выполняться частичный grafcet
  2. Если состояние no. 81 в настоящее время активен только G90 частичный grafcet должен работать

Я следую этому руководству . Проблема в том, что я не могу заблокировать свой partial grafcets. Я не знаю почему, но проблема в в моем случае заключается в том, что они оба выполняются параллельно, хотя G82 grafcet должен быть заблокирован на INIT по состоянию №. 80.

G

1 Ответ

0 голосов
/ 06 мая 2020

ПРЕТЕНЗИЯ : "проблема ... в том, что они оба выполняются параллельно ... хотя G82 grafcet должен быть заблокирован на INIT номером состояния. 80. "

Заявление в основном ложное.

Они могут, при выполнении условия T1, начать выполнение G90{state:INIT}, некоторое ненулевое время после того, как G82{state:90} был запущен , поэтому просто случайно появляется, чтобы одновременно что-то делать в среде. Определенно не True- [PARALLEL] -исполнение и не ожидайте явной блокировки от верхнего левого FSA (если только некоторые действительно неприятные трюки не были скрыты внутри переменных перехода состояния FSA, эффективно вызывающих взаимный (мертвый) -блок для ограниченных по времени (если есть) автоматов с конечными состояниями, имеющих условные переменные, управляющие pure- SEQUENCE запланированных переходов состояний.

Интерфейс Grafcet для программирования на PL C (маскирование основных свойств SEQUENTIAL, максимально слабо согласованный, конечные автоматы) имеет некоторые принципы, которые должны отражено в простых в набросках (но сложных) правилах проектирования FSA. Одно из них - «Как блокировать, как MUTEX» :

Если за шагом должно следовать несколько переходов, то используется альтернативная ветвь. Как следует из названия, с этим могут быть реализованы альтернативные последовательности. Однако когда-либо выполняется только один процесс. По этой причине Условия перехода для переходов, которые разветвляются на отдельные последовательности, должны быть взаимоисключающими . Отдельные последовательности альтернативной ветви также называются частичными последовательностями.
...
... программист должен определить каждое из следующих условий перехода так, чтобы могло выполняться только одно условие. Условия перехода, следовательно, должны быть взаимоисключающими.
Если это не так, то поведение остается неопределенным , т.е. невозможно предсказать, какой частичный последовательность будет выполнена. В Grafcet-Studio будет выполняться частичная последовательность, переход которой первым инициирует переход.

enter image description here


Как заставить автономные FSA-ы работать хотя бы немного в [PARALLEL]?

Обратите внимание на оба «блокирующих» БАРЬЕРА и строго установите , не ожидайте, что никакие явные условные переменные согласования времени / перехода состояния не вызвали взаимных взаимоблокировок проверки / предотвращения столкновений внутри просто co- "параллельного" FSA-control [SEQUENCE] - s:

A параллельная последовательность используется, когда несколько частичных последовательностей должны быть запущены одновременно после перехода. Первые шаги в частичных последовательностях активируются одновременно переходом. Таким образом, частичные последовательности запускаются синхронно, поэтому символ параллельной ветви также называют символом синхронизации. При этом частичные последовательности остаются независимыми друг от друга, т. Е. Выполняются параллельно. В конце частичные последовательности возвращаются к символу синхронизации и последующему переходу. Этот переход освобождается только после того, как все частичные последовательности будут обработаны полностью. Таким образом, частичные последовательности также синхронизируются в конце.

enter image description here


RESUMÉ:

enter image description here Верхний левый FSA вводит обязательный,
повторяющийся
поток SEQUENCE шагов:
первый
принудительный SEQ_G82 - (jump_into_state:82),
следующий , только после этого и в зависимости от перехода между состояниями FSA " переменная " T1 условие,
принудительное SEQ_G80 - (jump_into_state:INIT)
следующее
l oop -to- "первый"

...