Вы находитесь на странице: 1из 56

TM250

Управление памятью и хранение дан-


ных

TM250TRE.00-ENG
2013/11/08
Требования
Обучающие курсы TM213 — Automation Runtime
(тренинг-модули): TM246 — Язык структурированного текста (ST)
Программное обеспе- Automation Runtime 3.08
чение Automation Studio 3.0.90
Аппаратное обеспе- Нет
чение

2 TM250 - Управление памятью и хранение данных


Оглавление

ОГЛАВЛЕНИЕ

1 ВВЕДЕНИЕ.......................................................................................................................................... 4
1.1 Цели обучающего курса....................................................................................................... 4
2 ПЕРЕМЕННЫЕ, КОНСТАНТЫ И ТИПЫ ДАННЫХ...........................................................................5
2.1 Общие представления.......................................................................................................... 5
2.2 Простые типы данных.........................................................................................................12
2.3 Массивы, структуры и перечислимый тип данных...........................................................15
2.4 Строки...................................................................................................................................22
2.5 Адреса и размер памяти.................................................................................................... 27
3 ПАМЯТЬ И УПРАВЛЕНИЕ ПАМЯТЬЮ........................................................................................... 29
3.1 Инициализация памяти.......................................................................................................29
3.2 Копирование и инициализация памяти............................................................................. 30
4 РАБОТА С БИБЛИОТЕКАМИ.......................................................................................................... 33
4.1 Общая информация............................................................................................................ 33
4.2 Создание пользовательских библиотек............................................................................ 38
4.3 Примеры использования стандартных библиотек B&R...................................................41
5 ОСНОВНЫЕ СВЕДЕНИЯ ПО ОБРАБОТКЕ ДАННЫХ...................................................................42
5.1 Выравнивание......................................................................................................................42
5.2 Форматы данных................................................................................................................. 43
5.3 Целостность данных........................................................................................................... 44
6 ХРАНЕНИЕ И УПРАВЛЕНИЕ ДАННЫМИ...................................................................................... 46
6.1 Резервирование блоков памяти........................................................................................ 46
6.2 Объекты данных (data objects).......................................................................................... 47
6.3 Хранение файлов в файловой системе............................................................................48
6.4 Базы данных........................................................................................................................ 49
7 ПЕРЕДАЧА ДАННЫХ И СВЯЗЬ...................................................................................................... 50
7.1 Общая информация о связи.............................................................................................. 50
7.2 Протоколы............................................................................................................................ 52
7.3 Библиотеки поддержки связи.............................................................................................52
8 ИТОГ.................................................................................................................................................. 54

TM250 - Управление памятью и хранение данных 3


Введение

1 ВВЕДЕНИЕ

В данном обучающем курсе рассматриваются различные возможности, обеспечивающие эффек-


тивное форматирование, структурирование и управление данными.
Наиболее важные аспекты, которые будут затронуты в процессе обучения — это правильное ис-
пользование основных и определяемых пользователем типов данных в области программирова-
ния, хранения и передачи данных.
Применение переменных, типов данных и констант в точном соответствии с их назначением не
только помогает предотвратить ошибки, но также позволяет повысить гибкость и структурирован-
ность приложения.

Image 1: Память и переменные Image 2: Обработка и хранение данных


Image 3: Связь и обмен данными

Основное назначение представленной здесь информации — помочь определить, какие инстру-


менты и процедуры доступны для обработки и определения данных.
Кроме того, в данном руководстве приводится обзор возможных форматов и способов хранения
данных, т.е. сведений, которые необходимо знать в процессе решения различных задач.
Все представленные в настоящем руководстве в качестве примера программы написаны на язы-
ке Structured Text. Для объявления переменных, типов данных и констант был использован тек-
стовый формат МЭК.

1.1 Цели обучающего курса

В данном курсе рассматриваются следующие темы:


• ... Инициализация и использование переменных
• ... Использование перечислимого и определяемых пользователем типов данных
• ... Использование стандартных библиотек B&R
• ... Создание пользовательской библиотеки
• ... Основные сведения по подготовке и обработке данных
• ... Основные сведения о форматах данных
• ... Обзор способов хранения данных
• ... Информация о методах передачи данных
• ... Использование примеров библиотек B&R

4 TM250 - Управление памятью и хранение данных


Переменные, константы и типы данных

2 ПЕРЕМЕННЫЕ, КОНСТАНТЫ И ТИПЫ ДАННЫХ

Явная адресация памяти уже давно не используется в программировании, в настоящее время


используются символьные элементы с уникальными именами. Эти элементы называются пере-
менными.
Основные типы данных определяют диапазон значений переменной, а также объем памяти, необ-
ходимый для ее хранения. Тип данных также определяет, является ли значение числом со зна-
ком или без, целым или действительным, является ли переменная текстовой или содержит дату
или время.
В следующих разделах будет приведено краткое описание систем счисления, основных типов
данных, ошибок и определяемых пользователем типов данных.

2.1 Общие представления

На самом нижнем уровне каждый компьютер способен опрерировать только с двумя электриче-
скими состояниями, которые можно логически представить как 0 или 1. Разработчику необходимо
иметь представление об процессах, происходящих на физическом уровне.
Понимание основных принципов значительно упрощает процесс программирования системы и
локализации ошибок, которые могут возникнуть в дальнейшем.

2.1.1 Двоичная и шестнадцатеричная системы счисления

Бит является наименьшей единицей информации и может при-


нимать только одно из двух значений — 0 или 1. По стандарту
МЭК1 биту соответствует тип данных BOOL.
Другие типы данных, состоят из большого количества битов,
кратного восьми. Следующая по величине единица называется
байтом. Байт состоит из восьми бит.
Нумерация битов в байте осуществляется справа налево, на-
чиная с бита 0 и заканчивая старшим битом 7. Единица в тре-
тьем разряде (bit 3) двоичного числа соответсвует десятичному
Image 4: Двоичное представление
числу 4. байта

Байт может быть разделен на два полубайта, называемыми тет-


радами (nibbles). Биты с 0-го по 3-ий называются младшей тет-
радой, с 4-го по 7-ой называются старшей тетрадой. Image 5: Старшая и младшая тетрады

Таким образом, более значащие биты находятся в старшей тет-


раде.

Каждый бит в байте может принимать значение 0 или 1. Байт может принимать значения от 0 до
255, что соответствует 256 различным состояниям.

1 В стандарте МЭК 61131-3 определяются типы данных, языки программирования и форматы файлов,
которые не зависят от какой-либо конкретной платформы.

TM250 - Управление памятью и хранение данных 5


Переменные, константы и типы данных

Двоичное пред- Номер бита Десятичное зна- 2(степень)


ставление чение
00000001 0 1 20
00000010 1 2 21
00000100 2 4 22
00001000 3 8 23
00010000 4 16 24
00100000 5 32 25
01000000 6 64 26
10000000 7 128 27
Table 1: Значения отдельных битов в байте

Данный пример демонстрирует сложение двух двоичных чисел.

+ 00000001 один
00000001 один
= 00000010 два (не десятичное значение 10!)
Table 2: Сложение двоичных чисел с переносом

Действуют следующие правила:


0+0=0
0+1=1
1 + 1 = 0 + перенос в следующий бит

В отрицательных числах, записываемых в двоичной системе, самый старший бит резервируется


для знака. Как следствие этого, для представления значения остается 7 бит.

Бит 7 отведен под знак


X0000000 Биты с 0 по 6 используются для записи чисел
X1111111 127 - наибольшее положительное число в десятичном счисле-
нии
Table 3: Двоичное представление отрицательных целых чисел

Отрицательные числа формируются с помощью дополнительного кода. Из положительного де-


сятичного числа создается двоичное представление. Затем все биты двоичного числа инверти-
руются и прибавляется 1. Сформированное в итоге двоичное представление соответствует от-
рицательному числу.

6 TM250 - Управление памятью и хранение данных


Переменные, константы и типы данных

Image 6: Представление отрицательных чисел в двоичной


системе

Представление отрицательных чисел в двоичной системе

00000011 Десятичное число "3"


11111100 Инвертировать все биты
+ 00000001 Прибавить 1
= 11111101 Число в десятичной форме "-3"
Table 4: Формирование дополнительного кода

Правильная интерпретация значения числа зависит от типа данных.


Если отрицательное число знакового типа (SINT, INT, DINT), присваивается переменной беззна-
кового типа данных (USINT, UINT, UDINT), то двоичное представление остается прежним. При
этом эта переменная будет иметь совершенно другое значение.

TM250 - Управление памятью и хранение данных 7


Переменные, константы и типы данных

Данный пример иллюстрирует взаимосвязь данных с типом данных.

Объявление пере- VAR


менных varUnsigned : USINT := 0;
varSigned : SINT := 0;
END_VAR
Программный код varSigned := -22; (*Bit pattern 1110 1010 *)
varUnsigned := varSigned;
Table 5: Присваивание беззнаковой переменной значения со знаком

Переменная varUnsigned отображается в десятичной форме, как 234, что соответствует


двоичному представлению 1110 1010.
Двоичное представление числа не изменяется, тем не менее, переменная имеет отлич-
ное значения из-за того, что относится к другому типу данных (без знака).

Image 7: Различные типы данных отображают одни и те же данные по-разному.

Programming \ Variables and data types \ Variables \ Data types \ Basic data types \ INT
Programming \ Variables and data types \ Variables \ Bit addressing

В отличие от десятичной системы, в шестнадцатеричной системе одним разрядом кодируется 16


значений (от 0 до F).

0000 Десятичное 0 Шестнадцатеричное 0


0001 Десятичное 1 Шестнадцатеричное 1
0010 Десятичное 2 Шестнадцатеричное 2
0011 Десятичное 3 Шестнадцатеричное 3
0100 Десятичное 4 Шестнадцатеричное 4
0101 Десятичное 5 Шестнадцатеричное 5
0110 Десятичное 6 Шестнадцатеричное 6
0111 Десятичное 7 Шестнадцатеричное 7
Table 6: Преобразование двоичных чисел в шестнадцатеричные

8 TM250 - Управление памятью и хранение данных


Переменные, константы и типы данных

1000 Десятичное 8 Шестнадцатеричное 8


1001 Десятичное 9 Шестнадцатеричное 9
1010 Десятичное 10 Шестнадцатеричное A
1011 Десятичное 11 Шестнадцатеричное B
1100 Десятичное 12 Шестнадцатеричное C
1101 Десятичное 13 Шестнадцатеричное D
1110 Десятичное 14 Шестнадцатеричное E
1111 Десятичное 15 Шестнадцатеричное F
Table 6: Преобразование двоичных чисел в шестнадцатеричные

Полубайты и шестнадцатеричные значения

0100 1011 Соответствует чис- (64 + 8 + 2 + 1 = 75)


лу 75
0100 Старший полубайт = 4
1011 Младший полубайт = B
0100 1011 Два полубайта = 16#4B = 75
Table 7: Преобразование из двоичной в шестнадцатеричную систему

Полубайты могут быть просто скопированы из двоичной в шестнадцатеричную систему счисления


и записаны рядом друг с другом.

Глубина памяти в двоичной и шестнадцатеричной системах

Двоичная Шестнадцате- Глубина памяти


форма ричная форма
00000000 16#00 1 байта
00000000 00000000 16#0000 2 байта
00000000 00000000 00000000 00000000 16#00000000 4 байта
Table 8: Глубина памяти и представление в двоичной и шестнадцатеричной форме

TM250 - Управление памятью и хранение данных 9


Переменные, константы и типы данных

Шестнадцатеричное представление чисел в основном используется при отображении


записей в журнале или адресов.
Локализация ошибок в знаковых и беззнаковых переменных более эффективно осу-
ществляется путем сравнения двоичных представлений. На панели отслеживания зна-
чения переменных могут отображаться в двоичной, десятичной или шестнадцатеричной
форме.

Согласно стандарту МЭК в программном коде двоичное число может отображаться в


виде литерала 2#0000_1001 или шестнадцатеричного числа 16#09.

Programming \ Standards \ Literals in IEC languages

2.1.2 Сравнение переменных и именованных констант

Переменные представляют собой области памяти, которые могут быть изменены и которым могут
быть присвоены новые значения во время выполнения программы. В качестве примеров таких
переменных можно привести дискретные и аналоговые входы и выходы, а также вспомогатель-
ные флаги.
В отличие от переменных, именованными константам значения присваиваются при объявлении.
И во время выполнения программы эти значения не могут быть изменены. К константам относят-
ся, например, предельные значения или пределы диапазона.
Как для переменных, так и для констант может быть использован любой из доступных основных
типов данных (Раздел "Простые типы данных").

Присваивание значения константе

1) Объявите константу.

В окне объявления создайте переменную MAX_INDEX. Она должна относиться к типу данных
USINT. Выберите тип «Константа» и присвойте ей значение 123.

2) Присвойте константе значение.

В коде программы присвойте константе новое значение 43.

3) Оцените результат компиляции.

Выполните компиляцию программы и проанализируйте результат работы компилятора.

Programming \ Variables and constants \ Variables \ Constants

10 TM250 - Управление памятью и хранение данных


Переменные, константы и типы данных

Константы также могут использоваться для инициализации массивов (Раздел "Массивы"). Для
обеспечения этой возможности в настройках проекта предварительно должна быть выбрана
функция Allow extension of IEC standards («Разрешить расширения стандартов МЭК»).

Project Management \ The Workspace \ General project settings \ Settings for IEC compliance

2.1.3 Объявление переменных, констант и типов данных

В задачи данного учебного пособия не входит подробное рас-


смотрение пользовательского интерфейса Automation Studio.
На этом этапе мы хотели бы продемонстрировать, как осу-
ществляется открытие окон объявления переменных и типов
данных.
Image 8: Открытие окна объявления в
Переменные и типы данных могут быть настроены в табличном текстовом или табличном редакторе

или текстовом редакторе.

Окно объявления переменных


Переменные и константы, как правило, хранятся в файлах с расширением. var. Файл объявления
переменных, имя которого совпадает с именем программы, обычно создается при каждом добав-
лении новой программы в проект.

Окно объявления типа данных


Определяемые пользователем, перечислимые и составные типы данных хранятся в файлах с
расширением .typ. Каждый раз, когда новая программа добавляется в проект, пользователю также
предлагается создать файл объявления типов данных. Этот файл имеет такое же имя, как и про-
грамма.

Programming \ Editors \ Table editors \ Declaration editors \ Variable declaration


Programming \ Editors \ Table editors \ Declaration editors \ Data type declaration
Programming \ Editors \ SmartEdit

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

Programming \ Editors \ Table editors \ Declaration editors \ Variable declaration


Programming \ Editors \ Table editors \ Declaration editors \ Data type declaration
Programming \ Editors \ General operation \ Dialog box for initializing structure types and
instances

Область видимости
Область действия объявленных переменных и типов данных зависит от положения файла объ-
явлений в окне Logical View.

TM250 - Управление памятью и хранение данных 11


Переменные, константы и типы данных

Programming \ Variables and data types \ Scope of declarations

2.2 Простые типы данных

Простые типы данных также называют основными типами данных. Эти типы данных формируют
основу для всех остальных составных типов данных.
В следующем списке приведены все основные типы данных, описанные в стандарте МЭК 61131-3,
а также указана область их применения.

Двоичный / Целые числа Целые числа С плаваю- Строковый Время, дата


последова- со знаком без знака щей точ-
тельность кой
битов
BOOL SINT USINT REAL STRING TIME
WORD INT UINT LREAL WSTRING DATE_AND_TIME
(DT)
DWORD DINT UDINT DATE
TIME_OF_DAY
(TOD)
Table 9: Обзор типов данных согласно МЭК

Полный список основных типов данных с указанием областей их применения и диапазонов зна-
чений приведен во встроенной справочной документации Automation Studio.

Programming \ Variables and data types \ Variables \ Data types

Одной из особенностей типов данных, определенных стандартом МЭК, является то, что
они полностью независимы от используемой платформы. А это означает, что эти типы
данных всегда имеют одинаковый диапазон значений независимо от архитектуры про-
цессора или программного кода, в котором они используются.

12 TM250 - Управление памятью и хранение данных


Переменные, константы и типы данных

2.2.1 Преобразование типов данных

При программировании может потребоваться выполнить пре-


образование одного типа данных в другой.
При присвоении переменной, относящейся к типу данных с
большим диапазоном значений, значения типа данных с мень-
шим диапазоном осуществляется неявное преобразование (так
называемое расширяющее приведение типов). В случае проти-
воположной операции (так называемой сужающим приведени-
ем типов, когда диапазон значений становится меньше) преоб-
разование в программном коде должно быть выполнено сами
программистом, то есть в явном виде.
Image 9: Приведение типов данных

Неявное приведение типов данных


Неявное приведение типов данных происходит в том случае, когда преобразование одного типа
данных в другой осуществляется компилятором.

В приведенном ниже программном коде переменной, относящейся к типу данных с боль-


шим диапазоном значений, присваивается значение переменной, типа данных с мень-
шим диапазоном.

Объявление пере- VAR


менных bigValue : DINT := 0;
smallValue: SINT := 0;
END_VAR
Программный код bigValue := smallValue;
Table 10: Неявное приведение типов

Этот тип преобразования гарантирует наличие достаточного объема памяти для хране-
ния переменной нового типа данных. Данное преобразование осуществляется без уча-
стия программиста. Компилятор выполняет преобразование неявным образом.

Явное приведение типов данных


Если переменной, относящейся к типу данных с большим диапазоном значений, присваивается
переменная типа данных с меньшим диапазоном, то программист должен выполнить сам приве-
дение типов.

TM250 - Управление памятью и хранение данных 13


Переменные, константы и типы данных

Объявление пере- VAR


менных bigValue : DINT := 0;
smallValue: SINT := 0;
END_VAR
Программный код smallValue:= bigValue;
Table 11: Требуется явное приведение типов

В этом случае компилятор выдает следующее сообщение:


Error 1140: Incompatible data types: Cannot convert DINT to SINT.
(«Ошибка 1140: несовместимые типы данных: невозможно преобразование
DINT в SINT»)

Для выполнения преобразования могут использоваться функции из библиотеки AsIecCon. Эта


библиотека добавляется автоматически при создании проекта Automation Studio.
Преобразование из приведенного выше примера может быть осуществлено показанным ниже
образом.
Выражение, которое должно быть преобразовано, помещается в скобках, непосредственно перед
которыми располагается функция преобразования.

Объявление пере- VAR


менных bigValue : DINT := 0;
smallValue: SINT := 0;
END_VAR

Программный код smallValue:= DINT_TO_SINT(bigValue);


Table 12: Выполнение явного приведение типов

Programming \ Libraries \ IEC 61131-3 functions \ AsIecCon \ Function blocks and functions

14 TM250 - Управление памятью и хранение данных


Переменные, константы и типы данных

2.3 Массивы, структуры и перечислимый тип данных

Определяемые пользователем типы данных могут быть созданы на основе различных простых
типов данных. Этот метод называется «создание производных типов» (derivation). Производные
типы данных могут состоять не только из простых типов данных, но и из других производных.
К производным типам данных относятся следующие:
• Массивы и многомерные массивы
• Структуры
• Переопределенные типы данных и поддиапазонны
• Данные перечислимого типа

Programming \ Variables and data types \ Data types \ Derived data types

2.3.1 Массивы

В отличие от простых переменных, массивы состоят из нескольких однотипных переменных. До-


ступ к каждому отдельному элементу осуществляется с помощью имени массива и индекса.
Значение индекса, используемого для доступа к элементам массива, не должно выходить за пре-
делы фактического размера массива. Размер массива задается при объявлении переменной.
В программе в качестве индекса может использоваться переменная, именованная или перечис-
лимая константа.

Image 10: Массив данных типа INT с нумерацией элементов от 0 до 9 соответствует 10 различным элементам массива.

Объявление и использование массивов


При объявлении массива необходимо указать тип содержащихся в нем данных и его размер. Со-
гласно общераспространенному соглашению наименьшее значение индекса массива принима-
ется равным 0. При этом следует учитывать, что в таком случае максимальное значение индекса
для массива из 10 элементов равно 9.

TM250 - Управление памятью и хранение данных 15


Переменные, константы и типы данных

Объявление VAR
переменных aPressure : ARRAY[0..9] OF INT := [10(0)];
END_VAR
Программный (*Присвоение значения 123 элементу с индексом 0*)
код aPressure[0] := 123;

Table 13: Объявление массива из 10 элементов, начиная с индекса = 0

При попытке доступа к элементу массива с индексом 10 компилятор выводит следующее


сообщение об ошибке:

Программный aPressure[10] := 75;


код
Сообщение об Error 1230: The constant value '10' is not in range
ошибке '0..9' («Ошибка 1230: значение константы 10 не нахо-
дится в диапазоне 0...9»).
Table 14: Доступ к массиву по индексу, выходящему за пределы допустимого диапазона

Объявление массива из 10 элементов может быть выполнено в редакторе объявлений


одним из следующих способов: USINT[0..9] или USINT[10]. В обоих случаях будет создан
массив с начальным индексом 0 и максимальным индексом 9.

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

1) Создайте новую программу с именем arrays.

2) Откройте окно объявления переменных.

3) Объявите массив aPressure.

Массив должен содержать 10 элементов. Наименьший индекс массива равен 0. Тип данных
должен быть INT.

4) Используйте массив в коде программы.

С помощью индекса получите доступ к массиву в коде программы. Используйте для этой цели
фиксированные числа и константы.

5) Выполните ошибочное обращение к массиву в коде программы.

Обратитесь к массиву по индексу со значением 10, а затем проанализируйте результат в окне


сообщений.

Объявление массива с помощью констант


Поскольку использование фиксированных числовых значений в объявлениях и самом программ-
ном коде, как правило, приводит к трудностям при дальнейшем сопровождении программ, то ре-
комендуется применять числовые именнованные константы.

16 TM250 - Управление памятью и хранение данных


Переменные, константы и типы данных

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

Объявление VAR CONSTANT


переменных MAX_INDEX : USINT := 9;
END_VAR
VAR
aPressure : ARRAY[0..MAX_INDEX] OF INT ;
index : USINT := 0;
END_VAR
Программный IF index > MAX_INDEX THEN
код index := MAX_INDEX;
END_IF
aPressure[index] := 75;
Table 15: Объявление массива с использованием констант

Программный код теперь обновлен таким образом, чтобы индекс, используемый для об-
ращения к элементам массива, был ограничен максимальным индексом массива. Пре-
имущество такого подхода заключается в том, что изменение размеров массива (как в
большую, так и меньшую сторону) не требует редактирования программного кода.

Programming \ Variables and data types \ Data types \ Derived data types \ Arrays

Расчет суммы и среднего значения


Необходимо рассчитать среднее значение на основе содержимого массива Pressure. Программа
должна быть составлена таким образом, чтобы при изменении размера массива в нее вносилось
минимальное количество правок.

1) Рассчитайте сумму с помощью цикла.

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

2) Рассчитайте среднее значение.

Тип данных, к которому относится среднее значение, должен быть таким же, как тип данных
массива (INT).

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

TM250 - Управление памятью и хранение данных 17


Переменные, константы и типы данных

Объявле- VAR
ние пере- Array2Dim : ARRAY[0..6,0..6] OF INT;
менных END_VAR
Программ- Array2Dim[3,3] := 11;
ный код

Image 11: Доступ к значению


в колонке 3, ряд 3

Table 16: Объявление двумерного массива 7x7 и выполнение обращения к нему

Недопустимые попытки доступа к массиву в программном коде с использованием фик-


сированного числа, константы или элемента перечислимого типа обнаруживаются и
предотвращаются с помощью компилятора.
Недопустимые попытки обращения к массиву в программном коде с использованием пе-
ременной не обнаруживаются компилятором и могут привести к ошибке доступа к памя-
ти во время выполнения программы. Для предотвращения возникновения таких ошибок
исполнения необходимо ограничить изменение индекса массива пределами допустимо-
го диапазона.

В проект Automation Studio может быть импортирована библиотека IEC Check для упрощения
поиска подобных ошибок на этапе выполнения.

Programming \ Libraries \ IEC Check library

2.3.2 Переопределенный тип данных (directly derived) и поддиапазонны

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

Существует возможность переопределить уже существующий тип данных. Создается новый тип
данных с новым именем, который обладает такими же свойствами, как и исходный тип данных.
Для новых типов данных также может быть задано начальное значение. В итоге все переменные
этого типа данных по умолчанию получат заданное таким образом значение.
Для переопределенных типов данных может быть также указан допустимый диапазон значений.
В таком случае переменным допускается присваивать значения этого типа только в пределах
заданного диапазона значений.

18 TM250 - Управление памятью и хранение данных


Переменные, константы и типы данных

Самим переменным также может быть назначен поддиапазон.

Переменная с поддиапазо- VAR


ном varSubRange : USINT(24..48);
END_VAR
Тип данных с поддиапазо- TYPE
ном Voltage_typ : USINT(12..24);
END_TYPE
Table 17: Объявление переменной и поддиапазона

Programming \ Variables and data types \ Data types \ Derived data types \ Direct derivation
Programming \ Variables and data types \ Data types \ Derived data types \ Subranges

Объявление переопределенного типа данных с поддиапазоном


Необходимо получить новый тип данных pressure_typ. Исходный тип данных должен быть INT.
Значения должны быть ограничены диапазоном от 6500 до 29000. Для определения этого диапа-
зона значений следует использовать числовые константы.

1) Объявите непосредственно производный составной тип данных.

Откройте редактор объявления типа данных и объявите новый тип, задав ему имя pressure_typ
и назначив INT в качестве исходного типа данных.

2) Объявите константы.

Откройте редактор объявления переменных, создайте константы MIN_VAL и MAX_VAL и при-


свойте им указанные выше значения.

3) Используя константы, определите поддиапазон pressure_typ.

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

4) Протестируйте полученный результат.

В редакторе объявления переменных объявите новую переменную типа pressure_typ. Затем


в коде программы попробуйте присвоить переменной значение, лежащее за пределами допу-
стимого диапазона. Ознакомьтесь с сообщением компилятора.

2.3.3 Структуры

Структура, представляет собой объединение группы элементов, относящихся к простых типов,


или структур, обращение к которым осуществляется с помощью общего имени. Каждый отдель-
ный элемент также имеет свое собственное имя.
Структуры прежде всего используются для группировки данных и значений, которые каким-либо
образом связаны друг с другом. Примером может служить рецепты, в которых всегда использу-
ются одни и те же ингредиенты, но в различных количествах.

TM250 - Управление памятью и хранение данных 19


Переменные, константы и типы данных

Image 12: Объявление структуры в Automation Studio

Объявление структуры TYPE


main_par_recipe_typ : STRUCT
price : REAL;
setTemp : REAL;
milk : REAL;
sugar : REAL;
coffee : REAL;
water : REAL;
END_STRUCT ;
END_TYPE
Объявление перемен- VAR
ной AnyCoffee : main_par_recipe_typ;
END_VAR
Использование в коде (*####### #### ### AnyCoffee*)
программы AnyCoffee.price := 1.69;
Table 18: Объявление структуры и использование ее в коде программы

Programming \ Variables and data types \ Data types \ Composite data types \ Structures
Programming \ Editors \ Table editors \ Declaration editors \ Data type declaration

Объявление структуры recipe_typ


Объявите структуру с именем recipe_typ.
Данная структура должна включать в себя следующие элементы:
• price (цена),
• milk (количество молока),
• sugar (количество сахара),
• coffee (количество кофе),
• water (количество воды).

Для каждого элемента может быть выбран любой тип данных в зависимости от того, каким образом
эти элементы должны использоваться в программе.

1) Объявите структуру.

20 TM250 - Управление памятью и хранение данных


Переменные, константы и типы данных

Откройте редактор объявлений и создайте новую структуру, щелкнув на пиктограмме Add


structure type («Добавить тип «структура»). Задайте ей имя recipe_typ. Добавьте элементы в
соответствии со списком выше.

2) Проинициализируйте элементы в коде программы.

Используя новый тип данных, объявите новую переменную с именем "cappuccino". Исполь-
зуйте переменную в коде программы и проинициализируйте элементы значениями.

Массивы структур
Структуры также могут являться элементами массива. В этом случае действуют такие же правила
как и в отношении массивов простых типов данных. Для доступа к элементам также используется
индекс, значение которого должно быть ограничено в прикладной программе, так чтобы не воз-
никали ошибки доступа к памяти.

Объявление пере- VAR


менных aCoffee : ARRAY[0..5] OF recipe_typ;
END_VAR
Программный код aCoffee[0].water := 12;

Сложение значений элементов sugar («количество сахара»)


Объявите массив структур recipe_typ. Размер этого массива должен быть рассчитан на 10 эле-
ментов. Проинициализируйте массив случайными значениями.
Вместо фиксированных значений используйте константы. Сложите значения элементов sugar всех
структур и определите, сколько сахара необходимо в среднем для обеспечения производствен-
ного процесса.

2.3.4 Перечислимый тип данных

Перечисление — это по сути еще один способ организации списка значений. Таким образом, воз-
можно использование перечислимых типов данных с переменными. Вместо числового значения
элемента списка переменная содержит соответствующий текст.
Значения перечисленных элементов нумеруются автоматически в порядке возрастания, начиная
с 0. Также могут быть заданы начальные значения.
Перечислимые типы и содержащиеся в них элементы часто используются для обозначения раз-
личных состояний машины.

TM250 - Управление памятью и хранение данных 21


Переменные, константы и типы данных

Объявление пере- TYPE


менной перечисли- Color :
мого типа (
red,
yellow,
green
Image 13: Объявление
);
переменной перечислимого
END_TYPE типа

Объявление пере- VAR


менной stepColor : Color;
result : USINT;
END_VAR
Программный код CASE stepColor OF
red:
result := 1; Image 14: Отображение
переменной перечислимого
yellow: типа в окне Watch.
result := 2;
green:
result := 3;
END_CASE
Table 19: Объявление переменной перечислимого типа и использование ее в коде программы

Programming \ Variables and data types \ Data types \ Derived data types \ Enumeration

2.4 Строки

Строка представляет собой ряд последовательно расположенных байтов. Каждый байт содержит
буквенно-цифровой или управляющий символ. Цепочка символов образует строку.
При определении строки из 10 символов она состоит из 10 используемых символов. Каждая стро-
ка завершается двоичным 0 (так называем нуль-терминатором), который не учитывается в каче-
стве используемого символа. Другими словами строка из 10 символов фактически занимает 11
байт памяти.
Если фактически используется только часть символов, то содержимое памяти, следующее за
двоичным символом 0, остается неопределенным.

Image 15: Строка из 10 символов, заканчивающаяся нулем


после Hello

22 TM250 - Управление памятью и хранение данных


Переменные, константы и типы данных

В таблице ниже показано, как осуществляется объявление (с инициализацией). Количество ис-


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

Объявление VAR
переменных sDescription : STRING[80] := 'Description';
END_VAR
Программный sDescription := 'Hello World';
код
Table 20: Объявление строки, использование ее в коде программы, присвоение текста

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

Programming \ Variables and data types \ Data types \ Basic data types \ STRING, WSTRING
Programming \ Standards \ Literals in IEC languages
Programming \ Standards \ ASCII tables

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


Объявите строковую переменную с именем recipe_typ. Она должна быть рассчитана на 10 симво-
лов. Затем попробуйте присвоить ей в коде программы текст Automation Studio и посмотрите на
результат в окне "Watch"

1) Объявите строковую переменную sDescription.

2) Используйте ее в своей программе.

3) Контролируйте результат в окне Watch.

2.4.1 Функции работы со строками

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


В отношении строк возможны следующие операции:
• Сравнение строк
• преобразование в строку,
• преобразование строки в число,
• Обработка строк

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

Сравнение строк
Строки могут быть проверены на идентичность. Результатом этой операции будет равенство или
неравенство строк.

TM250 - Управление памятью и хранение данных 23


Переменные, константы и типы данных

Объявление VAR
переменных sTextA: STRING[80] := 'Perfection';
sTextB: STRING[80] := ' in Automation';
equal : BOOL;
END_VAR

Программный IF stringa = stringb THEN


код equal := TRUE;
ELSE
equal := FALSE;
END_IF
Table 21: Сравнение строк

Поскольку две строки не совпадают, результат будет следующим: "equal := FALSE;".

Некоторые языки программирования не допускают присваивать строкам значения с по-


мощью оператора присваивания или сравнивать их как числовые переменные с исполь-
зованием оператора IF.
В этих случаях необходимо использовать функции из библиотеки обработки строк.

Если требуется выявить различия между двумя строками, может быть использована
функция brsstrcmp из библиотеки AsBrStr.

Programming \ Libraries \ Configuration, system information, runtime control \ AsBrStr


Programming \ Libraries \ Configuration, system information, runtime control \ AsBrWStr

Функции также необходимы для более сложной обработки строк. В следующем разделе приво-
дится обзор доступных библиотек и объясняется, в каких случаях они могут быть использованы.
Библиотеки, содержащие функции для работы со строками:
• Standard
• AsIecCon
• AsBrStr
• AsBrWStr
• AsString

24 TM250 - Управление памятью и хранение данных


Переменные, константы и типы данных

Преобразование строк
Если строка имеет соответствующее содержимое, то она может быть преобразована в числовое
значение. Обратное преобразование также возможно. Эти функции преобразования являются
только парой примеров из множества функций, включенных в библиотеку AslecCon, которая ав-
томатически добавляется к каждому новому проекту Automation Studio.

Необходимо преобразовать содержимое переменной sPressure в числовое значение


Pressure.

Объявление VAR
переменных Pressure : REAL;
sPressure : STRING[80] := '12.34';
END_VAR
Программный Pressure := STRING_TO_REAL(sPressure);
код
Table 22: Преобразование строки в вещественное число

Преобразование в обратном направлении осуществляется следующим образом:

Объявление VAR
переменных Pressure : REAL;
sPressure : STRING[80] := '12.34';
END_VAR
Программный sPressure := REAL_TO_STRING(Pressure );
код
Table 23: Преобразование вещественного числа в строку

Programming \ Libraries \ IEC 61131-3 functions \ AsIecCon

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

TM250 - Управление памятью и хранение данных 25


Переменные, константы и типы данных

Объявление VAR
переменных sSourceString : STRING[80] := 'Strings in AS';
sFindString : STRING[80] := 'in';
position : INT;
END_VAR
Программный position := FIND(sSourceString, sFindString);
код
Table 24: Определении позиции одной строки в пределах другой строки

В результате получается значение 9, так как искомая строка начинается с 9-й позиции
строки, в которой выполнялся поиск.

Programming \ Libraries \ IEC 61131-3 functions - STANDARD \ STRING handling functions

Добавление одной строки к другой


Соедините две строки друг с другом. Используйте функцию CONCAT из библиотеки STANDARD.

1) Объявите переменные.

Объявите переменную sText1 с начальным значением Hello, переменную sText2 с начальным


значением World! и переменную sResult.

2) Вызовите функцию CONCAT.


3) Контролируйте результат в окне Watch.

Дополнительная информация
Функции из библиотеки STANDARD могут использоваться для выполнения операций со строка-
ми. Функции всегда проверяют доступную длину переменной, благодаря чему предотвращается
переполнение памяти.
При этом размер памяти, выделяемый для переменной, как правило, ограничивается объемом
32 КБ. Операции со строками, обеспечивающие обработку данных большего объема, доступны
в библиотеках AsBrStr и AsBrWStr.

При вызове функций из библиотеки AsBrStr следует помнить о том, что в этом случае
система не проверяет, имеется ли достаточное место для размещения результирующей
строки в целевой переменной. Если в программе содержатся ошибки, то может произой-
ти переполнение памяти. По этой причине необходимо всегда в прикладной программе
проверять, достаточно ли памяти, зарезервированной для целевой переменной, для вы-
полнения операции со строкой.
Окончательная длина строки может быть определена с помощью функции brsstrlen из
библиотеки AsBrStr или LEN из библиотеки STANDARD.

26 TM250 - Управление памятью и хранение данных


Переменные, константы и типы данных

Programming \ Libraries \ Configuration, system information, runtime control \ AsBrStr


Programming \ Libraries \ Configuration, system information, runtime control \ AsBrWStr

2.5 Адреса и размер памяти

Адреса
Каждой переменной, константе, массиву и структуре, которые создаются в окне объявления, ком-
пилятором присваивается определенный адрес памяти. Этот адрес обозначает начальную точку
в памяти контроллера для размещения данных соответствующей переменной.
Во время выполнения программы этот адрес памяти не может быть изменен, поэтому эти пере-
менные называют статическими. Адрес, по которому расположена переменная, может быть опре-
делен с помощью функции ADR().
Адреса переменных чаще всего необходимы для передачи данных функциям и функциональным
блокам. Для того чтобы функция имела возможность изменять значение внешней переменной, ей
необходимо передать адрес данной переменной в качестве параметра. Работа с библиотеками

Объявление пере- VAR


менных aCoffee : ARRAY[0..5] OF recipe_type;
adr_index_0 : UDINT;
END_VAR
Программный код adr_index_0 := ADR(aCoffee[0]);
Table 25: Определение адреса элемента с индексом 0

Несмотря на то, что адрес переменной в памяти может быть определен, он никогда не
должен использоваться в программном коде как фиксированное значение. Это связано с
тем, что каждый раз при начальной загрузке контроллера операционная система назна-
чает новый адрес.

Определение адресов
Для определения адреса памяти, по которому расположен массив aCoffee, используйте функцию
ADR(). Необходимо установить адреса для элементов с индексами 0 и 1. Вычислите разницу меж-
ду двумя адресами и проверьте, соответствует ли результат ожидаемому.

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

TM250 - Управление памятью и хранение данных 27


Переменные, константы и типы данных

Объявление пере- VAR


менных aCoffee : ARRAY[0..5] OF recipe_type;
size_complete : UINT;
size_single : UINT;
num_elements : UINT;
END_VAR
Программный код size_complete := SIZEOF(aCoffee);
size_single := SIZEOF(aCoffee[0]);
num_elements := size_complete / size_single;
Table 26: Объем памяти, занимаемый массивом и количество элементов

Определение объема памяти


Определите количество памяти, занимаемой всем массивом aCoffee, а также определите объем,
занимаемый элементом с индексом 0. Рассчитайте количество элементов в массиве.

Programming \ Libraries \ IEC 61131-3 functions \ OPERATOR \ Address and length functions
\ ADR
Programming \ Libraries \ IEC 61131-3 functions \ OPERATOR \ Address and length functions
\ SIZEOF

28 TM250 - Управление памятью и хранение данных


Память и управление памятью

3 ПАМЯТЬ И УПРАВЛЕНИЕ ПАМЯТЬЮ

При разработке программы необходимо понимать основные принципы функционирования систе-


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

3.1 Инициализация памяти

Переменные могут быть проинициализированны при объявлении. Если переменной не присвоено


начальное значение, она всегда получает значение 0 при загрузке контроллера. Константам же
всегда требуется начальное значение.
Начальные значения для массивов и структур могут быть заданы в редакторе объявления пе-
ременных. Кроме того, отдельным элементам структур также могут быть присвоены начальные
значения при объявлении типа данных.

Image 16: Окно объявления переменных, констант, массивов и структур

Все переменные и константы хранятся в динамическом ОЗУ (DRAM) контроллера. В результате


программной ошибки (например, доступ к массиву осуществляется по индексу, лежащему за пре-
делами допустимого диапазона) может быть случайно переписана даже область памяти, отвеча-
ющую за значения констант.
Если значения переменных должны сохраняться после перезапуска контроллера, то при объяв-
лении для них должен быть установлен флаг RETAIN. В таком случае при отключении электропи-
тания или перезагрузке данные будут храниться в энергонезависимом статическом ОЗУ (SRAM)
контроллера. Дополнительная информация приведена в обучающем курсе «TM213 — Automation
Runtime».

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

TM250 - Управление памятью и хранение данных 29


Память и управление памятью

Programming \ Editors \ Table editors \ Declaration editors


Programming \ Editors \ General operation \ Dialog boxes for input support
Programming \ Variables and data types \ Variables \ Variable remanence
Real-time operating system \ Method of operation \ Module / data security \ Power-off handling
Real-time operating system \ Method of operation \ Module / data security \ Power-on handling
Programming \ Libraries \ IEC Check library

3.2 Копирование и инициализация памяти

Копирование
В зависимости от используемого языка программирования, существует несколько различных ме-
тодов для копирования данных. В программах на языке Structured Text данные из переменной А
могут быть скопированы в переменную B путем операции присваивания. При этом необходимо,
чтобы типы данных исходной переменной и целевой были идентичны, в противном случае будет
выдана ошибка компиляции.
Если данные, относящиеся к одному типу данных, должны быть скопированы в переменную дру-
гого типа данных, то это может быть реализовано с помощью функции brsmemcpy(). В этом слу-
чае в функцию должны быть переданы адреса памяти исходной и целевой переменной, а также
количество копируемых байтов.

Объявление VAR
переменных aTarget : ARRAY[0..4] OF USINT;
aSource : ARRAY[0..4] OF USINT;
END_VAR
Программный brsmemcpy(ADR(aTarget), ADR(aSource), SIZEOF(aTarget));
код
Table 27: Копирование области памяти с помощью функции brsmemcpy()

При этом необходимо следить за тем, чтобы объем целевой памяти был достаточным для сохра-
нения копируемого блока данных. Для определения размера минимально необходимого количе-
ства памяти могут использоваться функции sizeof() и MIN(). Такой подход позволяет обеспечить
копирование только в том случае, когда имеется соответствующее место в целевой памяти.

30 TM250 - Управление памятью и хранение данных


Память и управление памятью

Объявление VAR
переменных aTarget : ARRAY[0..2] OF USINT;
aSource : ARRAY[0..4] OF USINT;
min_len : USINT := 0;
END_VAR
Программный min_len := MIN(SIZEOF(aTarget), SIZEOF(aSource));
код brsmemcpy(ADR(aTarget), ADR(aSource), min_len);
Table 28: Копирование ограниченной области памяти с применением функции MIN()

Инициализация
Переменные различных типов данных могут быть проинициализированы при объявлении. В неко-
торых случаях возникает необходимость в перезаписи определенных областей памяти в програм-
ме, что может быть реализовано в программном коде с помощью функции brsmemset().

Объявление VAR
переменных aTarget : ARRAY[0..4] OF USINT;
END_VAR
Программный brsmemset(ADR(aTarget), 0 , SIZEOF(aTarget));
код
Table 29: Инициализация области памяти с помощью функции brsmemset()

Programming \ Libraries \ Configuration, system information, runtime control \ AsBrStr

Инициализации и копирование памяти

1) Объявите две переменные.

Обе переменные должны относиться к определенному пользователем типу данных recipe_typ.

2) С помощью функции brsmemset() проинициализируйте первую структуру.

Инициализация должна быть выполнена не циклически, а по команде.

3) Скопируйте данные.

Скопируйте содержимое первой структуры во вторую. Используйте для этой цели функцию
brsmemcpy(). При использовании этих функций следует обратить внимание на длину данных.

TM250 - Управление памятью и хранение данных 31


Память и управление памятью

32 TM250 - Управление памятью и хранение данных


Работа с библиотеками

4 РАБОТА С БИБЛИОТЕКАМИ

Библиотеки позволяют разбивать программное обеспечение на


компактные блоки и повторно использовать их по мере необхо-
димости. Таким образом библиотеки выступают в качестве кон-
тейнеров для функций, функциональных блоков, констант и ти-
пов данных.
В этом разделе приводится краткое описание терминологии, ис-
пользуемой в отношении библиотек, а также информация о том,
как правильно использовать функции и функциональные блоки.
Будет рассмотрено, как создавать пользовательские библиоте-
ки, которые позволяют хранить различные функции, которые
Image 17: Работа с библиотеками
уже были созданы и реализованы пользователем. Кроме того,
будут продемонстрированы примеры программ с использова-
нием стандартных библиотек B&R.

4.1 Общая информация

Библиотека представляет собой набор функций, функциональных блоков, констант и типов дан-
ных. Любая из имеющихся библиотек может быть в любое время добавлена в окно Logical View.
Для выбора доступны как стандартные библиотеки B&R, так и библиотеки, созданные пользова-
телем.

Project Management \ Logical view \ Wizards in the logical view \ Inserting libraries

Функция
Функция вызывается из программы, принимает определенные параметры в качестве аргументов
и возвращает некоторое значение. При вызове функции ей передаются параметры и она сразу
же возвращает значение. При последующем вызове функции могут быть переданы другие пара-
метры.

Программный код result := MIN(100,200);


Table 30: Вызов функции с двумя параметрами

Функциональный блок
В отличие от функции, функциональный блок может возвращать более одного значения. Допол-
нительно требуется также объявить «экземпляр» функционального блока. Кроме того, функцио-
нальный блок может использоваться для повторного многократного выполнения определенной
задачи.

TM250 - Управление памятью и хранение данных 33


Работа с библиотеками

Image 18: Экземпляр, входные и выходные данные функционального блока

1 Структура экземпляра функционального блока должна быть объявлена в редакторе


объявления переменных с уникальным именем.
2 Входные параметры передаются непосредственно перед вызовом функционального
блока или во время его выполнения.
3 Выходные параметры записываются после того, как функциональный блок будет вы-
зван, и могут в последствии использоваться в программном коде.
Table 31: Пояснения к рисунку

Создание нескольких экземпляров функционального блока позволяет вызывать функциональный


блок с различными параметрами.
Фактически экземпляр функционального блока может рассматриваться как структура. Функцио-
нальный блок принимает входные параметры в момент его вызова, а после выполнения записы-
вает выходные параметры своего экземпляра.

Объявление пере- VAR


менных TON_time1 : TON;
TON_time2 : TON;
END_VAR
Программный код TON_time1(IN := enable1, PT := T#5s);
TON_time2(IN := enable2, PT := T#10s);
Table 32: Вызов двух функциональных блоков TON с различными параметрами времени

Два таймера могут быть запущены в различные моменты времени и с разной задержкой.
Информация о заданной задержке и о том, сколько времени уже прошло, хранится в
соответствующем экземпляре функционального блока.

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


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

После добавления функции или функционального блока нажатием клавиши F1 может


быть открыта справочная документация Automation Studio, в которой содержится инфор-
мация о параметрах, а также входных и выходных данных конкретной выбранной функ-
ции или функционального блока.

34 TM250 - Управление памятью и хранение данных


Работа с библиотеками

Генерирование тактового сигнала


Вызовите функциональный блок TON. Сгенерируйте тактовый сигнал с длительностью включения
1 с и паузой 1 с.

Programming \ Functions and function blocks \ Functions


Programming \ Functions and function blocks \ Function blocks

Вызов функциональных блоков: вход разрешения (enable) и выход состояния (status)


У всех функциональных блоков, включенных в состав стандартных библиотек B&R, имеется вход
Enable и выход Status.
Вход Enable позволяет включать и отключать функциональный блок.
Выход Status отображает текущее состояние функционального блока. Имеется несколько состо-
яний, которые являются одинаковыми для всех функциональных блоков. Другие состояния бу-
дут отличаться, но по диапазону их номеров всегда может быть точно определена библиотека,
к которой они принадлежат. Информация о возможных состояниях и их номерах приводится во
встроенной справочной документации Automation Studio.

Константа Номер ошибки Описание


ERR_OK 0 Успешное выполнение, отсутствие ошибок, выход-
ные значения являются допустимыми
ERR_FUB_ENABLE_FALSE 65534 Отсутствие разрешения (enable не выставлен),
функциональный блок вызван, но не выполнен
ERR_FUB_BUSY 65535 BUSY («ЗАНЯТ»), функциональный блок вызван,
но его выполнение еще не завершено, необходи-
мо вызвать его снова в следующем цикле
Table 33: Номера общих состояний функциональных блоков

Общие состояния с указанными номерами не являются ошибками и должны обрабаты-


ваться соответствующим образом при оценке возвращаемых значений в коде програм-
мы.
Эти три номера состояний предопределены в библиотеке "runtime". Эта библиотека все-
гда входит в состав проекта Automation Studio.

TM250 - Управление памятью и хранение данных 35


Работа с библиотеками

Данный пример демонстрирует вызов функционального блока, имеющего выход "Status".


Особое внимание здесь должно уделяться правильной обработке выхода "Status". Осу-
ществляется вызов функционального блока CfgGetIPAddr из библиотеки AsARCfg.

Объявление пере- VAR


менных GetIP : CfgGetIPAddr;
sIPResult : STRING[20];
END_VAR

Программный код GetIP.enable := 1;


GetIP.pDevice := ADR('IF3');
GetIP.pIPAddr := ADR(sIPResult);
GetIP.Len := SIZEOF(sIPResult);
GetIP();
IF GetIP.status <> ERR_FUB_BUSY THEN
IF GetIP.status = 0 THEN
(*########## #########*)
ELSE
(*######### ##### ### ########### ### ###... *)
END_IF
END_IF

Table 34: Обработка выхода "Status" после вызова функционального блока.

Вызов функционального блока должен продолжаться все время, пока он находится в со-
стоянии BUSY («ЗАНЯТ»). Как только состояние станет равным 0, что свидетельствует
о правильном выполнении процедуры, выходные параметры уже могут использоваться
в программе. Любое состояние, отличное от 0 или BUSY, должно быть соответствующим
образом обработано в программном коде. Обзор номеров ошибок приводится в докумен-
тации к соответствующей библиотеке.

Вызов функционального блока и оценка состояния

1) Вызовите функциональный блок CfgGetIPAddr.

Вызовите функциональный блок CfgGetIPAddr из библиотеки AsARCfg. Затем с помощью него


определите IP-адрес Ethernet-интерфейса контроллера.

2) Оцените состояния по номерам.

Правильно оцените значение выхода Status. Установите значение переменной равным 1, если
Status = ERR_FUB_BUSY. Установите значение равным 2, если Status = 0. В случае других
ошибок (состояний выхода Status) присвойте переменной значение 100.

3) Ознакомьтесь в справочной документации с информацией, относящейся к состоянию выхо-


да Status с определенным номером.

36 TM250 - Управление памятью и хранение данных


Работа с библиотеками

Найдите информацию о кодах ошибок для этого функционального блока во встроенной спра-
вочной документации Automation Studio.

4) Каким образом эта ошибка может быть обработана?

Ответьте на вопрос, каким образом программа может обработать эту ошибку. Возможно ли
принятие каких-либо мер по предотвращению возникновения этой ошибки в ходе выполнения
программы?

Programming \ Libraries \ Configuration, system information, runtime control \ AsARCfg

Diagnostics and service \ Error numbers \ Libraries

Компоненты библиотеки
Библиотека объединяет ряд компонентов и свойств.

В состав компонентов входят следующие:


• файл .fun: содержит интерфейсы функций и функцио-
нальных блоков;
• файл .var: содержит числовые константы, которые
определяют состояния, в которые может перейти функ-
циональный блок, а также параметры, принимаемые
функцией или функциональным блоком; Image 19: Компоненты библиотеки
• файл .typ: структуры, которые используются внутри
функционального блока, или, которые должны быть пе-
реданы в функциональный блок в прикладной програм-
ме.

Programming \ Libraries
Project management \ Logical view \ Libraries

TM250 - Управление памятью и хранение данных 37


Работа с библиотеками

4.2 Создание пользовательских библиотек

Для того чтобы программный код можно было повторно ис-


пользовать, он должен быть сначала разделен на автоном-
ные модули, которые могут быть сохранены в определен-
ном месте. Наиболее подходящий способ реализовать это —
использование пользовательских библиотек, создаваемых в
среде Automation Studio.
Перед началом этапа проектирования необходимо опреде-
лить области действия отдельных функциональных единиц,
то есть функций и функциональных блоков. После выполне-
ния этой задачи можно приступить к объявлению интерфей-
сов. И в завершение может быть реализован набор функций.
Image 20: Новая пользовательская
библиотека

Необходимо рассмотреть следующие вопросы:


• Каково назначение этой библиотеки?
• Какие необходимы функции и функциональные блоки?
• Как должны быть реализованы интерфейсы для функциональных блоков?
• Будут ли использоваться константы и структуры?
• Для выполнения некоторых задач необходимо ли использовать определенные элементы
из других библиотек?
• Как библиотеки будут передаваться или храниться?

Добавление пользовательской библиотеки


Для добавления новой библиотеки может запущен мастер из окна Logical View. Библиотеки могут
быть сохранены в пакете Libraries или любом другом пакете в окне Logical View.

Возможна настройка следующих элементов:


• имя и описание библиотеки,
• язык программирования,
• файл объявления констант (.var),
• файл объявления типов данных (.typ),
• файл объявления функций и функциональных блоков (.fun).

Project Management \ Logical view \ Wizards in the logical view

Добавление функционального блока


После создания библиотека может быть выбрана в окне Logical View. Для добавления функции
или функционального блока в библиотеку может использоваться мастер.

38 TM250 - Управление памятью и хранение данных


Работа с библиотеками

Возможна настройка следующих элементов:


• имя и описание функции или функционального блока,
• принадлежность к типу (функция или функциональный блок),
• язык программирования функции или функционального блока,
• для функций: тип данных возвращаемого значения,
• объявления входных и выходных параметров.

После добавления функции или функционального блока соответствующим образом изменяется


содержимое файла .fun. Изменения в файл .fun могут быть внесены в любое время.
Кроме того, в библиотеку добавляется исходный файл с именем функции или функционального
блока. В этом файле реализуется вся необходимая функциональность.
Теперь можно приступить к написанию кода в исходном файле. Параметры могут обрабатывать-
ся, как обычные переменные.

Image 21: Части новой библиотеки

Если функциональный блок имеет выход состояния (Status), рекомендуется для этой це-
ли определить константы. Эти константы могут быть объявлены в файле библиотеки .var.
Для размещения пользовательских констант предусмотрена определяемая пользовате-
лем область значений.

Diagnostics and service \ Error numbers \ AR system \ 50000 - 59999 user area

Реализация и тестирование
Для того чтобы новые функции библиотеки работали должным образом, необходимо выполнить
тщательное их тестирование. Для этой цели новые функции и функциональные блоки могут вы-
зываться и тестироваться в любой программе.

Использование функциональных блоков


Если в пользовательской библиотеке необходимо использовать функциональные блоки из других
библиотек, вначале следует объявить экземпляр функционального блока. Экземпляр для внеш-
них функциональных блоков должен быть объявлен как внутренняя переменная в экземпляре
пользовательского функционального блока.

Экспорт и перенос
После того как библиотека будет полностью реализована, ей может быть присвоен номер вер-
сии, например, в свойствах библиотеки. Затем может быть выполнен экспорт пользовательской
библиотеки. Данная задача решается с помощью меню File, вызываемого из окна Logical View.
Пользователь также может выбрать, должны ли экспортироваться исходные файлы библиотеки.

TM250 - Управление памятью и хранение данных 39


Работа с библиотеками

При этом необходимо отметить, что если исходные файлы не добавляются, то впоследствии в
экспортированную библиотеку уже не могут быть внесены никакие изменения.

В окне Logical View над библиотеками могут производиться все те же операции, как и с
программами. Библиотеки могут храниться в том же самом пакете, в котором находится
использующая их программа.

Создание библиотеки myMath


Создайте пользовательскую библиотеку myMath. Объявите функциональный блок с именем
adderx, который будет складывать значения веса и рассчитывать среднее значение. Кроме того,
должен быть определен также и максимальный вес. В функциональный блок должны быть вклю-
чены вход Enable и выход Status.

Имя Свойства / значение Тип данных


Параметр (.fun)
enable VAR_INPUT BOOL
weight1 VAR_INPUT INT
weight2 VAR_INPUT INT
weight3 VAR_INPUT INT
status VAR_OUTPUT UINT
sum VAR_OUTPUT DINT
average VAR_OUTPUT INT
Maximum VAR_OUTPUT INT
Table 35: Интерфейс функционального блока adderx

Project Management \ Logical view \ Wizards in the logical view \ Inserting libraries
Project Management \ Logical view \ Inserting functions and function blocks into libraries
Programming \ Editors \ Table editors \ Declaration editors \ Function and function block
declarations
Project management \ Logical view \ Exporting a user library
Project management \ Logical view \ Help for user libraries

40 TM250 - Управление памятью и хранение данных


Работа с библиотеками

4.3 Примеры использования стандартных библиотек B&R

Использование стандартных библиотек B&R позволяет упростить выполнение задач. Для облег-
чения работы с этими библиотеками компания B&R разработала несколько примеров их исполь-
зования. На основе стандартных решений функции этих библиотек могут использоваться более
эффективно.
Импорт этих готовых блоков может осуществляться с помощью мастера из окна Logical View.
После этого примеры могут быть изменены с учетом конкретной решаемой задачи (например,
настроены параметры интерфейса) и затем уже загружены в целевую систему.

Image 22: Мастер — добавление примера

Кроме того, примеры были разработаны таким образом, что для их тестирования не требуется
контроллер. С работой примеров можно ознакомиться с помощью эмулятора контроллера ARSim.
Структура отдельных программ при этом не изменяется. Благодаря этому примеры могут исполь-
зоваться в различных областях применения. Описания и обзоры примеров включены во встроен-
ную справочную документацию Automation Studio.

Programming \ Examples \ Adding samples


Programming \ Examples \ Libraries

Добавление примера
Добавьте в свой проект следующий пример:

Programming \ Examples \ Libraries \ Configuration, system information, runtime control \ Create


and evaluate user logbook

TM250 - Управление памятью и хранение данных 41


Основные сведения по обработке данных

5 ОСНОВНЫЕ СВЕДЕНИЯ ПО ОБРАБОТКЕ ДАННЫХ

До сих пор все переменные, массивы и структуры использовались локально. В тоже время часто
бывает необходимо хранить данные в файле, в определенном месте памяти или передавать их
по сети. При этом следует принимать во внимание несколько важных моментов.
Необходимо иметь представление о том, как данные хранятся в памяти, а также о формате, в
котором они хранятся и переносятся. Кроме того, при хранении или передаче, данные должны
сохранять целостность.

5.1 Выравнивание

Различные архитектуры процессоров следуют различным правилам в том, что касается выпол-
нения операций с данными и управления данными. Как правило, пользователи не должны прини-
мать это во внимание, за исключением крайне редких случаев. В то же время если данные долж-
ны быть переданы между системами, которые имеют различную архитектуру, рекомендуется хо-
рошо продумать то, каким образом эти данные должны быть сохранены.

Создание определяемого пользователем типа данных

1) Измените определяемые пользователем типы данных.

Измените типы данных элементов recipe_typ. Эти элементы перечислены в таблице.

2) Определите размер данных.

Объявите переменную SimpleCoffee, которая относится к пользовательскому типу данных


recipe_typ. Для определения длины данных структуры используйте функцию sizeof().

3) Проанализируйте полученные результаты.

Вполне возможно, что длина данных, определенных вами, не будет соответствовать ожида-
емой.

Имя элемента Тип данных


price (цена), USINT
milk (количество молока), UINT
sugar (количество сахара), USINT
coffee (количество кофе), UDINT
Table 36: Элементов типа данных recipe_typ

Определенный в предыдущей задаче размер данных не соответствовал ожиданиям. Дополни-


тельные данные в виде байтов-заполнителей добавляются автоматически для выравнивания в
конкретной архитектуре процессора. Необходимость этого, в первую очередь, связана с тем, что
таким образом ускоряется и упрощается обращение процессора к сохраненным данным. К тому
же, процессор не имеет возможности считывать типы данных четной длины из адресов памяти
нечетной длины.

42 TM250 - Управление памятью и хранение данных


Основные сведения по обработке данных

Изменение пользовательского типа данных

1) Переставьте элементы.

Переставте элементы recipe_typ таким образом, чтобы максимально оптимально использо-


вать память.

Real-time operating system \ Target systems \ SG4 \ Runtime behavior \ Alignment

5.2 Форматы данных

Данные могут быть сохранены и переданы в различных форматах. Например, если рассматри-
вать структуру, входящие в ее состав отдельные байты интерпретируются и представляются в
соответствии с используемыми типами данных.

Если содержимое структуры скопировать в массив байт, то останутся только двоичные данные.
В этом случае данные можно интерпретировать только если известен их изначальный формат.

Если данные затем сохраняются в файлах или передаются по


сети, то необходимо знать форматы данных, используемые с
обеих сторон, т.е. там, где данные сохраняются и откуда пере-
сылаются, а также то, где данные в конечном итоге должны быть
интерпретированы.
Существуют множество различных форматов данных. Если
формат не известен, они продолжают существовать в двоичном
виде.

Image 23: Известен ли формат


данных?

Форматированные данные Двоичные данные


Двоичная 2B 34 33 37 37 34 38 36 35 38 2B 34 33 37 37 34 38 36 35 38
форма 36 36
Тип дан- 12.34 41 43 D7 0A
ных REAL
(веще-
ственное
число)
ASCII 'Hello World' 48 65 6C 6C 6F 20 57 6F 72 6C
64 21 00
Table 37: Сравнение форматированных данных и их двоичного представления

TM250 - Управление памятью и хранение данных 43


Основные сведения по обработке данных

Форматированные данные Двоичные данные


XML <?xml version="1.0"> 3C 3F 78 6D 6C 20 76 65 72 73
<ComboBox> 69 6F 6E 3D 22 31 2E 30 22 3E
<Item ID="off"/> 0D 0A 3C 43 6F 6D 62 6F 42 6F
</ComboBox> 78 3E 0D 0A 3C 49 74 65 6D 20
49 44 3D 22 6F 66 66 22 2F 3E
0D 0A 3C 2F 43 6F 6D 62 6F 42
6F 78 3E 0D 0A
Table 37: Сравнение форматированных данных и их двоичного представления

Как видно из таблицы, все данные всегда хранятся в двоичной форме. А если формат
данных известен, они могут быть отображены в ином виде. Расширение файла никаким
образом не отражает его содержимого, а просто предоставляет ключ к тому, каким обра-
зом данные должны быть интерпретированы.

5.3 Целостность данных

Если содержимое памяти копируется из А в B с помощью операции присваивания или с помощью


функции brsmemcpy(), то данная операция выполняется достаточно быстро за один проход. Если
те же данные должны быть сохранены в файл или переданы по сети, то необходимо, чтобы они
оставались неизменными.
Сохранение и передача данных могут занимать несколько циклов программы, и при этом не пред-
ставляется возможным предсказать, как много данных может быть обработано за один цикл. По
этой причине очень важно, чтобы содержимое не изменялось на протяжении всего этого процес-
са.

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

Если в результате сохранения или передачи данные не остаются неизменными, то они


могут быть сохранены или переданы вместе с данными, которые с ними никак не связа-
ны.
Например, для ряда измеренных значений может быть нарушен хронологический поря-
док. В результате, в зависимости от конкретного процесса, отрицательный эффект мо-
жет быть как минимальным, так и очень значительным.

44 TM250 - Управление памятью и хранение данных


Основные сведения по обработке данных

Объявле- VAR
ние пере- stepSave : UINT;
менных aSend : USINT[0..9];
aRaw: USINT[0..9];
cmdSave : BOOL := FALSE;
END_VAR
Программа CASE sSave OF
0: (*--- ######## ##########*)
IF cmdSave = TRUE THEN
sSave := 1; (*--> Prepare & Save*)
END_IF
1: (*--- ########### ######*)
brsmemcpy( ADR(aSend),ADR(aRaw),SIZEOF(aRaw));
2: (*--- ######### ###### # ####*)
SaveData( ADR(aSend));
END_CASE
Table 38: Подготовка данных перед сохранением их в файл

Функции, вызываемые здесь, являются символическими и используются только для объ-


яснения последовательности действий, в действительности же таких функций не суще-
ствует.
Непосредственно перед вызовом функции сохранения, модифицированные данные ко-
пируются в промежуточный буфер. Благодаря этому целостность данных поддержива-
ется в течение всей процедуры сохранения.

Programming \ Libraries \ Communication \ AsTCP \ General information


Programming \ Libraries \ Communication \ AsSnmp \ General information
Programming \ Libraries \ Data access and data storage \ FileIO

TM250 - Управление памятью и хранение данных 45


Хранение и управление данными

6 ХРАНЕНИЕ И УПРАВЛЕНИЕ ДАННЫМИ

Данные могут храниться в контроллере самыми различными способами. Например, в виде блока
памяти в ОЗУ, в виде объекта данных (data object) с контрольной суммой, в виде файла, в фай-
ловой системе или в сети.

6.1 Резервирование блоков памяти

В некоторых случаях может потребоваться резервирование области памяти в динамическом ОЗУ


(DRAM) во время выполнения программы. После этой операции выделенная память становится
доступной для программы пользователя. Доступ к ней может осуществляться по начальному ад-
ресу зарезервированной области. До тех пор пока эта область памяти не будет снова освобож-
дена пользователем, операционная система не сможет ее использоваться.
Операционная система всегда предоставляет непрерывный участок памяти.

Выделенная область памяти должна быть проинициализирована пользователем. Так как


память выделяется в динамическом ОЗУ (DRAM), то при перезагрузке данные из нее
будут удалены.

Управление памятью с использованием библиотеки SYS_Lib


Если объем памяти, который должен быть зарезервирован, известен до загрузки контроллера, то
могут быть использованы функции tmp_alloc и tmp_free из библиотеки SYS_Lib .
Эти функции следует использовать только в подпрограммах INIT и EXIT программы контроллера.

Programming \ Libraries \ Configuration, system information, runtime control \ SYS_Lib \


Functions and function blocks \ Memory management

Управление памятью с использованием библиотеки AsMem


Библиотека AsMem может использоваться в подпрограмме INIT для резервирования большого
раздела памяти в системе. При этом использование и освобождение блоков памяти может осу-
ществляться с помощью функциональных блоков, вызываемых в циклической программе.

Programming \ Libraries \ Configuration, system information, runtime control \ SYS_Lib \


Functions and function blocks \ Memory management
Programming \ Libraries \ Configuration, system information, runtime control \ AsMem \
Functions and function blocks
Programming \ Examples \ Libraries \ Configuration, system information, runtime control \
Managing memory areas

46 TM250 - Управление памятью и хранение данных


Хранение и управление данными

6.2 Объекты данных (data objects)

Для удобства конфигурирования различных частей про-


граммного обеспечения, иногда бывает необходимо хранить
настройки и параметры в отдельном файле. Эти файлы мо-
гут быть считаны прикладной программой и, если необходи-
мо, повторно сохранены.
Для решения этих задач могут использоваться объекты дан-
ных B&R (Data Objects). Сохранение файлов, объектов дан-
ных, а также запись в них данных могут осуществляться
непосредственно в среде Automation Studio. Во время выпол-
нения программы для этих объектов данных производится
мониторинг контрольных сумм,
Image 24: Объекты данных B&R
который позволяет обнаружить повреждение данных. Соот-
ветствующая информация заносится в Logger.

Programming \ Data objects


Programming \ Data objects \ Simple data objects in B&R data object syntax
Programming \ Libraries \ Data access and data storage \ DataObj
Programming \ Examples \ Libraries \ Data access and data storage \ Data storage
Real-time operating system \ Method of operation \ Module / data security

Использование библиотеки DataObj

1) Создайте объект данных.

В окне Logical View среды Automation Studio создайте объект данных "param".

2) Введите данные в формате структуры recipe_typ.

Руководствуясь указаниями встроенной справочной документации Automation Studio, введите


данные в объект данных в формате структуры recipe_typ.

3) Считайте содержимое.

Используя функциональные блоки DatObjInfo() и DatObjRead(), считайте данные из объекта


данных.

4) Проанализируйте данные.

Определите, совпадают ли считанные данные с данными, которые были введены в объект


данных. Не забудьте про выравнивание.

TM250 - Управление памятью и хранение данных 47


Хранение и управление данными

6.3 Хранение файлов в файловой системе

Не всегда данные остаются в одной и той же системе. Файлы представляют собой один из спосо-
бов для хранения и передачи данных. Библиотека FileIO позволяет получить доступ к внутренней
файловой системе, USB-флеш-накопителям или сетевым ресурсам.

При этом решаются следующие задачи:


• доступ к файловой системе контроллера;
• управление директориями;
• поиск директорий;
• создание, чтение и запись файлов;
• доступ к USB-накопителям;
• доступ к сетевым папкам;
• доступ к FTP-серверу по сети.

Image 25: Возможности библиотеки


FileIO

Чтобы получить доступ к файловой системе, для места хранения необходимо задать
символическое обозначение. С этой целью используются файловые устройства. Файло-
вое устройство обозначается определенным именем (например, RECIPES, которое ука-
зывает на определенное место (например, F:\Recipes\).
Файловые устройства могут создаваться в системной конфигурации Automation Studio
или с помощью функционального блока DevLink().

Programming \ Libraries \ Data access and data storage \ FileIO


Programming \ Libraries \ Data access and data storage \ FileIO \ General information \ File
devices, files and directories
Programming \ Examples \ Libraries \ Data access and data storage \ Data storage

Использование библиотеки FileIO

1) Создайте текстовый файл.

С помощью программы «Блокнот» создайте текстовый файл и введите в него какой-нибудь


текст.

2) Скопируйте текстовый файл на карту памяти CompactFlash.

Скопируйте файл на карту памяти CompactFlash. Доступ к карте памяти CompactFlash может
быть обеспечен посредством FTP, а также с помощью CompactFlash адаптера. В эмуляторе
контроллера ARSIM диск "С" является жестким диском используемого компьютера.

3) Считайте содержимое файла.

48 TM250 - Управление памятью и хранение данных


Хранение и управление данными

Реализуйте конечный аппарат. Определите перечислимый тип данных, который будет отра-
жать состояния конечного автомата. Напишите программу, которая открывает файл, считы-
вает его содержимое и затем закрывает.

При хранении данных на карте памяти CompactFlash необходимо обеспечить, чтобы они
находились в пользовательском разделе. В обычной файловой системе это диск D:\, в
защищенной файловой системе — диск F:\. Использование различных разделов позво-
ляет разграничить операционную систему, приложение и пользовательские данные.
Карта памяти CompactFlash может быть разбита на разделы при подготовке ее в среде
Automation Studio / Runtime Utility Center.

Diagnostics and service \ Service tool \ Runtime Utility Center \ Creating a list / data medium
\ Creating a CompactFlash card

6.4 Базы данных

Объекты данных и файлы обеспечивают простой способ хранения и архивирования данных.


Также часто требуется интегрировать систему в существующую IT-инфраструктуру, для чего тре-
буется доступ к базам данных. Для создания подключения к базам данных SQL может использо-
ваться библиотека AsDb.

Programming \ Libraries \ Data access and data storage \ AsDb

TM250 - Управление памятью и хранение данных 49


Передача данных и связь

7 ПЕРЕДАЧА ДАННЫХ И СВЯЗЬ

Тема передачи данных и связи является довольно сложной и затрагивает несколько различных
областей. Прежде чем приступить к реализации задачи рекомендуется ознакомиться с различ-
ными аспектами, которые будут при этом затронуты.
Вопросы, на которые необходимо ответить в отношении передачи данных и связи:
• Какие данные должны передаваться?
• С какой станцией устанавливается связь?
• В качестве станции используется ПК или контроллер?
• Какая используется среда передачи?
• Какой используется протокол передачи?
• Какой используется формат данных?
• Используется одна или несколько платформ?
• Имеется ли стандартная библиотека, которая поддерживает необходимый протокол?
• Используется ли полевая шина (промышленная сеть)?
• Какой объем данных должен передаваться?
• Какие требования предъявляются к скорости передачи и времени отклика?

Этот список вопросов позволяет выявить проблемы, которые


должны быть устранены до начала работ по реализации реше-
ния.
Описание доступных типов связи приведено в справочной до-
кументации Automation Studio.
Кроме того, приводится информация о средствах передачи и
протоколах, а также конфигурациях и библиотеках, которые мо-
гут использоваться.

Communication Image 26: Справочная документация


Automation Studio — Связь
Programming \ Libraries \ Communication

7.1 Общая информация о связи

Если более подробно рассмотреть, каким образом осуществля-


ются соединения и как отдельные компоненты объединяются
в сеть, то станет ясно, что существуют различные топологии и
методы доступа. Топология указывает на тип соединения, ис-
пользуемого для обеспечения связи.
Методы доступа описывают, каким образом различные станции
в сети взаимодействуют друг с другом. Каждая станция в сети
имеет уникальный идентификатор (номер станции или узла, IP
или MAC-адрес). Среда часто определяет топологию, которая
будет использоваться, но не обязательно метод доступа.
Image 27: Модель взаимодействия
Часто используемые топологи: открытых систем (OSI)
• «точка-точка»
• линия,

50 TM250 - Управление памятью и хранение данных


Передача данных и связь

• дерево,
• звезда,
• шина,
• кольцо.

Часто используемые методы доступа:


• ведущий-ведомый,
• Token Ring,
• CSMA/CA,
• CSMA/CD,
• резервирование времени (time slot),
• клиент-сервер.

Наиболее распространенные интерфейсы:


• RS232 / RS485 / RS422 (последовательная передача
данных),
• CAN,
• Ethernet.

Топология «точка-точка»
При соединении точка-точка, как правило, имеются ведущее и ведомое устройства. Ведущее
устройство выдает команды ведомому, которое отвечает на них или выполняет их.

Сеть
Сеть обычно состоит из нескольких станций. Станции внутри сети координируют свою работу в
зависимости от метода доступа. Например, некоторые методы доступа осуществляют обнаруже-
ние и разрешение коллизий (например, CSMA/CD).
Также есть методы доступа, которые предотвращаются возникновение коллизий (например,
CSMA/CA). Например, POWERLINK использует метод, основанный на выделении временных ин-
тервалов, что также позволяет предотвратить возникновение коллизий. Предотвращение колли-
зий позволяет передавать данные в режиме реального времени.

Системы на базе полевой шины (промышленной сети)


Данные системы применяются в тех случаях, когда соединение устройств с контроллером осу-
ществляется с помощью полевой шины. В среде Automation Studio подключаемые к полевой шине
устройства добавляются и настраиваются непосредственно в окне ведущего устройства полевой
шины. Описание устройства, как правило, предоставляется в файле универсального формата
(.eds, .gsd, .xdd), который может быть импортирован непосредственно в среду Automation Studio.

Communication \ Fieldbus systems

TM250 - Управление памятью и хранение данных 51


Передача данных и связь

7.2 Протоколы

Протокол связи определяет, каким образом данные должны передаваться от устройства "A" в
устройство "B". Оба устройства должны поддерживать протокол передачи данных, знать струк-
туру передаваемых данных и как ими оперировать. Кроме того, данные должны передаваться в
соответствующем формате, то есть оба устройства, передающее и приемное, должны понимать
используемый формат данных.
Протокол включает в себя следующие элементы:
• идентификатор передающего устройства,
• адрес получателя (приемного устройства),
• объем данных,
• сами данные,
• контрольные суммы.

Используемый протокол не обязательно должен быть каким-либо образом связан с опре-


деленной технологией передачи. Например, протокол CANopen может использоваться
для передачи не только по шине CAN.
В частности, механизмы протокола CANopen полностью интегрированы в POWERLINK.

Communication

7.3 Библиотеки поддержки связи

В среду Automation Studio включены стандартные библиотеки, которые обеспечивают поддержку


связи. У всех функциональных блоков имеется вход "enable" и выход "status". Значения выходов
"status" определены константами, которые описаны в справочной документации соответствую-
щей библиотеки.
При использовании функциональных блоков поддержки связи интерфейс, как правило, требует-
ся открыть или проинициализировать. Далее должно быть установлено соединение с другими
станциями. Если связь больше не требуется, производится разрыв соединения и/или закрытие
интерфейса.

Programming \ Libraries \ Communication


Programming \ Examples \ Libraries \ Communication
Diagnostics and service \ Error numbers \ AR system

52 TM250 - Управление памятью и хранение данных


Передача данных и связь

Возможности приложения
Использование библиотек поддержки связи позволяет реализовывать множество различных при-
кладных сценариев. Например, библиотека AsTcp обеспечивает настройку и контроль соедине-
ния по протоколу управления передачей TCP (Transmission Control Protocol). К контроллеру B&R
могут быть подключены устройства сторонних производителей, например, контроллеры или Ин-
тернет-камеры.

Связь по протоколу TCP/IP

1) Определите данные.

Используйте данные из своего проекта. Убедитесь в иден-


тичности структуры и формата передаваемых данных и дан-
ных станции, с которой устанавливается связь.
Image 28: Связь по протоколу TCP
2) Импортируйте типовой проект.

Импортируйте типовой проект LibAsTCP1_ST.

3) Установите соединение с другим устройством.

4) Протестируйте линию связи.

5) Смоделируйте сценарии, при которых происходит обрыв


линии связи.

Разорвите связь с каждым контроллером по очереди и про-


верьте, восстановится ли она автоматически программой
связи.

TM250 - Управление памятью и хранение данных 53


Итог

8 ИТОГ

Всем, кто занимается проектированием систем, постоянно приходится иметь дело с данными.
Очень большое значение имеет то, как эти данные организованы в системе. В этой связи приме-
няют основные типы данных, массивы и структуры, которые определяют принципы хранения и
передачи данных.

Image 29: Память и переменные Image 30: Обработка и хранение


Image 31: Связь и обмен данными
данных

Данные могут храниться в файлах, областях памяти или объектах данных. В этих случаях необ-
ходимо определить формат, используемый для хранения данных. Для передачи данных также
необходимо определить формат данных и протокол передачи. Эта информация должна быть из-
вестна обеим станциям — передающей и принимающей.
Данные должны оставаться неизменными во время процесса передачи или сохранения.

54 TM250 - Управление памятью и хранение данных


Обучающие курсы (тренинг-модули)

ОБУЧАЮЩИЕ КУРСЫ (ТРЕНИНГ-МОДУЛИ)

TM250 - Управление памятью и хранение данных 55


www.br-automation.com
TM250TRE.00-ENG / V1.3.0.4
©2013/11/08 B&R. Все права защищены.
Все зарегистрированные товарные знаки являются собственностью соот-
ветствующих владельцев.
Возможны изменения без предварительного уведомления.