Бакалавр
Дипломные и курсовые на заказ

Доступ к полям блока данных

РефератПомощь в написанииУзнать стоимостьмоей работы

Абсолютный доступ к блокам данных В этом случае доступ похож к случаю обращения памяти CPU. Сначала задается идентификатор DB, сопровождаемый ключевым словом «D», потом префикс размера (например, X — для бита) и, наконец, адрес относительно начала DB. DWord := DB2. D11; //Обращение к двойному слову б) Индексированный доступ к блокам данных Индексированный доступ состоит из идентификатора DB… Читать ещё >

Доступ к полям блока данных (реферат, курсовая, диплом, контрольная)

Имеется различные способа доступа к полям блока данных. Ниже рассмотрим этих способов.

а) Абсолютный доступ к блокам данных В этом случае доступ похож к случаю обращения памяти CPU. Сначала задается идентификатор DB, сопровождаемый ключевым словом «D», потом префикс размера (например, X — для бита) и, наконец, адрес относительно начала DB.

Пример:

Bit := DB2. DX13.1; //Обращение к биту.

Byte := DB2. DB10; //Обращению к байту.

Word := DB2. DW20; //Обращение к слову.

DWord := DB2. D11; //Обращение к двойному слову б) Индексированный доступ к блокам данных Индексированный доступ состоит из идентификатора DB, идентификатора адреса (ключевое слово «D» и префикс размера) и индекса.

Пример

Bit := DB2. DX[Word_No, Bit_No]; //Обращение к биту.

Word := DB2. DW[5]; //Обращение к слову в) Структурированный доступ к блокам данных В этом случае для обращения к полям блока данных используется составное имя, разделенное с помощью точки. Например, для обращения к полю Val аналогового сигнала An[2] в блоке данных DB_Analog может использоваться следующее составное имя:

Val := DB_Analog.An[2]. Val;

Пример. Обработка:

FOR i:=1 TO 6 BY 1 DO.

Берем ссылку на текущий An из массива DB_Analog:

An := DB_Analog.An[i];

Формирование значения аналогового сигнала:

IF I0.0 = 0 THEN An. Val := 0.0; END_IF;

IF I0.0 = 1 THEN An. Val := 200.0; END_IF;

Проверка на аварийный уровень:

IF An. Val < An. rAlarmMin THEN An. bAlarmMin := 1; END_IF;

IF An. Val > An. rAlarmMax THEN An. bAlarmMax := 1; END_IF;

Если входим на диапазон, то аварийный сигнал снимаем:

IF An. Val > (An.rAlarmMin*1.05) THEN An. bAlarmMin := 0; END_IF;

IF An. Val < (An.rAlarmMax*0.95) THEN An. bAlarmMax := 0; END_IF;

Сохраняем обратно в блоке данных:

DB_Analog.An[i]: =An;

END_FOR;

Пример:

FUNCTION_BLOCK FB3.

VAR.

AUXVAR: REAL ;

MEASVAL: STRUCT //Структура для записи данных.

VOLTAGE:REAL ;

RESISTANCE:REAL ;

SIMPLEARR: ARRAY [1.2, 1.2] OF INT ;

END_STRUCT ;

PROCVAL: STRUCT //Структура для исходных данных.

VOLTAGE: REAL ;

RESISTANCE: REAL ;

SIMPLEARR: ARRAY [1.2, 1.2] OF INT ;

END_STRUCT ;

END_VAR.

BEGIN.

Присвоение структуры в целом:

MEASVAL := PROCVAL ;

Присвоение компонента структуры компоненту структуры:

MEASVAL.VOLTAGE := PROCVAL. VOLTAGE ;

Присвоение компонента структуры переменной того же типа:

AUXVAR := PROCVAL. RESISTANCE ;

Присвоение константы компоненту структуры:

MEASVAL.RESISTANCE := 4.5;

Присвоение константы элементу массива в структуре:

MEASVAL.SIMPLEARR[1,2] := 4;

END_FUNCTION_BLOCK.

Вызов функциональных блоков.

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

Вызов глобальным блоком данных В команде вызова определяются:

  • * Имя функционального блока,
  • * Блок данных,
  • * Параметры функционального блока.

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

Пример. Абсолютный вызов функции:

FB10.DB20 (X1:=5,X2:=78,…);

Пример. Символический вызов функции:

DRIVE.ON (X1:=5,X2:=78,…);

Вызов как локального экземпляра FB.

В команде вызова определяются:

  • * Имя локального экземпляра
  • * Параметры FB

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

MOTOR (X1:=5,X2:=78,…);

Задание параметров функционального блока При вызове функционального блока Вы можете задать следующие параметры:

  • * Входные параметры
  • * Вход/выходные параметры

При вызове FB выходные параметры определять не нужно.

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

  • * Присвоения могут идти в любом порядке.
  • * Типы формальных и фактических параметров должны совпадать.

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

Пример:

FUNCTION_BLOCK TEST // Функц. блок TEST = FB17.

VAR_INPUT.

FINALVAL: INT; //Входной параметр

END_VAR.

VAR_IN_OUT.

IQ1: REAL; // Вход/выходной параметр

END_VAR.

VAR_OUTPUT.

CONTROL: BOOL; // Выходной параметр

END_VAR.

VAR.

INDEX: INT;

END_VAR.

BEGIN.

CONTROL :=FALSE;

FOR INDEX := 1 TO FINALVAL DO.

IQ1 :=IQ1*2;

IF IQ1 > 10 000 THEN.

CONTROL := TRUE;

END_IF;

END_FOR;

END_FUNCTION_BLOCK.

Вызов.

Для вызова FB, Вы можете выбрать один из следующих вариантов. Предполагается, что переменная VARIABLE1 была объявлена в вызывающем блоке как REAL.

Абсолютный вызов, глобальный экземпляр:

FB17.DB10 (FINALVAL:=10, IQ1:=VARIABLE1);

Символический вызов, глобальный экземпляр:

TEST.TEST1 (FINALVAL:=10, IQ1:= VARIABLE1);

После исполнения блока величина, вычисленная для входного/выходного параметра IQ1, доступна через переменную VARIABLE1.

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

Выходной параметр доступен через:

RESULT:= DB10. CONTROL;

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

FB17.DB12 (INP1:=DB10.CONTROL);

Пример.

FOR i:=1 TO 6 BY 1 DO.

Берем ссылку на текущий An из массива DB_Analog.

An := DB_Analog.An[i];

Формирование значения аналогового сигнала:

IF I0.0 = 0 THEN An. Val := 0.0; END_IF;

IF I0.0 = 1 THEN An. Val := 200.0; END_IF;

Проверка на аварийный уровень:

IF An. Val < An. rAlarmMin THEN An. bAlarmMin := 1; END_IF;

IF An. Val > An. rAlarmMax THEN An. bAlarmMax := 1; END_IF;

Если входим на диапазон, то аварийный сигнал снимаем:

IF An. Val > (An.rAlarmMin*1.05) THEN An. bAlarmMin := 0; END_IF;

IF An. Val < (An.rAlarmMax*0.95) THEN An. bAlarmMax := 0; END_IF;

Сохраняем обратно в блоке данных:

DB_Analog.An[i]: =An;

END_FOR;

Показать весь текст
Заполнить форму текущей работой