-
Ivydy
- Дилетант
- Сообщения: 18
- Зарегистрирован: 13 фев 2018, 16:17
Перестановка местами WORD в REAL
Здравствуйте. Имею следующее. TIA Portal V15, S7-1200 с коммуникационным модулем CM1241 (MASTER).
По RS485 общаюсь с датчиком виброскорости(SLAVE). С датчика получаю ряд данных в виде массива REAL, но проблема, что видятся они в неадекватном виде. Я так понимаю, что нужно поменять местами WORD в REAL, то есть AB CD —> CD AB. Функции SWAP не подходят, они переделывают по другому. Как можно это сделать ? Заранее спасибо.
-
Михайло
- Администратор
- Сообщения: 4073
- Зарегистрирован: 19 сен 2012, 19:16
Re: Перестановка местами WORD в REAL
Сообщение
Михайло » 09 июл 2019, 20:51
Создаем функцию FC, у нее в разделе Input создаем переменную in типа Real, в разделе Output — переменную out типа Real, в разделе Temp — переменные t типа DWord, ab, cd типа Word. Пишем на языке LAD или FBD.
1. MOVE из in в t.
2. MOVE из t.w0 в ab.
3. MOVE из t.w1 в cd.
4. MOVE из ab в t.w1.
5. MOVE из cd в t.w0.
6. MOVE из t в out.
Используем функцию многократно.
Hmmm thank you guys for all the reactions…
I’m not seriously trained with conversions, but its looks a bit complicated.
Maybe if I post the reading and writing code, it would be easier to understand how I programmed this…
So it’s a drive which is controlled from Scada, programmed with SCL
//Read out the Status Word and Main Actual Value
i_stw_w :=IW [STW];
i_mav_w :=IW [MAV];
//Convert Statusword from WORD to INT
i_stw :=WORD_TO_INT(i_stw_w);
i_mav :=WORD_TO_INT(i_mav_w);
//Check speed of the drive
PV := INT_TO_REAL (i_mav);
PV := (PV / 163.84);
The Drive actual frequency is read and displayed at Scada.
On the other hand, the drive can be controlled by extern setpoint (software logic) or intern setpoint (operator), looking like this:
—> act_sp = extern or intern setpoint
//Convert OS value to drive logic
act_sp := act_sp * 163.84;
//Convert
qact_sp_i := REAL_TO_INT(act_sp);
qact_sp_w := INT_TO_WORD(qact_sp_i);
//Send speed to drive
QW [MRV] := qact_sp_w;
I give the intern setpoint 20.0, but the drive will send 21.5.
That is the main problem. My program looks complicated and maybe could be made easier and better.
I’ll try the answers you gave me and i’ll post the updates…
Thank you
2. ОСНОВНЫЕ ПОНЯТИЯ ЯЗЫКА STEP 7
2.1. Структура программы
Программное обеспечение ПЛК состоит из следующих частей:
Операционная система: содержит общую часть всех инструкций и соглашений для
реализации внутренних функций (например, сохранение данных при сбросе напряжения питания, управление реакцией на прерывания и т. д.). Она расположена на так называемом EPROM (Erasable Programmable Read Only Memory) и является фиксированной составной частью процессора. Пользователь не имеет возможности изменять части операционной системы.
Программа пользователя: содержит набор всех написанных пользователем инструкций
и соглашений для обработки сигналов, с помощью которых производится управление процессом или машиной. Программа пользователя разделяется на блоки. Деление программы на блоки делает ее структуру более понятной и подчеркивает программно-технические связи отдельных частей установки.
Блоком называется часть программы пользователя, ограниченная функционально и структурно или по целям использования.
Различают блоки содержащие:
Рекомендуемые материалы
· инструкции для обработки сигналов;
· блоки, содержащие данные (блоки данных).
Блоки идентифицируются:
• типом блока (OB, PB, SB, FB, FX, DB, DX);
• номером блока (число от 0 до 255).
2.2. Инструкции языка STEP.
Инструкция языка STEP является наименьшей самостоятельной единицей программы пользователя. Она является предписанием для работы процессора. Инструкция может быть представлена в виде:
· Списка команд (инструкций) – STL. Представляет собой список команд подобно обычному языку Ассемблера.
· Контактный план — LAD. Управляющая программа записывается при помощи изображений элементов релейных контактных схем.
· Функциональный план – FDB. Для отображения программы используются схемы логических элементов.
STL-программа состоит из ряда отдельных выражений (statement), наименьших самостоятельных единиц пользовательской программы.
Выражение содержит описание работы для CPU. На рисунке 4 показана общая структура STL-выражения. Инструкция языка STEP состоит из операции и операнда.
Операнд может быть представлен абсолютно или символически (через список
соответствия).
а) в)
Рисунок 4 — Инструкции языка STEP7
а)структура STL-выражения; в) виды представления инструкций языка STEP7
2.3. Типы блоков
Таблица 1 содержит перечень и краткое описание программных блоков для контроллеров SIMATIC S7, а также блоков данных.
Таблица 1-Программные блоки и блоки данных
Блок |
Выполняемые функции |
ОВ |
Организационные блоки. Предназначены для: организации циклического выполнения программы пользователя (ОВ1), обработки событий: · включения питания (ОВ100), · циклического прерывания (ОВЗ0-ОВ38), · прерывания по дате и времени (ОВ10-ОВ17), · прерывания по задержке времени (ОВ20-ОВ23), · возникновения ошибки (ОВ40-ОВ47, ОВ80-ОВ87, ОВ121, ОВ122). Блоки вызываются автоматически операционной системой контроллера в случае возникновения того или иного события.1 |
FC |
Функция. Может быть вызвана из любого блока. Допускается передача параметров в функцию и обратно. Функция может также иметь локальные переменные, которые теряются при выходе из блока. |
FB |
Функциональный блок. Также может быть вызван из любого блока и может иметь формальные и локальные параметры. Особенностью FB является наличие переменных типа STAT, которые сохраняют свое значение при выходе из блока. Поэтому функциональный блок имеет один или несколько связанных с ним блоков |
SFC |
Системная функция. Это функция, уже имеющаяся в ОС CPU. Предназначена для выполнения определенных стандартных действий. |
SFB |
Системный функциональный блок. Аналогичен FB, но, как и SFC, уже имеется в составе ОС контроллера. |
DB |
Блок данных программы пользователя. Предназначен для долговременного хранения информации. |
DI |
Блок данных функционального блока. Используется для хранения значений переменных функционального блока. Отличается от DB наличием жесткой структуры, определяемой связанным с ним функциональным блоком. |
В контроллерах SIMATIC S7 существует несколько способов обработки управляющей программы:
1. Циклическая обработка. Состоит из периодически повторяющихся обработок управляющей программы, которая начинается с вызова организационного блока ОВ1. В начале цикла обработки программы ОС заполняет область отображения входов, сбрасывает таймер контроля длительности цикла, после этого вызывает для обработки блок ОВ1. В конце цикла обработки ОС переписывает в выходные модули значения из области отображения выходов, после чего начинается следующий цикл обработки. В блоке ОВ1 можно вызывать функции и функциональные блоки. После обработки вызванного блока управление передается блоку, из которого был произведен вызов данного блока.
2. Циклические прерывания. При управлении ТП всегда существуют программы, которые должны обрабатываться через одинаковые, заранее заданные, промежутки времени. Для этих целей в контроллерах SIMATIC S7 существуют блоки обработки циклических прерываний. Промежуток времени, через который должен вызываться данный блок, задается программистом.
3. Прерывания по дате и времени. Существуют программы, которые
должны выполниться один раз в определенный день и час или выполняться периодически, начиная с определенных даты и времени. Для этих целей в контроллерах SIMATIC S7 можно запрограммировать блоки прерываний по дате и времени.
4. Прерывания по задержке времени. Такие блоки вызываются по истечении определенного времени после возникновения какого-либо события.
5. Обработка включения питания. Часто при включении питания необходимо выполнить какие-либо однократные действия: первичную
установку, инициализацию и т.д. Для этих целей предусмотрены блоки обработки включения
питания.
6. Обработка ошибок. Такие блоки выполняются в случае возникновения
аппаратных или программных ошибок.
Организационные блоки обрабатываются циклически. Период и приоритет
обработки определяется номером организационного блока (см. таблицу 2).
Таблица 2 — Период и приоритет обработки организационных блоков
Организационный блок |
Условия вызова |
Приоритет |
|
по умолчанию |
изменения |
||
OB1 |
Вызывается операционной системой |
1 |
Нет |
OB10 – OB17 |
В заданное время |
2 |
2 … 24 |
OB20 – OB23 |
По истечении времени |
3 … 6 |
2 … 24 |
Организационный блок |
Условия вызова |
Приоритет |
|
по умолчанию |
изменения |
||
OB30 – OB38 |
Через заданный интервал |
7 … 15 |
2 … 24 |
OB40 – OB47 |
От входов и выходов |
16 … 23 |
2 … 24 |
OB60 |
Мультипроцессорное |
25 |
Нет |
OB70, OB72, OB73 |
Ошибки резервирования |
25, 28, 25 |
2 … 28 |
OB80 – OB85 |
Асинхронные ошибки |
26 |
2 … 26 |
OB90 |
Фоновая обработка |
29 |
Нет |
OB100 |
При запуске |
27 |
Нет |
OB121, OB122 |
Ошибки выполнения программы |
Приоритет блока, вызвавшего программу |
2.4. Типы данных
Контроллеры SIMATIC S7 могут работать со следующими типами данных:
1. Элементарные типы данных (до 32 бит)
a. Битовые типы данных представлены следующими типами:
Бит (BOOL)
Бит — это единица, соответствующая одному двоичному разряду. Два возможных значения бита обозначаются «0» (FALSE) и «1» (TRUE).
Байт (BYTE)
Байт состоит из 8 бит, которым соответствуют битовые адреса от 0 до 7 (справа налево).
Старшим является бит с большим адресом. Байт могут образовать только те биты, адрес младшего из которых кратен 8, например: 0, 8, 16 и т.д. В контроллерах Simatic S7 байт может интерпретироваться как просто байт (набор бит) или как ASCII-символ.
Слово (WORD)
Слово — это следующая после байта по величине единица, ее длина 16 бит. Любые два соседних байта можно объединить в слово, старшим будет являться байт с меньшим адресом.
Адрес слова — это адрес байта с меньшим адресом. В контроллерах Simatic S7 слово может интерпретироваться как просто слово (набор бит), целое число со знаком, дата, время и т.д.
Двойное слово (DWORD)
Любые два соседних слова можно объединить в двойное слово, его длина — 32 бита или 4
байта. Старшим словом (байтом) является слово (байт) с меньшим адресом. Адрес двойного слова — это адрес байта с меньшим адресом. В контроллерах Simatic S7 двойное слово можно интерпретировать как просто двойное слово, длинное целое число со знаком, вещественное число в формате IEEE и т.д.
Таблица 3 — Представление битовых типов данных
Char (литера)
Переменная типа CHAR (character, литера) занимает один байт. Тип данных CHAR
представляет одну литеру в ASCII-формате, например, ‘А’.
Работая с этим типом данных, вы можете использовать любую печатную литеру в апострофах.
b. Математические типы данных представлены следующими типами:
INT (целое число)
Переменная типа INT (integer) хранится как целое число (16-битное число с фикси-
рованной запятой или десятичной точкой). Тип данных INT не имеет специального идентификатора.
Целочисленная переменная занимает одно машинное слово. Сигнальные состояния битов с 0-го по 14-ый представляют цифровые разряды (позиции) числа. Сигнальное состояние 15-го
бита представляет знак (sign, S).
DINT (двойное целое число)
Переменная типа DINT хранится как целое число (32-битное число с фиксированной запятой). Целое сохраняется в DINT-переменной. когда оно превышает 32 767 или меньше -32
768, или когда число предваряется идентификатором типа L#.
Под переменную типа DINT отводится двойное слово. Сигнальные состояния битов с 0-го
по 30-ый представляют цифровые позиции числа. Знак хранится в 31-м бите.
REAL (вещественный)
Переменная типа REAL представляет дробь и хранится как 32-битное число с плавающей запятой (десятичной точкой). Целое сохраняется как переменная типа REAL при добавлении
десятичной точки и тая.
В экспоненциальном представлении вы можете предварить «е» или «Е» целым числом
или дробью из семи соответствующих чисел и знака. Цифры, которые расположены за «е» или
«Е» представляют экспоненту по базе 10. STEP 7 производит преобразование REAL-переменной
во внутренне представление числа с плавающей точкой.
c. Временные типы данных представлены следующими типами:
S5TIME
Переменная типа S5TIME используется в базовых языках STL, LAD и FBD для установки
таймеров системы SIMATIC. Она занимает одно 16-битное слово с 1 + 3 декадами.
Время устанавливается в часах (hours), минутах (minutes), секундах (seconds) и мил-
лисекундах (milliseconds).
DATE (Дата)
Переменная типа DATE хранится в машинном слове как число с фиксированной точкой без знака. Содержимое переменной соответствует количеству дней, начиная с 01.01.1990. Ее
представление показывает год, месяц и день, разделенные дефисом.
TIME (Время)
Переменная типа TIME резервирует одно двойное слово. Ее представление содержит информацию о днях (d), часах (li), минутах (т), секундах (s) и миллисекундах (ms), отдельные
элементы этих данных могут быть опущены. Содержимое переменной интерпретируется в миллисекундах (ms) и хранится как 32-битное число с фиксированной точкой со знаком.
TIME_OF_DAY (Время суток)
Переменная типа данных TTMEOFDAY резервирует для себя одно двойное слово. Она
содержит количество миллисекунд с начала суток (со времени 00:00) в виде числа с фиксированной точкой без знака. Ее представление содержит информацию о часах, минутах и секундах, разделенных двоеточием. Миллисекунды, которые следуют за секундами, отделены от них десятичной точкой. Миллисекунды могут отсутствовать.
2. Сложные типы данных (более чем 32 бита)
STEP 7 определяет следующие четыре сложных типа данных:
Ø DATE_AND_TIME (DT, Дата и время) Дата и время (в формате BCD-числа);
Ø STRING (Строка) Строка литер длиной до 254 знаков;
Ø ARRAY (Массив) Переменная-массив (совокупность переменных одного типа);
Ø STRUCT (Структура) Переменная-структура (совокупность переменных разных типов).
Типы данных предопределяются пользователем при их использовании: задается длина в
типе STRING (строка литер), сочетание и размер в типах ARRAY и STRUCT (структура).
3. Типы данных определенные пользователем (более чем 32 бита)
User data type — UDT (Пользовательский тип данных) соответствует структуре (ком-
бинация компонентов любых типов) с действием на глобальном уровне. Вы можете воспользоваться пользовательским типом данных, если в вашей программе часто фигурирует структурный тип и переменные, или вы хотите структуре данных присвоить имя.
Типы UDT обладают глобальным действием; то есть, они описываются один раз и
доступны для использования во всех блоках.
При объявлении переменных определяются следующие их свойства:
• символическое имя
• тип данных
• видимость переменной
Переменные могут быть объявлены:
Ø в глобальной символьной таблице (элементарные типы данных)
Ø в таблице описаний глобального блока данных (все типы данных)
Ø в таблице описаний логического блока (OB, FB и FC)
Рисунок 5 — Типы данных языка STEP 7
2.5. Виды адресации
При написании программ в STEP 7 можно применять прямую или косвенную адресации.
Прямая адресация может быть представлена в виде
· абсолютной адресации;
· символьной адресации.
Абсолютная адресация состоит из следующих основных полей – идентификатор области памяти и адрес в этой области.
Однако при большом числе переменных такая адресация неудобна, поэтому для придания смысловой нагрузки переменных вводятся их символьные обозначения, те
применяется символьная адресация.
Для хранения символьных обозначений используется специальная таблица,
содержащая четыре столбца, с названием, адресом, типом данных и комментарием.
Символьное имя Symbol содержит до 24 символов, начинается с буквы, может содержать подчеркивания.
Например, если входной дискретный модуль занимает адреса от 0 до 3, то входы
могут обозначаться как I 0.0, I 0.1 и т.д. Аналогично выходы для цифрового модуля вывода, который занимает адреса с 4 по 7, обозначаются как Q 4.0, Q 4.1 и т.д.
Косвенная адресация является более сложным видом адресации и здесь не рассматривается. Основные виды адресации доступные с STEP 7 представлены на рисунке.
Рисунок 6 — Виды адресаций доступные в языке STEP 7
2.6. Обращение к данным в областях памяти
Контроллер S7 хранит информацию в различных местах памяти, которые имеют однозначные адреса. Программист может явно указать адрес в памяти, к которому он хочет обратиться.
Для обращения к биту в некоторой области памяти программист должен указать
адрес бита, состоящий из идентификатора области памяти, адреса байта и номера бита.
В контроллере S7 существуют следующие области памяти
Память входов образа процесса: обозначается — I
В начале каждого цикла S7 опрашивает физические входы и записывает
полученные значения в регистр входов образа процесса. К образу процесса можно обратиться в формате бита, байта, слова и двойного слова:
Тип данных Обращение Пример
Бит |
I[адрес байта]. [адрес бита] |
I0.1 |
Байт Слово |
I[длина(B)][начальный адрес байта] I[длина(W)][начальный адрес байта] |
IB4 IW4 |
Двойное слово |
I[длина(D)][начальный адрес байта] |
ID4 |
Память выходов образа процесса: Q
В конце цикла S7 копирует значения, хранящиеся в регистре выходов образа процесса, в физические выходы. К образу процесса можно обратиться в формате бита,
байта, слова и двойного слова:
Тип данных |
Обращение |
Пример |
Бит Байт |
Q[адрес байта]. [адрес бита] Q[длина(B)][начальный адрес байта] |
Q0.1 QB4 |
Слово Двойное слово |
Q[длина(W)][начальный адрес байта] Q[длина(D)][начальный адрес байта] |
QW4 QD4 |
Память памяти переменных: V
Память переменных можно использовать для хранения промежуточных результатов операций, выполняемых в вашей программе. В памяти переменных можно
хранить также другие данные, имеющие отношение к процессу или к решению конкретной задачи автоматизации. К памяти переменных можно обратиться в формате
бита, байта, слова и двойного слова:
Тип данных Обращение Пример
Бит Байт |
V[адрес байта]. [адрес бита] V[длина(B)][начальный адрес байта] |
V10.2 VB100 |
Слово Двойное слово |
V[длина(W)][начальный адрес байта] V[длина(D)][начальный адрес байта] |
VW200 VD200 |
Область битовой памяти (меркерная память): М
Биты памяти (меркеры) можно использовать как управляющие реле для хранения промежуточных результатов операций или другой управляющей информации. К битам
памяти можно обратиться в формате бита, байта, слова и двойного слова:
Тип данных |
Обращение |
Пример |
Бит Байт |
M[адрес байта]. [адрес бита] M[длина(B)][начальный адрес байта] |
M10.2 MB100 |
Слово Двойное слово |
M[длина(W)][начальный адрес байта] M[длина(D)][начальный адрес байта] |
MW200 MD200 |
К данным в других областях памяти
· Область памяти таймеров – Т;
· Область памяти счетчиков – С;
· Аккумуляторам
обращаются, указывая в качестве адреса идентификатор области и номер элемента.
Тип данных |
Обращение |
Пример |
Область памяти таймеров Область памяти счетчиков |
Т[номер элемента] С[номер элемента] |
Т37 Бесплатная лекция: «3. Эколого-экономическая оптимизация» также доступна. С5 |
Аккумуляторам |
АС[номер элемента] |
АС0 |
Рисунок 7 — Пример обращения к одному и тому же адресу в формате байта, слова и двойного слова