Создание программы для контроллера

<< Click to Display Table of Contents >>

Navigation:  Modbus Universal MasterOPC Server > Руководства по подключению различных контроллеров > Подключение ABB AC500 > Настройка контроллера на работу с протоколом Modbus TCP >

Создание программы для контроллера

Создание программы для контроллера осуществляется в интегрированной среде программирования Codesys.

Выберите пункт AC500 в дереве проекта и щелкните по нему два раза левой кнопкой мыши.

ABB_AC500_img13

Программа предложит создать конфигурацию Codesys-проекта. Нажмите Да.

ABB_AC500_img14

После создания конфигурации программа запустит среду прораммирования Codesys.

Главное окно проекта условно разделено на 4 части:

1.Главное меню;

2.Дерево проекта;

3.Рабочая область проекта;

4.Окно сообщений.

ABB_AC500_img15

Первый программный компонент (POUProgram Organization Unit) помещается в новый проект автоматически и получает название PLC_PRG. Именно с него начинается выполнение процесса (PLC_PRG выполняется 1 раз за цикл управления), из него будут вызываться другие программные компоненты.

К программным компонентам (POU) относятся функциональные блоки, функции и программы. Отдельные POU могут включать действия (подпрограммы).

Каждый программный компонент состоит из раздела объявлений и кода. Для написания всего кода POU используется один из МЭК языков программирования (IL, ST, FBD, SFC, LD или CFC).

Функция – это POU, возвращающий только единственное значение, которое может состоять из нескольких элементов, если это битовое поле или структура. В текстовых языках функция вызывается как оператор и может входить в выражения.

Функциональный блок - это POU, который принимает и возвращает произвольное число значений. В отличие от функции, функциональный блок не формирует возвращаемое значение. Для работы с функциональным блоком необходимо объявить (создать) его экземпляр. Один функциональный блок может иметь произвольное число экземпляров, каждый из которых имеет собственные независимые данные (память).

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

Примечание. Руководство пользователя по программированию ПЛК в Codesys вы можете найти в директории установленной программы: Пуск-Программы-3S Software –Codesys 2.3-Codesys UserManual 2.3

По умолчанию для POU PLC_PRG установлен язык программирования ST. Если вы хотите использовать другой язык, вы можете сконвертировать программу. Мы будем использовать язык FBD. Для того чтобы сконвертировать программу в язык программирования FBD в дереве проекта вызовите контекстное меню элемента PLC_PRG правой кнопкой мыши и выберите пункт Convert Object.

ABB_AC500_img17

В открывшемся окне Convert Object установите маркер в пункте FBD и нажмите OK.

ABB_AC500_img18

Примечание. Перед конвертированием PLC_PRG среда программирования может потребовать перекомпилировать проект (Рисунок 3-17). Нажмите OK.

ABB_AC500_img19

В главном меню выберите пункт меню Project-Rebuild all.

ABB_AC500_img20

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

ABB_AC500_img21

В рабочей области проекта в окне Global_Variables вызовите контекстное меню правой кнопкой мыши и выберите пункт Auto Declare.

ABB_AC500_img22

В появившемся окне Declare Variable в поле Name введите имя переменной "globalVar1", в поле Type введите тип переменной, либо нажмите кнопку "…" и выберите тип переменной из списка в окне Input assistant и нажмите ОK, в поле Address введите абсолютный адрес переменной %MW0.1 (адресация в соответствии с IEC 61131, подробное описание далее), в окне Comment – описание переменной, нажмите OK.

ABB_AC500_img23

ABB_AC500_img24

Среда программирования сформирует строку глобальной переменной.

ABB_AC500_img25

В контроллерах серии AC500-eCo по протоколу Modbus(RTU, TCP) доступно чтение и запись только локальной памяти (%M-область памяти). Локальная память разделена на два сегмента (с номерами 0 и 1) по 64 кБ каждый. Адреса Modbus начинаются с 0 , указывая на двухбайтное значение области памяти. Таким образом, диапазон Modbus адресов для 0 сегмента – от 0 до 32768 (0x0000-0x7FFF), для 1 сегмента – от 32769 до 65535 (0x8000-0xFFFF). Формат записи соответствует стандарту IEC 61131:

“%M”data type”.”segment”.“number”, где:

data typeтип данных регистра (W-word, B-byte, X – bit, D – double word);

segment номер сегмента памяти контроллера;

numberномер регистра в десятичном формате.

ABB_AC500_img26

Рекомендуется каждой глобальной переменной присваивать тип данных регистра соответствующий ее типу (если тип переменной BYTE, то присваивать ей адрес %MBx.x, если WORD - %MDx.x и т.д.), заполнять адреса от младшего к старшему, а также группировать переменные разных типов (например, сначала объявить все переменные типа DWORD, затем все переменные WORD) – это упростит определение Modbus адресов.

Если необходимо объявить вещественную переменную (тип Real в Codesys), то ей соответствует 4-байтовый тип DWORD, который будет занимать 2 Modbus регистра.

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

Регистры с типом данных WORD соответствуют региону Holding Registers, т.е. опрос регистров осуществляется функцией 03(0x03), поддерживается как запись одиночных регистров (функцией 06(0x06)), так и групповая запись нескольких регистров (функцией 16(0x10)).

Также возможен опрос отдельных битов регистров, используя функции региона Coils (чтение – 0x01, одиночная запись 0x05, групповая запись – 0x0F). Однако мы рекомендуем упаковывать дискретные переменные в регистр типа Word, а затем производить распаковку значения на верхнем уровне (в SCADA системе). Это упростит конфигурацию проекта и OPC сервера, ускорит передачу данных и позволит сэкономить лицензионные теги.

 

Примечание. Более подробную информацию о протоколе Modbus в контроллерах ABB серии AC500 вы можете загрузить с сайта Control System Application and Knowledge Store компании ABB: 11 Communication with Modbus RTU. Content .-22 p.

Наш проект будет содержать 4 глобальных переменных, типа WORD

Имя

Тип

Адрес

Назначение

globalVar1

WORD

%MW0.1

Область памяти с доступом по адресу Modbus 01 (0x01)

globalVar2

WORD

%MW0.2

Область памяти с доступом по адресу Modbus 02 (0x02)

globalVar3

WORD

%MW0.3

Область памяти с доступом по адресу Modbus 03 (0x03)

globalVar4

WORD

%MW0.4

Область памяти с доступом по адресу Modbus 04 (0x04)

 

ABB_AC500_img28

Следующим шагом необходимо написать код для программы PLC_PRG. Мы напишем программу, которая будет записывать в глобальные переменные для Modbus TCP числовые константы. В окне дерева проекта перейдите на вкладку POUs и дважды щелкните левой кнопкой мыши на пункте PLC_PRG.

ABB_AC500_img29

В главном окне программы PLC_PRG установите курсор в левое положение от строки "???", вызовите контекстное меню правой кнопкой мыши, и выберите пункт Assign.

ABB_AC500_img30

ABB_AC500_img31

В левой части от символа присваивания введите произвольное числовое значение переменной, в правой части введите имя переменной.

ABB_AC500_img32

Для создания следующего сегмента установите курсор в левое положение от имени переменной первого сегмента, вызовите контекстное меню правой кнопкой мыши и выберите пункт Network (after).

ABB_AC500_img33

Присвойте произвольные значения для остальных трех переменных.

ABB_AC500_img34

Программа создана.