Один из самых актуальных и востребованных вопросов в АСУ ТП — это разработка недорогих (но надёжных) систем удалённой диспетчеризации "под ключ". Для этих целей у BECKHOFF имеется очень хорошее решение — TwinCAT ADS, набор бесплатных программных средств для организации обмена данными между TwinCAT/Windows-устройствами.
TwinCAT ADS поддерживает платформы DLL, OCX, VB Script, J Script, .NET, Java и позволяет осуществлять удалённый контроль за любым ПЛК производства BECKHOFF. Сама по себе организация связи и обмена данными при помощи функционала TwinCAT ADS элементарна, но степень сложности приложения, разработанного для диспетчеризации, в большинстве случаев ограничивается лишь профессиональным уровнем программиста.
Рассмотрим пример простейшего обмена данными между ПК (Windows XP) и ПЛК (Windows CE 6.0) с помощью TwinCAT ADS, а заодно напишем ADS-клиент. Для этого требуется наличие установленных пакетов TwinCAT I/O, Visual Studio (в моём случае версия 2010 года), контроллер CX9010 c Ethernet TCP/IP, кабель связи, блок питания и час свободного времени. Подключаем наш CX9010 к ПК, ищем по DHCP с помощью TwinCAT System Manager. С этого момента мы знаем
Видно, что массивы
Объявляем дескрипторы искомых переменных для записи/чтения и создаём ADS-клиент:
Поскольку мы уже подключались к CX9010 с помощью TwinCAT System Manager, то нам известен его уникальный сетевой идентификатор (
Теперь можно получить доступ сначала к дескрипторам искомых переменных, а затем и непосредственно к записи/чтению. Для этого необходимо и достаточно знать полное наименование переменной. Если она прописана глобально, то получить дескриптор можно по имени
Теперь наш ADS-клиент может осуществлять запись и чтение значений искомых переменных, дело за малым. Для того, чтобы он делал это циклически, я бы рекомендовал ставить таймер. Интервал "тика" зависит от задачи, в этом примере он равен 100 мс. Ну и конечно же неплохо было бы прописать этот "тик" в программе:
Напоследок хотелось бы добавить, что не лишним будет уничтожение всех дескрипторов и полный дисконнект нашего ADS-клиента в случае закрытия приложения. Это делается примерно так:
Всё, теперь можно "навернуть" дополнительных фишек, кнопочек, чекбоксов и наслаждаться результатом проделанной работы. Проверить работоспособность ADS-клиента можно также и из TwinCAT PLC Control.
TwinCAT ADS поддерживает платформы DLL, OCX, VB Script, J Script, .NET, Java и позволяет осуществлять удалённый контроль за любым ПЛК производства BECKHOFF. Сама по себе организация связи и обмена данными при помощи функционала TwinCAT ADS элементарна, но степень сложности приложения, разработанного для диспетчеризации, в большинстве случаев ограничивается лишь профессиональным уровнем программиста.
Рассмотрим пример простейшего обмена данными между ПК (Windows XP) и ПЛК (Windows CE 6.0) с помощью TwinCAT ADS, а заодно напишем ADS-клиент. Для этого требуется наличие установленных пакетов TwinCAT I/O, Visual Studio (в моём случае версия 2010 года), контроллер CX9010 c Ethernet TCP/IP, кабель связи, блок питания и час свободного времени. Подключаем наш CX9010 к ПК, ищем по DHCP с помощью TwinCAT System Manager. С этого момента мы знаем
AmsNetId
нашего ПЛК и можем в TwinCAT PLC Control написать простенькую программу с тремя переменными. Допустим они будут такими:PROGRAM MAIN
VAR
diSignal AT %I*: ARRAY [1..8] OF BOOL;
doSignal AT %Q*: ARRAY [1..8] OF BOOL;
aoSignal AT %Q*: INT;
iVar1: INT;
iVar2: BYTE;
END_VAR
Видно, что массивы
diSignal
, diSignal
и переменная aoSignal
залинкованы на модули дискретных и аналоговых входов/выходов. Но для нас это не имеет значения. В нашем приложении, которое мы собираемся писать на Visual Studio C#, будут использоваться iVar1
(чтение), iVar2
(запись) и, как пример с использованием массива, doSignal
(запись). Открываем Visual Studio C#, подключаем библиотеку TwinCAT.ADS.dll
, по умолчанию расположенную по адресуC:\TwinCAT\ADS Api\.NET\v2.0.50727\
. Открываем конструктор форм и первым делом в обязательном порядке прописываем две строки, подключающие соответствующие сервисы:using System.IO;
using TwinCAT.Ads;
Объявляем дескрипторы искомых переменных для записи/чтения и создаём ADS-клиент:
private int hVar1, hVar2, hArray; //Дескрипторы переменных
private bool[] bArray; //Массив
TcAdsClient tcClient = new TcAdsClient(); //Создание ADS-клинета
Поскольку мы уже подключались к CX9010 с помощью TwinCAT System Manager, то нам известен его уникальный сетевой идентификатор (
5.3.101.187.1.1
), ровно как и порт (801
) для подключения. Организуем соединение нашего ADS-клиента с ПЛК:if (!tcClient.IsConnected)
{
try
{
//Подключение к ПЛК по AmsNetId
tcClient.Connect("5.3.101.187.1.1", 801);
}
catch (Exception errConnection)
{
MessageBox.Show(errConnection.Message);
}
}
//Уничтожение дескрипторов переменных
else
{
tcClient.DeleteVariableHandle(hVar1);
tcClient.DeleteVariableHandle(hVar2);
tcClient.DeleteVariableHandle(hArray);
tcClient.Dispose();
}
Теперь можно получить доступ сначала к дескрипторам искомых переменных, а затем и непосредственно к записи/чтению. Для этого необходимо и достаточно знать полное наименование переменной. Если она прописана глобально, то получить дескриптор можно по имени
.[имя_переменной]
, если же в к конкретном POU, то вот так: [имя_POU].[имя_переменной]
.Теперь наш ADS-клиент может осуществлять запись и чтение значений искомых переменных, дело за малым. Для того, чтобы он делал это циклически, я бы рекомендовал ставить таймер. Интервал "тика" зависит от задачи, в этом примере он равен 100 мс. Ну и конечно же неплохо было бы прописать этот "тик" в программе:
private void mainTimer_Tick(object sender, EventArgs e)
{
UpdateAllData();
}
Напоследок хотелось бы добавить, что не лишним будет уничтожение всех дескрипторов и полный дисконнект нашего ADS-клиента в случае закрытия приложения. Это делается примерно так:
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
tcClient.DeleteVariableHandle(hVar1);
tcClient.DeleteVariableHandle(hVar2);
tcClient.DeleteVariableHandle(hArray);
tcClient.Dispose();
}
Всё, теперь можно "навернуть" дополнительных фишек, кнопочек, чекбоксов и наслаждаться результатом проделанной работы. Проверить работоспособность ADS-клиента можно также и из TwinCAT PLC Control.
Комментариев нет:
Отправить комментарий