AFAIK , массивы массивов не поддерживаются напрямую.
Вы можете создать разные имена для каждого экземпляра модуля элемента (см. machine01
) или удалить элементмодуль и вставьте его содержимое в модуль машины (см. machine02
).
например:
MODULE element()
VAR
pressionLevel : { BELOW, NORMAL, OVER };
action : { START, PAUSE, STOP, RESTART };
MODULE machine01()
VAR
el1 : element();
el2 : element();
el3 : element();
el4 : element();
MODULE machine02()
VAR
pressionLevel : array 1..4 of { BELOW, NORMAL, OVER };
action : array 1..4 of { START, PAUSE, STOP, RESTART };
MODULE main()
VAR
m1 : machine01();
m2 : machine02();
Доступ к элементам массива можно получить с помощью постоянные индексы, например:
next(precisionLevel[0]) := BELOW
При использовании моделирования в стиле ограничений легко смоделировать что-то, что имеет непредвиденные последствия, илинаписать какое-то ограничение, которое будет управляемым для очень маленьких массивов, но по некоторым причинам оно быстро разрушится для более крупных.Поэтому я бы посоветовал использовать только моделирование в стиле присвоения или расширить ограничение, например
precisionLevel[i] = BELOW => ... some consequence ...
следующим образом
((i = 0 & precisionLevel[0] = BELOW) => ... some consequence ...)
&
((i = 1 & precisionLevel[1] = BELOW) => ... some consequence ...)
&
...
, где i
- этопеременная действует как индекс для массива precisionLevel
, а ограничение распространяется на весь домен i
.