1

我想声明一个名为 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?? --

在此处输入图像描述

4

1 回答 1

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();

可以使用常量索引访问数组的元素,例如:

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

于 2019-07-01T15:04:58.543 回答