До этого я скидывал два варианта конечных автоматов. Первый вариант без макросов, второй - с макросами.
Усовершенствовал второй вариант с макросами, вместо тряхомудии со входами Tconcur я смоделировал шаг (step) - это основной элемент конечного автомата. Три варианта шага: с одним исходящим переходом Step1T, с двумя исходящими переходами Step2T и с пятью Step5T. В Step2T и Step5T приоритетом переходов можно управлять как путем прямого назначения приоритета (чем больше целое число, тем выше приоритет исходящего перехода), либо пользоваться тем фактом, что при равных приоритетах первый переход приоритетнее второго и т.д. Ну и как обычно, можно приоритет изменять также искусственно через входы COND, это в любом конечном автомате можно делать. Кому не нужны эти входы Priority может поудалять их в макросах.
Конечный_автомат2.1.owle
Третий вариант. Тут я реализовал параллельные дивергенцию и конвергенцию по МЭК 61131 (язык SFC) - за это отвечают специальные шаги Step1T2DT и Step2CT1T. Это позволяет распараллеливать выполнение конечного автомата. В названиях макросов зашифровано количество переходов: 1T - один исходящий переход, 2T - два исходящих перехода, 5T - пять переходов, 2DT - 2 исходящих перехода (дивергенция), 2CT - два входящих перехода (конвергенция). Можно даже увидеть, что этот FBD-код очень смахивает на SFC.
Конечный_автомат3.0.owle
Если честно, FBD неудобен, слишком громадные блоки получаются. Поэтому чуть позже я позанимаюсь ST.




Ответить с цитированием