S7–200 6ES7 216-2AD23-0XB0 хранит информацию в различных местах памяти, которые имеют однозначные адреса. Вы можете явно указать адрес в памяти, к которому вы хотите обратиться. Благодаря этому ваша программа имеет прямой доступ к информации. Таблица ниже показывает диапазон целых значений, которые могут быть представлены с помощью данных различной длины.
Представление | Байт (B) | Слово (W) | Двойное слово (D) | Целое без знака | от 0 до 255
от 0 до FF | от 0 до 65 535
от 0 до FFFF | от 0 до 4 294 967 295
от 0 до FFFF FFFF | Целое со знаком | от -128 до +127
от 80 до 7F | от –32 768 до +32 767
от 8000 до 7FFF | от –2 147 483 648 до +2 147 483 647
от 8000 0000 до 7FFF FFFF | Вещественное IEEE 32–битовое с плавающей точкой | Неприменимо | Неприменимо | от +1.175495E-38 до +3.402823E+38
(положительное)
от –1.175495E-38 до –3.402823E+38
(отрицательное) |
Для обращения к биту в некоторой области памяти вы должны указать адрес бита. Этот адрес состоит из идентификатора области памяти, адреса байта и номера бита. На рисунке ниже показан пример обращения к биту (адресация в формате «байт.бит»). В этом примере за областью памяти и адресом байта (I = input [вход], 3 = байт 3) следует точка («.»), чтобы отделить адрес бита (бит 4).
Применяя формат байт.бит, вы можете обратиться к данным в большинстве областей памяти (V, I, Q, M, S, L и SM) как к байтам, словам или двойным словам. Если вы хотите обратиться к байту, слову или двойному слову данных в памяти, то вы должны указать эти адреса подобно адресу бита. Вы указываете идентификатор области, обозначение длины данных и начальный адрес байта, слова или двойного слова, как показано на рисунке ниже:
Обращение к данным в областях памяти 6ES7 216-2AD23-0XB0
Регистр входов образа процесса: I
В начале каждого цикла S7–200 опрашивает физические входы и записывает полученные значения в регистр входов образа процесса. К образу процесса можно обратиться в формате бита, байта, слова и двойного слова:
Бит: | I[адрес байта].[адрес бита] | I0.1 | Байт, слово или двойное слово: | I[длина][начальный адрес байта] | IB4 |
Регистр выходов образа процесса: Q
В конце цикла S7–200 копирует значения, хранящиеся в регистре выходов образа процесса, в физические выходы. К образу процесса можно обратиться в формате бита, байта, слова и двойного слова:
Бит: | Q[адрес байта].[адрес бита] | Q1.1 | Байт, слово или двойное слово: | Q[длина][начальный адрес байта] | QB5 |
Область памяти переменных: V
Память переменных можно использовать для хранения промежуточных результатов операций, выполняемых в вашей программе. В памяти переменных вы можете хранить также другие данные, имеющие отношение к процессу или к решению вашей задачи автоматизации. К памяти переменных можно обратиться в формате бита, байта, слова и двойного слова:
Бит: | V[адрес байта].[адрес бита] | V10.2 | Байт, слово или двойное слово: | V[длина][начальный адрес байта] | VW100s |
Область битовой памяти: M
Биты памяти (меркеры) можно использовать как управляющие реле для хранения промежуточных результатов операций или другой управляющей информации. К битам памяти можно обратиться в формате бита, байта, слова и двойного слова:
Бит: | M[адрес байта].[адрес бита] | M26.7 | Байт, слово или двойное слово: | M[длина][начальный адрес байта] | MD20 |
Таймеры 6ES7 216-2AD23-0XB0: T
S7–200 имеет в своем распоряжении таймеры, которые отсчитывают приращения времени с разрешениями (шагами базы времени) 1 мс, 10 мс или 100 мс. С таймером связаны две переменные:
- Текущее значение: это 16–битовое целое со знаком хранит количество времени, отсчитанное таймером.
- Бит таймера: этот бит устанавливается или сбрасывается, когда текущее значение становится равным предустановленному значению. Предустановленное значение вводится как часть таймерной команды.
Вы обращаетесь к обоим этим элементам данных через адрес таймера (T + номер таймера). Происходит ли обращение к биту таймера или к текущему значению, зависит от используемой команды: команды с операндами в битовом формате обращаются к биту таймера, тогда как команды с операндами в формате слова обращаются к текущему значению. Как показано на рисунке ниже, команда "Нормально открытый контакт" обращается к биту таймера, а команда "Передать слово" обращается к текущему значению таймера.
Формат: | T[номер таймера] | T24 |
Счетчики: C
S7–200 имеет в своем распоряжении три вида счетчиков, которые подсчитывают нарастающие фронты на счетных входах счетчика: один вид счетчиков ведет прямой счет, другой считает только в обратном направлении, а третий вид считает в обоих направлениях.
Со счетчиком связаны две переменные:
- Текущее значение: это 16–битовое целое со знаком хранит счетное значение, накопленное счетчиком.
- Бит счетчика: этот бит устанавливается или сбрасывается, когда текущее значение становится равным предустановленному значению. Предустановленное значение вводится как часть команды счетчика.
Вы обращаетесь к обоим этим элементам данных через адрес счетчика (C + номер счетчика). Происходит ли обращение к биту счетчика или к текущему значению, зависит от используемой команды: команды с операндами в битовом формате обращаются к биту счетчика, тогда как команды с операндами в формате слова обращаются к текущему значению. Как показано на рисунке ниже, команда "Нормально открытый контакт" обращается к биту счетчика, а команда "Передать слово" обращается к текущему значению счетчика.
Формат: | C[номер счетчика] | C24 |
Скоростные счетчики: HC
Скоростные счетчики подсчитывают быстрые события независимо от цикла CPU.
Скоростные счетчики имеют в своем распоряжении 32–битовое целое счетное значение (текущее значение). Для обращения к счетному значению скоростного счетчика введите его адрес, указав область памяти (HC) и номер счетчика (напр., HC0). Текущее значение скоростного счетчика защищено от записи и может быть адресовано только в формате двойного слова (32 бита).
Формат: | HC[номер скоростного счетчика] | HC1 |
Аккумуляторы: AC
Аккумуляторы – это элементы чтения/записи, которые могут использоваться как память. Например, вы можете использовать аккумуляторы для передачи параметров в подпрограммы и из них или для хранения промежуточных результатов расчетов. S7–200 имеет в своем распоряжении четыре 32–битовых аккумулятора (AC0, AC1, AC2 и AC3). К данным в аккумуляторах можно обратиться в формате бита, слова или двойного слова. Длина данных, к которым производится обращение, зависит от команды, которая используется для обращения к аккумулятору. Как показано на рисунке ниже, при обращении к аккумулятору в формате бита или слова используются младшие 8 или 16 битов значения, хранящегося в аккумуляторе. При обращении к аккумулятору в формате двойного слова используются все 32 бита.
Формат: | AC[номер аккумулятора] | AC0 |
Специальные биты памяти: SM
Специальные биты памяти (SM) предоставляют средство для обмена данными между CPU и вашей программой. Вы можете использовать эти биты для выбора и управления некоторыми специальными функциями CPU S7–200 6ES7 216-2AD23-0XB0, например: бит, который устанавливается только в первом цикле; бит, который устанавливается и сбрасывается с фиксированной частотой, или бит, который указывает на состояние арифметической или иной команды. К SM-битам можно обращаться в формате бита, слова или двойного слова:
Бит: | SM[адрес байта].[адрес бита] | SM0.1 | Байт, слово или двойное слово: | SM[длина][начальный адрес байта] | SMB86 |
Память локальных данных: L
S7–200 имеет в своем распоряжении 64 байта локальной памяти, из которых 60 могут быть использованы в качестве промежуточной памяти или для передачи формальных параметров в подпрограммы.
Совет
При программировании в LAD или FBD последние четыре байта зарезервированы для STEP 7-Micro/WIN. |
Память локальных данных похожа на память переменных с одним существенным отличием. Память переменных доступна глобально, тогда как память локальных данных доступна локально. Глобальная доступность означает, что к адресу в этой области памяти можно обратиться из любой организационной единицы программы (из основной программы, подпрограммы или подпрограмм обработки прерываний). Локальная доступность означает, что эта область памяти ставится в соответствие определенной организационной единице программы. S7–200 выделяет 64 байта локальной памяти для главной программы, 64 байта для каждого уровня вложенности подпрограмм и 64 байта для программ обработки прерываний.
К области локальных данных, поставленной в соответствие основной программе, не имеют доступа подпрограмм и программы обработки прерываний. Подпрограмма не может обращаться к области локальных данных основной программы, программы обработки прерываний или другой подпрограммы. Аналогично, программа обработки прерываний не имеет доступа к области локальных данных основной программы или подпрограммы.
S7–200 выделяет область локальных данных по мере необходимости. Это значит, что при выполнении основной программы области локальных данных для подпрограмм и программ обработки прерываний не существуют. Если возникает прерывание или вызывается подпрограмма, то по потребности выделяется локальная память. Вновь выделенная локальная память может снова использовать те же адреса, которые использовались другой подпрограммой или программой обработки прерываний.
S7–200 не инициализирует область локальных данных к моменту ее назначения, поэтому она может содержать любые значения. Если при вызове подпрограммы передаются формальные параметры, то S7–200 сохраняет значения передаваемых параметров в соответствующих адресах области локальных данных, выделенной этой подпрограмме. Адреса в области локальных данных, которые не получили значений при передаче формальных параметров, не инициализируются и при выделении могут содержать произвольные значения.
Бит: | L[адрес байта].[адрес бита] | L0.0 | Байт, слово или двойное слово: | L[длина] [начальный адрес байта] | LB33 |
Аналоговые входы: AI
S7–200 преобразует аналоговые величины (например, температуру или напряжение) в цифровые величины, имеющие длину слова (16 битов). Обращение к этим значениям производится через идентификатор области (AI), длину данных (W) и начальный адрес байта. Так как в случае аналоговых входов речь идет о словах, которые всегда начинаются на байтах с четными номерами (например, 0, 2, 4 и т.д.), то обращаются к этим значениям с помощью адресов четных байтов (например, AIW0, AIW2, AIW4). Аналоговые входы можно только считывать.
Формат: | AIW[начальный адрес байта] | AIW4 |
Аналоговые выходы: AQ
S7–200 преобразует цифровые величины, имеющие длину слова (16 битов), в ток или напряжение пропорционально цифровой величине. Обращение к этим значениям производится через идентификатор области (AQ), длину данных (W) и начальный адрес байта. Так как в случае аналоговых выходов речь идет о словах, которые всегда начинаются на байтах с четными номерами (например, 0, 2, 4 и т.д.), то эти значения записываются с адресами четных байтов (например, AQW0, AQW2, AQW4). Аналоговые выходы можно только записывать.
Формат: | AQW[начальный адрес байта] | AQW4 |
Реле управления очередностью (SCR): S
SCR или S-биты разделяют функционирование установки на отдельные шаги или эквивалентные части программы. С помощью реле управления очередностью программа управления представляется в виде структуры, состоящей из логических сегментов. К S-битам можно обращаться в формате бита, слова или двойного слова.
Бит: | S[адрес байта].[адрес бита] | S3.1 | Байт, слово или двойное слово: | S[длина][начальный адрес байта] | SB4 |
Формат вещественных чисел
Вещественные числа (или числа с плавающей точкой) представляются как 32–битовые числа однократной точности, формат которых описан в стандарте ANSI/IEEE 754-1985. См.рисунок ниже. Обращение к вещественным числам производится в формате двойного слова.
У S7–200 6ES7 216-2AD23-0XB0 числа с плавающей точкой имеют точность до 6 десятичных разрядов. Поэтому при вводе константы с плавающей точкой можно указывать до 6 десятичных разрядов. | |
Точность при вычислениях с вещественными числами
Расчеты, включающие в себя длинные последовательности значений, содержащие очень большие и очень малые числа, могут привести к неточным результатам. Это может произойти, если числа отличаются друг от друга в 10 в степени x раз, где x > 6. Например: 100 000 000 + 1 = 100 000 000
Формат для строк
Строка – это последовательность символов, причем каждый символ хранится как байт. Первый байт строки определяет ее длину, т.е. количество содержащихся в ней символов. На рисунке ниже показан формат строки. Строка может включать в себя от 0 до 254 символов, плюс байт, содержащий информацию о длине, таким образом, максимальная длина строки равна 255 байтам. Строковая константа ограничена 126 байтами.
Задание постоянного значения для команд S7–200
Во многих командах для S7–200 можно использовать константы. Константы могут быть байтами, словами или двойными словами. S7–200 6ES7 216-2AD23-0XB0 хранит все константы в виде двоичных чисел, которые могут быть представлены в десятичном, шестнадцатеричном формате, в формате ASCII или в формате вещественных чисел (чисел с плавающей точкой).
Представление | Формат | Пример | Десятичное | [десятичное значение] | 20047 | Шестнадцатеричное | 16#[шестнадцатеричное значение] | 16#4E4F | Двоичное | 2#[ двоичное число] | 2#1010_0101_1010_0101 | ASCII | ’[текст ASCII]’ | ’ABCD’ | Вещественное | ANSI/IEEE 754-1985 | +1.175495E-38 (положительное)
−1.175495E-38 (отрицательное) | Строка | «[текст строки]» | «ABCDE» |
Совет
У CPU S7–200 нельзя указывать конкретные типы данных (когда вы, например, хотите указать, что константа должна быть сохранена как целое число (16 битов), целое число со знаком или двойное целое (32 бита)). Например, команда сложения может использовать значение, хранящееся в VW100, как целое число со знаком, а команда "Исключающее ИЛИ" то же самое значение в VW100 может использовать как двоичное значение без знака. |
Адресация встроенных входов/выходов и входов/выходов модулей расширения
Встроенные входы и выходы центрального устройства (CPU) имеют фиксированные адреса. Вы можете добавить входы и выходы к CPU S7–200, подключив с правой стороны CPU модули расширения. Адреса входов и выходов на модуле расширения определяются видом входов и выходов, а у нескольких модулей одного типа также их расположением. Например, модуль вывода не влияет на адреса модуля ввода и наоборот. Адреса входов и выходов аналоговых и цифровых модулей также не зависят друг от друга.
Совет
Для цифровых входов и выходов в образе процесса предусмотрены участки по восемь битов (одному байту) каждый. Если в модуле не для каждого бита зарезервированного байта имеется физический вход или выход, то свободные биты теряются и не могут быть поставлены в соответствие следующим модулям расширения этого CPU. У модулей ввода свободные биты в зарезервированных байтах в каждом цикле обновления устанавливаются в ноль.
Аналоговые входы и выходы всегда назначаются двойными шагами. Если в модуле не для каждого из этих входов и выходов имеется физический вход или выход, то эти входы и выходы теряются и не могут быть поставлены в соответствие следующим модулям расширения. |
На рисунке ниже показан пример нумерации входов и выходов для конкретной конфигурации аппаратуры. Пропуски в адресации (показаны серым курсивом) не могут использоваться вашей программой.
Косвенная адресация областей памяти S7–200 с помощью указателей
Косвенная адресация использует указатель для доступа к данным в памяти. Указатели – это ячейки памяти, имеющие размер двойного слова, которые содержат адрес другой ячейки памяти. В качестве указателей можно использовать только ячейки памяти переменных и локальных данных или аккумуляторные регистры (AC1, AC2 или AC3). Для создания указателя необходимо использовать команду "Переместить двойное слово". Эта команда передает адрес косвенно адресованной ячейки памяти в ячейку указателя. Указатели могут также передаваться в подпрограмму в качестве параметров.
S7–200 дает возможность использования указателей для косвенной адресации следующих областей памяти: I, Q, V, M, S, AI, AQ, SM, T (только текущее значение) и C (только текущее значение). Косвенную адресацию нельзя использовать для обращения к отдельному биту или к областям памяти HC или L.
Если вы хотите косвенно обратиться к данным, расположенным по некоторому адресу в памяти, вы можете создать указатель на этот адрес, введя амперсанд (&) и соответствующий адрес. Входному операнду команды должен предшествовать амперсанд (&), чтобы указать на необходимость перемещения в ячейку, обозначенную в выходном операнде команды (указателе), адреса ячейки памяти, а не ее содержимого.
Ввод астериска (*) перед операндом команды указывает, что этот операнд является указателем. Как показано на рисунке ниже, ввод *AC1 указывает, что AC1 является указателем на слово, на которое ссылается команда "Переместить слово" (MOVW). В этом примере значения, хранящиеся в VB200 и VB201, перемещаются в аккумулятор AC0.
Как показано на следущем рисунке, вы можете изменить значение указателя. Так как указатели имеют размер 32 бита, то для изменения значений указателей используйте операции над двойными словами. Для изменения значений указателей могут использоваться такие простые математические операции, как сложение или инкрементирование.
Совет
Не забывайте указывать длину данных, к которым вы хотите обратиться: для обращения к байту увеличьте значение указателя на 1; для обращения к слову или текущему значению таймера или счетчика, увеличьте значение указателя на 2, для обращения к двойному слову увеличьте значение указателя на 4. |
Пример программы для обращения к данным в памяти переменных с использованием смещения | В этом примере используется LD10 как указатель на адрес VB0. Затем вы увеличиваете указатель на величину смещения, хранящуюся в VD1004. Теперь LD10 указывает на другой адрес в памяти переменных (VB0 + смещение). Значение, хранящееся в памяти переменных по адресу, на который указывает LD10, копируется в VB1900. Изменяя значение в VD1004, вы можете обратиться к любому адресу в памяти переменных. | |
Сегмент 1
Чтение значения из произвольного адреса VB с помощью смещения:
- Загрузить в указатель начальный адрес памяти переменных.
- Прибавить к указателю величину смещения.
- Скопировать значение из адреса в памяти переменных (смещение) в VB1900.
LD SM0.0
MOVD &VB0, LD10
+D VD1004, LD10
MOVB *LD10, VB1900 |
Пример программы для обращения к данным в таблице с использованием указателя | Этот пример использует LD14 как указатель на рецепт, хранящийся в таблице рецептов, которая начинается с VB100. В этом примере VW1008 хранит индекс места конкретного рецепта в таблице. Если каждый рецепт в таблице имеет длину 50 байтов, умножьте индекс на 50, чтобы получить смещение для начального адреса конкретного рецепта. Добавив смещение к указателю, вы можете получить доступ к каждому отдельному рецепту в таблице. В этом примере рецепт копируется в 50 байтов, которые начинаются с VB1500. | |
Сегмент 1
Передача рецепта из таблицы с рецептами:
- каждый рецепт имеет длину 50 байтов.
- индексный параметр (VW1008) идентифицирует рецепт, подлежащий загрузке.
- Создание указателя на начальный адрес таблицы рецептов.
- Преобразование индекса рецепта в значение двойного слова.
- Умножение смещения для учета длины рецепта.
- Прибавление измененного смещения к указателю.
- Передача выбранного рецепта в ячейки с VB1500 по VB1549.
LD SM0.0
MOVD &VB100, LD14
ITD VW1008, LD18
*D +50, LD18
+D LD18, LD14
BMB *LD14, VB1500, 50 |
|