26. Прямой доступ к переменным
26 - 10 Automating with STEP 7 in STL and SCL
Автоматизация посредством STEP 7
с использованием STL и SCL
Тем не менее, с помощью указателя на область (area-pointer) как
параметра блока Вы не можете получить доступ ни к каким константам
или к операндам, расположенным в блоках данных. По этой причине еще
на этапе компилирования редактор копирует константы или фактические
параметры, размещенные в блоке данных (операнд с полным адресом), в
область временных локальных данных выз ывающего блока и
"направляет" указатель (area-pointer) на эти копии данных. Подобная
область параметров называется "V" (временные локальные данные
"предыдущего" блока или V-область).
Перед текущим вызовом функции FC имеет место копирование в V-
область данны х, полученных при вызове функции: входных параметров и
вхо дны х-выходных параметров, а после вызова функции имеет место
копирование возвращенных вхо дны х-выходных параметров, выходных
параметров, а также значения функции. Поэтому здесь действует
правило, согласно которому Вы можете только проверить входные
параметры и сделать запись в выходные параметры. Если Вы пере даете
значение во входной параметр, используемый в операнде с полным
адресом, то это значение будет сохранено во временных локальных
данных вызывающего блока и будет в дальнейшем "забыто" (утеряно), так
как в дальнейшем не будет никакого "обратного" копирования в
"фактическую" ("actual") переменную в блоке данных. Похожая история и с
загрузкой соответствующего выходного параметра: так как никакого
копирования не происходит из фактической переменной из блока данных
в V-область, Вы сможете загрузить (load) лишь "неопреде ленное"
значение из V-области в данном случае.
Из-за операции копирования выходной параметр, как и значение функции,
должен быть перезаписан определенным значением при простом типе
данных в блоке, если операнд с полным адресом рассматривается или
может рассматриваться как фактический параметр. Если Вы не
назначаете значения для выходного параметра (например, из-за
преждевременного выхо да из блока или из-за обхо да в программе
соответствующей инструкции), значение во временных локальных данны х
также не будет инициализировано. Оно будет иметь значение, которое
имело место перед вызовом блока. В дальнейшем выходной параметр
будет перезаписан этим "неопределенным" значением.
В случае сложных типов данны х, таких как DT, STRING, ARRAY, STRUCT,
а также UDT, фактические параметры размещаются или в блоке данных,
или в V-области. Так как указатель на область (area-pointer) не может
обеспечить д оступ к фактическим параметрам в блоке данны х, то
редактор создает DB-указатель в V-области во время процесса
компиляции. Этот DB-указатель указывает на фактический параметр в
блоке данных (если номер DB не равен 0), или указывает на V-область
(если номер DB равен 0). DB-указатели для всех объявленных типов в V-
области создаются до фактического вызова функции FC.
В сл учае типов параметра, таких как TIMER, COUNTER и BLOCK_xx,
параметр блока содержит номер (16-разрядное число, располагающееся с
выравниванием влево в 32-разрядном параметре) вместо указателя на
область (area-pointer).
В случае, если тип параметра POINTER, то параметр обрабатывается
точно также, как данные сложных типов.
В случае, если тип параметра ANY, то редактор создает 10-байтовый
ANY-указатель в V-области, который указывает на любую (ANY)