Category Archives: ПЛК_ОВЕН

Пример работы по Modbus в режиме Slave для CoDeSys 3.5

Пример на языке ST реализует работу по интерфейсу RS-485: настройку модуля ModBus-Slave для трансляции в сеть массива переменных MB_Buffer.

Объявление переменных:

PROGRAM PLC_PRG

VAR

MB_func: MB_SLAVE;

MB_Buffer: ARRAY[0..3] OF WORD; (* буфер данных для обмена по ModBus *)

MB_NewData: BOOL; (* данные обновились *)

MB_Error: MB_ERROR_TYPE; (* ошибка обработки запроса *)

port_opened: BYTE := 0;

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

SettingsEx: ComSerice.SysCom.COM_SettingsEx;

COM_SERVICE1: COM_SERVICE;

END_VAR

Тело программы:

IF port_opened=0 THEN

Settings.sPort:=ComSerice.SysCom.SYS_COMPORT2; (*номер COM-порта*)

Settings.ulBaudrate:=9600; (*скорость*)

Settings.byParity:=0;

Settings.ulTimeout:=0;

Settings.byStopBits:=1;

Settings.ulBufferSize:=0;

SettingsEx.byByteSize:=8;

SettingsEx.bBinary:=TRUE;

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

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

IF COM_SERVICE1.ready THEN

port_opened:=2;

END_IF

MB_Buffer[0] := 16#1234;

MB_Buffer[1] := 16#5678;

MB_Buffer[2] := 16#ABCD;

MB_Buffer[3] := 16#5555;

END_IF

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

MB_func(

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

DevAddr := 16,

pBuffer := ADR(MB_Buffer),

BufSize := SIZEOF(MB_Buffer),

NewData => MB_NewData,

Error => MB_Error

);

IF MB_Error <> MB_OK THEN

MB_NewData := FALSE;

END_IF

IF MB_NewData = TRUE THEN

MB_Error := MB_OK;

END_IF

END_IF

Пример записи переменных по Modbus для CoDeSys 3

Пример на языке ST реализует работу по интерфейсу RS-485: запись параметров типа Int (функция Modbus 06 — MB_WR_SNG_REG) и записи параметра типа Float (функция Modbus 16 — MB_WR_REGS). Для работы примера в PLC Configuration должны быть подключены библиотеки SisLibCom, Modbus, ComService.

PROGRAM PLC_PRG

VAR

send1_modbus:MB_WR_SNG_REG; (*функция 06 — запись параметра*)

send2_modbus: MB_WR_REGS; (*функция 16 — запись параметров*)

COM_SERVICE1: COM_SERVICE; (*ФБ открытия порта*)

Buffer: ARRAY[0..255] OF BYTE; (* байтовый буфер данных *)

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

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

Init: BOOL; (* признак инициализации пользовательской программы *)

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

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

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

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

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

Exception: BYTE;

DataSize: WORD;

master1: BYTE;

t: DWORD; (*переменная для организации счетчика*)

A: WORD := 0; (*счетчик*)

f1:DINT:=65; (*Записываемый параметр типа DINT*)

f2:REAL:=12.7; (*Записываемый параметр типа REAL*)

ptr_f2:POINTER TO BYTE;

END_VAR

(*Организуем счетчик, что бы передавать эти данные по сети*)

t:=t+1;

IF (t MOD 1000)=0 THEN

A := A + 1;

IF A > 9999 THEN

A := 0;

END_IF

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

IF port_opened=0 THEN

Settings.Port:=com_num; (*номер COM-порта*) Описание интерфейса библиотеки ФБ для работы с протоколом Modbus

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

Settings.byParity:=0;

Settings.dwTimeout:=0;

Settings.byStopBits:=0;

Settings.dwBufferSize:=0;

Settings.dwScan:=0;

END_IF

(*Открываем COM-порт*)

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

0: (* функция 06 — запись параметра типа Int в прибор с адресом 1 в регистр 0*)

send1_modbus(

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

Mode:=MB_ASCII , (*режим передачи*)

DevAddr:=1 , (*адрес*)

RegAddr:=0 , (*регистр*)

Value:=A, (*значение переменной, которое надо передать*)

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

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

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

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

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

IF cmpl THEN

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

END_IF

1: (* функция 16 — запись параметров типа Int (регистр 4) и Real (регистр 6) в прибор с адресом 2 *)

(*запись в буффер параметра типа INT*)

Buffer[1] := DINT_TO_BYTE(f1);

Buffer[0] := DINT_TO_BYTE( SHR(f1,8));

Buffer[3] := DINT_TO_BYTE( SHR(f1,16));

Buffer[2] := DINT_TO_BYTE( SHR(f1,24));

(*запись в буффер параметра типа Float*)

ptr_f2:=ADR(f2);

buffer[5] := ptr_f2^;

ptr_f2:=ptr_f2+1;

21 Описание интерфейса библиотеки ФБ для работы с протоколом Modbus 22

buffer[4] := ptr_f2^;

ptr_f2:=ptr_f2+1;

buffer[7] := ptr_f2^;

ptr_f2:=ptr_f2+1;

buffer[6] := ptr_f2^;

send2_modbus(

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

Mode:=MB_ASCII , (*режим передачи*)

DevAddr:=2 , (*адрес*)

FirstAddr:= 4, (*номер регистра*)

Quantity:= 4, (*количество записываемых регистров*)

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

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

Buffer:=Buffer , (* буфер данных *)

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

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

RegCnt=> DataSize); (*кол-во считанных байтов *)

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

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

Пример опроса параметров по RS-485

Пример на языке ST реализует работу по интерфейсу RS-485: чтение параметров типа Int и типа Real (Float) (функция Modbus 03 — MB_RD_HOLD_REGS), а также считывания трех параметров типа Int (функция Modbus 04 — MB_RD_INP_REGS). Для работы примера в PLC Configuration должны быть подключены библиотеки SisLibCom, Modbus, ComService.

PROGRAM PLC_PRG

VAR

get1_modbus: MB_RD_HOLD_REGS; (*функция 03 — чтение параметра типа INT*)

get2_modbus: MB_RD_INP_REGS; (*функция 04 — чтение трех параметров типа INT*)

get3_modbus: MB_RD_HOLD_REGS; (*функция 03 — чтение параметра типа Float*)

Buffer: ARRAY[0..255] OF BYTE; (* байтовый буфер данных *)

cmpl: BOOL;

port_opened: BYTE := 0;

Init: BOOL; (* признак инициализации пользовательской программы *)

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

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

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

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

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

Exception: BYTE;

DataSize: WORD;

master1: BYTE:= 1;

t: DWORD; (*переменная для организации счетчика*)

A: WORD := 0; (*счетчик*)

x:WORD; (*считанное значение*)

x1: WORD; (*переменная для записи по сети*)

x2: WORD; (*переменная для записи по сети*)

x3: WORD; (*переменная для записи по сети*)

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

ptr_D:POINTER TO BYTE;

COM_SERVICE1: COM_SERVICE;

END_VAR

(*Организуем счетчик, что бы передавать эти данные по сети*)

t:=t+1;

IF (t MOD 1000)=0 THEN

A := A + 1;

IF A > 9999 THEN

A := 0;

END_IF

(*Устанавливаем настройки 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

0: (* функция 03 инт — ФБ считывает значение параметра типа int из прибора с адресом 2 в регистр с номером 8 по протоколу Modbus-ASCII*)

get1_modbus(

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

Mode:=MB_ASCII , (*режим передачи*)

DevAddr:=2 , (*адрес*)

FirstAddr:=8 , (*номер регистра*)

Quantity:=1, (*количество регистров*)

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

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

Buffer:=Buffer , (* буфер данных *)

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

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

ByteCnt=>DataSize ); (*кол-во считанных байтов *)

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

IF cmpl THEN

IF err=0 THEN (*Если нет ошибок, то получаем данные из буфера типа INT*)

x:=BYTE_TO_WORD(BUFFER[1]) OR SHL(BYTE_TO_WORD(BUFFER[0]),8);

END_IF

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

END_IF

1: (* функция 03 флоат — ФБ считывает значение параметра типа

int из прибора с адресом 2 в регистр с номаром 10 по протоколу Modbus-ASCII *)

get3_modbus(

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

Mode:=MB_ASCII , (*режим передачи*)

DevAddr:=2 , (*адрес*)

FirstAddr:=10 , (*номер регистра*)

Quantity:=2, (*количество регистров*)

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

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

Buffer:=Buffer , (* буфер данных *)

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

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

ByteCnt=>DataSize ); (*кол-во считанных байтов *)

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

IF cmpl THEN

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

IF err=0 THEN (*Если нет ошибок, то получаем данные из буфера типа FLOAT*)

ptr_D:=ADR(d);

ptr_D^:=buffer[1];

ptr_D:=ptr_D+1;

ptr_D^:=buffer[0];

ptr_D:=ptr_D+1;

ptr_D^:=buffer[3];

ptr_D:=ptr_D+1;

ptr_D^:=buffer[2];

END_IF

END_IF

2: (* функция 04 инт — ФБ считывает значения трех параметров типа Int из прибора с адресом 2 начиная с регистра с номeром 12*)

get2_modbus(

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

Mode:=MB_ASCII , (*режим передачи*)

DevAddr:=2 , (*адрес*)

FirstAddr:=12 , (*номер регистра*)

Quantity:=6 , (*количество регистров*)

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

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

Buffer:=Buffer , (* буфер данных *)

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

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

ByteCnt=> DataSize); (*кол-во считанных байтов *)

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

IF cmpl THEN

IF err=0 THEN (*Если нет ошибок, то получаем данные из буфера типа INT*)

x1:=BYTE_TO_WORD(BUFFER[1]) OR SHL(BYTE_TO_WORD(BUFFER[0]),8);

x2:=BYTE_TO_WORD(BUFFER[5]) OR SHL(BYTE_TO_WORD(BUFFER[4]),8);

x3:=BYTE_TO_WORD(BUFFER[9]) OR SHL(BYTE_TO_WORD(BUFFER[8]),8);

END_IF

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

END_IF

END_CASE

IF enabl = FALSE THEN

enabl := TRUE;

END_IF

IF err <> 0 THEN

enabl := FALSE;

END_IF

END_IF

Работа с архивом в CoDeSys 3.5

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

 

PROGRAM PLC_PRG

VAR

Arc1_1:GetData; //блок формирования строки и заголовка

Arc1_2:WriteData; // блок записи в архив

strT:STRING:=’bla bla bla’; //некоторая текстовая переменная

in1:BYTE; //некоторые внутренние переменные

in2: WORD;

in3:DWORD;

b:BOOL; //вспомогательная переменная

tp1:ton; // таймер для задания периода архивации

END_VAR

Сама программа:

b:=TRUE; //задаем ее каждый цикл TRUE для работы таймера

in1:=in1+1; // некоторые операции с данными

in2:=in2+2;

in3:=in3+123;

IF tp1.Q THEN

b:=FALSE; // обеспечит перезапуск таймера(его циклическую работу)

END_IF

Arc1_1.SetHead(); //разрешаем составить заголовок (обязательно ставить перед объявление переменных для архивирования)

Arc1_1( Name:=’in1′, Tip:=1, Znachenie:=ADR(in1)); // записываем значение переменной «in1»

Arc1_1( Name:=’in2′, Tip:=2, Znachenie:=ADR(in2));

Arc1_1( Name:=left(‘in3 name bolee 15 sim’,15), Tip:=3, Znachenie:=ADR(in3)); // имя переменной обязательно должно быть меньше 16 символов, если больше, то может вызвать ошибку

Arc1_1( Name:=’text’, Tip:=4, Znachenie:=ADR(strT));

//запишем все эти данные в архив, разрешение на работу свяжем с таймером, данныt берем из ФБ «Arc1_1», имя архива будет «ar1», и хранится будет в папке «/var/log/»(путь надо завершать косой чертой), режим оставляем по умолчанию равны «0»

Arc1_2(Enable:=tp1.Q, ArcPnt:=adr(Arc1_1), NameArc:=’ar1′, Path:=’/var/log/’);

TP1(IN := b, PT:= T#1M); //запустим таймер

На ПЛК получим файл(ы) следующего вида

Как видно к имени архива добавилась дата.

Со следующим содержанием:

//заголовок

#000 size=001 name=in1 #001 size=002 name=in2 #002 size=004 name=in3 name bolee #003 size=015 name=text

//данные

2010.12.03 16.05.22 #000=66 #001=00CC #002=00003102 #003=bla bla bla

2010.12.03 16.05.27 #000=CC #001=0198 #002=00006204 #003=bla bla bla

2010.12.03 16.05.32 #000=32 #001=0264 #002=00009306 #003=bla bla bla

2010.12.03 16.05.37 #000=98 #001=0330 #002=0000C408 #003=bla bla bla

2010.12.03 16.05.42 #000=FE #001=03FC #002=0000F50A #003=bla bla bla

2010.12.03 16.05.47 #000=64 #001=04C8 #002=0001260C #003=bla bla bla

2010.12.03 16.05.52 #000=CA #001=0594 #002=0001570E #003=bla bla bla

2010.12.03 16.05.57 #000=30 #001=0660 #002=00018810 #003=bla bla bla

2010.12.03 16.06.02 #000=96 #001=072C #002=0001B912 #003=bla bla bla

2010.12.03 16.06.07 #000=FC #001=07F8 #002=0001EA14 #003=bla bla bla

2010.12.03 16.06.13 #000=62 #001=08C4 #002=00021B16 #003=bla bla bla

2010.12.03 16.06.18 #000=C8 #001=0990 #002=00024C18 #003=bla bla bla

2010.12.03 16.06.23 #000=2E #001=0A5C #002=00027D1A #003=bla bla bla

и т.д.

Описание и назначение библиотеки

Библиотека ArchivatorOwenLib предназначена для ведения архива данных и записи его в энергонезависимую память контроллера (внутреннюю или внешнюю). Для этого используется два ФБ: первый блок «GetData» формирует строку для записи, на него заводятся те переменные, которые мы хотим архивировать; второй блок «WriteData» осуществляет запись сформированной строки в архив, в перспективе осуществляет несколько режимов ведения архива (пока доступен только один: каждый день создается новый файл).

Описание ФБ

Блок «GetData»

Входы:

• Name — имя переменной, максимальная длина15 символов, используется при формирование заголовка архива, если включен режим формирования заголовка;

• Tip – тип записываемой переменной: 0-REAL, 1-Byte, 2-Word, 3-DWord, 4-String (максимальная длина такая же, как у имени – 15 сиволов )

• Znachenie -значение переменной

Выходы:

• ErrCode -код ошибки (255-переполнение строки данных, 254-переполнение заголовка, 253-переполнение и строки данных и заголовка, 0-ошибок нет); если ошибка случилось, то блок продолжает работать, только новые данные не будут добавлены в конечную строку данных или заголовка.

• StrOut – сформированная строка данных определенного формата (номер переменной в виде #xxx и значение в шеснадцатиричной форме записи, например #005=00A1, «#»Номер переменной ПРОБЕЛ «=»Значение переменной в зависимости от типа)

• StrOutHead –сформированная строка заголовка определенного формата ( «#»Номер переменной ПРОБЕЛ «size=»Размер в байтах ПРОБЕЛ«name=» имя переменнойПРОБЕЛ)

Блок «WriteData»

Входы:

• Enable – разрешение на работу

• ArcPnt – ссылка на ФБ формирования заголовка и строки данных «GetData»

• NameArc – имя архива(максимум 15 символов)

• Path – путь к папке, в которой будет храниться архив (в конце должна стоять косая черта, например: /var/log/)

Для записи данных на флеш-карту или SD-карту памяти у контролеров ПЛК304/308 путь выглядит следующим образом:

SD: « /mnt/mmc/»

USB: «/mnt/usb1(2)/»

• Mode – режим работы (0-каждый день создается новый файл архива, дата добавляется в имя архива)

Выходы:

• ErrCode –код ошибки (0-ошибок нет, 1-не удалось создать файл, 2-не удалось открыть или файл занят, 3- не удалось записать), если ошибка случилось, то происходит выход из ФБ

 

Использование CoDeSys Service Tool для диалога с ПЛК

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

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

При запуске CST на экране монитора отображается следующее окно:

 

В верхней части данного окна расположен раздел ‘Options’, содержащий кнопки для настройки соединения. В центре окна помещен раздел ‘Online’, содержащий кнопки управления контроллером и загрузкой программ и файлов. Внизу вы видите раздел ‘Log’, в котором содержится протокол работы. Справа помещен информационный раздел, в котором показан используемый контроллер и параметры соединения.

Раздел ‘Options’ содержит кнопки для выбора контроллера и настройки канала связи с ним

Пример использования CST

Допустим, нам необходимо обновить код прикладной программы (например My_prg) в одном или нескольких ПЛК, причем сделать это должен неспециалист. Контроллер соединен с компьютером и работает.

Предположим, что мы уже имеем в определенной рабочей директории необходимые файлы нового загрузочного проекта (My_prg.prg, My_prg.chk, My_prg.sdb), программу CST.exe и файл настроек My_plc.ini. Теперь мы можем запустить CST в диалоговом режиме, считать настройки, выбрать загрузочный проект, закачать его, перезагрузить и запустить прикладную программу.

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

bat файл создается в любом текстовом редакторе. Для получения сообщений на русском языке используйте кодировку DOS 866.

Ниже приведен возможный пример bat файла. В начале он выполняет проверку двух базовых условий (наличие самой сервисной программы и файла проекта) и, в случае отсутствия, дает соответствующее сообщение. Затем запускает CST с соответствующими аргументами и анализирует код возврата. Для кодов 1 и 103 предусмотрены текстовые сообщения. Вы можете использовать данный пример, адаптировав его под собственные нужды и развив диагностические сообщения в зависимости от задачи.

Пример bat файла:

@echo off

echo.

echo Обновление программы в ПЛК

echo ——————————

echo.

rem Проверяем наличие сервисной программы CST

if not exist «CST.exe» goto errorCST

rem Проверяем наличие загрузочного проекта

if not exist «My_prg.prg» goto errorPRG

echo Идет соединение с контроллером и загрузка программы. . .

CST.exe -pf %CD%/My_plc.ini -b My_prg.prg -rl -sta

echo.

if %ERRORLEVEL% LEQ 0 goto ok_result

if %ERRORLEVEL% LEQ 1 goto error1

if %ERRORLEVEL% LEQ 103 goto error103

echo Произошла ошибка N%ERRORLEVEL%

goto the_end

:errorCST

echo Не найден файл CST.exe

goto the_end

Работа с подменю ПЛК63,73

Подмодули (подэлементы) пользовательских параметров могут добавляться или удаляться пользователем в модулях (элементах) конфигурации «SubMenu (Ветки пользовательского меню)». Настройка пользовательских параметров производится аналогично настройке фиксированных модулей. Процедура добавления параметров проиллюстрирована на рисунке 1.

Рисунок 1 – Подключение нового уровня вложенности либо нового пользовательского параметра

При добавлении пользовательских параметров требуется задавать их тип – «Конфигурационный» либо «Оперативный» (см. рисунок 2). Конфигурационные пользовательские параметры – значение этих параметров считывается из EEPROM при запуске контроллера. Конфигурационные пользовательские параметры доступны для редактирования с передней панели и для чтения / записи по сети (при условии установленных атрибутов). Введенные в ПО CoDeSys (в окне режима «Конфигурация ПЛК (PLC Configuration)») новые значения этих параметров не сохраняются в EEPROM и не доступны по сети RS.

Введенные с передней панели ПЛК или по сети значения конфигурационных параметров сохраняются в EEPROM, и при выключении питания будут сохранены. Оперативные пользовательские параметры доступны для редактирования с передней панели, по сети (при условии установленных атрибутов) и из ПО CoDeSys (в окне режима «Конфигурация ПЛК (PLC Configuration)») при редактировании значения канала в рамках установленных минимального и максимального значения. Значения оперативных параметров сохраняются в ОЗУ, и при выключении питания последнее значение параметра не будет сохранено. При включении питания значение параметра примет значение, установленное по умолчанию.

Рисунок 2 – Задание типа пользовательского параметра

 Подэлемент «SubMenu (Ветка)»

В модули «SubMenu (Ветки)» можно добавлять подмодули (подэлементы) «SubMenu» (Ветка), представляющие собой вложенные ветви меню для объединения параметров по группам (веткам). Вложенность Submenu может достигать четырех уровней.

Пользовательские параметры

В модули «SubMenu (Ветки)» можно добавлять подэлементы (пользовательские параметры) типов (см. рисунок 7.20), перечисленных ниже.

Параметры типа «DateTimeP», «DateP», «TimeP» не влияют на задание значений часов реального времени ПЛК, а служат для передачи в пользовательскую программу информации об определенном времени, например – о времени включения какого-то устройства или о времени и дате перехода в специальный режим.

«FloatP» – подэлемент, задающий число с плавающей точкой типа Real (IEEE Float 32); имеет канал типа «Real». Для задания номера регистра по протоколу Modbus следует учитывать, что значение должно быть четным, т.к. параметр занимает 2 регистра (4 байта).

«IntP» – подэлемент, задающий целое число в диапазоне от 0 до 65535; имеет канал типа «Int».

«ByteP» – подэлемент, задающий значение стандартного типа Byte.

«DateTimeP» – подэлемент, содержащий дату и время; имеет канал типа DWord, в котором хранится значение времени и даты в специальном формате.

Значение параметра задается в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС, см. рисунок 3. Максимальное и минимальное значение для данного параметра не устанавливается.

Для преобразования данных подэлемента «DateTimeP» в стандартный формат используется специальная функция «DT_TO_SystemTimeDate» из библиотеки «Owen_specific_tools», которая возвращает указатель на структуру «SystemTimeDate» из библиотеки «SYSLIBTIME». Для обратного преобразования используется функция «SystemTimeDate_TO_DT» из той же библиотеки («Owen_specific_tools»).

Рисунок 3 – Формат значения параметра «DateTimeP»

 − «DateP» – подэлемент, устанавливающий дату; имеет канал типа DWord, в котором хранится значение даты в специальном формате.

Значение параметра задается в формате ДД.ММ.ГГГГ. Максимальное и минимальное значение для данного параметра не устанавливаются. Для преобразования данных параметра «DataP» в стандартный формат используется специальная функция «DT_TO_SystemTimeDate» из библиотеки «Owen_specific_tools», которая возвращает указатель на структуру «SystemTimeDate» из библиотеки «SYSLIBTIME». Для обратного преобразования используется функция «SystemTimeDate_TO_DT» из той же библиотеки («Owen_specific_tools»).

«TimeP» – подэлемент, задающий время; имеет канал типа DWord, в котором хранится значение времени в специальном формате. Значение параметра задается в формате ЧЧ:ММ:СС. В аналогичном формате задается минимальное и максимальное значение.

Для преобразования данных параметра TimeP в стандартный формат используется специальная функция «DT_TO_SystemTimeDate» из библиотеки «Owen_specific_tools», которая возвращает указатель на структуру «SystemTimeDate» из библиотеки «SYSLIBTIME». Для обратного преобразования используется функция «SystemTimeDate_TO_DT» из той же библиотеки («Owen_specific_tools»).

«BoolP» – подэлемент, задающий булевский параметр: состояние «Вкл.» (Включено) или «Выкл.» (Выключено); имеет канал типа Bool. Максимальное и минимальное значение для данного параметра не устанавливается.

«StringP» – подэлемент, задающий строку; имеет канал типа String 16. Параметр может использоваться для передачи в программу ПЛК строковой информации по сети. Параметр не доступен для изменения с передней панели.

Если установлен флажок переключателя «Разрешить изменения значения по сети», то параметр доступен для изменения его по сети и из программы ПЛК.

Если флажок не установлен, то в параметр можно записывать только значения из программы ПЛК.

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

«EnumP» – подэлемент, имеющий вид списка с набором заранее определенных значений; при редактировании параметра с передней панели на ЖКИ отображаются строки из списка. Список изначально определен в ПО контроллера и не может быть изменен пользователем. Модуль имеет канал типа Byte, в котором содержится позиционный номер выбранного элемента списка.

Для параметра можно задавать минимальное и максимальное значения, и значение по умолчанию, которое должно входить в установленные ограничения. Для удобства ориентации по списку при конфигурировании показывается позиционный номер выбранной строки списка (при отображении на ЖКИ номер не показывается), см. рисунок 4.

Рисунок 4 – Формат значения параметра «EnumP»

«PointP» – подэлемент задает точку графика – соотношение значений переменных (X и Y). Добавив требуемое количество подэлементов, можно определить зависимость (график) Y=f(X). Значение вводится в поле «Значение /По умолчанию» в формате: «Координата Х; Координата Y». Диапазон задания координат Х и У от минус 3276.7 до 3276.7. Модуль имеет канал типа DWord имеющий формат: 4-х байтовое поле, в котором первые 2 байта – это значение координаты Y, вторые два байта – координаты X, значения которых умножено на 10 в степени, заданной параметром «Знаков после запятой»(см. рисунок 5).

Значение параметра «Знаков после запятой» (0, 1, 2 или 3) задается для обеих координат. На ЖКИ будет отображаться столько знаков после запятой, сколько указанно в этом параметре. Например, если в поле «По умолчанию» указаны значения 11; 12.5 , а параметру «Знаков после запятой» задано значение 2, то на ЖКИ отобразятся значения 11.00 и 12.50.

Для преобразования координаты точки графика в стандартный формат используется специальная функция «DWORD_TO_POINT» из библиотеки «Owen_specific_tools». Для преобразования из стандартного формата в фор-мат «DWORD» используется функция «POINT_TO_DWORD» из библиотеки «Owen_specific_tools».

Рисунок 5 – Формат значения параметра «PointP»

 − «Graph8P», «Graph5P», и «Graph3P» – подэлемент задает совокупность точек графика – соотношения значений переменных (X и Y) в точках, количество которых определяется наименованием выбранного подэлемента – 8, 5 или 3,. Добавив требуемое количество подэлементов, можно определить зависимость (график) Y=f(X). Каждый подмодуль представляет из себя «ветку» конфигурации, содержащую группу параметров (каналов) и параметр – количество точек.

Рисунок 6 – Формат значения параметра «Graph8»

 Число одновременно отображаемых переменных в окнах отладки и/или визуализации сокращено. Точное количество переменных для отладки зависит от их типа и от частоты их обновления, но в среднем количество переменных для отладки и визуализации не должно превышать 30-50 штук. Это ограничение не относится к общему количеству переменных, используемых в проекте.

Модуль дискретных входов (Discrete input) ОВЕН ПЛК

Модуль дискретных входов (Discrete input) отображает в области памяти ввода/вывода значения дискретных входов ПЛК. ID=100.

Модуль имеет 8-ми битовый канал.

Параметры модуля:

«Время фильтрации» (Time of filtration) – диапазон значений от 0 до 10000, значение по умолчанию – 10 (1 ед. = 100 мкс, 10 ед. = 1 мс).

На вкладке модуля дискретных входов представлены восемь одноименных параметров «Время фильтрации» – для каждого битового канала (входа), соответственно.

«Видимость» (Visibility) – задает видимость параметров модуля в программе EasyWorkPLC. Значения выбираются из списка «yes» и «no», значение по умолчанию – «yes».

Список подмодулей: Триггер (Trigger), счетчик (Counter) и энкодер (Encoder).

Параметр «Время фильтрации» (Time of filtration)

Время фильтрации – это период 1 опроса значения входного сигнала, задается в сотнях микросекунд (1 ед. = 100 мкс, 10 ед. = 1 мс).

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

Принцип действия фильтрации:

  • при 8 последовательных выборках из входа, если число единиц <2, то результатом фильтрации является логический нуль, >5 – логическая единица 5 если единиц 2 – состояние не изменяется.

Фильтрация осуществляется в диапазоне от 1 до 10 000 (0.0001..1 с на выборку).

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

Параметр «Видимость» (Visibility)

Работа конечного пользователя с Конфигуратором может осуществляться с помощью специализированной программы EasyWorkPLC разработки ПО «Овен». При установке для конкретного модуля значения «yes» параметра «Видимость», параметры этого модуля становятся видны в программе EasyWorkPLC.

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

Описание канала модуля конфигурации ОВЕН ПЛК

В составе модуля есть каналы – битовые и байтовые. Канал – это переносчик единицы информации (данных) от внешнего оборудования в область памяти ввода/вывода. Каждому каналу соответствует переменная в области ввода/вывода. Канал и соответствующая ему переменная могут быть поименованы, и по присвоенному имени к переменной можно обращаться в программе, либо в программе возможен вызов переменной канала по тому адресу, который у нее установлен аппаратно: например, %IX 0.0.1 8-ми битовый канал может быть использован в программе как 8-битное число, либо как 4 или 8 отдельных друг от друга битов. Именование канала производится следующим образом: двойным щелчком манипулятора «мышь» при курсоре, установленном в начале строки названия канала, осуществляется переход в режим редактирования и вводится имя переменной канала.

1. Имя состоит из латинских букв, цифр и знака «_» (подчеркивание).

2. Имя должно начинаться с буквы или знака «_».

3. Имя должно быть уникальным.

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

Экранная форма, представленная ниже, иллюстрируют процесс именования канала – появление поля ввода символов.

Ввод и редактирование имени переменной канала

 Данные, появляющиеся во вкладке «Базовые параметры», носят информационный характер и не редактируются. Для канала программа выводит следующую информацию:

  • комментарий – характеристика канала (например, для модуля дискретных входов – «8 discrete inputs» = «8 дискретных входов»);
  • идентификационный номер канала в общей иерархии;
  • класс;
  • размер (в битах).

Для битового канала программа выводит только комментарий с номером битового канала, например, «Bit 3».

Представление модулей в экранной форме Конфигуратора ОВЕН ПЛК

Окно экранной формы Конфигуратора ПЛК разделено на две части. В левой части окна отображается иерархическая структура Конфигурации ПЛК, в правой – одна из двух вкладок параметров конкретного модуля, выделенного курсором в иерархической структуре, – вкладка базовых параметров или вкладка параметров модуля.

Вкладка базовых параметров (Base parameters) идентична для всех модулей и содержит следующие значения:

  • идентификационный номер модуля – Modul id;
  • положение модуля на его уровне иерархии в общей конфигурации – Node id. Это значение можно редактировать, в таком случае аналогичные идентификаторы других модулей одного уровня иерархии будут сдвигаться;
  • адреса областей ввода-вывода – Input, Output, Diagnostic Address – приводятся конкретные номера. Они могут понадобиться при программировании, если будет необходимо обращаться к ним.

Значения недоступны для редактирования.

На примере модуля дискретных входов представлена экранная форма Конфигуратора ПЛК, появляющаяся при открытии модуля, с вкладкой базовых параметров в правой части экранной формы.

Модуль дискретных входов. Вкладка «Базовые параметры»

Вторая вкладка правой части экранной формы – «Параметры модуля» (Module parameters) – содержит параметры модуля, представленные в виде таблицы, содержащей столбцы: номер параметра (Index), имя (Name), значение текущее (Value), значение по умолчанию (Default) и минимальная (Min) и максимальная (Max) величины диапазона возможных значений.

Значения параметров могут быть цифровыми, символьными и выбираемыми из списка.

Модуль дискретных входов. Вкладка «Параметры модуля»

 

 

Запуск конфигуратора ОВЕН ПЛК

Утилита PLC Configuration (Конфигуратор ПЛК) доступна пользователю на вкладке ресурсов (Resources) Организатора объектов среды разработки CoDeSys (далее – CoDeSys). Конфигуратор является редактором ресурсов ПЛК, относящихся к области ввода-вывода, через которую программа ПЛК осуществляет информационный обмен с внешней средой. В конфигурации присутствуют модули, отвечающие за структурирование областей ввода и/или вывода, каждый из которых может содержать вложенные подэлементы (субмодули и каналы). Для каналов могут быть назначены символические имена. Прямые МЭК адреса отображаются в конфигурации для каждого символического имени.

Первоначальный вид экранной формы редактора конфигурации в окне CoDeSys задают файл (файлы) конфигурации *.cfg. Они располагаются в директории, определенной в целевом файле (Target file) и считываются при открытии проекта в CoDeSys.

Запуск Конфигуратора ПЛК

 Окно редактора конфигуратора ПЛК разделено на две части. В левой части окна отображается иерархическая структура – дерево Конфигурации ПЛК. Структура и компоненты дерева могут быть изменены пользователем CoDeSys. В правом окне показаны доступные в момент работы пользователя диалоги конфигурации в виде одной или нескольких табличных вкладок. В этих таблицах задаются значения параметров элементов Конфигурации ПЛК

В работе пользователя при переходе от Target file иного производителя к Target file разработки ОВЕН в окне PLC Configuration возникает следующая ситуация: дерево Конфигурации отсутствует. Для создания стандартной Конфигурации пользователь вызывает в главном меню среды разработки опцию Extras|Standard Configuaration.

Примечание. Если потенциально возможен переход от одного Target File фирмы Овен к другому, существенно отличающемуся от первого (например, от ПЛК100 к ПЛК150), необходимо задавать переменные в области программ (POU) или глобальных переменных (Global Variables), т.к. при задании Standard Configuaration пропадают переменные, заданные в редакторе PLC Configuration, и ранее созданное распределение и именование переменных теряется. При объявлении глобальных переменных их имена не будут потеряны, и при переходе к другому Target File останется только скорректировать адреса.

 

Запуск стандартной Конфигурации

 При настройке конфигурации пользователь может изменить параметры функционирования ПЛК, установленные по умолчанию :

Минимальное значение цикла работы ПЛК, в мс (MinCycleLength, ms) – параметр определяет минимальный период, с которым ПЛК выполняет полный цикл своей работы. Диапазон значений от 1 до 50 мс, значение по умолчанию – 1 мс.

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

Максимальное значение цикла работы ПЛК, в мс (MaxCycleLength, ms) – параметр определяет максимально допустимое время, за которое ПЛК выполняет полный цикл своей работы. В случае превышения этой величины при работе ПЛК будет принудительно перезагружен. Диапазон значений от 1000 до 10000 мс, значение по умолчанию – 1000 мс.

Параметры работы ПЛК