Tag Archives: codesys 2.3

Пример опроса параметров по 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

ПО CoDeSys располагает несколькими инструментами отладки проекта. Их краткие описания приведены ниже.

В режиме отладки ПЛК работает существенно медленнее. Из-за этого возможны прерывания связи по таймауту. Поэтому при отладке следует перенастроить таймауты в окне настройки, вызываемом командой «Проект | Опции (Project | Options)» главного меню ПО CoDeSys: на вкладке «Рабочий стол (Desktop)», значение параметра «Таймаут связи (Communication timeout)» увеличить до 15000.

Опция «Отладка»

Опция отладки ПО CoDeSys заставляет компилятор формировать дополнительный код, упрощающий поиск ошибок. Опция «Отладочный код (Debugging)» включается установкой флажка переключателя «Отладочный код (Debugging)» в окне «Опции (Options)», вызываемом командой «Проект | Опции (Project | Options)» главного меню, на вкладке «Генератор кода (Build)» (см. рисунок 1).

Рисунок 1 – Окно «Опции (Options)» вкладка «Генератор кода»

 Точки останова

Точки останова – это места, в которых выполнение программы будет приостанавливаться, что позволяет просмотреть значения переменных на определенном этапе работы программы. Точки останова можно задавать во всех редакторах. В текстовом редакторе точка останова устанавливается на номер строки, в FBD и LD – на графический элемент, в SFC – на шаг.

Система исполнения CoDeSys SP32 Bit Full автоматически деактивирует сторожевой таймер задачи, если она выходит на точку останова.

Пошаговое выполнение

Пошаговое выполнение позволяет проверить логическую правильность программы. Под «шагом» подразумевается:

  • IL: Выполнить программу до следующего оператора CAL, LD or JMP.
  • ST: Выполнить следующую инструкцию.
  • FBD, LD: Выполнить следующую цепь.
  • SFC: Продолжить действие до следующего шага.

Выполнение по циклам

Команда «Онлайн | Один цикл (Online | Single Cycle)» выполняет один рабочий цикл и останавливает контроллер после выполнения.

Эмуляция

Режим эмуляции последовательно включается и отключается выбором команды «Онлайн | Режим эмуляции (Online | Emulation)» главного мню. Включенный режим маркируется устновленным флажком в строке главного меню и записью «Эмул.» в строке состояния главного окна. Во время эмуляции созданная программа выполняется не в ПЛК, а в компьютере, на котором запущено ПО CoDeSys. В этом режиме допустимы все функции онлайн, что позволяет проверить логическую правильность программ, не используя контроллер.

В режиме эмуляции функции внешних библиотек не выполняются.

Бортжурнал (Log)

«Бортжурнал (Log)» хронологически записывает действия пользователя, внутренние сообщения системы исполнения, изменения состояния и исключения в режиме онлайн. Это позволяет анализировать условия возникновения ошибки при отладке программы. Просмотр записей «Бортжурнала (Log)» производится в режиме, вызываемом выбором строки «Бортжурнал (Log)» дерева ресурсов проекта на вкладке «Ресурсы» организатора объектов CoDeSys.

Сложные типы данных в CoDeSys 2.3

Массивы

Элементарные типы данных могут образовывать одно-, двух-, и трехмерные массивы. Массивы могут быть объявлены в разделе объявлений POU или в списке глобальных переменных.

Путем вложения массивов можно получить многомерные массивы, но не более 9-мерных («ARRAY[0..2] OF ARRAY[0..3] OF …»).

Синтаксис:

<Имя_массива>:ARRAY [<ll1>..<ul1>,<ll2>..<ul2>] OF <базовый тип>

Здесь ll1, ll2, ll3 указывают нижний предел индексов; ul1, ul2 и ul3 указывают верхние пределы. Индексы должны быть целого типа. Нельзя использовать отрицательные индексы.

Перечисления

Перечисление – это определяемый пользователем тип данных, задающий несколько строковых псевдонимов для числовых констант.

Перечисление доступно в любой части проекта, даже при локальном его объявлении внутри POU. Поэтому рационально создавать все перечисления на вкладке «Типы данных» Организатора Объектов. Объявление должно начинаться с ключевого слова TYPE и заканчиваться строкой END_TYPE.

Синтаксис:

TYPE <Имя_перечисления>:(<Элемент_0> ,< Элемент _1>, …, < Элемент_n>); END_TYPE

Переменная типа <Имя_перечисления> может принимать только перечисленные значения. При инициализации переменная получает первое значение из заданного списка. Если числовые значения элементов перечисления не указаны явно, то им присваиваются последовательно возрастающие числа, начиная с 0. Фактически элемент перечисления – это число типа INT, и работать с ними можно точно так же.

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

Структуры

Структуры создаются командой «Добавить объект (Add Object)» контекстного меню вкладки «Типы данных» Организатора Объектов. Новый объект отображается в дереве объектов, окно задания параметров объекта открывается в рабочей области главного окна ПО CoDeSys (см. рисунок 1).

Объявление должно начинаться с ключевых слов TYPE и STRUCT и заканчиваться строками END_STRUCT и END_TYPE.

Синтаксис:

TYPE <Имя _структуры>:

STRUCT

<Объявление переменной 1>

.

.

<Объявление переменной n>

END_STRUCT

END_TYPE

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

Рисунок 1 – Вкладка «Типы данных»

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

<Имя_структуры>.<Имя_компонента>

Например, если структура «Week» содержит компонент «Monday», то обращение к нему будет выглядеть так: Week.Monday.

Указатели

Указатели позволяют работать с адресами переменных или функциональных блоков.

Синтаксис:

<Имя_указателя>: POINTER TO <Тип данных/Функциональный блок>;

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

Конфигурирование ведомого CANopen-устройства (CANopen Slave)

ПЛК, программируемый с помощью CoDeSys, можно использовать как CANopen Slave-устройство в сети. В дальнейшем будем называть CANopen Slave как CanDevice.

Для этого необходимо определить ПЛК конфигурацию и сохранить ее в EDS-файле. Такой EDS-файл можно в дальнейшем использовать при определении конфигурации CANopen мастера.

Требования для создания CanDevice:

1. Библиотеки

a. 3S_CanDrv.lib

b. 3S_CanOpenManeger.lib

c. 3S_CanOpenDevice.lib

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

2. В конфигурационном файле с расширением *.cfg, который описывает конфигурацию ПЛК, должны быть сделаны соответствующие настройки. Только в этом случае в PLC Configuration появится дополнительный подэлемент “CanDevice”. Этот объект настраивается в дополнительном диалоге с 3 вкладками: Base settings, CAN settings, Default PDO mapping.

Базовые настройки CanDevice

Диалог Base settings

Bus identifier: пока не используется

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

EDS file generation: включите эту опцию, если хотите чтобы текущие настройки были сохранены в EDS-файле, который потом можно использовать для настройки любого CAN-устройства. В поле Name of EDS file введите имя и путь к файлу. Вы можете вручную создать шаблон для EDS и указать к нему путь в поле Template of EDS file. Например, создайте текстовый файл, содержащий элементы EDS- файла, сохраните его как EDS_template.txt и укажите к нему путь в поле Template of EDS file. Теперь, если вы создаете EDS-файл “device_xy.eds” для текущего проекта, то настройки, сделанные в проекте, будут объединены с настройками из шаблона и сохранены в файле “device_xy.eds” (расширение шаблона не должно быть “.eds”). Если настройки текущего проекта уже определены в шаблоне, то они не будут перезаписаны.

Для указания пути к файлам используйте стандартный диалог, который открывается при нажатии кнопки Browse…

CAN-параметры CanDevice

Диалог CAN settings

В этом диалоге вы можете определить Node id и Baud rate. Node id – это идентификатор узла, который используется для адресации к устройству по сети CANopen.

Так же можно настроить Nodeguarding и Emergency Telegram (описание этих механизмов приведено выше). Heartbeat не поддерживается.

Стандартное PDO отображение для CanDevice

Диалог Default PDO mapping

В этом диалоге элементы локального Менеджера параметров могут быть сопоставлены с PDO, которые отправляются и принимаются этим CanDevice. Полученное PDO-отображение будет доступно в любом конфигураторе, в который CanDevice интегрируется. Параметры, описанные в Менеджере параметров, присоединяются к переменным проекта с помощью системы индексов/подиндексов.

List of mappable objects: Здесь вы можете выбрать список параметров, элементы которого будут отображаться в PDO данного CanDevice. В зависимости от целевой платформы, можно создать список параметров типа “Mapping”, который специально предназначен для отображения в PDO CanDevice. В этом случае для настройки отображения PDO будет доступен только этот список параметров. В противном случае будут доступны все списки параметров типа “Variables” и “Instance”.

Элементы выбранного списка появляются в списке Objects. В списке PDO’s настраивается конфигурация PDO. Добавить в список принимаемые и передаваемые PDO можно с помощью кнопок Insert receive PDO и Insert send PDO. Для того чтобы отобразить объект в PDO, выберите объект в левом окне, PDO в правом и нажмите кнопку >>. Параметры PDO настраиваются с помощью диалога, который появляется при нажатии кнопки Properties.

С помощью кнопки Delete выбранное PDO можно удалить из списка.

Пример:

Цель: В первое принимаемое PDO(COB-Id = 512+NodeId) нужно отобразить переменную PLC_PRG.a Для этого в менеджере параметров нужно создать параметр с определенным индексом/подиндексом и связать его с переменной PLC_PRG.a. Менеджер параметров подключается на вкладке “Network functionality” в настройках целевой платформы. Там же определятся диапазоны индексов и подиндексов.

Теперь в диалоге “Default PDO-Mapping” можно отобразить этот параметр в принимаемое PDO.

Конфигурирование CANopen-модулей в CoDesys 2.3 (часть 2)

Раздел экстренных телеграмм (Emergency Telegram):

Модуль передает аварийное сообщение с уникальным идентификатором COB-Id, когда происходит внутренняя ошибка. Это сообщение, различное для разных модулей, хранится по диагностическому адресу. Нажав кнопку ‘Инфо’ (Info), вы можете просмотреть содержание EDS или DCF файлов. Информация разбита на 3 раздела: ‘О файле’ (FILE INFO), ‘Об устройстве’ (DEVICE INFO) и “O PDO” (PDO INFO).

Выбор CAN-модулей модульных ведомых устройств

В левой колонке (Available modules) находятся все доступные модули. Выберите нужные вам модули и с помощью кнопки Add добавьте их в правую колонку (Selected Modules). С помощью кнопки Remove модуль можно будет удалить. Настройки PDO и SDO изменяются автоматически.

Отображение PDO в CAN-модулях

Вкладки ‘Отображать приним. PDO’ (Receive PDO mapping) и ‘Отобр. приниающие PDO’ (Send PDO mapping) в диалоге конфигурирования модуля позволяют изменить образ PDO (PDO mapping), описанный в EDS-файле.

Все доступные объекты располагаются в левой части окна и могут быть отображены в PDO (Process Data Object) с помощью кнопки “>>” и удалены из PDO кнопкой Remove. Объекты типа Standard-DataTypes могут быть использованы для заполнения пустых промежутков в PDO.

Конфигурация CAN-модуля, настройка PDO-отображения

 

Кнопка ‘Вставить PDO’ (Insert PDO) используется для создания дополнительного PDO. В новое PDO вы можете отобразить дополнительные объекты. Распределение памяти входов/выходов для этих объектов производится автоматически, и его можно увидеть в конфигурации контроллера. Кроме того, в конфигурации контроллера появляются символьные имена добавленных объектов.

Настройки PDO можно изменить, нажав кнопку ‘Свойства’ (Properties).

Диалог PDO Properties

 

Каждое PDO имеет собственный идентификатор COB-Id (Communication Object Identifier). Настройки PDO, недоступные для данного модуля, неактивны. ‘Задержка’ (Inhibit Time) – это минимальное время между двумя посылками данного PDO. Нужно выбрать это значение так, чтобы PDO не посылалось слишком часто. Это происходит в том случае, когда значения параметров, отображенных в PDO, передаются чаще, чем меняются их значения, что приводит к необоснованному увеличению загрузки сети.

CMS Priority Group — приоритет PDO при его передаче по сети. Может принимать значения от 0 до 7, причем наивысшему приоритету соответствует значение 0.

‘Тип передачи’ (Transmission Type) Доступны следующие режимы:

  • Ацикличный-синхронный (acyclic-synchronous): PDO передается синхронно, но не периодически
  • Цикличный-синхронный (cyclic-synchronous): PDO передается синхронно, через каждые ‘Число синхр.’ (Number of Sync) синхронизирующих сообщений.
  • Синхр.-только RTR (synchronous-RTR only): PDO обновляется после каждого синхронного сообщения, но передается только после специального запроса (Remote Transmission Request)
  • Асинхр.-только RTR (asynchronous-RTR only): PDO обновляется и передается только после специального запроса (Remote Transmission Request)
  • Асиинхр.-специф. устройства (asynchronous-device profile specific) и Асинхр.-специф. изготовителя (asynchronous-manufacturer specific): PDO передается после специального события.
  • Число синхр. (Number of Sync): число синхронизирующих сообщения между передаваемыми

PDO в режиме синхронной передачи.

Время события (Event-Time): период между двумя сообщениями для соответствующего режима передачи.

Сервисные объекты данных (SDO)

На вкладке сервисных объектов данных (Service Data Object) вы найдете список всех объектов, определенных в EDS и DCF файлах, с индексами от 0x2000 до 0x9FFF. Эти объекты доступны для записи.

Диалог настройки SDO

 

Каждый объект имеет свойства ‘Индекс’ (Index), ‘Имя’ (Name), ‘Значение’ (Value) и ‘По умолчанию’ (Default). Значения этих свойств можно изменять. Выделите нужное вам значение и нажмите <Пробел>. После этого внесите необходимые изменения и для подтверждения нажмите <Enter>, а для отмены — <Esc>. Эти значения передаются в виде SDO (Service Data Object) при инициализации сети.

Конфигурирование CANopen-модулей в CoDesys 2.3 (часть1)

CoDeSys поддерживает настройку оборудования в соответствии со спецификацией CANopen Draft Standart 301. Конфигурирование контроллера производиться практически так же, как описано выше для обычного аппаратно-зависимого конфигурирования ПЛК.

Все файлы электронной спецификации EDS (Electronic Data Sheet) и DCF (Device Configuration File), которые находятся в директории конфигурационных файлов (обычно PLCCONF), интегрируются в CoDeSys. Их содержание можно просмотреть и изменить с помощью ПЛК конфигурации. В EDS описываются параметры CAN-модуля, которые можно настраивать. Если вы добавите модуль, описанный с помощью DCF, можно будет настраивать только МЭК-адреса, а все остальные параметры модуля будут зафиксированы.

Модули CAN настраиваются удаленно с помощью обмена сетевыми сообщениями. Необходимые значения параметров задаются в диалоге ‘CAN параметры’ (CAN Parameters). Затем прием и передача данных модулей происходит через PDO (Process Data Objects), что определяется в диалогах ‘Отобр. принимаемый PDO’ (Receive PDO) и ‘Отобр. перед. PDO’ (Send PDO-Mapping). Значения доступных SDO (Service Data Objects) задаются в диалоге Service Data Objects. Дополнительные параметры CAN модулей, определенные в файлах описания устройств, настраиваются в диалоге ‘Параметры модуля’ (Module parameters). Если программируемый в CoDeSys контрроллер должен быть включен в сеть CANopen как ведомый (“CAN device”), то он настраивается с помощью конфигуратора ПЛК. Его конфигурация записывается в EDS-файл, который может затем может быть использован с любым CANopen мастером.

Ниже описан процесс конфигурирования устройств CANopen.

Базовые параметры CAN-мастера

Настройка таких параметров, как Идент. модуля (Module-Id), Адреса входов/выходов (input/output addresses), Адрес диагностики (Diagnostic address), описана в разделе 0.

Параметры сети CAN можно настраивать сразу после добавления модуля либо после вызова команды “Дополнения” “Свойства” (“Extras” “Properties”).

CAN-параметры CAN-мастера

Выберите скорость передачи данных из списка ‘Скорость’ (Baud rate).

PDO (Process Data Object) может передаваться в синхронном и асинхронном режимах. Синхронизирующее сообщение, имеющее уникальный идентификатор ‘Синхр. COB-ID’ (Sync. COB-ID) (Communication Object Identifier), передается с периодом, указанным в поле ‘Общее время цикла’ (Communication Cycle Period). Для передачи PDO выделяется временной интервал ‘Ширина окна синхронизации’ (Sync. Window Length) сразу после передачи синхронизирующего сообщения. Величина этого интервала указывается в микросекундах. Синхронизирующее сообщение не посылается, если ‘Общее время цикла’ (Communication Cycle Period) и ‘Ширина окна визуализации’ (Sync. Window Length) равны 0. Флажок ‘Активация’ (activate): разрешает передачу синхронизирующего сообщения.

‘Идент. узла’ (Node-Id): уникальный идентификатор CAN-устройства (узла). Принимает значения от 1 до 127. Это значение должно быть уникальным для каждого устройства в сети и задается в десятичном виде. (Не путайте поля Node-Id и Node number.)

Сеть CAN будет автоматически инициализироваться и включаться в работу сразу после загрузки программы, если активна опция ‘Автостарт’ (Automatic startup). Если эта опция не активна, то сеть нужно запускать непосредственно из программы.

Если активна опция ‘Поддержка DSP301, V3.01 и DSP306’ (Support DSP301, V3.01 and DSP306), то будут поддерживаться модульные CAN-Slave устройства, а также еще некоторые возможности, описанные в стандарте DSP301, V3.01 и DSP306, в том числе и сердцебиение. В этом случае CAN устройство будет передавать специальные сообщения, сообщающие о том, что оно работает, с периодом, указанном в поле ‘Сердцебиение’ (Heartbeat Master[ms]). Такой механизм называется сердцебиение (Heartbeat) и является альтернативой механизма Защита узла (Node guarding), но отличается тем, что может работать как на Master, так и на Slave-устройствах. Обычно этот механизм запускается на CAN-мастере.

Параметры модуля CAN-мастера

Диалог настройки параметров модуля CAN мастера такой же, как и для других модулей (см. 0). Дополнительные параметры CAN-мастера, описанные в конфигурационном файле, также доступны пользователю, и их можно редактировать.

Базовые CAN параметры

МЭК-адреса для обращения к PDO из проекта, вводятся в полях ‘Адрес выходов’ (output address) и ‘Адрес входов’ (input address) в зависимости от направления передачи данных, которая осуществляется PDO. В поле ‘Адрес диагностики’ (diagnostic address) нужно ввести МЭК-адрес маркированной памяти (M). По этому адресу будет размещена диагностическая информация о модуле.

CAN-параметры CAN-модуля

Диалог CAN параметров CAN-модуля

Раздел General ID узла (Node-Id): идентификатор CAN-устройства (узла). Принимает значения от 1 до 127. Это значение должно быть уникальным для каждого устройства в сети и задается в десятичном виде. Если активна опция ‘Записать DCF’ (Write DCF), то при компиляции проекта создается файл с расширением DCF, имя которого состоит из имени соответствующего EDS файла и идентификатора узла, для которого создавался этот файл. Если активна опция ‘Создавать все SDO’ (Create All SDO’s), то SDO создаются для всех объектов, а не только для тех, которые изменены. Если активна опция ‘Сброс узла’ (Reset node) (ее наличие зависит от содержимого файла описания устройства), то ведомое устройство сбрасывается перед загрузкой конфигурации. Опция ‘Опц. устройство’ (Optional device) (ее наличие зависит от специфики целевой платформы) приводит к тому, что мастер будет выполнять только одну попытку чтения из данного узла. Отсутствие ответа игнорируется, то есть мастер продолжит нормальное функционирование. Опция ‘Без иниц.’ (No initialization) указывает мастеру немедленно активировать данный узел без посылки конфигурационного SDO. (Данные SDO будут созданы и сохранены в контроллере в любом случае.) Если поддерживается целевой системой, то создание SDO может быть ограничено по трем уровням. Это может потребоваться при недостаточной памяти:

  • CreateCommSDOs: SDO коммуникационных параметров
  • CreateMappingSDOs: конфигурационные SDO
  • CreateBasicSDOs: SDO базовых параметров (Nodeguarding, Sync и др.)

Будут создаваться только SDO разрешенного типа. Вышеописанная опция ‘Создавать все SDO’ (Create All SDO’s) влияет только на активированные здесь типы. Раздел охрана узла (Node guard альтернатива механизму Сердцебиение — Heartbeat). Если активна опция ‘Защита узла’ (NodeGuarding), то модулю посылается сообщение с периодом (Guard Time) (указывается в миллисекундах). В ответ модуль должен послать сообщение с идентификатором “Защитный COB-ID” (Guard COB-ID) (Communication Object Identifier). Если этого не происходит, то он получает статус “timeout”. Если модуль не отвечает на ‘Фактор работоспособности’ (Life Time Factor) сообщений, то он получает статус “not OK”. Статус модуля можно определить, обратившись по диагностическому адресу. Контроль состояния модуля не производится, если переменные ‘Период’ (Guard Time) и ‘Фактор работоспособности’ (Life Time Factor) равны 0.

Раздел сердцебиение (Heartbeat Settings альтернатива механизму Защита узла — Node

guarding): если опция ‘Активировать генерацию сердцебиения’ (Activate Heartbeat generation) активна, то модуль посылает специальные сообщения сердцебиения с периодом ‘Время потребителя’ (Heartbeat Consumer Time) (указывается в миллисекундах). Если активна опция ‘Активация потребителя’ (Activate Heartbeat Consumer), то модуль слушает сообщения сердцебиения, посылаемые мастером. Если эти сообщения до него не доходят, то модуль выключает свои входы/выходы.

Включатель света с автоматическим отключением

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

Задача обеспечить включение света на заданный интервал времени, например, у входной двери в квартиру, по следующему алгоритму:

1)                      перед входной дверью установлен датчик освещения (F1) и кнопка  включения света ТАЙМЕР (SB1);

2)                      при кратковременном нажатии на кнопку ТАЙМЕР, при недостаточном естественном освещении, светильник должен включаться на интервал времени 1 мин – этого времени достаточно, чтобы найти замочную скважину и ключом открыть дверь;

3)                      при удерживании нажатой кнопки ТАЙМЕР в течение 2 с светильник должен включаться на интервал времени 3 мин независимо от внешнего освещения – этот режим может потребоваться при уборке коридора;

4)                      предусмотреть возможность управления работой светильника по командам от внешних управляющих устройств или при помощи  включателя СВЕТ (SA1), независимо от внешнего освещения. Этот режим удобен во время приема гостей или для дальнейшей автоматизации квартиры в рамках программы «умный дом»;

5)                      предусмотреть возможность включения светильника только в вечернее и ночное время.

 

Выбор программируемого прибора

Для реализации данной задачи управляющий автомат должен иметь встроенные часы реального времени, три входа и один выход, что обеспечивают приборы из серии ПР110, имеющие последнюю букву «Ч» в обозначении.

При выполнении автоматики на основе ПР110-24.8Д.4Р-Ч можно воспользоваться схемой, приведенной на рисунке 1 (номера входов и выходов для ПР выбраны произвольно).

Рисунок 1 – Электрическая схема подключения ПР, SA1 – переключатель OFF-ОN; SB1 – кнопка без фиксации OFF-ОN; HL1 – световая лампа

Создание коммутационной программы

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

Схема может иметь вид, приведенный на рисунке 2.

Выход Q2 схемы используется как контрольный для проверки функционирования логической части (элементов D1–D6). Выход Q1 является основным и может включиться только в заданные таймером D7 интервалы времени, при соблюдении логических условий, обеспечиваемых элементами    D1–D6.

Рисунок 2 – Схема электрическая принципиальная для управляющей программы «Свет_Logic»

Описание работы схемы:

1)                      при кратковременном (менее 2 с) нажатии на кнопку ТАЙМЕР (SB1),  лог. «1» поступает на вход логического элемента И (D2). Так как на втором входе D2 также присутствует лог. «1», на выходе D2 появится лог. «1», которая запустит формирователь импульса (D3) длительностью 1 мин.  Этот импульс через элемент ИЛИ (D6) поступит на выход Q2;

2)                      контакты датчика F1 замыкают цепь только при хорошем естественном освещении – в этом случае лог. «1» на входе D1 преобразуется в лог. «0»  на  выходе и поступает на вход логического элемента И (D2), что блокирует работу D2.  При этом нажатие кнопки ТАЙМЕР не включит выход Q2;

3)                      при удержании нажатой кнопки ТАЙМЕР более 2 с, на выходе блока D4 появится лог. «1», которая запустит формирователь импульса (D5) длительностью 3 мин. Этот импульс через элемент ИЛИ (D6) поступит на выход Q2 (интервал действия импульса не зависит от состояния датчика F1);

4)                      при включении тумблера «СВЕТ» (SA1) лог. «1» через элемент ИЛИ (D6) поступит на выход Q2 (на время включения SA1);

5)                      сигнал лог. «1» с выхода Q2 поступает на вход логического элемента И (D8), а если на второй вход этого элемента также поступает лог. «1» (от  таймера реального времени D7) – на выходе Q1 появится лог. «1» (выходное реле Q1 включится).

Программа, обеспечивающая работу ПР, будет иметь вид, приведенный на рисунке 3.

Рисунок 3 – Управляющая программа «Свет_Logic» на основе ФБ программы OWEN Logic (с открытой вкладкой свойств для блока CLOCKW1)

 

 

Мой блог находят по следующим фразам

Настройка OPC-сервера для работы по протоколу Modbus TCP в режиме Master

Компьютер, на котором установлен «Lectus Modbus OPC/DDE сервер версии 3.8», должен иметь возможность подключения к сети Интернет через один из возможных каналов связи (например, через сеть Ethernet, dialup-модем, ADSL-модем и др.), для определенности будем считать, что компьютер подключен к сети Интернет через Ethernet. Установить соединение с сетью Интернет, средствами Windows.

Для работы LectusOPC по протоколу Modbus TCP, необходимо:

1. Запустить LectusOPC, удалить ранее созданные узлы, после чего сохранить проект под новым именем — тем самым создать новый проект.

2. Добавить к текущим данным новый Modbus-узел (Рис.1.).

Рис.1 Добавление нового узла в LectusOPC

3. В появившемся окне задать параметры modbus-узла (Рис.2). Описание параметров смотрите в справке LectusOPC.

Рис.2 Настройка Modbus узла по TCP/IP.

4. Не закрывая окно «Добавить узел», нажать на кнопку «Настройка..», где указать IP-адрес (Рис.3).

Рис.3 Настройка TCP/IP

 

5. После добавления узла, добавить переменные в Modbus-узел (Рис.4).

Рис.4 Добавление переменной в OPC

6. В появившемся окне задать параметры переменной (Рис.5). Описание параметров смотрите в справке LectusOPC.

Рис.5 Задания адреса переменной

7. После создания узла и добавления в него переменных сохраните проект и запустите встроенный клиент LectusOPC, нажав на кнопку «Запустить опрос». Появится узел, где будут отображены значения переданных из контроллера переменных (Рис.6).

Рис.6 Запуск OPC

8. Впоследствии, именно к этому узлу можно будет подключиться OPC-клиентом (например, SCADA-системой).

9. Через некоторое время OPC-сервер соединиться с ПЛК100 и начнется обмен Modbus-пакетами, для контроля над этим процессом необходимо перейти на вкладку «Лог» (рис.7).

Рис.7 Обмен посылками по ModbusTCP, лог LectusOPC

На вкладке «Лог» видно, как был запущен OPC-сервер, затем произошло соединение с IP-адресом 83.220.242.28 по порту 502 (протокол TCP) и начался обмен Modbus-пакетами. OPC-сервер считывает переменную с ПЛК100, ее значение равно 100dec (64hex).

 

Мой блог находят по следующим фразам

Настройка ПЛК для работы через GSM-модем по протоколу Modbus TCP в режиме Slave

Чтобы настроить работу ПЛК1хх по протоколу Modbus TCP в режиме Slave, необходимо:

1. Подключить модем ПМ01 к ПЛК по одному из последовательных портов, в соответствии с руководством по эксплуатации, установив необходимые перемычки на модеме (В случае RS-232 обязательно перемычка 6-9 на разъеме модема Х1). Схемы кабелей и рекомендации можно найти в разделе «часто задаваемые вопросы» для GSM/GPRS модема ПМ01: http://www.owen.ru/catalog/74944685

2. В среде программирования Codesys2.3,перейти в область PLC_Configuration(Конфигурация_ПЛК) и добавить там модуль Modbus(Slave)(рис.1).

3. Задать адрес в сети Modbus для ПЛК, параметр «Address» модуля «Modbus(slave)» вкладка «Module parameters» (рис.1).

Рис.1 Настройка адреса ПЛК в режиме Slave

4. К появившемуся подмодулю «Modbus[FIX]» добавить подмодуль «Modem» (выделить подмодуль «Modbus[FIX]», нажать правую клавишу мыши и через контекстное меню выделить «Append Subelement» и далее «Modem…») и настроить его на вкладке «Module parameters»1 как показано на рис.2. Подробнее о параметрах модуля Modem см. в документе «PLC_Configuration.pdf» на диске ПЛК в разделе Документация

Рис.2 Добавление и настройка подмодуля «Modem»

5. Выбрать интерфейс, через который GSM-модем подключен к ПЛК, заменив интерфейс, установленный по умолчанию, с помощью правой кнопки мыши.

6. Установить параметры выбранного интерфейса в соответствии с настройками модема, на вкладке «Module parameters»(рис.3).

Рис.3 Настройка интерфейса обмена ПЛК и модема (приведен для стандартных настроек GSM-модема ПМ01)

7. Добавить к подмодулю «Modem» подмодуль «PPP_Driver» (выделить подмодуль «Modem[VAR]», нажать правую клавишу мыши и через контекстное меню выбрать «Append PPP_Driver»), рис.4. Настроить его на вкладке «Module parameters» задав параметры «Login» и «Password», необходимые для дозвона до провайдера-поставщика Интернет услуг (предоставляются поставщиком GSM-услуг). Подробнее о параметрах подмодуля «PPP_Driver» см. в документе «OWEN_PLC_Configuration.pdf».

8. К подмодулю «Modbus(Slave)» добавить подмодуль «TCP[VAR]» (выделить подмодуль «Modbus[FIX]», нажать правую клавишу мыши и через контекстное меню выбрать «Append Subelement», а затем «TCP…»), рис.4, на вкладке «Module parameters» модуля «TCP[VAR]» параметр «RemotePort» должен быть равен 502.

9. Добавить к модулю «Modbus(slave)» необходимые переменные, например «2 byte» (выбрать модуль «ModBus (slave)», нажать правую клавишу мыши, через контекстное меню выбрать «Append Subelement», а потом «2 byte…»),рис.4.

Рис.4 Конфигурация ПЛК100 для обмена по GPRS, с подключенным модемом к порту Debug

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

10.Установить связь с ПЛК командой Online|│Login, при этом программу в ПЛК можно не изменять.

11.В подключенном состоянии, перейти в область PLC_Browser (ПЛК-Браузер) и задать настройки TCP/IP подключения для контроллера, соответствующие настройкам используемой в GSM-модеме SIM-карты:

a. SetIP XXX.XXX.XXX.XXX

b. SetGATE XXX.XXX.XXX.XXX

c.SetMASK XXX.XXX.XXX.XXX

Рис.5 Сетевые настройки ПЛК, работа через ПЛК-Браузер

12.Создать файл инициализации модема с именем «extconf.cfg» с адресом «точки доступа» (даётся провайдером сотовой связи). Для этого можно воспользоваться стандартным текстовым редактором Windows – «Блокнот».

Пример файла инициализации для SIM-карты Beeline со статическим IP-адресом:

AT+CGATT=1

AT+CGDCONT=1,»IP»,»static.beeline.ru»

AT

Рекомендуем файл инициализации заканчивать командой «AT».

13. Перед загрузкой файла, проверить отсутствует ли старый файл инициализации в ПЛК, а так же файлы CoDeSys.cfg и modem.cfg (Последние задают настройки удаленного подключения Codesys к ПЛК и имеют приоритет над настройками в ПЛК_Конфигурации, что может мешать работе совпадающих последовательных портов).

Рис.6 Проверка отсутствия файлов модема

14.Загрузить созданный файл инициализации модема «extconf.cfg», Online|│Write file to PLC.

15.После Задания настроек TCP и загрузке файла инициализации, необходимо перезагрузить ПЛК нажав кнопку «Cброс».

16.Спустя 15 секунд, после перезагрузки, повторно установить связь с ПЛК командой Online|│Login и загрузить созданную программу в ПЛК

17.В области конфигурации, подключением к GPRS можно управлять и контролировать с помощью специальных байт (рис.7). Время подключения к серверу, интервалы между дозвонами и кол-во дозвонов до GSM-сервера задаётся на вкладке «Module parameters» подмодуля modem.

Рис.7 Байты управления модемом, статус: «подключен по GPRS»

18.Удаленно проверить подключение ПЛК к сети Интернет с помощью «ping» в командной строке Windows, подключенного к Интернет ПК.

Например, «ping 83.220.242.28 –t» результат на рис.8.

Рис.8 Проверка подключения ПЛК к сети интернет через GPRS

Мой блог находят по следующим фразам

Аппаратные часы времени в CoDeSys

Пример работы с аппаратными часами реального времени с помощью библиотеки syslibtime. Получение данных о текущем времени и изменение времени из программы.

 

PROGRAM PLC_PRG                      (*PLC100 RL core 2-07-2 target 2-05-7*)

VAR

GetTime: CurTimeEx;

TimeAndDate: SystemTimeDate;

Sys_Time: SysTime64;

set_time: BOOL;

END_VAR

 

IF set_time THEN

 

TimeAndDate.Minute;

TimeAndDate.Second;

TimeAndDate.Hour;

GetTime (SystemTime:=Sys_Time , TimeDate:= TimeAndDate);

ELSE

 

TimeAndDate.Day :=0;

TimeAndDate.DayOfWeek :=0;

TimeAndDate.dwHighMsec :=0;

TimeAndDate.dwLowMSecs :=0;

TimeAndDate.Milliseconds :=0;

TimeAndDate.Minute :=0;

TimeAndDate.Second :=0;

TimeAndDate.Hour :=0;

TimeAndDate.Year :=0;

TimeAndDate.Month :=0;

Sys_time.ulHigh :=0;

Sys_time.ulLow :=0;

GetTime (SystemTime:=Sys_Time , TimeDate:= TimeAndDate);

END_IF

 

Мой блог находят по следующим фразам