Создание панели оператора для мониторинга и управления объектом на основе оборудования Beckhoff, программы TwinCAT и программного пакета Microsoft Visual Studio 2012 Архипов В. В.
Архипов Владислав Валерьевич /Arhipov Vladislav Valer ’evich - студент, кафедра систем автоматического управления и контроля, факультет интеллектуальных технических систем, Национальный исследовательский университет, Московский институт электронной техники, г. Зеленоград
Аннотация: в статье предложен вариант реализации панели оператора для мониторинга и управления объектами. Вопросы, рассмотренные в статье, могут быть полезны специалистам, занимающимся разработкой систем управления и мониторинга, а также студентам, изучающим вопросы проектирования системы автоматического управления и контроля.
Ключевые слова: автоматизированная система управления, разработка программного обеспечения, программируемый логический контроллер, обработка данных.
Создание панели оператора преследует две цели:
1) Мониторинг, индикация и сигнализация состояния объекта.
2) Управление состоянием объекта.
Подробно рассмотрим каждый из этих пунктов. При этом будем предполагать, что имеется система Beckhoff с подключенным терморезистором и светодиодом. Терморезистор будет использоваться для сбора информации (состояния объекта). На светодиод будет подаваться управляющий сигнал в виде напряжения, таким образом управляя состоянием объекта [1].
1. Мониторинг
В программе TwinCat создается новая программа для получения данных с терморезистора (рис. 1).
Описание переменных:
- gradus - измеряемая температура объекта управления. В данном примере имеется целочисленный тип данных. %MD2 означает, что во время выполнения программы переменная хранится в оперативной памяти (M - memory) контроллера со сдвигом, равным двум и занимает четыре байта (D - double);
- THERMOKON_dataIn - данные, получаемые с терморезистора. В данном примере имеется целочисленный тип данных. %IW6 означает, что переменной присваивается значение входного сигнала (I -input);
- THERMOKON_ctrlByte - управляющий байт, который разрешает чтение с устройства.
Затем эта программа записывается во флэш-память контроллера Beckhoff и запускается на выполнение. Мы, создавая панель оператора для мониторинга температуры, будем обращаться из внешней программы в эту область памяти и считывать значения переменной. Создается новый проект из шаблона «Windows Forms» в программном пакете Microsoft Visual Studio 2012. Далее создается ссылка из этого проекта на сборку
C:\TwinCAT\ADS Api\.NET\v2.0.50727\TwinCAT.Ads.dll
С помощью этой сборки можно программно обращаться к контроллерам Beckhoff с целью считывания или записи в оперативную память. Далее создается панель оператора с помощью визуальных элементов управления таким образом, как это показано на рис.2.
Рис. 2. Создание панели оператора
Обозначения:
- AMS Net ID - уникальный номер контроллера в сети. Является аналогом IP адреса и значение первых четырех байт берется из документации;
- Port - порт устройства;
- Кнопка «Connect» - кнопка, при нажатии на которую происходит соединение с контроллером Beckhoff по сети Ethernet;
- Чекбокс «Link» - элемент управления, отображающий текущее соединение с контроллером Beckhoff;
- Gradus - поле, отображающее температуру, получаемую с терморезистора;
- tmrMain - таймер, который с равным интервалом опрашивает контроллер Beckhoff с целью получения температуры.
В классе формы указывается ссылка на сборку TwinCAT.Ads, создается переменная tcClient, с помощью которой будет осуществляться обращение к контроллеру Beckhoff. В конструкторе класса ConnectionForm создается этот клиент, как показано на рис. 3.
using System; using System.10; using System.Windows,Forms; using TwinCAT.Ads;
namespace TwinCAT_test
{
public partial class ConnectionForm : Form
{
TcAdsClient tcClient;
public ConnectionForm()
{
InitialiieComponent(); tcClient = new TcAdsClient();
}
Рис. 3. Создание клиента в конструкторе
При нажатии на кнопку «Connect» происходит соединение с контроллером Beckhoff и запускается таймер, срабатывающий по истечении 100 мс (рис. 4).
private void bnConnect_Click(object sender, EventArgs e)
{
if (!tcClient.IsConnected)
{
tcClient.Connect(txtAnsNetld.Text, Convert .ToInt32(txtPort.Text});
bnConnect.Text = ’’Disconnect”;
chLink.Checked = true;
tmrtlain .Interval = Ш;
tmrtlain.Enabled = true;
}
else
{
tmrtlain.Enabled = false;
CloseConnection(); bnConnect.Text = ’’Connect"; chLink.Checked = false;
}
Рис. 4. Обработчик события нажатия кнопки «Connect»
Если соединения не произошло, то вызывается метод корректного закрытия связи с контроллером Beckhoff (рис. 5).
void CloseConnection()
{
if ( tcClient != null SS tcClient.I^Connected ) tcClient.Dispose();
}
Рис. 5. Метод корректного закрытия связи
Каждые 100 мс таймера вызывается метод считывания информации из оперативной памяти контроллера. Сначала создается поток длиной 4 байта, а затем бинарный считыватель информации. После этого происходит чтение из оперативной памяти в области, со смещением равным двум, размером в 4 байта. Курсор чтения устанавливается в начальное положение, и полученное значение температуры присваивается текстовому полю, как показано на рисунке 6.
void UpdateAlLDataQ
{
// Creates an AOS stream of PLC memory with the length 4 byte // (4 byte is the size of the Double World type) war ds » new Ads5tream(4);
// Creates a binary reader to get data from the stream var br ■ new OinaryReader(ds);
// Reads a part of the PLC memory,
// 4020 is the magic number (special offset) tcClient.Read(0*4020, 2, ds),
// Sets the cursor position zero to order reads the received data ds,Position * 0;
txtGradus.Text • br,Readlntl6().ToString();
}
Рис. 6. Чтение из оперативной памяти контроллера
Индексная группа доступа к памяти %М поля определяется из таблицы на рис. 7.
IndexGroup Index Offset Access Data type Phys, unit Del, range Description
0x00004020 0x00000000- OxOOOOFFFF Ж UINT8[n] READJI - WRITER PLC memory rangefftM field).Offset is byte offset
0x00004021 0x00000000- OxFFFFFFFF m UINT8 READ_MX-WRITE_UIX PLC memory range [tMXfield).The low word of the index offset is the byte offset The index offset contains the bit address calculated from the byte number’8 + bit number
0x00004025 0x00000000 R ULONG PLCAD S_IGR_RM SIZE Byte length of the process diagram of the memory range
0x00004030 0x00000000- OxFFFFFFFF FUW UINT8 PLCADS_IGR_RWRB Retain data range. The index offset is byte offset
0x00004035 0x00000000 R ULONG PLCAD S_IGR_RRSIZE Byte length of the retain range
0x00004040 0x00000000- OxFFFFFFFF FUW UINT8 PLCAD S_IGR_RWDB Data range. The index offset is byte offset.
0x00004045 0x00000000 R ULONG PLCAD S_IGR_RDSIZE Byte length of the data range
Рис. 7. Индексная группа доступа к памяти
Панель оператора системы в режиме работы показана на рис. 8.
Рис. 8. Панель оператора системы в режиме работы
2. Управление объектом
В память контроллера Beckhoff записывается программа (рис. 9):
Логика ее работы состоит в том, что если значение переменной PC_SIGNAL отлично от нуля, то на светодиод подается напряжение 3В. Сама переменная находится в оперативной памяти контроллера в области со сдвигом, равным нулю, и занимает 4 байта.
Для создания панели управления можно использовать такой же шаблон проекта Microsoft Visual Studio 2012, как и для панели мониторинга. Графический интерфейс для управления зажиганием светодиода будет выглядеть как на рис. 10.
Рис. 10. Графический интерфейс для управления зажиганием светодиода
В отличие от первого проекта, будет использоваться дополнительная переменная signalState. Если она отлична от нуля, то на светодиод подано напряжение (рис. 11).
При нажатии на кнопку «Turn on» происходит запись в оперативную память контроллера (рис. 12).
private void bnTurnDn_Click.(object sender, EventArgs e)
{
var valueToWrite - (signalState == 0) ? 1 : 0*
// Creates an ADS stream of PLC memory with the length 1 byte // (4 byte is the size of the Double World type) var ds = new AdsStream(l);
// Creates a binary writer to set data into the stream var bw - new BinaryWriter(ds).;
ds. Position &;
bw,Wr ite((byte)va1ueToWrite);
tcClient,write(ЙЯ4О20, e, ds)j
bw,Close(); ds,Dispcse(); bw.Dispose();
>
Рис. 12. Описание действия нажатия на кнопку «Turn on» Панель оператора системы в режиме работы показана на рис. 13:
Рис. 13. Панель оператора системы в режиме работы
3. Выводы
Создание панели оператора можно сделать с использованием программного пакета Microsoft Visual Studio 2012. При этом доступ к контроллеру осуществляется через сеть Ethernet. Компания Beckhoff поставляет бесплатный компонент TwinCAT.Ads для доступа к оперативной памяти контроллеров из внешних программ. Используя возможности Microsoft Visual Studio 2012, можно создать богатый и удобный пользовательский интерфейс за короткое время.
Литература
1. Петров И. В. Программируемые контроллеры. Стандартные языки и приемы программирования: учебник для вузов. / Под ред. проф. Дьяконова. - М.: СОЛОН-Пресс. 2004. - 256 стр.