Программирование панели оператора ICP DAS серии TPD

  • Дата

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

Панель оператора ICP DAS TPD-283 обладает классическим дизайном, ориентированы на применения в системах автоматизации зданий и системах "умный дом". Панель оснащена Touch-screen дисплеем 2.8", съемная лицевая рамка, температурный диапазон от - 25 С. Панель TPD-283 оснащена портом Ethernet, с поддержкой функции PoE(power over ethernet) - автоматически отпадает надобность подводить к панели отдельное питание, питание осуществляется через интерфейс Ethernet.

Отличительной особенностью  TDP-283 является работа в режим Soft-Logic, т.е. работа без дополнительного контроллера, осуществляет сбор и обработку данных с модулей ввода - вывода.  А, благодаря возможности программирования панели с помощью бесплатно распространяемой компанией ICP DAS программы HMIWorks, успешная настройка панели не требует обладания навыками программиста высокого уровня, т.к. программирование происходит на блочном уровне; но при необходимости реализации более сложных алгоритмов есть возможность написания макросов на языке Си.. Руководство пользователя панели включает в себя аппаратную и программную настройку, а так же описание применения API-функций. В этом вы сможете убедиться по ходу чтения этой статьи - в ней мы изложим принцип работы панели оператора TPD-283 в паре с модулем ввода - вывода PET-7060 по протоколу Modbus TCP. 

Как упоминалось выше, панель обладает простотой в программировании - разберём основные моменты на банальном примере. Для этого у нас имеется следующий набор оборудования:

  •  Панель оператора TPD - 283
  •  Модуль ввода - вывода PET - 7060
  •  Коммутатор PoE NSM-205PSE-24V ( Power over ethernet )
  • Тумблер
  • Световая индикация (в виде лампы 24 В)
  1.  Включим наш компьютер и панель оператора в одну сеть с помощью коммутатора
  2.  Подключим тумблер к дискретному входу IN0 модуля ввода - вывода PET-7060  
  3.  Подключим светодиодную лампу к релейный выходу RL0 модуля ввода - вывода PET-7060
  4.  Устанавливаем среду разработки для панели оператора TPD-283 HMIWorks.

При запуске HMIWorks программа запросит действие - создать новый проект или открыть существующий. Так как мы создаем проект с нуля, выбираем создание нового проекта - New Project:

В следующем окне программа запросит параметры создаваемого проекта - тип панели (в нашем случае TPD-283), название проекта, директорию для сохранения, ориентацию (портретную или альбомную) и тип программирования проекта(на языке Си либо на языке программы LD стандарта МЭК). В данном случае будем использовать язык Си.

Название проекта new_project, выберем портретную ориентацию и тип программирования Standard C.

Так выглядит проект сразу после создания:

Добавим на нашу форму управляющую кнопку, с помощью которой мы будем контролировать релейный выход RL0 модуля ввода - вывода PET-7060, для этого воспользуемся стандартным элементом BitButton раздела Widget вкладки Toolbox; размещаем кнопку на любом свободном месте формы.

Используя руководство API функций для модуля PET-7060 находим описание функции, позволяющей управлять дискретным выходом по Modbus TCP протоколу.

int addr = 0; //определяем стартовый адрес коммуникации modbus, в нашем случае 1
int NetID = 1; //определяем ID Modbus TCP Network, в нашем случае 1
int ch_count = 6; //определяем количество каналов дискретного вывода, 
в нашем случае модуль ввода-вывода PET-7060 имеет 6 каналов дискретного вывода
char DOValue[1]; // массив значений для определения состояния релейных выходов;
// количество элементов массива зависит от количества выходов - для определения
// каждых 8 выходов необходимо выделение 1 байта памяти, которому соответствует
// 1 элемент массива. Так как модуль ввода-вывода PET-7060 имеет 6 релейных выходов,
// то для определения состояния всех выходов нам потребуется 1 элемент массива
DOValue[0] = 1; //определяем состояние канала релейного вывода, в нашем случае 
// канала RL0 получит значение 1(включён); данные передаются в виде десятичного 
// числа, полученного при преобразовании его из двоичного, которое обозначает, 
// какое состояние должен принять каждый релейный выход. То есть мы имеем число 
// xxxxxxxx, где X может принимать значение 0(выключен) или 1(включён), 
// порядок записи нулей и единиц определяет порядок включения и выключения релейных
// выходов. Так как нам необходимо включить релейных выход RL0, то требуется в 
// данный элемент массива поместить число 00000001 в десятичной форме записи, то 
// есть 1.
DWORD timeout = 200; //определяем задержку для операции записи в дискретный канал вывода
tHandle h = mtm_Register(NetID, TCP_IPADDR(192,168,255,2), 502); //инициализируем сессию
// работы с модулем ввода-вывода PET-7060. Указываем IP модуля и его порт, в нашем 
// случае модуль имеет IP 192.168.255.2 и порт 502
hmi_DelayUS(800);</strong> //необходима небольшая задержка для инициализации 
// сессии работы с модулем
mtm_WriteDO(h, NetID, addr, ch_count, DOValue, timeout); //стандартная функция 
// записи данных в дискретный канал вывода, с помощью которой канал RL0 вывода 
// модуля ввода-вывода PET-7060 примет значение 1(включён)
mtm_Unregister(h); //закрываем сессию работы с модулем ввода-вывода PET-7060

Теперь нам нужно передать нашей управляющей кнопке BitButton управление каналом дискретного вывода модуля ввода-вывода ICP DAS PET-7060. Двойным щелчком мыши на управляюещй кнопке BitButton мы открываем окно программирования, где видим объект BitButton40OnClick - это и есть наша кнопка. В правом окне мы видим описание этой кнопки - туда мы и должны добавить наш код по управлению дискретным выходом нашего модуля ввода-вывода:

Наша кнопка запрограммирована, нажимаем ОК в левом верхнем углу окна программирования и возвращаемся в окно с нашей формой. Осталось лишь перенести проект на панель оператора TPD-283. Для этого в панели управления программы HMIWorks достаточно в разделе Run выбрать Run(Build&Download). Если не было допущено ошибок, программа загрузится на панель оператора, а в статус-баре появится сообщение об успешной компиляции нашей программы.

Готово, панель полностью работоспособна и готова выполнять запрограмированную на ней функцию - включать светодиодную лампу посредством нажатия на управляющую кнопку, которая находится на дисплее панели. Аналогично можно запрограммировать и вторую кнопку, которая будет выключать светодиодную лампу - процесс создания повторит создание первой управляющей кнопки, кроме строки, где определяется состояние релейных выходов, в этом случае модулю ввода-вывода нужно будет передать значение DOValue[0]=0, что соответствует двоичному 00000000. Таким образом мы переведём релейный выход RL0 в состояние "выключен".

Программирование управления релейными выходами разобрано и, как упоминалось выше, является очень простой задачей. Дальше будет разобрано считывание информации с дискретных входов модуля ввода-вывода PET-7060 и обработка этих данных панелью оператора TPD-283.

Добавим элемент Timer, который находится в разделе System вкладки Toolbox. В правой части программы HMIWorks настроим интервал, по которому таймер будет опрашивать дискретные входы модуля ввода-вывода. Установим значени 1000, что соответствует 1 секунде реального времени. В руководстве пользователя находим функцию, которая позволяет считывать текущее состояние дискретных входов с модуля ввода-вывода PET-7060:

int addr = 0; //определяем стартовый адрес коммуникации modbus, в нашем случае 1
int NetID = 1; //определяем ID Modbus TCP Network, в нашем случае 1
int ch_count = 6; //определяем количество каналов дискретного вывода, в нашем случае
// модуль ввода-вывода&nbsp; PET-7060 имеет 6 каналов дискретного вывода
char DOValue[1]; //массив значений для определения состояния релейных выходов; 
// количество элементов массива зависит от количества выходов - для определения 
// каждых 8 выходов необходимо выделение 1 байта памяти, которому соответствует 
// 1 элемент массива. Так как модуль ввода-вывода&nbsp;PET-7060 имеет 6 релейных 
// выходов, то для определения состояния всех выходов нам потребуется 1 элемент 
// массива
char DIValue[1];//массив значений, в который будет записана информация о состоянии
// дискретных входов.
DWORD timeout = 200;//определяем задержку для операции записи в дискретный канал 
// вывода
tHandle h = mtm_Register(NetID, TCP_IPADDR(192,168,255,2), 502); //инициализируем 
// сессию работы с модулем ввода-вывода PET-7060. Указываем IP модуля и его порт, 
// в нашем случае модуль имеет IP 192.168.255.2 и порт 502
hmi_DelayUS(800); //необходима небольшая задержка для инициализации сессии работы 
// с модулем
mtm_ReadDI(h, NetID, addr, ch_count, DIValue, timeout); //стандартная функция чтения
// состояния дискретных каналов ввода, с помощью которой элемента массива DIValue[0]
// получит десятичное значение, при переводе которого в двоичное получим число вида
// хххххххх, в котором единицы будут обозначать те дискретные каналы ввода, которые 
// имеют состояние &quot;замкнут&quot;. Таким образом панель оператора TPD-283 
// считала информацию о состоянии дискретных каналов ввода модуля ввода-вывода PET-7060
if(DIValue[0]==1) //проверяем замкнут ли дискретный вход IN0, если да, то выполняем
{
DOValue[0] = 1; //определяем состояние канала релейного вывода, в нашем случае канала 
// RL0 получит значение 1(включён), данные передаются в виде десятичного числа, 
// полученного при преобразовании из двоичного, которое обозначает, какое состояние 
// должен принять каждый релейный выход. То есть мы имеем число xxxxxxxx, где X может 
// принимать значение 0(выключен) или 1(включён), порядок записи нулей и единиц 
// определяет порядок включения и выключения релейных выходов. Так как нам необходимо 
// включить релейных выход RL0, то требуется в данный элемент массива поместить число 
// 00000001 в десятичной форме записи, то есть 1
mtm_WriteDO(h, NetID, addr, ch_count, DOValue, timeout); //стандартная функция записи 
// данных в дискретный канал вывода, с помощью которой канал RL0 вывода модуля 
// ввода-вывода ICP DAS PET-7060 примет значение 1(включён)
}
mtm_Unregister(h); //закрываем сессию работы с модулем ввода-вывода PET-7060

Теперь нам нужно передать таймеру обеспечение считывания состояния дискретных входов, обработки этих данных и управление каналами релейного вывода на основании этих данных. Двойным щелчком мыши на таймере BitButton мы открываем окно программирования, где видим объект Timer60nExecute - это и есть таймер. В правом окне мы видим описание этой таймера - туда мы и должны добавить наш код по управлению модулем ввода-вывода:

Таймер запрограммирован нажимаем ОК в левом верхнем углу окна программирования и возвращаемся в окно с нашей формой. Осталось лишь перенести проект на панель оператора TPD-283. Для этого в панели управления программы HMIWorks достаточно в разделе Run выбрать Run(Build&Download). Если не было допущено ошибок, программа загрузится на панель оператора, а в статус-баре появится сообщение об успешной компиляции нашей программы:

Готово - панель опрашивает канал IN0 дискретного входа, и на основании этого включает канал релейного выхода RL0.

В этой статье были разобраны лишь банальные примеры программирования панели оператора TPD-283, но это не означает, что панель ориентирована только лишь на простые решения автоматизации; более полный список функций можно найти в руководстве пользователя панели.

В ООО "Эксперт-Автоматика" вы можете получить консультацию по панели оператора TPD-283, оформить заказ и получить квалифицированную помощь в программировании панели.

Вам может быть интересно: