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
。