Объявление типа данных - PullRequest
1 голос
/ 01 июля 2019

Я хочу объявить массив с именем 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?? --

enter image description here

1 Ответ

1 голос
/ 01 июля 2019

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.

...