Tag Archives: массив

Массивы в Step 7

Массив объединяет группу данных одного типа (элементарного или составного), образуя одно целое. Вы можете создавать массив, состоящий из массивов. Определяя массив, Вы должны сделать следующее:

  • Присвоить массиву имя.
  • Описать массив с помощью ключевого слова ARRAY.
  • Определить размер массива, используя индекс. Вы определяете номер первого и последнего элемента по отдельным измерениям массива (максимум 6 измерений). Индекс вводят в квадратных скобках, разделяя измерения посредством запятой, а номера первого и последнего элемента измерения – двумя точками. Например, следующий индекс определяет, трехмерный массив: [1..5,–2..3,30..32]
  • Вы указываете тип данных, которые должны содержаться в массиве.

Пример 1

Следующий рисунок показывает массив с тремя целыми числами. Вы обращаетесь к данным, хранимым в массиве, используя индекс. Индекс – это номер в квадратных скобках. Например, вторым целым числом является Op_temp[2]».

Индекс может быть любым целым числом (от -32768 до 32767), включая отрицательные значения. Массив на следующем рисунке можно было бы определить также как ARRAY [-1 .. 1]. Тогда первым целым числом было бы Op_temp[-1], вторым целым числом – Op_temp[0] и третьим целым числом – Op_temp[1].

 

Пример 2

Массив может также описывать многомерную группу типов данных. Следующий рисунок показывает двумерный массив целых чисел.

 

Вы обращаетесь к данным в многомерном массиве, используя индекс. В этом примере первым целым числом является Op_temp[1,1]», третьим – Op_temp[1,3]», четвертым – Op_temp[2,1]» и шестым – Op_temp [2,3]».

Вы можете определять в массиве до 6 измерений (6 индексов). Например, Вы могли бы определить переменную Op_temp как шестимерный массив следующим образом:

ARRAY [1..3,1..2,1..3,1..4,1..3,1..4]

Индексом первого элемента в этом массиве является [1,1,1,1,1,1]. Индексом последнего элемента является [3,2,3,4,3,4].

Создание массивов

Вы определяете массивы, объявляя данные в DB или в разделе описания переменных. Когда Вы объявляете массив, Вы указываете ключевое слово (ARRAY), а затем размер в квадратных скобках следующим образом:

[значение нижней границы.. значение верхней границы]

В многомерном массиве Вы указываете также дополнительные верхние и нижние границы и разделяете отдельные измерения посредством запятой.

Следующий рисунок показывает описание для создания массива размерности 2 x 3.

 

Ввод начальных значений для массива

Создавая массивы, Вы можете каждому элементу массива присваивать начальное значение. STEP 7 предоставляет два метода ввода начальных значений:

  1. Ввод индивидуальных значений: для каждого элемента массива Вы указываете значение, допустимое для типа данных этого массива. Значения указываются в порядке следования элементов: [1,1]. Помните, что отдельные элементы должны отделяться друг от друга запятой.
  2. Задание коэффициента повторения: при наличии последовательных элементов, имеющих одинаковое начальное значение, Вы можете указать число таких элементов (коэффициент повторения) и начальное значение для этих элементов. Формат ввода коэффициента повторения имеет вид: x (y), где x – коэффициент повторения, а y – повторяемое значение.

Если Вы используете массив, описанный на рисунке, показанном выше, то Вы можете задать начальное значение для всех шести элементов следующим образом: 17, 23, -45, 556, 3342, 0. Вы могли бы также установить начальное значение всех шести элементов равным 10, указав 6(10). Вы могли бы задать определенные значения для первых двух элементов, а затем установить остальные 4 элемента в 0, указав следующее: 17, 23, 4(0).

Доступ к данным в массиве

Вы обращаетесь к данным в массиве через индекс определенного элемента в массиве. Индекс используется в сочетании с символьным именем.

Пример: Если массив, описанный на рисунке выше, начинается в первом байте DB20 (motor), Вы обращаетесь ко второму элементу этого массива по следующему адресу:

Motor.Heat_2x3[1,2].

Использование массивов в качестве параметров

Вы можете передавать массивы как параметры. Если параметр описан в разделе описания переменных как ARRAY, то Вы должны передать весь массив (а не отдельные элементы). Однако параметру может присваиваться элемент массива, когда Вы вызываете блок, если элемент массива соответствует типу данных параметра.

Если Вы используете массивы как параметры, то не требуется, чтобы эти массивы имели такое же имя (для них даже не нужно имени). Однако оба массива (и формальный параметр, и фактический параметр) должны иметь одинаковую структуру. Например, массив размерности 2 x 3, состоящий из целых чисел, может передаваться как параметр только тогда, когда формальный параметр блока определен как массив размерности 2 x 3, состоящий из целых чисел, и фактический параметр, предоставляемый операцией вызова, тоже является массивом размерности 2 x 3, состоящим из целых чисел.

Мой блог находят по следующим фразам

Сложные типы данных в CoDeSys 2.3

Массивы

Элементарные типы данных могут образовывать одно-, двух-, и трехмерные массивы. Массивы могут быть объявлены в разделе объявлений POU или в списке глобальных переменных.

Путем вложения массивов можно получить многомерные массивы, но не более 9-мерных («ARRAY[0..2] OF ARRAY[0..3] OF …»).

Синтаксис:

<Имя_массива>:ARRAY [<ll1>..<ul1>,<ll2>..<ul2>] OF <базовый тип>

Здесь ll1, ll2, ll3 указывают нижний предел индексов; ul1, ul2 и ul3 указывают верхние пределы. Индексы должны быть целого типа. Нельзя использовать отрицательные индексы.

Перечисления

Перечисление – это определяемый пользователем тип данных, задающий несколько строковых псевдонимов для числовых констант.

Перечисление доступно в любой части проекта, даже при локальном его объявлении внутри POU. Поэтому рационально создавать все перечисления на вкладке «Типы данных» Организатора Объектов. Объявление должно начинаться с ключевого слова TYPE и заканчиваться строкой END_TYPE.

Синтаксис:

TYPE <Имя_перечисления>:(<Элемент_0> ,< Элемент _1>, …, < Элемент_n>); END_TYPE

Переменная типа <Имя_перечисления> может принимать только перечисленные значения. При инициализации переменная получает первое значение из заданного списка. Если числовые значения элементов перечисления не указаны явно, то им присваиваются последовательно возрастающие числа, начиная с 0. Фактически элемент перечисления – это число типа INT, и работать с ними можно точно так же.

Можно напрямую присвоить число переменной типа перечисление. Элемент, уже включенный в перечисление, нельзя повторно включать в другое перечисление.

Структуры

Структуры создаются командой «Добавить объект (Add Object)» контекстного меню вкладки «Типы данных» Организатора Объектов. Новый объект отображается в дереве объектов, окно задания параметров объекта открывается в рабочей области главного окна ПО CoDeSys (см. рисунок 1).

Объявление должно начинаться с ключевых слов TYPE и STRUCT и заканчиваться строками END_STRUCT и END_TYPE.

Синтаксис:

TYPE <Имя _структуры>:

STRUCT

<Объявление переменной 1>

.

.

<Объявление переменной n>

END_STRUCT

END_TYPE

<Имя _структуры> образует новый тип данных, который может быть использован в любой части проекта наряду с базовыми типами.

Рисунок 1 – Вкладка «Типы данных»

Допускаются вложенные структуры, но запрещено размещение элементов структуры по прямым адресам (в частности, недопустимы AT объявления). Для доступа к элементам структуры используется следующий синтаксис:

<Имя_структуры>.<Имя_компонента>

Например, если структура «Week» содержит компонент «Monday», то обращение к нему будет выглядеть так: Week.Monday.

Указатели

Указатели позволяют работать с адресами переменных или функциональных блоков.

Синтаксис:

<Имя_указателя>: POINTER TO <Тип данных/Функциональный блок>;

Указатели применимы для всех базовых типов данных или функциональных блоков, включая определяемые пользователем.