WWW.DISS.SELUK.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА
(Авторефераты, диссертации, методички, учебные программы, монографии)

 

Pages:     | 1 |   ...   | 5 | 6 || 8 | 9 |   ...   | 12 |

«Автоматизация посредством STEP 7 с использованием STL и SCL и программируемых контроллеров SIMATIC S7-300/400 (Automating with STEP 7 in STL and SCL by Hans Berger) Перевод по изданию 2-му, исправленному 2001 SIMATIC ...»

-- [ Страница 7 ] --

Вы включите MCR-зависимость в зоне, если RLO равен "0" непосредственно перед открытием зоны (аналогично выключению главного управляющего реле MCR). Если открытие MCR-зоны происходит при RLO, равном "1" (главное управляющее реле MCR включается), то обработка программы в такой MCR-зоне выполняется без MCRзависимости.

17. Главное управляющее реле MCR В этом примере переменная Input0 = "0" сбрасывает содержимое адреса Output0 в "0". Если Input0 имеет состояние "1", то содержание адреса Output0 будет зависеть только от Input1 и Input2.

17.2 MCR-область (MCR Area) Для того, чтобы использовать функции главного управляющего реле (MCR), Вы должны определить область его действия - MCR-область (MCR Area) с помощью операторов MCRA и MCRD. MCR-зависимость активна внутри MCR-области (но пока еще не включена) Оператор MCRA определяет начало MCR-области, а оператор MCRD закрывает эту область. Если Вы вызываете блок внутри MCR-области, то MCR-зависимость является деактивированной в вызванном блоке (см.

рис. 17.1). MCR-область начинается снова только с появлением нового оператора MCRA. Когда по окончании обработки вызванного блока управление возвращается в вызывающий блок, MCR-зависимость вновь будет находиться в том состоянии, в котором она находилась до вызова блока, независимо от состояния MCR-зависимости при окончании

MCRD MCRD

Рис. 17.1 MCR-область в случае вызовов блоков Автоматизация посредством STEP с использованием STL и SCL 17.3 MCR-зона (MCR Zone) Вы можете определить MCR-зону (MCR Zone) с помощью операторов MCR( и )MCR. Внутри MCR-зоны Вы можете включать MCR-зависимость Операторы MCR( и )MCR заканчивают двоичную логическую операцию Вы можете открыть другую MCR-зону внутри MCR-зоны. Глубина вложения для MCR-зон может достигать 8, что означает, что Вы можете открыть до 8 зон перед тем, как должны будете закрыть зону.

Если MCR-зона открыта, Вы можете управлять MCR-зависимостью включенной MCR-зоны с помощью RLO. Однако, если MCR-зависимость включена в MCR-зоне верхнего уровня, Вы не сможете выключить MCRзависимость в MCR-зоне нижнего уровня. Главное управляющее реле (MCR) первой MCR-зоны управляет MCR-зависимостью во всех включенных зонах (см. рис. 17.2).

Рис. 17.2 MCR-зависимость в случае вложенных MCR-зон 17. Главное управляющее реле MCR Вызов блока внутри MCR-зоны не изменяет глубины вложения MCR-зоны.

Программа в вызванном блоке находится все еще в MCR-зоне, которая была в открытом состоянии, когда был вызван блок (и управляется из нее). Тем не менее, Вы должны вновь активировать MCR-зависимость в вызванном блоке с помощью открытия MCR-области оператором MCRA На рис. 17.3 адреса Input5 и Input6 управляют MCR-зависимостью.

Посредством адреса Input5 Вы можете включить MCR-зависимость в обоих зонах (сигналом "0"), независимо от состояния адреса Input6. Если MCR-зависимость зоны 1 выключается посредством Input5 = "1", то Вы можете управлять MCR-зависимостью в зоне 2 посредством адреса Input Таблица 17.1 Пример управления MCR-зависимостью в случае Автоматизация посредством STEP с использованием STL и SCL 17.4 Установка и сброс битов периферии (I/O битов) При включенной MCR-зависимости Вы можете устанавливать (Set) и сбрасывать (Reset) биты в области I/O с помощью системных функций.

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

Системная функция SFC 79 SET предназначена для установки I/O битов, а системная функция SFC 80 RSET предназначена для их сброса (см.

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

Таблица 17.2 Параметры SFC для управления I/O-битами

SA OUTPUT POINTER

SA OUTPUT POINTER

При выполнении установки и сброса I/O-битов одновременно обновляются выходы из области отображения процесса по выходам.

Периферийные входы/выходы (I/O) управляются побайтно (байт за байтом). Биты, не выбранные с помощью SFC-функций, (в первом и в последнем байте) сохраняют состояние сигнала, так как они доступны в В данном примере вызов функции SFC 79 SET устанавливает I/O-биты, соответствующие выходам Q 12.0... Q 12.7; вызов функции SFC 80 RSET сбрасывает I/O-биты, соответствующие выходам Q 13.5... Q 15.5.

17. Главное управляющее реле MCR Параметр N определяет число битов, которые должны быть обработаны, а параметр SF определяет первый бит (тип "указатель" - POINTER) из числа битов, которые должны быть обработаны. Указанные функции SFC используют также параметр RET_VAL, в котором они возвращают информацию об ошибках, которые возникли при выполнении функций.

Автоматизация посредством STEP с использованием STL и SCL 17. Главное управляющее реле MCR 17 - 8 Automating with STEP 7 in STL and SCL Автоматизация посредством STEP 18 Функции блоков (Block Functions) Из этой главы Вы узнаете, как вызывать и завершать обработку кодовых блоков, а также, как работать с адресами из блоков данных при использовании языка программирования STL. В следующей главе будут рассмотрены параметры блоков и использование этих параметров.

Данная глава является продолжением раздела 3.4 "Программирование кодовых блоков на STL" и раздела 3.6 "Программирование блоков Как вызываются блоки при использовании языка программирования SCL, Примеры, рассматриваемые в данной главе, Вы можете найти на прилагаемой дискете в библиотеке STL_Book в разделе "Program Flow Control" ("Управление выполнением программы") в функциональном блоке 18.1 Функции для кодовых блоков К функциям для кодовых блоков относятся инструкции для вызова и завершения обработки блоков (см. табл. 18.1).



Таблица 18.1 Функции для кодовых блоков Вызов функционального блока С блоком данных и с Как локальный экземпляр и Вызов функции Со значением функции и с Без значения функции, но Операторы завершения блока Условное завершение Безусловное завершение обработки блока обработки блока

BEC BEU BE

Автоматизация посредством STEP с использованием STL и SCL Кодовые блоки вызываются для обработки с помощью оператора CALL.

Вы можете передавать данные в вызываемый блок и можете также получать данные от вызываемого блока. Такая передача данных выполняется с помощью параметров блока. С оператором CALL в вызываемый блок пересылаются параметры блока, а также открывается экземплярный блок данных в случае вызова функционального блока. Если кодовые блоки не имеют параметров, то их можно вызвать посредством операторов UC или CC. Обработка блока прекращается посредством оператора конца блока.

18.1.1 Вызов блока: общая информация Если кодовый блок должен быть обработан, он должен быть "вызван".

На рис. 18.1 показан пример вызова функции FC 10 в организационном Вызов блока с назначением Рис. 18.1 Пример вызова блока Вызов блока состоит из оператора вызова (в примере: CALL FC 10) и списка параметров. Если вызываемый блок не имеет параметров, инструкция вызова не будет иметь списка параметров. После выполнения оператора вызова CPU продолжает выполнение программы в вызываемом блоке (в примере: FC 10). Программа блока обрабатывается, пока не встретится оператор окончания блока. По окончании вызванного блока CPU возвращается к выполнению программы в вызывающем блоке (в примере: OB 1); выполнение этой программы продолжается со следующего оператора после оператора вызова блока. Если завершается выполнение программы организационного блока, CPU передает 18. Функции блоков управление операционной системе.

Информация, которая требуется CPU для возврата в вызывающий блок, сохраняется в стеке блоков (B-стек [B stack]). При каждом вызове блока в B-стеке генерируется новый элемент стека, который содержит адрес возврата, содержимое регистра данных и адрес стека локальных данных вызывающего блока. Если CPU переходить в состояние STOP в результате ошибки, Вы можете использовать программатор для того, чтобы увидеть в B-стеке информацию о том, какие блоки обрабатывались до момента возникновения ошибки.

Параметры блока являются интерфейсом данных для вызываемого блока. Рекомендуется избегать передачи данных посредством внутренних регистров (например, посредством аккумуляторов, адресных регистров, RLO), так как содержимое этих регистров может быть изменено при смене текущего блока (в результате "скрытых" операторов, инициированных 18.1.2 Оператор вызова блока CALL С помощью оператора вызова блока CALL Вы можете вызывать функциональные блоки FB, функции FC, системные функциональные блоки SFB, системные функции SFC. Оператор вызова блока CALL является безусловным вызовом, что означает, что заданный блок всегда вызывается и обрабатывается, несмотря ни на какие условия. (Вы не можете вызывать организационные блоки; организационные блоки вызываются операционной системой, в зависимости от события).

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

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

В инструкции вызова может быть список параметров блока. При вводе исходного текста программы список параметров блока помещается между круглыми скобками; в списке параметры блока должны быть Неинициализированные параметры блока сохраняют свои текущие значения. Если Вы не задаете никаких параметров, то скобки также не вводятся при вводе исходного текста программы.

"мультиэкземплярные" ("multi-instance-capable"), Вы можете также вызывать эти блоки, как локальные экземпляры внутри других "мультиэкземплярных" функциональных блоков. Имеется в виду, что вызванный функциональный блок использует экземплярный блок данных вызывающего функционального блока для сохранения своих собственных Автоматизация посредством STEP с использованием STL и SCL В таком случае Вы должны объявить локальный экземпляр в статических локальных данных вызывающего функционального блока, и после этого Вы можете вызывать функциональный блок в программе (без определения экземплярного блока данных). Локальный экземпляр трактуется как сложный тип данных внутри функционального блока "верхнего уровня". Более подробно материал изложен в разделе 18.1. "Статические локальные данные".

Вызов функций Вы можете вызывать функции FC, задав идентификатор функции после оператора CALL, или абсолютным способом, или символьным. Далее в инструкции вызова следует список параметров. При вводе исходного текста программы список параметров блока помещается между круглыми скобками; в списке параметры блока должны быть разделены запятыми.

При вызове функции Вы должны инициализировать все параметры; тем не менее, параметры могут следовать в любом порядке. Вызываемые функции с функциональным значением имеют точно такую же форму, как и функции без функционального значения. Единственный выходной параметр, соответствующий функциональному значению, имеет имя Вызов системных блоков Операционная система CPU содержит системные функции SFC и системные функциональные блоки SFB, доступные пользователю. Число и тип системных блоков определяется типом CPU. Все системные блоки вызываются оператором CALL.

Вы можете вызывать системные функциональные блоки таким же образом, как и те блоки, которые Вы можете написать сами; Вы должны расположить связанный экземплярный блок данных в пользовательской памяти (user memory) с типом данных SFB. Вы можете также вызывать системные функции таким же образом, как и функции, которые Вы можете Системные блоки доступны только в операционной системе CPU. При вызове системных блоков во время программирования в автономном (offline) режиме, редактору требуется описание интерфейса вызова для того, чтобы было возможно инициализировать параметры. Описание интерфейса расположено в стандартной библиотеке Standard library в системных функциональных блоках System Function Blocks. Отсюда редактор копирует описание интерфейса в папку (раздел) автономного режима "Blocks", когда Вы вызываете системный блок. После этого скопированное описание интерфейса вызова появляется как "нормальный" объект блока.

18.1.3 Операторы вызова UC и CC Вы можете вызывать функциональные блоки и функции с помощью операторов вызова UC и CC. При этом требуется, чтобы вызываемые функции не имели параметров блоков и вызываемые функциональные блоки не имели экземплярного блока данных и, следовательно, не имели параметров блоков и статических локальных данных. Тем не менее, редактор не проверяет, выполняются ли эти условия.

18. Функции блоков Для вызова Вы можете использовать операторы UC и CC, если блок слишком большой и недостаточно удобен для понимания. При этом блок просто разбивается на отдельные фрагменты, после чего эти фрагменты вызываются последовательно. Операторы вызова UC и CC не различают функции FC и функциональные блоки FB. Оба типа блоков обрабатываются одинаковым образом.

Оператор вызова UC является безусловным оператором, что означает, что UC вызывает блок вне зависимости от любых условий.

Оператор вызова CC является условным оператором, что означает, что CC вызывает блок только при условии, что результат логической операции (RLO) равен "1". Если RLO равен "0", то блок не вызывается, но RLO устанавливается в "1". После этого выполняется следующий за Влияние на индикаторные биты (биты условного кода "condition code"): бит состояния OS сбрасывается при смене текущего блока; на биты состояния CC0, CC1 и OV смена блока не влияет, тогда как бит состояния /FC при смене текущего блока сбрасывается, что означает, что новая логическая операция начинается с операции первичного опроса в новом блоке или следует за вызовом блока.

Влияние смены текущего блока на "стек скобок" ("binary nesting stack"): Вы можете вызывать кодовый блок внутри "двоичного выражения вложения".

Текущая глубина стека скобок не изменяется при смене блока. Возможная глубина стека в блоке, который может быть вызван внутри двоичного вложения (binary nest), следовательно, равен разности между максимально возможной глубиной и текущей глубиной вложения при Влияние смены текущего блока на главное управляющее реле MCR:

MCR-зависимость деактивируется при вызове блока. MCR выключается в вызванном блоке, независимо от того, было ли включено или не было включено MCR перед вызовом блока. При окончании обработки вызванного блока MCR-зависимость имеет то состояние, в котором она Влияние смены текущего блока на аккумуляторы и адресные регистры:

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

Влияние смены текущего блока на блоки данных: при вызове блока регистр блока данных сохраняется в B-стеке; оператор окончания блока сохраняет его содержимое при завершении обработки вызванного блока.

Блок глобальных данных и экземплярный блок, бывшие текущими перед вызовом блока также открываются после операции вызова блока. Если перед вызовом блока нет открытого блока данных (например, нет экземплярного блока данных в OB 1), то не будет также открытих блоков данных после операции вызова блока, независимо от того, какие блоки данных открыты в вызванном блоке.

Дополнительные возможности:

• косвенная адресация вызовов блоков FB и FC с помощью операторов • организация вызова с параметрами блока с помощью оператора Автоматизация посредством STEP с использованием STL и SCL • организация вызова с параметрами блока с помощью оператора вызова CC также и в функциональных блоках.

18.1.4 Функции окончания блока (Block End Functions) Оператор BEC завершает обработку программы в блоке, при этом зависит от состояния RLO, а операторы BEU и BE заканчивают блок независимо Оператор завершения блока по условию BEC Выполнение оператора BEC, завершающего обработку программы в блоке, зависит от состояния RLO. Если результат логической операции RLO = "1" при обработке оператора BEC, то функция окончания блока выполняется и обрабатываемый блок закрывается. При этом выполняется переход в ранее обрабатывавшийся блок, из которого был сделан вызов только что завершенного блока.

Если RLO = "0" при обработке оператора BEC, то функция окончания блока не выполняется. При этом CPU устанавливает RLO в состояние "1" и выполняется следующая за оператором BEC инструкция. Следующий запрограммированный оператор проверки (опроса) в любом случае является первичным опросом.

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

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

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

Оператор BE всегда является последним оператором в блоке.

Использование оператора BE является предметом выбора. При "инкрементном" программировании Вы завершаете программирование блока, закрыв блок; при программировании, ориентированном на ввод исходного текста программы, конец блока отмечается ключевым словом, например, END_FUNCTION_BLOCK вместо оператора BE.

18.1.5 Временные локальные данные Временные локальные данные используются для промежуточного 18. Функции блоков хранения результатов, получающихся при обработке программы блока.

Временные локальные данные доступны только во время обработки блока; после завершения блока эти данные теряются.

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

Первоначально при вызове блока значения в L-стеке носят "псевдослучайный" характер. Для того, чтобы эти значения отвечали реалиям, до того, как они будут считаны, необходимо их записать. После завершения обработки блока, L-стек назначается следующему Объем памяти, требуемый для размещения локальных данных для блока, указывается в заголовке блока. Таким образом операционная система узнает, сколько байт в L-стеке необходимо отвести для вызываемого блока. Вы также можете узнать из заголовка блока, сколько байт локальных данных требуется для блока (если блок открыт, в редакторе с помощью опций меню: File -> Properties (Файл -> Свойства), или в оболочке SIMATIC Manager при выбранном блоке с помощью опций меню:

Edit -> Object Properties (Правка -> Свойства объекта), информация и в том и в другом случае находится на вкладке "General - Part 2" ("Общие Часть 2")).

Объявление временных локальных данных Объявление временных локальных данных производится в разделе • при инкрементном программировании временные локальные данные помечаются в столбце "Declaration" ("Объявление") словом "temp" • при программировании, ориентированном на создание программы путем ввода исходного текста, временные локальные данные объявляются между ключевыми словами: VAR_TEMP и END_VAR.

На рис. 18.2 представлен пример объявления временных локальных данных. В примере переменная temp1, расположенная во временных локальных данных относится к типу INT, а переменная temp2 относится к Временные локальные данные сохраняются в L-стеке в порядке их объявления в соответствии с типами данных.

Более подробно материал о хранении данных в L-стеке изложен в разделе 26.2 "Хранение переменных".

Символьная адресация временных локальных данных Адресацию временных локальных данных можно производить с использованием символьных имен. Для этого данным должны быть назначены имена в соответствии с правилами, принятыми для символьных имен (символов) локальных для блока данных.

Все операции, которые действительны для меркеров, разрешены для временных локальных данных. Тем не менее, надо отметить, что биты из временных локальных данных непригодны для использования в качестве Автоматизация посредством STEP с использованием STL и SCL меркеров фронта, так как они не сохраняют состояние своего сигнала Address Declaration Name Type (адрес) (объявление) (имя) (тип) Рис. 18.2 Пример объявления локальных данных в функциональном блоке.

Вы можете получить доступ к временным локальным данным блока только непосредственно в самом блоке. (Исключение: к временным локальным данным вызывающего блока можно получить доступ через Размер L-стека Предельный размер для L-стека определяется типом CPU. Количество байтов временных локальных данных доступное в приоритетном классе, к которому относится программа организационного блока, также фиксировано. Для S7-300 размер L-стека фиксирован, например, 256 байт на приоритетный класс для CPU 314. При работе с S7-400 размер L-стека может настраиваться пользователем. Необходимое число байт отводится для временных локальных данных при параметризации CPU. Эта область памяти должна быть общедоступной для блоков, вызов которых производятся из соответствующего организационного блока и для блоков, которые вызываются, в свою очередь, из этих блоков.

Необходимо заметить в этой связи, что редактор также использует временные локальные данные, например, при передаче параметров блока. Вы не видите эти временные локальные данные в интерфейсе Стартовая информация (Start information) Операционная система CPU передает стартовую информацию (start организационного блока. Эта стартовая информация занимает размер памяти 20 байт в каждом организационном блоке и имеет почти идентичную структуру в каждом блоке. В главах 20 "Главная программа", 21 "Управление прерываниями", 22 "Параметры перезапуска" и 18. Функции блоков "Обработка ошибок" описывается назначение стартовой информации для отдельных организационных блоков.

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

Вы должны объявить эту стартовую информацию, при программировании организационного блока. Это обязательное условие. В стандартной библиотеке Standard Library имеются шаблоны для объявления на английском языке в Organization Blocks (Организационные блоки). Если Вам не требуется стартовая информация, то достаточно объявить первые 20 байт, например, как поле (как показано на рис. 18.3).

Инкрементное программирование (адрес) (объявление) (имя) (тип) *1. Рис. 18.3 Пример объявления локальных данных в организационном блоке.

Абсолютная адресация временных локальных данных Обычно адресация временных локальных данных производится с использованием символьных имен, а абсолютная адресация используется в исключительных случаях. Если Вы знакомы с тем, как хранятся данные в L-стеке, Вы можете выработать для себя способ адресации статических локальных данных. Вы также можете посмотреть адреса в таблице объявления переменных в скомпилированном блоке.

Идентификатором адреса для временных локальных данных является L;

при этом биты адресуются идентификатором L, байты - с помощью идентификатора LB, машинные слова - с помощью идентификатора LW, а двойные слова - с помощью идентификатора LD.

Для абсолютной адресации Вы планируете использовать 16 байтов временных локальных данных, к отдельным значениям которых в дальнейшем Вы желаете иметь доступ как в формате байта, так и побитно. Создайте данную область как поле прямо с начала области Автоматизация посредством STEP с использованием STL и SCL локальных данных с начальным адресом, равным 0.

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

Абсолютная адресация временных локальных данных возможна только при использовании базовых языков программирования STL, LAD и FBD.

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

В главе 26 "Прямой доступ к переменным" показано, как узнать адреса переменных во временных локальных данных во время выполнения Тип данных ANY Переменные временных локальных данных могут быть объявлены, как При использовании языка STL Вы имеете возможность сгенерировать указатель типа ANY, который может изменяться во время выполнения программы. Более подробную информацию Вы можете найти в разделе 26.3.3 ""Переменный" указатель ANY".

При использовании языка SCL Вы можете временной переменной типа ANY назначать адрес другой (сложной) переменной во время выполнения программы. Более подробную информацию Вы можете найти в разделе 29.2.4 "Временные локальные данные".

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

Статические локальные данные - это "память" функционального блока.

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

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

• при инкрементном программировании статические локальные данные помечаются в столбце "Declaration" ("Объявление") словом "stat" • при программировании, ориентированном на создание программы путем ввода исходного текста, статические локальные данные объявляются между ключевыми словами: VAR и END_VAR.

18. Функции блоков На рис. 18.2 в разделе 18.1.5 "Временные локальные данные" представлен пример объявления переменных в функциональном блоке.

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

Статические локальные данные сохраняются в экземплярном блоке после параметров блока в порядке их объявления и в соответствии с типами Более подробно материал о хранении данных в блоках данных изложен в разделе 26.2 "Хранение переменных".

Символьная адресация статических локальных данных Адресацию статических локальных данных можно производить с использованием символьных имен. Для этого данным должны быть назначены имена в соответствии с правилами, принятыми для символьных имен (символов) локальных для блока данных.

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

Функциональный блок "Totalizer" прибавляет входное значение (input value) к значению, сохраненному в статических локальных данных, (stored value) и после этого сохраняет сумму опять в статических локальных данных. При следующем вызове блока новое входное значение вновь будет прибавлено к сохраненному в статических локальных данных значению, после чего результат вновь будет сохранен, и так далее (см.

Total - это переменная в блоке данных "TotalizerData", который является экземплярным блоком данных для функционального блока "Totalizer" (Вы можете самостоятельно задавать имена всех блоков в таблице символов Symbol Table в соответствии с правилами). Экземплярный блок данных имеет структуру данных функционального блока. В данном примере экземплярный блок данных содержит две переменные формата INT с Доступ к статическим локальным данным со стороны функционального блока Статические локальные данные обычно обрабатываются только в функциональном блоке. Тем не менее, хранятся они в блоке данных.

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

В нашем маленьком примере блок данных имеет имя "TotalizerData", а переменная адресуется как Total. Доступ к переменной может иметь Автоматизация посредством STEP с использованием STL и SCL Рис. 18.4 Пример статических локальных данных и локальных экземпляров.

18. Функции блоков Локальные экземпляры При вызове функционального блока обычно для вызова назначается также экземплярный блок. Функциональный блок сохраняет свои параметры и свои статические локальные данные в этом экземплярном Начиная с STEP 7 V2, Вы можете создавать "мультиэкземпляры", что означает, что Вы можете вызывать одни функциональные блоки в других функциональных блоках. Статические локальные данные (и параметры блока) вызванного функционального блока являются подмножеством статических локальных данных вызывающего блока. Для этого требуется, чтобы вызываемый и вызывающий функциональные блоки имели версию 2, чтобы они могли быть обработаны в режиме "мультиэкземпляра".

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

Пример (рис. 18.4 (внизу)): В статических локальных данных функционального блока "Evaluation" объявлена переменная Memory, которая соответствует функциональному блоку "Totalizer" и имеет такую же структуру. Теперь Вы можете вызывать функциональный блок "Totalizer" посредством переменной Memory, без определения блока данных, так как данные для Memory размещены внутриблочно ("blocklocal") в статических локальных данных (Memory является "локальным экземпляром" блока "Totalizer").

Доступ к статическим локальным данным Memory в программе функционального блока "Evaluation" выполняется таким же способом, как и к компонентам структуры с определением имени структуры (Memory) и Экземплярный блок данных "EvaluationData", следовательно, содержит переменные Memory.In и Memory.Total, к которым Вы можете также обращаться как к глобальным переменным, например, следующим образом: "EvaluationData".Memory.Total.

Вы можете найти пример использования локального экземпляра в функциональных блоках FB 6, 7 и 8 в программе "Program Flow Control" на прилагаемой дискете. Пример в разделе 19.5.3 "Пример установки" содержит дополнительные варианты применения локальных экземпляров.

Абсолютная адресация статических локальных данных Обычно адресация статических локальных данных производится с использованием символьных имен, а абсолютная адресация используется в исключительных случаях. Внутри функционального блока экземплярный блок данных открывается посредством регистра DI. Идентификатором для адресов в блоке данных, для статических локальных данных также как параметров блока является идентификатор DI. Биты адресуются идентификатором DIX, байты - с помощью идентификатора DIB, слова - с помощью идентификатора DIW, а двойные слова - с помощью Если Вы знакомы с тем, как хранятся данные блоке данных, Вы можете выработать для себя способ адресации статических локальных данных.

Вы также можете посмотреть адреса в таблице объявления переменных в скомпилированном блоке. Но будьте внимательны! Эти адреса связаны с запуском экземпляра. Они действительны только в случае, если Вы вызываете функциональный блок с блоком данных. Если Вы вызываете Автоматизация посредством STEP с использованием STL и SCL функциональный блок как локальный экземпляр, соответствующие локальные данные этого локального экземпляра располагаются внутри экземплярного блока данных вызывающего функционального блока. Вы можете просмотреть абсолютные адреса, например, в скомпилированном экземплярном блоке данных, в котором содержатся все локальные экземпляры. Для просмотра адресов отдельных локальных данных выберите опции меню: Select View -> Data View (Выбор просмотра -> Вернемся к нашему примеру. В функциональном блоке "Totalizer" переменная Total может быть адресована с помощью DIW 2, если FB "Totalizer" вызывается с блоком данных (см. назначение адресов в DB "TotalizerData"), и с помощью DIW 6, если FB "Totalizer" вызывается как локальный экземпляр в блоке FB "Evaluation" (см. назначение адресов в DB "EvaluationData").

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

Коротко говоря, в этом случае к адресу переменной прибавляется смещение локального экземпляра из адресного регистра AR2. (См. главу 25 "Косвенная адресация" и главу 26 "Прямой доступ к переменным" для получения подробной информации по данному вопросу).

Абсолютная адресация статических локальных данных возможна только при использовании базовых языков программирования STL, LAD и FBD.

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

18.2 Функции для блоков данных Вы можете хранить данные Вашей программы в блоках данных. В принципе, для хранения данных Вы можете также использовать область меркеров (bit memory area). Тем не менее, используя блоки данных, Вы имеете значительно больше возможностей, в плане объема данных, структурирования данных и типов данных.

В данной главе будет показано • как работать с адресацией данных, • как создавать, удалять и тестировать блоки данных при выполнении Существует возможность использовать блоки двух видов: блоки глобальных данных (global data blocks), которые не назначаются никакому кодовому блоку, и экземплярные блоки (instance data blocks), которые назначаются функциональным блокам. Данные блоков глобальных данных являются, попросту говоря, "свободными" данными, которые может использовать каждый кодовый блок. Вы сами определяете объем, который занимают эти данные, их структуру непосредственно при программировании блоков глобальных данных.

18. Функции блоков Экземплярные блоки данных содержат только те данные, которые использует связанный функциональный блок; этот функциональный блок определяет структуру данных и место хранения данных в "своем" Число и размер блоков данных определяются типом CPU. Нумерация блоков данных начинается с 1; не может существовать блока данных с именем DB 0. Вы можете использовать каждый блок данных или как блок глобальных данных или как экземплярный блок данных.

Вы должны сначала создать блоки данных, которые Вы будете использовать в Вашей программе или запрограммировав их, так же как кодовые блоки, или используя системную функцию SFC 22 CREAT_DB Блоки данных должны быть сохранены в рабочей (work) памяти для того, чтобы к ним был возможен доступ чтения/записи из пользовательской программы. Вы можете также оставить блоки данных в загрузочной (load) памяти, используя атрибут блока "Unlinked" (ключевое слово UNLINKED используется при создании программы путем ввода исходного текста Такие блоки данных не занимают место в рабочей (work) памяти. Тем не менее, Вы сможете только считывать блоки данных в загрузочной (load) памяти с помощью системной функции SFC 20 BLCMOV. Такая процедура пригодна для блоков данных с данными параметризации или технологическими (recipe) данными, которые требуются относительно редко для управления установкой или процессом.

Если Вы установили атрибут "The data block is writeprotected in the programmable controller" ("Блок данных защищен от записи в PLC") в свойствах блока (что соответствует использованию ключевого слова READ_ONLY при создании программы путем ввода исходного текста программы), в дальнейшем Вы сможете только считывать данные из этого 18.2.1 Два регистра блоков данных В CPU есть два "регистра блоков данных" (data block register) для обработки адресованных данных. В этих регистрах содержатся номера обрабатываемых в текущем времени блоков; имеются в виду блоки, в которых находятся обрабатываемые в настоящий момент данные. Перед тем, как получить доступ к адресу, содержащемуся в блоке данных, Вы должны сначала открыть этот блок данных. Если Вы при адресации данных указываете полный их адрес (о способах спецификации блоков данных см. ниже), то Вам нет необходимости заботиться об открытии блока данных и об использовании регистров блоков данных. Редактор сам создаст необходимые инструкции из Ваших данных.

Редактор использует один из регистров блоков данных преимущественно для доступа к блокам глобальных данных, а второй регистр блоков данных используется для доступа к экземплярным блокам данных. В соответствии с назначением регистров, они имеют следующие идентификаторы: регистр для доступа к блокам глобальных данных DBрегистр ("Global data block register") и регистр для доступа к экземплярным блокам данных DI-регистр ("Instance data block register").

Автоматизация посредством STEP с использованием STL и SCL Обработка данных регистров CPU происходит абсолютно одинаково.

Каждый блок данных может быть открыт с помощью одного из двух регистров (или же с помощью двух регистров одновременно). При загрузке в аккумулятор слова данных, Вы должны задать, какой из двух возможных открытых блоков содержит это слово данных. Если обрабатываемый блок данных открыт с помощью DB-регистра, то слово данных должно содержать DBW; если обрабатываемый блок данных открыт с помощью DI-регистра, то слово данных должно содержать DIW.

Остальные форматы данных также имеют соответствующие обозначения Таблица 18.2 Адресация данных 18.2.2 Адресация данных Вы можете использовать следующие способы организации доступа к • символьная адресация с указанием полного адреса, • абсолютная адресация с указанием полного адреса, • абсолютная адресация с указанием неполного адреса.

Дополнительную информацию по способам адресации Вы можете найти в главе 25 "Косвенная адресация".

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

Символьная адресация • делает более простым чтение и понимание программы (если в качестве символьных имен используются осмысленные обозначения), 18. Функции блоков • уменьшает ошибки программирования (редактор сравнивает термы, использованные в таблице символов и в программе; "ошибки перестановки чисел", например, DBB 156 и DBB 165, которые могут происходить при использовании абсолютной адресации, не могут произойти при символьной адресации), • не требует умения программирования на уровне машинных кодов (не требует знания, какой из блоков данных открыт CPU для обработки в При символьной адресации указывается полный адрес (указывается и идентификатор блока, и адрес данных), поэтому адрес данных всегда Символьный адрес данных формируется в два этапа:

• Назначение блока данных в таблице символов.

Блоки данных являются глобальными данными, имеющими уникальные адреса в программе. В таблице символов Вы должны назначить символьное имя (например, Motor1) абсолютному адресу блока данных • Назначение адресов данных в блоке данных.

данных) во время программирования блока данных. Имена назначаются только в связанном ("associated") блоке (такие имена являются "внутриблочными" - "block-local"). Вы можете назначать такие же имена Доступ к адресам данных с указанием полного адреса При организации доступа к адресам данных с указанием полного адреса Вы должны задавать адрес данных совместно с адресом блока. Такой способ указания адреса может быть использован как с символьными, так и MOTOR1 является cимвольным адресом, который Вы должны назначить блоку данных в таблице символов. ACTVAL - это адрес данных, который Вы назначаете во время программирования блока данных. Символьное имя MOTOR1.ACTVAL - это такое же уникальное символьное обозначение адреса данных, как и обозначение DB 51.DBW 20.

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

Вы можете использовать доступ к данным посредством полного адреса при всех разрешенных операциях с адресуемыми типами данных. К таким операциям относятся двоичные логические операции, операции с памятью для адресуемых битов, а также операции загрузки (load) и пересылки (transfer) для адресуемых численных данных. Также Вы можете задавать полный адрес для параметров блоков (настоятельно рекомендуется изучить материал главы 19 "Параметры блоков").

Автоматизация посредством STEP с использованием STL и SCL Абсолютная адресация данных При организации доступа к адресам данных посредством абсолютной адресации Вы должны знать адреса, назначенные редактором для данных, при установке блока (setting up). Вы можете найти эти адреса, выведя их после программирования и компилирования блока данных. При этом в колонке адресов Вы увидите значения абсолютных адресов, с которых начинаются соответствующие переменные.

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

Если необходимо вычислить адрес, соответствующую информацию Вы можете найти в разделе 26.2 "Хранение переменных".

Организация доступа к адресам данных, имеющих байтовый размер, одинакова, например, с доступом к меркерам; и в том, и в другом случае используются одинаковые операции (см. табл. 18.3), которые выполняются Таблица 18.3 Операции с блоками данных A Проверка на состояние "1", комбинирование по логике OR (ИЛИ) с адр.

O Проверка на "1", комбинирование по логике Excl.OR (искл.ИЛИ) с адр.

X Проверка на состояние "0", комбинирование по логике AND (И) с адр.

AN Проверка на состояние "0", комбинирование по логике OR (ИЛИ) с адр.

ON Проверка на "0", комбинирование по логике Excl.OR (искл.ИЛИ) с адр.

XN Назначение для адр.

= Установка адр.

S Сброс адр.

R Проверка наличия фронта (переднего) адр.

FP Проверка наличия фронта (заднего) адр.

FN Адресация бита с помощью DB-регистра DBz.DBXy.x L Пересылка в адр.

T Адресация байта с помощью DB-регистра DBz.DBBy DBz.DBWy DBz.DBDy x = адрес бита, y = адрес байта, z = номер блока данных 18. Функции блоков Если Вы намереваетесь назначать исключительно абсолютные адреса данным в блоке данных, Вы должны зарезервировать требуемое количество байтов посредством объявления поля.

18.2.3 Открытие блока данных Блоки данных открываются независимо от любых условий. Открытие блоков не действует ни на RLO, ни на содержимое аккумуляторов;

глубина вложения вызовов блоков также не изменяется.

Открываемый блок должен быть в рабочей (work) памяти.

Значение слова данных DBW 10 из блока данных DB 12 должно быть перенесено в слово данных DBW 12 из блока данных DB 13 (см. рис 18.5).

Значение слов данных DBW 14 из блоков данных DB 12 и DB 13 должны быть сложены; сумма должна быть сохранена в слове данных DBW 14 из Вы можете запрограммировать данный пример следующими способами организации доступа к данным: с неполной адресацией и с полной адресацией данных (см. таблицу к рис. 18.5).

Автоматизация посредством STEP с использованием STL и SCL Программирование с неполной Программирование с полной Когда блок данных открыт, он остается "доступным" ("valid"), до тех пор, пока не будет открыт другой блок данных. При определенных условиях незаметно для пользователя это может обеспечиваться редактором (см.

"Особенности, имеющие место при адресации данных"). Например, вызов блока посредством оператора CALL с одновременной передачей параметра может изменять содержимое регистров блоков данных.

При смене обрабатываемого блока с помощью операторов UC и CC содержимое регистров блоков данных сохраняется. При возвращении в вызывающий блок оператор завершения блока восстанавливает содержимое регистров.

18.2.4 Обмен содержимым между регистрами блоков данных Оператор CDB позволяет выполнить обмен содержимым между регистрами блоков данных. Операция обмена данными выполняется независимо от любых условий и не действует ни на биты состояния, ни на С помощью оператора CDB Вы можете "обойти" вызов через регистр DB посредством регистра DI; блок данных пересылается как параметр блока (что невозможно выполнить напрямую).

В примере с помощью оператора CDB содержимое DB-регистра пересылается в DI-регистр. Затем с помощью параметра блока #Data 18. Функции блоков открывается блок данных, пересланный как фактический параметр; т.е., номер блока записан в DB-регистр. После нового обмена содержимого регистров, старое значение вновь возвращается в DB-регистр, а DIрегистр содержит параметризированного блока данных.

18.2.5 Размер блока данных и его номер Инструкция L DBLG загружает (load) размер блока данных, открытого с помощью DB-регистра в аккумулятор accumulator 1. Этот размер представляет собой определенное количество байтов. Инструкция L DILG выполняет аналогичную операцию, только для блока данных, открытого с Инструкция L DBNO загружает (load) номер блока данных, открытого с помощью DB-регистра в аккумулятор accumulator 1. Инструкция L DINO выполняет аналогичную операцию, только для блока данных, открытого с При выполнении данных операций по внесению номера и размера блока данных в аккумулятор accumulator 1, его предыдущее содержимое пересылается в аккумулятор accumulator 2, как при "нормальном" выполнении операции загрузки (load). Если перед операцией загрузки (load) номера или размера блока данных в аккумулятор не было открыто ни одного блока данных, то в результате в аккумулятор accumulator будут загружены нулевые (0) значения соответственно в качестве номера Невозможно выполнить запись номера блока в регистр блоков данных прямой операцией загрузки; Вы можете влиять на содержимое регистра блоков данных только посредством операций OPN DB, OPN DI и CDB (обмен содержимым между регистрами блоков данных).

18.2.6 Особенности, имеющие место при адресации данных Изменение назначения в DB-регистре С помощью следующих функций редактор создает дополнительные операторы, которые могут влиять на содержимое одного или двух Автоматизация посредством STEP с использованием STL и SCL Использование полной адресации данных Каждый раз, когда при организации доступа к данным используется полная адресация, редактор сначала открывает блок данных с помощью операции OPN DB, затем обеспечивает доступ к адресованным данным.

При этом каждый раз производится обновление (переписывание) содержимого DB-регистра. Это же происходит также при инициализации параметров блоков с использованием полной адресации данных.

Операция доступа к параметрам блока Содержимое DB-регистра также меняется при операциях доступа к следующим параметрам блоков: для функций, для всех параметров блоков сложных типов и функциональных блоков, входных/выходных параметров сложных типов данных.

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

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

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

Примечание: необходимо учитывать указанное выше постоянное назначение DI-регистра, если Вы изменяете содержимое DI-регистра посредством операций CDB или OPN DI.

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

Пример, представленный на рис. 18.6, показывает применение соответствующего приема программирования.

Внесение изменений в назначения блоков данных на поздних стадиях На вкладке "Blocks" ("Блоки") в окне свойств для папки автономных объектов Blocks Вы можете определить, какой из способов адресации данных будет иметь преимущество: абсолютная или символьная - при выполнении изменений в назначениях блока данных для уже сохраненных По умолчанию действует установка "Absolute address has priority" ("Абсолютная адресация имеет приоритет") (такие же параметры, как и в предыдущих версиях STEP 7). Такая, принятая по умолчанию, установка означает, что при изменении в разделе объявлений в блоке, абсолютный адрес сохраняется в программе, а символьный адрес соответственно 18. Функции блоков изменяется. При задании установки "Symbol has priority" ("Символьная адресация имеет приоритет") означает, что при изменении в разделе объявлений в блоке, символьный адрес сохраняется в программе, а абсолютный адрес соответственно изменяется.

//При использовании неполной адресации данных и обоих //Восстановление регистров блоков данных Рис. 18.6 Пример непосредственного использования двух регистров В блоке данных DB 1 слово данных DBW 10 назначено символьному имени Actual_value. Если "Data" является символьным именем для блока данных DB 1, то в программе Вы можете загрузить данное слово, например, посредством операции:

Автоматизация посредством STEP с использованием STL и SCL Если теперь Вы добавите дополнительное слово данных с помощью символьного имени MaxCurrent сразу перед словом данных DBW 10, тогда программа будет иметь следующее содержание при последующем открытии (и сохранении) кодового блока:

если "Absolute address has priority" ("Абсолютная адресация имеет если "Symbol has priority" ("Символьная адресация имеет приоритет"):

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

Подробную информацию по данному вопросу Вы можете найти в разделе 18.3 Системные функции для блоков данных Существуют три системные функции для обработки блоков данных.

Параметры этих функций приведены в таблице 18.4.

С помощью этой функции выполняется создание блока данных С помощью этой функции выполняется удаление блока данных С помощью этой функции выполняется тестирование блока данных Таблица 18.4 Параметры системных функций для обработки блоков данных 18. Функции блоков 18.3.1 Создание блока данных С помощью системной функции SFC 22 CREAT_DB выполняется создание блока данных в рабочей (work) памяти. В качестве номера блока данных системная функция принимает наименьшее свободное число в диапазоне чисел, заданных входными параметрами LOW_LIMIT (нижний предел) и UP_LIMIT (верхний предел). Граничные значения сами входят в диапазон возможных значений для номера блока. Если оба граничных значения одинаковы, то создаваемый блок будет иметь данное значение. Выходной параметр DB_NUMBER содержит фактический номер созданного блока данных. С помощью входного параметра COUNT Вы задаете размер (длину) создаваемого блока данных.

Длина блока данных соответствует числу байтов данных и при этом Создание блока данных и вызов блока данных не одно и то же. Текущий (обрабатываемый блок) остается доступным ("valid") блоком. Блок данных, созданный с помощью системной функции, содержит случайные данные. Для использования блока данных, созданного с помощью системной функции, необходимо сначала определить значения данных, содержащихся в блоке. Только после этого можно будет считывать эти Если при выполнении системной функции происходит ошибка, то блок данных не создается, выходной параметр DB_NUMBER остается неопределенным, а номер ошибки выдается как значение функции.

18.3.2 Удаление блока данных С помощью системной функции SFC 23 DEL_DB выполняется удаление блока данных в RAM памяти (рабочей [work] и загрузочной [load] памяти).

Номер удаляемого блока данных определен в инструкции во входном параметре DB_NUMBER. При выполнении данной системной функции блок данных не должен быть открыт, иначе CPU перейдет в состояние Блок данных, созданный с ключевым словом UNLINKED (несвязанный), а также блок данных, расположенный в модуле памяти FEPROM не может быть удален с помощью системной функции SFC 23.

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

18.3.3 Тестирование блока данных С помощью системной функции SFC 24 TEST_DB выдает число байтов для блока данных в рабочей (work) памяти в выходном параметре DB_LENGTH, а также ID защиты от записи в выходном параметре Автоматизация посредством STEP с использованием STL и SCL параметре DB_NUMBER.

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

18.4 Null-операции (нуль-операции) Null-операции (нуль-операции) не создают никакого воздействия при выполнении программы. В языке программирования STL есть операторы NOP 0, NOP 1 и BLD, используемые в качестве Null-операций (нульопераций).

18.4.1 Операторы NOP Вы можете использовать операторы NOP 0 (набор битов 16 х "0") и NOP (набор битов 16 х "1") для использования в инструкциях, которые не выполняют никакого действия.

Необходимо отметить, что Null-операции (нуль-операции) занимают в памяти определенное пространство (2 байта) и для выполнения инструкции требуют определенного времени.

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

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

18.4.2 Оператор отображения программы BLD Редактор использует инструкцию отображения программы BLD nnn для включения информации декомпиляции в программу.

Сами операторы BLD не отображаются.

19 Параметры блоков Из этой главы Вы узнаете, как использовать параметры блоков; кроме • объявлять (декларировать) параметры блока, • инициализировать параметры блока, • последовательно передавать ("pass on") параметры блока.

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

19.1 Параметры блока: общая информация 19.1.1 Определение параметров блока Параметры блока дают возможность передать данные для выполнения Пример: необходимо записать блок с функцией сумматора (adder), который Вы хотите использовать в своей программе несколько раз для различных переменных. Переменные будут передаваться как параметры блока; в нашем примере используются три входных параметра и один выходной (см. рис. 19.1). Так как для функционирования сумматора нет необходимости сохранения внутренних значений, то для данной задачи может быть использована функция.

Параметр блока необходимо определять как "входной" параметр (input parameter), если требуется только проверить (Check - т.е., опросить) или загрузить (Load) его значение в программе блока. Если значение параметра только записывается (операции Set, Reset, Assign, Transfer), то Вы имеете дело с "выходным" параметром (output parameter). Если же параметр может быть как записан, так и считан, то Вы должны использовать параметр типа "входной/выходной" (in/out parameter).

Редактор не проверяет вариант использования параметров.

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

Автоматизация посредством STEP с использованием STL и SCL Numb_ Вы можете использовать параметры блока также, как при символьной адресации переменных; в программе они называются формальными Функция "Adder" может быть вызвана в Вашей программе несколько раз.

При каждом вызове Вы можете передавать различные значения для операции суммирования с помощью параметров блока (см. рис. 19.2).

Значения могут быть константами, адресами или переменными; они называются фактическими параметрами (Actual parameters).

Во время выполнения программы CPU заменяет формальные параметры фактическими параметрами. При первом вызове в примере (рис. 19.2) результат сложения записывается в слово MW 40. Другой блок с другими фактическими параметрами вызывает функцию "Adder" второй раз, в результате чего происходит суммирование данных, заключенных в словах 19.1.3 Объявление (declaration) параметров блока Параметры блока должны быть определены в разделе объявлений блока, 19. Параметры блоков Параметры Рис. 19.2 Вызов блока с параметрами При инкрементном способе программирования Вы просто дополняете список параметров. При способе программирования, ориентированном на создание исходных текстов, Вы определяете параметры блока в особых разделах (рис. 19.3). При этом используются следующие ключевые слова:

VAR_INPUT - для входных параметров, VAR_OUTPUT - для выходных параметров и VAR_IN_OUT - для входных/выходных параметров.

Предопределение параметров является необязательным (опциональным) моментом при программировании и имеет смысл только для функциональных блоков, если значение параметра должно быть сохранено. Это касается всех параметров блоков простых типов, а также входных и выходных параметров сложных типов. Заполнение столбца комментариев для параметров необязательно и может быть выполнено в Имя параметра (Block parameter name) может содержать до 24 символов.

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

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

При указании типа данных Data type для параметров разрешены все типы:

простые (elementary), сложные (complex) и пользовательские (userdefined).

Автоматизация посредством STEP с использованием STL и SCL Инкрементное программирование Программирование, ориентирование на создание исходных текстов программы VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR_IN_OUT Interface : DWORD := 16#00000000; //Интерфейс для двиг. Motor END_VAR Рис. 19.3 Пример объявления параметров блока для инкрементного способа программирования и для создания исходных текстов программы 19. Параметры блоков Кроме того, Вы можете задавать типы параметров для параметров STEP 7 сохраняет имена параметров блоков в невыполняемых разделах блоков на носителях данных в программаторе PG. В рабочей (work) памяти CPU (в скомпилированном блоке) содержатся только объявленные типы (в столбце Declaration) и типы данных (в столбце Type). Поэтому изменения в программе блока, которые делаются в интерактивном (online) режиме в памяти CPU, должны быть дополнительно продублированы и на носителях данных в программаторе PG, чтобы сохранить заданные пользователем имена.

Если не обновить данные в PG или блоки перенести из CPU в программатор PG, то соответствующие неисполняемые разделы блока будут либо удалены, либо переписаны. Затем редактор перезаписывает имена, заменяя их, для отображения на экране дисплея или для печати (входные параметры при этом получают имена вида INn, выходные параметры получают имена вида OUTn и входные/выходные параметры получают имена вида INOUTn, где n является порядковым номером, 19.1.4 Объявление (declaration) значения функции Такой параметр блока как значение функции (в случае применения блокафункции) является особым выходным параметром. Он имеет имя RET_VAL (или ret_val) и определяется как первый выходной параметр.

Тип значения функции может относиться к любому из простых типов данных. Кроме того, к допустимым типам в этом случае также относятся следующие типы данных: DATE_AND_TIME, STRING, POINTER, ANY и пользовательский тип UDT. Однако, тип значения функции не может относиться к таким типам данных, как ARRAY и STRUCT.

В рассмотренном выше примере функция "Adder" может быть также запрограммирована с присвоением значения параметра Result значению Программирование, ориентированное на создание исходных файлов программы При программировании, ориентированном на создание исходных файлов программы, Вы должны определить функциональное значение (значение функции), задав тип данных для значения функции после типа блока и разделив эти идентификаторы двоеточием:

Автоматизация посредством STEP с использованием STL и SCL

END_FUNCTION

В примере значение функции RET_VAL принадлежит к типу INT.

Посредством инструкции "T RET_VAL" значение функции принимается равным итоговой сумме параметров Numb_1, Numb_2 и Numb_3.

Инкрементное программирование При инкрементном программировании Вы должны назначить имя RET_VAL первому выходному параметру в списке выходных параметров в разделе объявления переменных. Этим самым Вы определите этот выходной параметр как значение функции для функции FC.

В программе Вы должны рассматривать значение функции как выходной параметр. В примере посредством инструкции "T RET_VAL" значение функции принимается равным итоговой сумме параметров Numb_1, 19.1.5 Инициализация (Initialization) параметров блока При вызове блока Вы инициализируете параметры блока значениями фактических параметров. Эти параметры могут быть константами, абсолютными адресами, данными с полной адресацией или переменными с символьной адресацией. Фактические параметры должны относиться к такому же типу данных, что и параметры блока (см. разд. 19. "Фактические параметры").

Начиная со STEP 7 V5.1 Вы должны определять параметры блока в исходной программе точно в том порядке, в котором они определены в разделе объявления блока во время программирования. Вы должны инициализировать все параметры функции при каждом ее вызове. В случае использования функциональных блоков инициализация отдельных или всех параметров блока носит опциональный (т.е., выборочный) 19.2 Формальные параметры В данном разделе Вы узнаете, как получить доступ к параметрам блока внутри блока. В табл. 19.1 показано, что нет ограничений для доступа к параметрам простых типов, к компонентам полей или структур, к функциям таймеров и счетчиков.

Доступ к параметрам сложных типов и к параметрам типов POINTER и ANY в языке программирования STL в настоящее время не поддерживается. Тем не менее, Вы можете инициализировать соответствующие блоки или системные блоки, которые имеют такие параметры, с помощью соответствующих переменных.

19. Параметры блоков Тем не менее, в главе 26 "Прямой доступ к переменным" показано, как Вы можете использовать параметры таких типов данных в блоках, которые Таблица 19.1 Доступ к параметрам блока (общий вид) Простые типы данных:

DWORD, CHAR, INT, DINT, REAL, S5TIME, TIME, DOT, DATE Сложные типы данных:

компоненты компоненты Типы параметров:

Оператор CC не применим для функций Имеет значение только для системных блоков Автоматизация посредством STEP с использованием STL и SCL Параметры блоков типа BOOL Параметры блоков типа BOOL могут быть отдельными двоичными переменными или двоичными компонентами полей или структур. Вы можете проверять (опрашивать) входные параметры и входные/выходные параметры с помощью подключения (with contacts) ко входам двоичных функций и влиять на выходные параметры и входные/выходные При использовании FC функций-блоков Вы должны назначать значение двоичному выходному параметру и значению функции в блоке или В табл. 19.2 показаны разрешенные операции с данными типа BOOL. При программировании функции Вы должны использовать формальные После того, как CPU использовал фактический параметр, определенный посредством параметра блока, он обрабатывает соответствующий оператор (см. табл. 19.2) в соответствии с материалом из глав "Двоичные логические операции" и 5 "Операции с памятью".

A - Логическая операция AND (И) при проверки на состояние сигнала "1" AN - Логическая операция AND (И) при проверки на состояние сигнала "0" O - Логическая операция OR (ИЛИ) при проверки на состояние сигнала "1" ON - Логическая операция OR (ИЛИ) при проверки на состояние сигнала "0" X - Логическая операция Exclusive OR (исключающее ИЛИ) при проверки XN - Логическая операция Exclusive OR (исключающее ИЛИ) при проверки - xxxx выходного или входного/выходного параметра типа BOOL FP - Операция проверки наличия положительного фронта сигнала FN - Операция проверки наличия отрицательного фронта сигнала - xxxx входного/выходного параметра типа BOOL Параметры блоков числовых типов Параметры блоков числовых типов занимают 8, 16 или 32 бита (они могут относиться к любым простым типам, кроме типа BOOL). Они могут быть отдельными численными переменными или численными компонентами полей или структур. Вы можете считывать входные параметры и входные/выходные параметры с помощью функции загрузки (load) ко входам двоичных функций, можете записать выходные параметры и входные/выходные параметры с помощью функций передачи (transfer).

19. Параметры блоков При использовании FC Вы должны передать (transfer) значение в численный выходной параметр и в значение функции. До этого Вы не При программировании функции Вы должны использовать формальные параметры, вместо параметров блока xxxx.

После того, как CPU использовал фактический параметр, определенный посредством параметра блока, он обрабатывает соответствующий оператор в соответствии с материалом из главы 6 "Функции пересылки Параметры блоков типов DT и STRING Прямой доступ к параметрам блоков типов DT и STRING в настоящее время не поддерживается. Однако, при работе с функциональными блоками Вы можете передавать параметры типов DT и STRING в параметры вызываемых блоков.

В главе 26 "Прямой доступ к переменным" показано, как пользователь может сам запрограммировать операции доступа к параметрам указанных Параметры блоков типов ARRAY и STRUCT Прямой доступ к параметрам блоков типов ARRAY и STRUCT возможен в "покомпонентном" режиме, т.е., доступ обеспечивается к отдельным двоичным или численным компонентам данных вышеуказанных сложных типов посредством соответствующих операций (двоичных логических операций, операций с памятью, функций загрузки [load] или пересылки Доступ к полным переменным (к целым полям или к целым структурам) в настоящее время не поддерживается, а также нет доступа к отдельным компонентам комбинированного или пользовательского типа. Однако, при работе с функциональными блоками Вы можете последовательно передавать ("pass on") параметры типов ARRAY и STRUCT в параметры В главе 26 "Прямой доступ к переменным" показано, как пользователь может сам запрограммировать операции доступа к параметрам указанных Параметры блоков пользовательского типа Вы можете работать с параметрами пользовательского типа таким же образом, как и с параметрами типа STRUCT.

Прямой доступ обеспечивается к отдельным двоичным или численным компонентам данных пользовательского типа UDT посредством соответствующих операций (двоичных логических операций, операций с памятью, функций загрузки [load] или пересылки [transfer]).

Доступ к полным переменным в настоящее время не поддерживается и также доступ к отдельным компонентам комбинированного или пользовательского типа невозможен. При работе с функциональными блоками Вы можете последовательно передавать ("pass on") параметры типа UDT в параметры вызываемых блоков.

Автоматизация посредством STEP с использованием STL и SCL В главе 26 "Прямой доступ к переменным" показано, как пользователь может сам запрограммировать операции доступа к параметрам указанных Параметры блоков типа TIMER В добавление к функциям проверки (опроса), указанным в табл. 19.2, Вы можете программировать обработку параметров блока типа TIMER с помощью следующих операторов:

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

После того, как CPU использовал фактический параметр, определенный посредством параметра блока, он обрабатывает соответствующий STL оператор точно также, как описано в главе 7 "Функции таймера". При запуске функции таймера значение времени "time value" может также быть параметром формата S5TIME.

Параметры блоков типа COUNTER В добавление к функциям проверки (опроса), указанным в табл. 19.2, Вы можете программировать обработку параметров блока типа COUNTER с помощью следующих операторов:

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

После того, как CPU использовал фактический параметр, определенный посредством параметра блока, он обрабатывает соответствующий STL оператор точно также, как описано в главе 8 "Функции счетчика". При запуске функции счетчика значение счетчика "count value" может также быть, например, параметром типа WORD.

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

При открытии блока данных посредством параметра блока, CPU всегда использует регистр блоков глобальных данных (DB-регистр).

Функции и функциональные блоки, которые пересылаются с параметрами блоков, сами не должны содержать параметров блоков. Условный вызов блока посредством параметра возможен, только если это параметр Вы можете также использовать блок данных, который переслали как параметр блока, в качестве экземплярного блока. Так как редактор не проверяет тип блока данных, используемого при выполнении программы, Вы должны сами обеспечивать, чтобы пересылаемый блок данных также соответствовал экземплярному блоку данных для вызванного Вы можете определить параметр блока типа BLOCK_DB с помощью имени #Data как экземплярный блок данных для вызванного Параметры блоков типов POINTER и ANY Прямой доступ к параметрам блоков типов POINTER и ANY невозможен.

В главе 26 "Прямой доступ к переменным" показано, как пользователь может сам запрограммировать операции доступа к параметрам блоков 19.3 Фактические параметры При вызове блока Вы инициализируете параметры блока значениями, которые могут быть константами, адресами или переменными, с которыми программа блока должна быть выполнена. Это фактические параметры.

При частых вызовах блока в программе, обычно используются Автоматизация посредством STEP с использованием STL и SCL различные значения фактических параметров.

Фактический параметр должен относиться к такому же типу данных, что и соответствующий параметр блока. Вы можете поставить в соответствие двоичному фактическому параметру (например, меркеру) только параметр блока типа BOOL; Вы можете инициализировать параметр блока типа ARRAY только переменной, занимающей такое же поле в памяти. В табл. 19.3 представлен обзор адресуемых данных, которые Вы можете применять как фактические параметры соответствующих типов.

Табл. 19.3 Инициализация фактических параметров Тип параметра Простой тип Параметр вызывающего блока • Компоненты параметров блока вызывающего блока простых Сложный тип TIMER, COUNTER, BLOCK_xx

POINTER

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

инициализировать параметры блока. STEP 7 сохраняет все параметры блока простых типов, входные и выходные параметры сложных типов и входные параметры типов TIMER, COUNTER и BLOCK_xx как значения или как числа. Вх/вых параметры сложных типов и входные параметры типов POINTER и ANY сохраняются как указатели на фактические параметры. Так как при этом вводится значащее значение, Вы должны инициализировать по крайней мере параметры с неполной адресацией, по крайней мере при первом вызове. Имеется также возможность прямого доступа к параметрам блока. Так как параметры блока располагаются в блоке данных, Вы можете обрабатывать их как адреса данных.

Функциональный блок с экземплярным блоком "Lift_stat_1" управляет двоичным выходным параметром с именем Up. Выполняя обработку программы функционального блока после его вызова, Вы можете проверить (опросить) параметр без инициализации выходного параметра:

Вы можете запрограммировать такую инструкцию проверки (опроса) параметра вместо его инициализации.

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

Таблица 19.4 Фактические параметры простых типов данных Глобальные данные неполная адресация Временные локальные данные Статические локальные данные x = адрес бита, y = адрес байта, z = номер блока данных Вы можете назначить или абсолютный, или символьный адрес входу, выходу и меркеру. Входные адреса обычно назначаются входным параметрам; выходные адреса обычно назначаются выходным параметрам (тем не менее, это не обязательно). Адреса меркеров допустимы для параметров, объявленных как входныые, выходные или При использовании неполной адресации данных Вы должны обеспечить, чтобы соблюдалась "корректность" в открытом блоке данных при обращении к параметру блока (в вызванном блоке). Так как редактор может в отдельных случаях заменить блок данных при вызове блока, то применение неполной адресации данных не рекомендуется. Поэтому используйте только полную адресацию данных.

Для временных локальных данных обычно используется символьная адресация. Они размещаются в L-стеке вызывающего блока (и объявлены Если вызывающий блок является функциональным блоком, Вы можете также использовать его статические локальные данные как фактические параметры (см. раздел 19.4 "Передача "Pass On" параметров блока").

Автоматизация посредством STEP с использованием STL и SCL Для статических данных обычно используется символьная адресация.

Если Вы используете абсолютную адресацию с указанием DI-регистра (DIадресация), то Вы должны обеспечить "корректность" в открытом блоке данных с указанием DI-регистра при обращении к параметру блока (в Примечание: в связи с вышеизложенным надо заметить, что при использовании вызываемых блоков как локальных экземпляров, абсолютные адреса локальных (block-local - внутриблочных) переменных зависит от объявления локального экземпляра в вызванном блоке.

В качестве параметра блока типа BOOL Вы можете применять константу TRUE (ИСТИНА - для состояния сигнала "1") или константу FALSE (ЛОЖЬ - для состояния сигнала "0"). В качестве параметра блока численных типов Вы можете применять любые константы, относящиеся к численным типам. Инициализация посредством присвоения констант имеет смысл только для входных параметров.

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

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

Вы можете для инициализации параметров блока типа DT и STRING использвать отдельные переменные или компоненты полей или структур при условии, что они имеют соответствущий тип данных. Инициализация таких параметров не допустима в STL.

Если Вы инициализируете параметры функционального блока переменной STRING, эта переменная должна иметь такую же длину как и Когда создается переменная STRING во временных локальных данных, предопределение ее значение невозможно, поэтому при этих условиях содержимое данной переменной содержит "случайные" значения. При использовании такой переменной в качестве фактического параметра для IEC-функции Вы должны сначала определить ее соответствующим корректным значением в программе (перед записью значения в STRINGпеременную IEC-функция проверяет его на соответствие типу Вы можете для инициализации параметров блока типа ARRAY и STRUCT использвать переменные с точно такой же структурой как и параметры Назначение параметров сложных типов описано в разделе 26.4 "Краткое описание примера фрейма сообщения" в примерах "Создание фрейма сообщения" и "Считывание времени суток (считывание данных TOD)".

Инициализация параметров блоков пользовательских типов данных Для сложных и громоздких структур данных рекомендуется ввести и использовать пользовательский (UDT) тип данных. Сначала Вы должны определить UDT-тип данных, затем - использовать его, например, для создания переменной в блоке данных или для объявления параметра 19. Параметры блоков блока. После этого Вы можете использовать переменную при инициализации параметра блока. В этом случае фактический параметр (переменная) должна быть точно такого же типа (такой же UDT-структуры) Назначение параметров пользовательских типов описано в разделе 26. "Краткое описание примера фрейма сообщения" в примере "Данные Инициализация параметров блоков типов TIMER, COUNTER и BLOCK_xx Вы должны инициализировать параметр блока типа TIMER для функции таймера, параметр блока типа COUNTER для функции счетчика. Для параметров типа BLOCK_FC и BLOCK_FB Вы можете использовать только блоки без своих собственных параметров. После этого эти блоки могут быть вызваны посредством оператора UC (а также CC для функциональных блоков). Инициализировать параметр блока типа BLOCK_DB можно блоком данных, открытом в вызванном блоке посредством DB-регистра.

Назначение параметров пользовательских типов описано в разделе 26. "Краткое описание примера фрейма сообщения" в примере "Данные Параметры блоков типов TIMER, COUNTER и BLOCK_xx могут быть только входными параметрами.

Инициализация параметров блоков типа POINTER Для параметра блока типа POINTER допустимо использовать только указатели (константы). Эти указатели могут являться указателями либо для области данных (32-разрядные), либо для блока данных DB (48разрядные).

При этом возможна адресация данных простых типов; также возможна Для функциональных блоков не допускаются выходные параметры типа Инициализация параметров блоков типа ANY Для параметра блока типа ANY допустимо использовать переменные любых типов. При программировании вызываемого блока Вы должны определить, какие переменные (адреса или типы данных) должны быть применены в параметрах блока, какие переменные могут примяться. Вы также можете определить константы в формате указателя ANY "p#[Data_block.]Address Data_type Number" и таким образом определить область с помощью абсолютной адресацией.

Исключением является инициализация параметра ANY временными локальными данными типа ANY. В этом случае редактор скорее допустит, что указатель типа ANY уже существует во временных локальных данных, чем создаст указатель на переменную. Это дает Вам возможность применить для параметра ANY указатель ANY, которым можно манипулировать во время выполнения программы. "Переменный указатель ANY" может быть, отчасти, полезен при работе с системной функцией SFC 20 BLKMOV (см. пример "Буфер входа" в разделе 26. "Краткое описание примера фрейма сообщения").

Автоматизация посредством STEP с использованием STL и SCL Для функциональных блоков не допускаются выходные параметры типа 19.4 Последовательная передача ("Pass On") параметров блока Последовательная передача ("Pass On") параметров блока - это особая форма доступа и инициализации параметров блока. При такой форме доступа параметры блока вызывающего передаются ("passed on") в параметры вызванного блока. При этом формальный параметр вызывающего блока становится фактическим параметром вызванного В общем случае, при этом фактический параметр должен быть того же типа, что и формальный параметр (то есть, параметры блока должны соответствовать типам передаваемых данных). Вдобавок, Вы можете применить входной параметр вызывающего блока только как входной параметр вызываемого блока, и, аналогично, использовать выходные параметры. Вы можете применить вх/вых параметр вызывающего блока во всех (входных, выходных и вх/вых) параметрах вызываемого блока.

Существуют ограничения, зависящие от типов данных, которые возникают из-за различий в способе хранения параметров блоков между функциями и функциональными блоками. Параметры блоков могут последовательно передаваться ("pass on") без ограничений и в соответствии с информацией, изложенной в предыдущих параграфах. Сложные типы данных для входов и выходных параметров могут передаваться, если только вызывающий блок является функциональным блоком. Параметры блоков типов TIMER, COUNTER и BLOCK_xx могут передаваться от одного входного параметра к другому, только если вызывающий блок является функциональным блоком. В табл. 19.5 представлены разрешенные и запрещенные пути передачи данных между входными и выходными параметрами для функций и функциональных блоков в зависимости от типа передаваемых данных.

Вы можете последовательно передавать ("pass on") данные типов TIMER, COUNTER и BLOCK_xx при работе с функциями при использовании косвенной адресации. Соответствующему параметру сначала должен быть присвоен тип данных WORD или INT; затем Вы инициализируете его константой или переменной, которая содержит номер таймера, счетчика или передаваемого блока. Вы можете последовательно передавать ("pass on") этот параметр, так как он относится к параметрам простого типа. В последнем (в цепочке передачи - "last") блоке Вы можете использовать функцию загрузки "load" для передачи содержимого параметра в слово временных локальных данных, после чего может быть выполнена функция таймера, счетчика или блока.

19. Параметры блоков Табл. 19.5 Разрешенные комбинации для последовательной передачи ("pass on") параметров Вызывающий FC вызывает FC FB вызывает FC FC вызывает FB FB вызывает FB вызываемый

E C P E C P E C P E C P

(объявленный тип) Input -> Input (Вх -> Вх) Output -> Output In/Out -> Input In/Out -> Output In/Out -> In/Out (Вх/Вых -> Вх/Вых) E = простые типы данных C = сложные типы данных P = параметрические типы TIMER, COUNTER и BLOCK_xx 19.5 Примеры 19.5.1 Пример: ленточный конвейер Пример показывает передачу состояний сигналов с помощью параметров.

Для этой цели мы будем использовать функцию управления ленточным конвейером, работа которой была объяснена в главе 5 "Операции с памятью". Функция управления ленточным конвейером должна быть размещена в функциональном блоке, и все входы и выходы должны быть запрограммированы как параметры блока, таким образом, что функция управления ленточным конвейером может быть использована многократно (для нескольких конвейеров). На рис. 19.4 показаны входные и выходные параметры блока, так же как и использованные статические В данном блоке параметры распределяются достаточно просто: все двоичные адреса, соответствующие входам должны стать входными параметрами, все двоичные адреса, соответствующие выходам должны стать выходными параметрами, все меркеры должны стать статическими Автоматизация посредством STEP с использованием STL и SCL

BOOL BOOL

BOOL BOOL

BOOL BOOL

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

Функциональный блок "Conveyor_belt" предназначен для управления двумя ленточными конвейерами. Поэтому он вызываеися дважды: первый раз - для обработки входов и выходов конвейера 1, второй раз - для обработки входов и выходов конвейера 2. Для каждого вызова функционального блока требуется экземплярный блок данных, в котором хранятся данные конвейера для соответствующего случая. Блок данных для конвейера 1 называется "Belt_data1", блок данных для конвейера называется "Belt_data2" и т.д.

Вы можете найти пример исполняемой программы в библиотеке STL_Book с названием "Conveyor Example" на дискете, приложенной к книге. Исходная программа содержит код функционального блока с входными параметрами, с выходными параметрами и статическими локальными данными. За этой программой следуют программы экземплярных блоков данных; в них достаточно определить функциональный блок в разделе объявлений. Вы можете использовать любой блок данных в качестве экземплярного, например, DB "Belt_data1" и DB 22 "Belt_data2". В таблице символов эти блоки данных имеют тип данных функционального блока.

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

19.5.2 Пример: счетчик деталей Пример демонстрирует обработку параметров блока простых типов.

Пример "Parts Counter" ("счетчик деталей") из главы 8 "Функции счетчиков" взят за основу для нашей функции. В нашем случае функция выполняется как функциональный блок со всеми глобальными переменными, объявленными или как параметры блока, или как статические локальные

BOOL BOOL

BOOL BOOL

COUNTER

Рис. 19.5 Функциональный блок для примера счетчика деталей Функции таймера и счетчика передаются с помощью параметров блока типов TIMER и COUNTER. Эти параметры блока должны быть входными параметрами. Начальные значения для функции счетчика (Quantity) и для функции таймера (Dura1 и Dura2) могут также быть переданы как параметры блока; тип данных параметров блока здесь соответствует Автоматизация посредством STEP с использованием STL и SCL "Parts_counter", связанный с ним экземплярный блок данных "Count_Dat", означает, что нам предстоит запрограммировать функциональный блок "Feed" ("Подающий механизм") для управления четырьмя ленточными Belt1,..., Belt4 - функциональные блоки "Conveyor_Belt" 19. Параметры блоков Запускающий (Start) сигнал подается на вход Start блока управления конвейера Belt 1, выход Ready_rem подается на вход Start блока управления конвейера Belt 2, и т.д. И, наконец, Ready_rem от блока управления Belt 4 подается на выход Remove системы управления "Feed".

Такая же цепочка сигналов проходит в обратном направлении Removed -> Continue -> Ready_load ->... -> Load.

Сигналы Belt_motX_on, Light_barrierX и /M_faultX (отказ мотора) - это отдельные сигналы в каждом из блоков управления конвейерами. Входы Reset, Man_start и Stop позволяют управлять всеми блоками посредством сигналов Basic_st, Man_on и Stop соответственно.

Следующий раздел программы функционального блока "Feed" создан таким же путем. Входные и выходные параметры функционального блока показаны на рис. 19.5. Кроме того, числовые значения для счетчика деталей Quantity и таймера Dura1 и Dura2 используются здесь как входные параметры. Мы объявляем данные отдельных блоков управления конвейерами и данные счетчика деталей в статических локальных данных таким же образом, как объявляются данные пользовательского типа UDT, т.е., с указанием имени и типа данных.

Переменная Belt1 должна содержать структуру данных функционального блока "Conveyor_Belt", так же как и переменные Belt2,..., Belt4;

переменная Check должна содержать структуру данных функционального Программа функционального блока начинается с инициализации общих сигналов для всех блоков управления конвейерами. Здесь мы используем тот факт, что параметры блока функциональных блоков, вызываемых как локальные экземпляры, являются статическими локальными данными в текущем блоке и, поэтому, могут обрабатываться как таковые. Параметр блока Man_start текущего функционального блока управляет входным параметром Man_on всех четырех блоков управления конвейерами посредством простой операции присвоения. Таким же образом проводится инициализация входных параметров Basic_st и Stop с помощью параметров блока Reset и Stop соответственно. Теперь общие сигналы для блоков управления конвейерами инициализированы.

(Конечно же Вы можете инициализировать эти сигналы и при вызове Последовательные вызовы функциональных блоков управления конвейерами содержат параметры блока только для отдельных сигналов соответствующего конвейера, связанные с параметрами функционального блока "Feed". Эти отдельные сигналы представляют собой сигналы от фотодатчиков (Light_barrierX), сигналы для и от моторов приводов конвейеров (соответственно сигналы для аварийной остановки двигателей /M_faultX и сигналы о состоянии моторов приводов Belt_motX_on). (Здесь имеется в виду, что при вызове функционального блока не все параметры блока должны быть инициализированы).

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

Функциональный блок FB "Parts Counter" ("счетчик деталей") вызывается как локальный экземпляр, даже несмотря на то, что он не связан с сигналами управления конвейерными лентами. Экземплярный блок данных функционального блока "Feed" содержит в себе данные FB.

Автоматизация посредством STEP с использованием STL и SCL Входные параметры для счетчика деталей Quantity и таймера Dura1 и Dura2 функционального блока "Feed" должны быть установлены только один раз. Это может быть сделано путем задания значений, принимаемых по умолчанию (как в данном примере), или путем прямого присвоения значений при перезапуске программы в OB 100 (если, к примеру, эти три параметра трактуются как глобальные данные).

Данный функциональный блок "Feed" и связанный с ним экземплярный блок "FeedDat" содержатся в библиотеке STL_Book в программе с именем "Conveyor Example". Ниже представлен функциональный блок с экземплярным блоком данных для основной программы.

19. Параметры блоков FUNCTION_BLOCK "Feed" TITLE = Control of several conveyor belts //Управление несколькими //Пример локальных экземпляров "local instances" //declaration (объявления), calls (вызовы) AUTHOR : Berger FAMILY : STL_Book VERSION : 01. VAR_INPUT Start : BOOL := FALSE; //Запуск лент конвейеров Removed : BOOL := FALSE; //Детали удалены с ленты Man_start : BOOL := FALSE; //Ручной запуск конвейеров Stop : BOOL := FALSE; //Остановка лент конвейеров Reset : BOOL := FALSE; //Установка в основное Quantity : WORD := W#16#0200;//Число деталей Dural : S5TIME := S5T#5s; //Контрольное время д/деталей Dura2 : S5TIME := S5T#10s; //Контрольное время д/перерыва END_VAR VAR_OUTPUT Load : BOOL := FALSE; //Загрузка ленты деталями Remove : BOOL := FALSE; //Удаление деталей с ленты END_VAR VAR Beltl : "Conveyor_belt"; //Управление лентой belt Belt2 : "Conveyor_belt"; //Управление лентой belt Belt3 : "Conveyor_belt"; //Управление лентой belt Belt4 : "Conveyor_belt"; //Управление лентой belt Check : "Parts_counter"; //Управление подсчетом деталей END_VAR BEGIN

NETWORK

TITLE = Initializing the common signals //инициализация общих A Man_start;

= Beltl.Man_on;

= Belt2.Man_on;

= BeIt3.Man_on;

= Belt4.Man_on;

= Belt1.Stop;

= Belt2.Stop;

= Belt3.Stop;

= Belt4.Stop;

= Beltl.Basic_state;

= Belt2.Basic_state;

= Belt3.Basic_state;

= Belt4.Basic_state;

(продолжение на следующей странице) Автоматизация посредством STEP с использованием STL и SCL

NETWORK

TITLE = Calling the conveyor belt controls //Вызов блоков управления CALL Beltl ( End_of_belt := Light_barrierl, Belt_mot_pn := Belt_motl_on);

A Belt2.Readyload;

= Beltl.Continue;

A BeIt1.Ready_rem;

= Belt2.Start;

CALL Belt2 ( End_pf_belt := Light_barrier2, Belt_mot_on := Belt_mot2_on);

A Belt3.Readyload;

= Belt2.Continue;

A Belt2.Ready_rem;

= Belt3.Start;

CALL Belt3 ( End_of_belt := Lightbarrier3, Belt_mot_on := Belt_mot3_on);

A Belt4.Readyload;

= Belt3.Continue;

A Belt3.Ready_rem;

= Belt4.Start;

CALL Belt4 ( End_of_belt := Light_barrier4, Belt_mot_on := Belt_mot4_on);

NETWORK



Pages:     | 1 |   ...   | 5 | 6 || 8 | 9 |   ...   | 12 |


Похожие работы:

«Министерство образования и науки РФ Академия медико-технических наук РФ Технологический институт Южного федерального университета ОКБ “Ритм” ЮФУ ЗАО ОКБ “Ритм” ООО НПКФ “Медиком МТД” ООО НМФ “Нейротех” ООО Биофизсигнал Администрация г. Таганрога НЕЙРОБИОЛОГИЯ И НОВЫЕ ПОДХОДЫ К ИСКУССТВЕННОМУ ИНТЕЛЛЕКТУ И К НАУКЕ О ПРОГРАММА НАУЧНОЙ ШКОЛЫ МОЗГЕ Третья Всероссийская научная школа для молодежи Таганрог Россия 28-29 июня, Оргкомитет научной школы ЗАХАРЕВИЧ Владислав Георгиевич – д.т.н., профессор,...»

«Дипломные работы на сайте Тверь Реферат Сервис http://referat-tver.ru/product_list/group_1210844 ДОКЛАД (Слайд 1) Уважаемая комиссия! Вашему вниманию предлагается выпускная квалификационная работа на тему: Совершенствование рекламной стратегии на примере предприятия гостиничного хозяйства. (Слайд 2) Целью дипломного проекта является совершенствование рекламной стратегии на примере предприятия гостиничного хозяйства ООО Турист-Сервис-Плюс. Достижение поставленной цели включает последовательное...»

«Пояснительная записка Современная социокультурная ситуация в России предъявляет высокие требования к профессиональной компетентности исследователя в области филологии, литературоведения в том числе. Научная школа образовательного учреждения ГБОУ ВПО Московский городской педагогический университет по профилю 10.01.03 – Литература народов стран зарубежья (литература Англии, Франции, Германии и Америки) ориентирована на изучение широкого круга проблем профессионального образования в рамках...»

«АННОТАЦИЯ ОСНОВНОЙ ОБРАЗОВАТЕЛЬНОЙ ПРОГРАММЫ ПОДГОТОВКИ БАКАЛАВРОВ Направление 15.03.06 Мехатроника и робототехника 15.03.06_02 Мехатронные системы в автоматизированном производстве Выпускающий институт: Институт металлургии, машиностроения и транспорта Выпускающая кафедра: Автоматы Руководитель ООП – д.т.н., проф. Волков А.Н. Цель и концепция программы Образовательная программа разработана для подготовки бакалавров, готовых к решению задач в области современного машиностроения, мехатроники и...»

«Министерство образования и науки Астраханской области Г АОУ А О В ПО А с т р а х а н с к и й и н ж е н е р н о - с т р о и т е л ь н ы й и н с т и т у т УТВЕРЖДАЮ Первый проректор _ /_/ Ф.И.О. Подпись _ _2013 г. РАБОЧАЯ ПРОГРАММА Наименование дисциплины ВВЕДЕНИЕ В ПРОФЕССИЮ По направлению подготовки 270200 –Реконструкция и реставрация архитектурного наследия По профилю подготовки Реставрация объектов архитектурного наследия Кафедра Дизайн, реконструкция и реставрация Квалификация (степень)...»

«АКАДЕМИЯ УПРАВЛЕНИЯ ПРИ ПРЕЗИДЕНТЕ КЫРГЫЗСКОЙ РЕСПУБЛИКИ Институт инноваций и информационно-аналитического обеспечения Фонд Ханнса Зайделя СПРАВОЧНИК СЛУШАТЕЛЯ МАГИСТЕРСКИХ ПРОГРАММ ИНСТИТУТА ГОСУДАРСТВЕННОГО И МУНИЦИПАЛЬНОГО УПРАВЛЕНИЯ 2011/2012 УЧЕБНЫЙ ГОД Бишкек-2011 УДК ББК 92 С74 Справочник слушателя магистерских программ Института государственного и муниципального управления. 2011-2012 учебный год.- Б.:АУПКР, 2011 г.-51 с. ISBN Справочное издание СПРАВОЧНИК СЛУШАТЕЛЯ МАГИСТЕРСКИХ ПРОГРАММ...»

«Николай Мурашов Тестовый файл электронной книги Учебно-демонстрационное пособие для сайта Book on the Move Оригинальная PDF-версия Санкт-Петербург 2014 Published by docking the mad dog Аннотация Тестовый файл в формате ePub собран для проверки читабельности формата на различных устройствах и в различных программах чтения. Вторая функция – проверка корректности конвертирования в другие форматы электронных книг (fb2, mobi, azw3, pdf). Файл может использоваться для изучения структуры и...»

«Федеральное агентство по образованию ГОУ ВПО Алтайский государственный университет Юридический факультет Конституционное (государственное) право Российской Федерации Программа для поступающих в магистратуру по направлению Юриспруденция Издательство Алтайского государственного университета Барнаул 2010 ББК 67.620 Н 403 Составитель: Заслуженный юрист РФ д.ю.н., профессор В.В. Невинский Н 403 Конституционное (государственное) право Российской Федерации: программа для поступающих в магистратуру по...»

«МИНИСТЕРСТВО СЕЛЬСКОГО ХОЗЯЙСТВА РФ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ ОРЛОВСКИЙ ГОСУДАРСТВЕННЫЙ АГРАРНЫЙ УНИВЕРСИТЕТ Утверждаю Проректор по УР профессор Т.И.Гуляева _2011 г. Рабочая программа дисциплины Сегетальный компонент агрофитоценозов Направление подготовки: 110400. 68 Агрономия Квалификация (степень): магистр сельского хозяйства Программа: Экологически сбалансированное земледелие с элементами прецизионных технологий...»

«МИНИСТЕРСТВО СЕЛЬСКОГО ХОЗЯЙСТВА РОССИЙСКОЙ ФЕДЕРАЦИИ УЛЬЯНОВСКАЯ ГОСУДАРСТВЕННАЯ СЕЛЬСКОХОЗЯЙСТВЕННАЯ АКАДЕМИЯ ФАКУЛЬТЕТ ВЕТЕРИНАРНОЙ МЕДИЦИНЫ Кафедра клинической диагностики и внутренних незаразных болезней животных РАБОЧАЯ ПРОГРАММА по дисциплине ПАТОЛОГИЧЕСКАЯ ФИЗИОЛОГИЯ (заочное обучение) Специальность – 110501 Ветеринарно-санитарная экспертиза Специализация – ветеринарная экспертиза продуктов животноводства сокращенный срок обучения Ульяновск -2008 МИНИСТЕРСТВО СЕЛЬСКОГО ХОЗЯЙСТВА...»

«ПРОГРАММА УЧЕБНОЙ ДИСЦИПЛИНЫ Наименование дисциплины Петрография мерзлых пород Рекомендуется для направления подготовки 020700 Геология по профилю Гидрогеология и инженерная геология профилизация Геокриология Квалификация (степень) выпускника Бакалавр 1. Цели и задачи освоения дисциплины Целями освоения дисциплины Петрография мерзлых пород являются приобретение студентами знаний о природе и закономерностях формирования состава, строения и свойств мерзлых пород и льдов. Задачи: - формирование...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ УТВЕРЖДАЮ _ _20_12 г. РАБОЧАЯ ПРОГРАММА УЧЕБНОЙ ДИСЦИПЛИНЫ История мировых религий Образовательная программа высшего профессионального образования Квалификация (степень) выпускника Специалист Форма обучения _очная_ Барнаул 2012 ПОЯСНИТЕЛЬНАЯ ЗАПИСКА Курс История мировых религий включает в себя изучение и понимание процесса зарождения и развития такого исторического феномена как мировые религии, их взаимоотношения между собой и с теми формами...»

«Всероссийский научный форум Мать и дитя The Russian Scientific Forum Care Mother & child 3 -6 октября 2006 МОСКВА, Центр международной торговли VIII Международная медицинская специализированная выставка ОХРАНА ЗДОРОВЬЯ ОРГАНИЗАТОРЫ: Министерство МАТЕРИ И РЕБЕНКА здравоохранения и 2006 социального развития РФ Российская академия медицинских наук Российское общество акушеров-гинекологов Научный центр Всероссийский научный форум акушерства, гинекологии и перинатологии РАМН МАТЬ И ДИТЯ ЗАО МЕДИ...»

«Российский Национальный комитет по теоретической и прикладной механике Научный совет РАН по механике деформируемого твердого тела Российский фонд фундаментальных исследований Южный федеральный университет Научно-исследовательский институт механики и прикладной математики им. Воровича И.И. Южный научный центр РАН VII Всероссийская (с международным участием) конференция по механике деформируемого твёрдого тела ПРОГРАММА 15-18 октября 2013 г. Ростов-на-Дону ПРОГРАММА VII Всероссийской (с...»

«Безопасность строительства и качество устройства электрических сетей и линий связи Лекция 2 Тема: Инновации в технологии устройства электрических сетей и линий связи. Содержание: Лекция 2. Инновации в технологии устройства электрических сетей и линий связи Глава 1. Устройство внутренних электрических сетей Глава 2. Устройство электрических и иных сетей управления жизнеобеспечения зданий и сооружений Электрическое отопление и горячее водоснабжение Учет электроэнергии, измерительные приборы Глава...»

«Novell® eDirectory™ 8.7 Лицензионное соглашение на программное обеспечение Novell ПОЖАЛУЙСТА, ВНИМАТЕЛЬНО ПРОЧИТАЙТЕ НАСТОЯЩЕЕ СОГЛАШЕНИЕ. УСТАНОВКА ИЛИ ИСПОЛЬЗОВАНИЕ ДАННОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИНЫМ СПОСОБОМ ОЗНАЧАЕТ, ЧТО ВЫ СОГЛАСНЫ С УСЛОВИЯМИ ЭТОГО СОГЛАШЕНИЯ. ЕСЛИ ВЫ НЕ СОГЛАСНЫ С УСЛОВИЯМИ НАСТОЯЩЕГО СОГЛАШЕНИЯ, НЕ ЗАГРУЖАЙТЕ, НЕ УСТАНАВЛИВАЙТЕ И НЕ ИСПОЛЬЗУЙТЕ ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ. ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ НЕ МОЖЕТ БЫТЬ ПРОДАНО, ПЕРЕДАНО ИЛИ РАСПРОСТРАНЕНО БЕЗ...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ МАШИНОСТРОИТЕЛЬНЫЙ УНИВЕРСИТЕТ (МАМИ) / УНИВЕРСИТЕТ МАШИНОСТРОЕНИЯ / УТВЕРЖДАЮ Первый проректор /И.И. Колтунов/ _ _2013 г. ПРОГРАММА вступительного экзамена в аспирантуру по специальности 05.11.15 Метрология и метрологическое обеспечение (технические науки) Москва, 2013 г. Программа подготовки сдачи вступительных...»

«2 РЕФЕРАТ Курсовая работа 25 страниц, 1 рисунок, 5 таблиц, 10 источников, 3 приложения. ТОВАРНАЯ ПОЛИТИКА, ТОВАР, АССОРТИМЕНТ, СТРАТЕГИЯ, ПОТРЕБИТЕЛЬ, КАЧЕСТВО, КОНКУРЕНТОСПОСОБНОСТЬ, ИННОВАЦИЯ, ЦЕНА, СПРОС, РЫНОК, СБЫТ, ПРИБЫЛЬ. Объект исследования – товарная и ассортиментная политика ООО Железобетон. Цель работы - рассмотрение и анализ ассортиментной политики предприятия в условиях рынка. В процессе работы проводились исследования ассортимента, а также ценовой политики фирмы. Ассортиментная...»

«TD/B/WP/234 Организация Объединенных Наций Конференция Организации Distr.: General Объединенных Наций 27 June 2011 Russian по торговле и развитию Original: English Совет по торговле и развитию Рабочая группа по стратегическим рамкам и бюджету по программам Пятьдесят девятая сессия Женева, 57 сентября 2011 года Пункт 4 предварительной повестки дня Оценка деятельности ЮНКТАД: углубленная оценка программы ЮНКТАД в области науки и техники в целях развития Углубленная оценка программы ЮНКТАД в...»

«Министерство образования и науки РФ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования Петрозаводский государственный университет Кольский филиал ОТЧЕТ О САМООБСЛЕДОВАНИИ КОЛЬСКОГО ФИЛИАЛА ФЕДЕРАЛЬНОГО ГОСУДАРСТВЕННОГО БЮДЖЕТНОГО ОБРАЗОВАТЕЛЬНОГО УЧРЕЖДЕНИЯ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ ПЕТРОЗАВОДСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ Апатиты 2014 СОДЕРЖАНИЕ 1. ОБЩИЕ СВЕДЕНИЯ О ФИЛИАЛЕ 2. ОБРАЗОВАТЕЛЬНАЯ ДЕЯТЕЛЬНОСТЬ 2.1. Информация о...»






 
2014 www.av.disus.ru - «Бесплатная электронная библиотека - Авторефераты, Диссертации, Монографии, Программы»

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