我想声明一个名为Machine的数组,该数组包含4个元素。每个元素也是2个元素的数组,其中第一个元素的值从枚举中获得:
pressionLevel={below, normal, over}
第二个具有枚举值:
action={start, pause, stop, restart}
我的第二个问题是如何访问此数组的元素?
VAR
pressionLevel={below, normal, over};
action={start, pause, stop, restart};
machine= array 1..4 -- how to continue this declaration?? --
答案 0 :(得分:1)
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();
可以使用 constant 索引(例如:
)访问数组的元素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
的整个域中扩展。