Category Archives: Программы ПЛК

Опрос модуля МВА 8 с ПЛК63

Пример на языке ST реализует работу по интерфейсу RS-485: чтение 8 входов из прибора МВА8 с адресом 16. Для работы примера в PLC Configuration должны быть подключены библиотеки SisLibCom, OwenNet, ComService.

PROGRAM PLC_PRG

VAR

get_fl_owen:OWEN_GET_REAL; (*Чтение параметра типа Real*)

COM_SERVICE1: COM_SERVICE;

cmpl: BOOL; (* признак завершения операции *)

err: INT; (*номер ошибки*)

port_opened: BYTE := 0; (*состояние порта*)

Settings: COMSETTINGS;(* настройки последовательного порта *)

com_num: PORTS:=0 (*0 — RS-485, 1 — RS-232*);

TimeOut: TIME:=T#50ms;(*таймаут*)

Enabl: BOOL:=TRUE; (*состояние работы блока*)

wTime: WORD; (*значение времени для измери-теля*)

A: REAL; (*считанное значение*)

addres: INT:=16; (*адрес МВА8*)

B: ARRAY [0..7] OF REAL; (*массив для хранения значений входов МВА8*)

i: INT; (*номер входа МВА**)

END_VAR

(*Устанавливаем настройки COM-порта*)

IF port_opened=0 THEN

Settings.Port:=com_num; (*номер COM-порта*)

Settings.dwBaudRate:=115200; (*скорость*)

Settings.byParity:=0;

Settings.dwTimeout:=0;

Settings.byStopBits:=0;

Settings.dwBufferSize:=0;

Settings.dwScan:=0;

END_IF

COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK );

(*Если COM-порт открыт, то переходим к приему и передачи данных *)

IF COM_SERVICE1.ready THEN

port_opened:=2;

END_IF

IF port_opened=2 THEN (*Удачно проинициализировали*)

(*чтение 8 входов из прибора МВА8 с адресом 16 *)

get_fl_owen(

Enable:=Enabl , (* разрешение работы блока *)

Addr:=addres , (*адрес прибора*)

AddrLen:=A8BIT , (*длина адреса*)

Name:=’read’ , (*имя параметра, значение которого считываем*)

Index:=65535 , (*индекс параметра*)

RealType:=FLOAT32T , (*тип параметра, значение которого считываем*)

ComHandle:= Settings.Port, (*номер COM-порта*)

TimeOut:=TimeOut , (*Таймаут T#50ms*)

Complete=>cmpl , (* скопировать признак завершения операции *)

Value=>a , (*считанное значение*)

wTime=>wTime , (*значение времени для измерителя*)

Error=> err ); (* скопировать регистр ошибок *)

(*если установлен признак завершения операции, то *)

IF Enabl = FALSE THEN

Enabl := TRUE;

END_IF

(*Если завершен обмен и нет ошибок*)

IF cmpl THEN

IF (err=0) THEN

B[i]:=a; (*присваиваем массиву значение на входе*)

ELSE

Enabl := FALSE;

END_IF;

i:=i+1; (*увеличиваем номер входа*)

addres:=16+i; (*увеличиваем адрес*)

IF (i=8) THEN (*если номер входа меньше 8*)

addres:=16;

i:=0;

END_IF

END_IF

END_IF

 

Чтение и запись двух параметров с одного прибора ТРМ201 по протоколу ОВЕН

Пример на языке ST реализует работу по интерфейсу RS-485: Чтение и за-пись двух параметров с одного прибора ТРМ201. Для работы примера в PLC Con-figuration должны быть подключены библиотеки SisLibCom, OwenNet, ComService.

 

PROGRAM PLC_PRG

VAR

get_fl_owen:OWEN_GET_REAL; (*Чтение параметра типа Real*)

send_fl_owen:OWEN_SET_REAL; (*Запись параметра типа Real*)

COM_SERVICE1: COM_SERVICE; (*открытие COM-порта*)

cmpl: BOOL; (* признак завершения операции *)

err: INT; (*номер ошибки*)

port_opened: BYTE := 0; (*состояние порта*)

Settings: COMSETTINGS; (* настройки последова-тельного порта *)

com_num: PORTS:=0; (*0 — RS-485, 1 — RS-232*)

TimeOut: TIME:=T#50ms; (*таймаут*)

Enabl: BOOL:=TRUE; (*состояние работы блока*)

wTime: WORD; (*значение времени для измери-теля*)

master1: BYTE := 0;

A: REAL; (*считанное значение из ТРМ201*)

b: REAL:=30;

END_VAR

(*Устанавливаем настройки COM-порта*)

IF port_opened=0 THEN

Settings.Port:=com_num; (*номер COM-порта*)

Settings.dwBaudRate:=115200; (*скорость*)

Settings.byParity:=0;

Settings.dwTimeout:=0;

Settings.byStopBits:=0;

Settings.dwBufferSize:=0;

Settings.dwScan:=0;

END_IF

COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK );

(*Если COM-порт открыт, то переходим к приему и передачи данных *)

IF COM_SERVICE1.ready THEN

port_opened:=2;

END_IF

IF port_opened=2 THEN (*Удачно проинициализировали*)

CASE master1 OF

(*чтение параметра типа Real из прибора ТРМ201 с адресом 8 из параметр с именем PV и индексом 0*)

0: get_fl_owen(

Enable:=Enabl , (* разрешение работы блока *)

Addr:=8 , (*адрес прибора*)

AddrLen:=A8BIT , (*длина адреса*)

Name:=’pv’ , (*имя параметра, значение которого считываем*)

Index:=65535 , (*индекс параметра*)

RealType:=FLOAT24 , (*тип параметра, значение которого считываем*)

ComHandle:= Settings.Port, (*номер COM-порта*)

TimeOut:=TimeOut , (*Таймаут T#50ms*)

Complete=>cmpl , (* скопировать признак готовности результата *)

Value=>a , (*считанное значение*)

wTime=>wTime , (*значение времени для измерителя*)

Error=> err ); (* скопировать регистр ошибок *)

(*если установлен признак завершения операции, то *)

IF cmpl THEN

master1:=1;(*переходим к выполнению следующего блока*)

END_IF

1:(*Запись параметра типа Real в прибор ТРМ201 с адресом 8 в параметр с именем SP и индексом 0*)

send_fl_owen(

Enable:=Enabl , (* разрешение работы блока *)

Addr:= 8, (*адрес прибора*)

AddrLen:=A8BIT, (*длина адреса*)

Name:= ‘sp’, (*имя параметра, значение которого записываем в ТРМ201*)

Index:= 0, (*индекс параметра*)

RealType:= FLOAT24, (*тип параметра, значение которого записываем*)

Value:=b , (*параметр, значение значение которого записываем в TPM201*)

ComHandle:=Settings.Port, (*номер COM-порта*)

TimeOut:=TimeOut , (* время тайм-аута [мс] — макс. за-держка на обработку запроса *)

Complete=>cmpl , (* скопировать признак готовности результата *)

Error=> err); (* скопировать регистр ошибок *)

(*если установлен признак завершения операции, то *)

IF cmpl THEN

master1:=0;(*переходим к выполнению следующего блока*)

END_IF

END_CASE

IF Enabl = FALSE THEN

Enabl := TRUE;

END_IF

IF err <> 0 THEN

Enabl := FALSE;

END_IF

END_IF

 

 

Пример использования библиотеки UNM контроллеров ОВЕН ПЛК1хх

Пример на языке ST реализует работу с модемом: посылку команды инициализации, набор номера и установку связи. Для работы примера в PLC Configuration должен быть подключен модуль UNM и настроен интерфейс обмена с модемом.

 

VAR

Error:BYTE;

P:POINTER TO RBDATA;

itsOK:STRING:=’OK$N$R’;

itsCONNCT:=’CONNECT$N$R’;

iter:INT;

END_IF

 

If(LockDevice(0)!=1) then

Error:=1;

Return;

End_if

 

If SetByte(0,‘ATZ$N$R’,5) !=1 then

Error:=1;

Return;

End_IF

 

(* Здесь задержка которая зависит от модема времени инициализации модема.

После этого мы должны получить ‘OK’ *)

For iter:=1 to len(itsOK) do

P:=GetByte(0);

If p=0 then

Error:=1;

return

else

if RBDATA_TO_STRING(p)<> MID (itsOK,1,iter); then

error:=1;

return;

end_if

End_if

END_FOR

(*Набор заданного номера*)

If SetByte(0,‘ATDT89161234567$N$R’,5) !=1 then

Error:=1;

Return;

End_IF

 

For iter:=1 to len(itsConnect) do

P:=GetByte(0);

If p=0 then

Error:=1;

return

else

if RBDATA_TO_STRING(p)<> MID (itsCONNECT,1,iter); then

error:=1;

return;

end_if

End_if

END_FOR

(*набор заданного номера – закончен – соединение прошло – остановим модуль UNM *)

ReleaseDevice(0);

 

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

    Регулировка 2-позиционной задвижки с аналоговым управлением

    Задача: Для поддержания определенной температуры необходимо управлять задвижкой с аналоговым управлением.

    При реализации системы управления может быть выбран любой контроллер из серий ПЛК100, ПЛК150 и др. Для контроллеров, которые не имеют аналогового входа и аналогового выхода, результаты измерения регулируемой величины должны поступать в функциональный блок программы от внешнего измерителя, а сигналы управления передаваться на внешний модуль управления.

    Программа для выполнения задачи показана на рис. 1.

     

    Рис.1. Структура программы

     

     

    Пояснения по фрагментам программы:

    0001 – на входе SP ПИД-регулятора указывается значение необходимого регулируемого параметра, например температуры. На вход PV подается измеренное значение регулируемого параметра.

    Параметры на входах _IMIN, _IMAX выбраны экспертным методом. Блок MAX в выходном сигнале убирает отрицательные значения. Следующий блок – DIV – делит числовое значение на 100. Далее переменная pvm подается на модуль соответствующего выхода контроллера, например, для управления аналоговым выходом – «Analog output»;

    0002 – сигнал anr_state блоком EQ сравнивается с нулем и поступает на вход START_ANR ПИД-регулятора для управления работой автонастройки. Автонастройка прекращается, когда на выходе STATE_ANR установится ненулевое значение.

     

      Поддержание заданной температуры

      Задача: в сушильном шкафу необходимо поддерживать определенную температуру. Выбор нужного значения температуры (+80 ºС или +90 ºС) и переключение режима производится оператором. Система должна с максимально возможной скоростью выходить на заданный режим.

      Для реализации системы выбран контроллер ПЛК150-220.У-L, электрическая принципиальная схема подключения которого приведена на рис. 1. Программа для контроллера показана на рис. 2.

       

      Рис.1. Схема подключения контроллера

       

      Рис. 2. Структура программы

       

      Пояснения по фрагментам программы:

      0001 – на входе SP ПИД-регулятора в градусах Цельсия указывается значение необходимой температуры (sp_value=80 или 90). На вход PB подается измеренное значение температуры с модуля «RTD sensor», рис. 3. Параметры на входах TI_, TD_, _IMIN, _IMAX выбраны экспертным методом. Блок MAX в выходном сигнале убирает отрицательные значения;

      0002 – сигнал out_val с ПИД-регулятора поступает на блок MUL для умножения на 655,35 с целью линейного преобразования выходной мощности регулятора (от 0 до 100) к мощности, подаваемой на ШИМ (0…65535). Дальше значение передает его на блок REAL_TO_WORD для преобразования типа данных из REAL в WORD. С выхода переменная heater подается на модуль соответствующего выхода контроллера в канал широтно-импульсной модуляции – «Pulse-wide modulator», рис. 3.

       

      Рис. 3. Настройки PLC-Browser

       

      Рис. 4. Диаграммы, поясняющие работу.

      Цветам линий соответствуют сигналы:

      –– (синяя) задание на входе (SP); –– (зеленая) состояние объекта (PV);

      — — — (красная) сигнал управления на выходе «heater»

      На рис. 3. показаны сигналы во время работы программы с реальной нагрузкой – нагревательным элементом. При изменении оператором задания с +80 до +90 ºС (это отражает ступенька на графике), система постепенно выходит на новый режим стабилизации (зеленая линия).

       

        S7-200 Примеры. Реверсивный переключатель для асинхронного двигателя

        Краткое описание

        Данный пример программы служит для управления асинхронным двигателем с двумя направлениями вращения.

        Двигатель может быть запущен на движение влево нажатием кнопки на входе E0.0 или вправо нажатием кнопки на E0.1, при условии, что защитный выключатель на входе E0.3 и основной выключатель на E0.2 не нажаты. Переключить направление вращение можно только после нажатия основного выключателя и окончания времени ожидания 5 с, при этом может происходить торможение и запуск двигателя. Если обе кнопки на включение нажаты одновременно, то двигатель будет блокирован.

         

        Описание программы включая листинг

        Сначала программа проверяет, должна ли быть включена блокировка установкой вспомогательного меркера M2.0. Это как раз тот случай когда обе кнопки, на входах E0.0 и E0.1 нажаты одновременно или если время ожидания еще не вышло. Только если обе кнопки снова находятся в отжатом состоянии и кончилось время ожидания, т.е вспомогательный меркер M2.3 сброшен, будет сброшен и блокирующий меркер M2.0.

        Разрешение на вращение влево осуществляется установкой соответствующего бита деблокировки M2.1, если ни защитный выключатель двигателя на входе E0.3 или кнопка ВЫКЛ на E0.2 (оба нормально закрытые) не нажаты, ни бит состояния для вращения вправо M1.1 не установлен. Бит состояния для вращения влево это M1.0. Деблокировка вращения вправо происходит аналогично.

        Двигатель включается, если нажата одна кнопка включения и ни бит блокировки ни бит состояния другого направления не установлены. Пуск двигателя происходит установкой соответствующего выхода и относящегося к нему бита состояния, обеспечивающего самоподхват. На выходе A0.0 срабатывает контактор левого вращения, а на выходе A0.1 правого. Кроме того, загорается сигнальная лампа режима. Сигнальная лампа движения влево подключена на A0.4, движения вправо на A0.3, а лампа состояния ВЫКЛ на A0.2.

        Если двигатель выключается, то по положительному фронту ‘ED’ устанавливается вспомогательный меркер M2.3 (процесс выключения). Если последний установлен, то запускается таймер ожидания для повторного пуска со временем работы 5 с (500*10 мс). По завершении этого времени меркер M2.3 процесса выключения сбрасывается. Во время работы таймера ожидания на выходе A0.5 мигает сигнальная лампа. В случае, если бит состояния не установлен, то на выходе A0.2 горит сигнальная лампа состояния ‘ВЫКЛ’.

        Размер программы составляет 61 слово.

         

        // TITEL = Контакторное переключение

        // Блокировка

        LD E0.1 // Команда вправо

        U E0.0 // и команда влево

        O M2.3 // или время ожидания не кончилось

        S M2.0,1 // устанавливается блокировка

        LDN E0.0 // Нет команды влево

        UN E0.1 // нет команды вправо

        UN M2.3 // время ожидания кончилось

        R M2.0, 1 // блокировка сбрасывается

        Деблокировка движения влево

        LD E0.2 // Нет команды выключения

        U E0.3 // не сработал защитный выключатель

        UN M1.1 // бит состояния движения вправо не установлен

        = M2.1

        // Деблокировка движения вправо

        LD E0.2 // Нет команды выключения

        U E0.3 // не сработал защитный выключатель

        UN M1.0 // бит состояния движения влево не установлен

        = M2.2

        // Движение влево

        LD E0.0 // Команда влево

        O M1.0 // или состояние левого движения

        UN M2.0 // и нет блокировки

        U M2.1 // разрешение на движение влево

        = M1.0 // бит состояния движения влево

        = A0.0 // выход контактора

        = A0.4 // выход сигнальной лампы движения влево

        // Движение вправо

        LD E0.1 // Команда вправо

        O M1.1 // или состояние правого движения

        UN M2.0 // и нет блокировки

        U M2.2 // разрешение на движение вправо

        = M1.1 // бит состояния движения вправо

        = A0.1 // выход контактора

        = A0.3 // выход сигнальной лампы движения вправо

        // Определение фронта процесса выключения

        LDN M1.0 // бит состояния движения влево

        UN M1.1 // бит состояния движения вправо

        = A0.2 // выход сигнальной лампы состояния ВЫКЛ

         

         

        LD A0.2 // При выключении

        ED

        S M2.3,1 // Устанавливается вспомогательный меркер для

        // процесса выключения

        LD M2.3

        MOVW 500,VW20 // Загрузка времени ожидания для перезапуска

        TON T33,VW20 // Пуск таймера ожидания для перезапуска

        U T33

        R M2.3, 1 // Сброс вспомогательного меркера после времени ожидания

        // Индикация состояния ВЫКЛ, Время ожидания

        LD M2.3 // Вспомогательный меркер времени ожидания

        // процесса выключения

        U SM0.5 // Мигание 1 с

        = A0.5 // Выход сигнальная лампа время ожидания

         

        MEND // Конец основной программы

        Различные возможности установки битов или байтов в S-200

        Данная программа описывает различные возможности занесения в области памяти определенных значений или очистки определенных областей памяти.

        В этом примере применения рассмотрены:

        Рисунок  SEQ Рисунок * ARABIC 1 Структура программы

        Описание программы вкл. листинг

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

        Используются команды:

        FILL Устанавливает один или несколько битов

        FOR… NEXT Цикл FOR…NEXT R Сбрасывает один или несколько битов

        Размер программы составляет 55 слов.

        Основная программа

        // TITEL=FORNEXT

        // Основная программа содержит вызовы подпрограмм 0, 1 и 2.

        LD SM0.0 // Всегда в единице

        CALL 0 // Вызов подпрограммы 0

        // (FILL)

        CALL 1 // Вызов подпрограммы 1

        // (FOR…NEXT)

        CALL 2 // Вызов подпрограммы 2

        // (Reset)

        MEND // Конец основной программы

        Подпрограммы

        // Подпрограмма 0 копирует значение слова VW200 в слово VW204 и в 6 последующих слов памяти (до VW216), если установлен вход E0.0.

        SBR 0 // Подпрограмма 0

        LD E0.0 // Чтение входа E0.0

        MOVW 16#ABC3,VW200 Запись 16-рич.значения

        // ABC3 в VW200

        FILL VW200,VW204,7 Копирование значения слова VW200 в слово VW204 и шесть последующих слов памяти (до VW216)

        RET // Конец подпрограммы 0

        Подпрограмма 1 копирует следующие друг за другом числа в переменную область памяти, если установлен вход E0.1. Число выполняемых циклов определяется номерами первого (в VW10) и последнего цикла (в VW0). Текущее значение выполненных циклов находится в слове памяти VW20. Первое число, с которого надо начинать счет, загружается в аккумулятор AC0. Первый адрес, под которым надо запоминать значение,заносится в аккумулятор AC1, действующий в качестве указателя. Затем начинается выполнение циклов. К начальному значению AC0 за один цикл прибавляется 4, указатель AC1 увеличивается на следующее слово памяти, пока не будет обработан последний цикл.

        SBR 1 // Подпрограмма 1

        LD E0.1 // Чтение входа E0.1

        MOVW 10,VW0 // Номер последнего цикла в VW0

        MOVW 0,VW10// Номер первого цикла в VW10

        MOVW 0,VW20// Текущий номер цикла в VW20 (счетчик)

        MOVW 50,AC0// Начальное значение счета в аккумулятор 0

        MOVD &VB100,AC1// аккумулятор 1 (указатель памяти) указывает на байт памяти VB100

        FOR VW20,VW10,VW0 / Начало цикла

        MOVW AC0,*AC1// Сохранить текущее значение счетчика по текущ. адресам памяти

        INCD AC1 // Инкрементировать указатель памяти на 1 байт

        INCD AC1 // Инкрементировать указатель памяти на 1 байт

        +I 4,AC0 // Прибавить 4 к текущ. значению счетчика

        NEXT // Конец цикла

        RET // Конец подпрограммы 1

        // Подпрограмма 2 сбрасывает биты памяти с V100.0 до V121.7 и с V204.0 до 217.7, если установлен вход E0.2.

        SBR 2 // Подпрограмма 2

        LD E0.2 // Установка входа E0.2

        R V100.0,176// Сброс битов с V100.0 до 121.7

        R V204.0,112// Сброс битов с V204.0 до 217.7

        RET // Конец подпрограммы 2

        S7-200 Примеры. Обработка фронтов входных сигналов

        Этот пример показывает, как можно определить смену сигнала с помощью функции определения фронта S7-200. При этом различаются положительные и отрицательные фронты, причем под положительным фронтом понимается смена сигнала с ‘0’ на ‘1’, а под отрицательным – смена сигнала с ‘1’ на ‘0’. Логическая ‘1’ означает, что на вход подано напряжение, а под ‘0’ понимается отсутствие напряжения на входе.

        Программа запоминает число положительных фронтов на входе E0.0 и отрицательных на входе E0.1 в слове меркеров. Можно дополнить программу опросом запомненных значений, проверяя при этом все ли фронты опознаны.

        Структура программы

         

         

        Описание программы вкл. листинг

        Программа опрашивает вход E0.0 и и проверяет затем с помощью команды EU (Edge Up), произошла ли положительная смена сигнала, то есть смена с ‘0’ на ‘1’. Если да, то значение меркерного слова MW1 повышается на 1. Отрицательный фронт входа E0.1 будет сосчитан посредством команды ED (Edge Down) iв меркерном слове MW3. Если число сосчитанных фронтов достигает 127, то соответствующий меркер сбрасывается в ноль. Не забывайте, что младший байт слова меркеров MW1 это байт M2, а старший байт это байт M1. В слове меркеров MW3 соответственн младший бит M4, а старший M3.

        Размер программы составляет 27 слов.

         

        Основная программа

        LD SM0.1 // Только в первом цикле в единицу

        MOVD 0, MD1// Установка двойного слова MD1 в ноль

        LD E0.0 // Положительный фронт

        EU

        +I 1,MW1// При смене фронта: слово меркеров MW1 увеличивается на 1

        LDW= 127,MW1// После 127 смен фронта (=свободно задаваемое значение)

        MOVW 0,MW1// Слово меркеров MW1 сбрасывается в 0

        LD E0.1 // Отрицательный фронт

        ED

        +I 1,MW3// При смене фронта: слово меркеров MW3 увеличивается на 1

        LDW= 127,MW3// После 127 смен фронта (=свободно задаваемое значение)

        MOVW 0,MW3// Слово меркеров MW3 сбрасывается в 0

        MEND // Конец программы

         

         

        Управление часами реального времени SIMATIC S7-214

         

        Краткое описание

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

        • Байт 0: Столетие (00 — 99)
        • Байт 1: Месяц (1 — 12)
        • Байт 2: День (1 — 31)
        • Байт 3: Часы (00 — 24)
        • Байт 4: Минуты (00 — 59)
        • Byte 5: Секунды (00 — 59)
        • Byte 6: не занято
        • Byte 7: День недели (1-7 = Вс-Сб)

        Данные хранятся в коде BCD (при чтении) или должны заноситься в коде BCD (при записи). При нажатии кнопки на E0.0 в часы реального времени будет занесена предустановленная дата. Кнопка на E0.1 служит для индикации текущего значения секунд, которое копируется на выходной байт AB0. Кодирование при этом производится на выбор в формате BCD (E0.1 = ‘1’) или двоичном (E0.1 = ‘0’).

        Описание программы вкл. листинг

        При нажатии кнопки на входе E0.0 будет вызвана подпрограмма 0. Эта подпрограмма заполняет 8 байтов VB100 до VB107 соответствующими значениями для даты и времени. Заключительная команда ‘TODW’ сохраняет установки для часов реального времени. Часы реального времени считываются в каждом цикле. Эти данные заносятся в 8 байтов с VB400 по VB407 в формате BCD (4 бита представляют цифру от 0 до 9). Если установлен вход E0.1, то это значение копируется непосредственно на выходной байт.

        Если вход E0.1 не установлен, то слово данных VW404 копируется в слово VW204, а затем старший байт VB204, который содержит значение минут, стирается. Это мероприятие необходимо, так как конвертирование значения секунд из формата BCD в двоичный может быть произведено только пословно. Теперь двоичнокодированное значение секунд передается на выходной байт AB0.

        Размер программы составляет 46 слов.

        Основная программа

        // TITEL = Часы реального времени

        LD E0.0 // Кнопка записи реального времени

        EU

        CALL 0 // Вызов подпрограммы 0

        LD SM0.0 // Начало стека

        TODR VB400 // Чтение данных реального времени и запись в 8- байтовый буфер

        LD E0.1 //Кнопка индикации секунд в формате BCD

        MOVB VB405, AB0 // Копирование текущего значения секунд в выходной байт

        LDN E0.1

        MOVW VW404, VW204 //Копирование слова

        MOVB 0, VB204 //Стирание старш. байта (минуты)

        BCDI VW204 // Преобразование BCD => Двоич.

        MOVB VB205, AB0 // Копирование текущего значения секунд в выходной байт

        MEND

         

        Подпрограмма

        SBR 0 // Установка даты и времени

        LD SM0.0

        MOVB 16#95, VB100 // год: 95

        MOVB 16#02, VB101 // месяц: февраль

        MOVB 16#14, VB102 // день: 14

        MOVB 16#12, VB103 // часы: 12

        MOVB 16#0, VB104 // минуты: 00

        MOVB 16#0, VB105 // секунды: 00

        MOVB 16#0, VB106 // не занято

        MOVB 16#3, VB107 // день недели: вторник

        TODW VB100 // записать время

        RET // Конец подпрограммы

         

         

         

        Простые применения свободнопрограммируемого интерфейса S-200

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

        Пользователь должен помнить о следующих соглашениях:

        • Четность
        • Число битов на символ
        • Скорость

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

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

        Рисунок 1 Схема включения

         

        Рисунок 2 Структура программы принтер

         

         

        Рисунок 3 Структура программы Штрих-код

        Описание программы, включая листинг: принтер

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

        Программа составляет 13 слов.

         

        Основная программа

        // TITEL = Режим свободного порта

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

        // В байт специальных меркеров SMB30 заносится необходимая информация.

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

        // Команда передачи XMT содержит начальный адрес передаваемой информации.

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

        LD SM0.1 //Меркер первого цикла

        MOVB +9,SMB30 // Свободный порт,

        //9600 Бод,без паритета

        // 8 бит/символ

        MOVB +1,VB100 // Длина сообщения: 1

        // ASCII символ

        MOVB 16#41,VB101 // Длина символа “A”

        // 1 байт (A => 41 hex)

        LD E0.1 // Начало передачи

        // вход E0.1

        EU // Определение положит. фронта

        XMT VB100,0 // Передача на интерфейс связи

        MEND // Конец основной программы

         

         

        Описание программы вкл.листинг: Считыватель штрих-кода

        В данной программе описан прием данных. Штрих-код считыватель посылает при этом считанные данные через свободнопрограммируемый интерфейс на SIMATIC S7-200. Чтобы упростить реализацию данного примера, в качестве передатчика вместо считывателя штрих- кода можно использовать программу-терминал под Windows.

        Размер программы составляет 15 слов.

         

        Основная программа

        // TITEL = Режим свободного порта

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

        // В байт специальных меркеров SMB30 заносится необходимая информация.

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

        // Принятые данные реализуются через прерывание. Если данные поступят через

        // свободнопрограммируемый интерффейс, то выполняется т.н. прерывание для приема, которое в данном приложении носит обозначение INT 0.

        LD SM0.1 // Меркер первого цикла

        MOVB +9,SMB30 // Свободный порт,9600 Бод,без паритета, 8 бит/символ

        ATCH 0, 8 //Назначен. прерывания для приема 0

        ENI // Деблокировка подпрограммы прерываний

        MEND // Конец осн.программы

         

         

        Подпрограмма прерывания

        // В подпрограмме прерывания 0 принятые символы, сохраняемые в байте специальных меркеров SMB2, сравниваются с большой буквой “A”.

        //в случае совпадения устанавливается выходной бит A0.1.

        INT 0 // Подпрограмма прерывания для приема

        LDB= SMB2,16#41 // Сравнение принятого символа в SMB2 с “A”

        // Если символ “A”

        S A0.1,1 // получен, то устанавливается A0.1

        RETI // Возврат в основную программу

        Для того чтобы преобразовать TOOLITE2 AWL в S7-Micro/DOS AWL

        • Установите ‘K’ перед каждым числом, не являющимся 16-ричной константой (напр. 4 →K4)
        • Замените ‘16#’ → ‘KH’ для всех 16-ричных констант (напр. 16#FF → KHFF)
        • Поставьте запятые для смены полей. Используйте клавиши перемещения или клавишу TAB для перехода от поля к полю.
        • Для преобразования программы S7-Micro/DOS AWL в KOP-форму нужно начинать каждый сегмент словом ‘NETWORK’ и номером. Каждый сегмент в этом примере имеет свой номер на диаграмме KOP. Используйте NWENFG в меню редактора для ввода нового сегмента. Команды MEND, RET, RETI, LBL, SBR и INT требуют отдельных сегментов.
        • Комментарии к строкам, начинающиеся с «//» в S7-Micro/DOS не возможны, зато возможны комментарии к сегментам.