数据类型声明

Data Type declaration

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

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

使用 constraint-style 建模 时,很容易对具有意外后果的事物进行建模,或者为非常小的数组编写一些易于管理的约束,但是,由于某些原因,它很快就会因更大的问题而爆炸。所以我建议只使用 assignment-style 建模 ,或者扩展约束,例如

precisionLevel[i] = BELOW => ... some consequence ...

如下

 ((i = 0 & precisionLevel[0] = BELOW) => ... some consequence ...)
 &
 ((i = 1 & precisionLevel[1] = BELOW) => ... some consequence ...)
 &
 ...

其中 i 是一个变量,作为数组 precisionLevel 的索引,约束扩展到 i.

的整个域