ГОСТ Р МЭК 61131-3—2016
1
6.4.4.10.3 Операции с указателями
Оператор REF() возвращает указатель на заданную переменную или экземпляр. Ссылочным ти
пом данных возвращенного указателя является тип данных заданной переменной. Применение опе
ратора REF() к временной переменной (например, переменным любой секции VAR_TEMP или любым
переменным внутри функций) не разрешается.
Указатель может быть присвоен другому указателю, если его ссылочный типданных эквивалентен
базовому типу или является ссылочным типом данных присвоенного указателя.
Указатели могут присваиваться параметрам функций, функциональных блоков и методов в вы
зове. если ссылочный тип данных параметра эквивалентен базовому типу или является базовым типом
ссылочного типа данных. Ссылки не могут использоваться как входные-выходные переменные.
Если указатель присвоен указателю такого же типа данных, то последний ссылается на ту же
самую переменную. В таком случае, прямо порожденный тип данных рассматривается также, как его
базовый тип.
Если указатель присваивается указателю на такой же тип функционального блока или базовый
тип функционального блока, то затем этот указатель указывает на тот же самый экземпляр, но является
все еще связанным со своим типом функционального блока, то есть может использовать только пере
менные и методы своего ссылочного типа данных.
Разыме ювание указателей осуществляется явно.
Указатель разыменовывается использованием предшествующего символа крышки «А».
Разыменованный указатель может использоваться так же. как прямо используется переменная.
Разыменованный указатель на NULL является ошибкой.
Примечание 1— Возможные проверки указателей на NULLможетпроизводиться во время компиляции,
системой поддержки выполнения программы или прикладной программой.
Конструкция REF() и оператор разыменования «Л» используются в графических языках при опре
делении операндов.
Примечание 2 — Арифметические операции суказателями не рекомендуются и не входят в задачу на
стоящегостандарта.
Пример 1
TYPE
S1: STRUCT
SC1:INT;
SC2: REAL;
END_STRUCT;
A1: ARRAY[1..99] OFINT;
END_TYPE
VAR
myS1: SI;
myA1:A1;
myRefSh REF_TOS I.- REF(mySI);
myRefAl: REF_TOA1:= REF(myA1);
myReflnt: REF_TOINT:- REF(myA1[1J);
END_VAR
myRefS1*.SC1:= myRef A1Л[12]; //в данном случае, это эквивалентно S1.SC1:=A1[12J;
myReflnt.- REF(A1[11]);
S1.SC1:=myReflnt’’;//присваивает значение переменной АЦ11] элементу структуры S1.SC1
33