Используйте Microsoft Visual C# для связи с управляющими переменными TWINCAT ПЛК. |
---|
Исходный файл ПЛК | Исходный файл программы управления ПЛК |
---|---|
TwinCAT.Ads.dll | Файлы библиотеки, которые необходимо импортировать в C# |
Исходный файл C# | Исходный файл программы C# |
Примечание |
---|
Ключевые слова: Чтение и запись программ ПЛК с помощью языков высокого уровня. |
---|
1. Откройте УПРАВЛЕНИЕ ПЛК.
Определите переменную bool с именем Bool1 в области определения переменной.
2. Запустите программу ПЛК.
Эффект следующий:
3. Откройте Microsoft Visual C# 2008 Express Edition.
Создайте новое приложение Windows Forms.
4. Ссылка на Twincat.ads в менеджере ресурсов.
Этот файл библиотеки представляет собой файл библиотеки, подготовленный компанией BECKHOFF для коммуникационного соединения.
Программы на C# подключают и модифицируют ПЛК с помощью методов, представленных в библиотеке.
Импортируйте файл библиотеки в диспетчер ресурсов и нажмите «Ссылка», как показано на рисунке 1.
Рисунок 1
Рисунок 2
Конкретный путь — «Установочный диск:\TwinCAT\ADS Api\.NET\v2.0.50727»; для системы это «Установочный диск:\TwinCAT\ADS Api\CompactFramework\v2.0». После завершения цитирования «TwinCAT.Ads» появится, как показано на рисунке 1.
нравиться Рисунок 2
Этот файл также можно найти во вложении к этому документу.
5. Войдите
using TwinCAT.Ads;
using System.IO;
Реализуйте вызов файла библиотеки импорта
6. Нарисуйте текстовое поле и кнопку в дизайне интерфейса Winform.
10. Объявите две переменные в области программирования C#.
public partial class Form1 : Form
{
private int hbool1;
private TcAdsClient adsClient;
11. Дважды щелкните созданный интерфейс программы.
входить:
private void Form1_Load(object sender, System.EventArgs e)
{
adsClient = new TcAdsClient();
try
{
adsClient.Connect(801);
hbool1 = adsClient.CreateVariableHandle("MAIN.bool1");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Функция этой программы — создать новый экземпляр рекламного клиента TcAdsClient и вызвать метод подключения для подключения к 801 (время выполнения1). И используйте дескриптор hbool1, чтобы принять «BOOL1» в программе ПЛК.
12. Измените свойство ТЕКСТ элемента управления BUTTON1 на «читать» и дважды щелкните элемент управления «Кнопка» в разработанном программном интерфейсе во всплывающем сегменте программы.
входить:
Функция этого предложения — прочитать переменную, соответствующую указанному дескриптору, преобразовать ее и отобразить в элементе управления TEXTBOX.
13. Нажмите «Выполнить» на панели инструментов «Выполнить».
14. Переключитесь на управление ПЛК и наблюдайте за текущим значением bool1.
15. Вернитесь в программу C# и нажмите «Прочитать».
Статус bool, отображаемый в Text, должен быть таким же, как bool1 в программе Plc.
Закройте программу и вернитесь в среду программирования C#.
16. Добавляем кнопку в дизайн интерфейса программы winform
17Измените текстовый атрибут кнопки 2, чтобы написать
18. После завершения дважды щелкните кнопку записи, чтобы переключиться на интерфейс программирования, и добавьте следующий оператор:
Функция этого предложения — прочитать переменную, соответствующую указанному дескриптору, преобразовать ее и отобразить в элементе управления TEXTBOX.
private void button2_Click(object sender, EventArgs e)
{
try
{
adsClient.WriteAny(hbool1, Boolean.Parse(textBox1.Text));
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
19. По завершении нажмите «Выполнить».
В то же время переключите программу ПЛК в состояние RUN.
TRUE, когда можно увидеть текущий статус ПЛК.
В это время мы вводим FALSE в поле программы C#.
Нажмите «Написать», чтобы увидеть эффект.
После перехода в программу ПЛК мы обнаружили, что значение переменной BOOL в программе ПЛК было преобразовано из TRUE в FALSE.
1. Определите переменную типа int1 в программе ПЛК.
Запустите программу ПЛК
Эффект следующий:
3. Добавьте текстовое поле в дизайн интерфейса программы C#.
4. Добавьте дескриптор подсказки1 при написании программы на C#.
5. И используйте дескриптор подсказки1, чтобы принять «int1» в программе ПЛК.
6. Функция этого предложения — прочитать переменную, соответствующую указанному дескриптору, преобразовать ее и отобразить в элементе управления TEXTBOX.
7. Нажмите «Выполнить».
Эффект следующий:
8. Вернитесь к УПРАВЛЕНИЮ ПЛК.
Присвойте значение int1
9. Вернитесь в программу C# и нажмите ЧИТАТЬ.
Значение в Text2 должно быть таким же, как значение, которое мы установили в элементе управления ПЛК.
10. Закройте программу после успеха в программе C#.
При написании интерфейса добавьте переключатель в режим программирования C# и добавьте оператор:
Присвойте значение in1 в программе plc через дескриптор
adsClient.WriteAny(hint1, int.Parse(textBox2.Text));
11. По завершении нажмите «Выполнить».
12. На данный момент значение переменной INT в ПЛК равно 10. Изменяем его с помощью программы C#.
После нажатия кнопки ЗАПИСАТЬ вы увидите, что значение переменной типа INT в программе ПЛК изменилось, и значение изменилось на значение, установленное в программе C#.
1. Добавьте переменную типа LREAL LREAL1 в PLC CONTROL.
Запустите программу ПЛК,Эффект следующий:
2. Добавьте элемент управления TEXTBOX в интерфейс программы C#. Эффект следующий:
3. Определите переменную-дескриптор в программировании на C#:
private int hlreal1;
И используйте дескриптор hreal1, чтобы принять «lreal1» в программе ПЛК.
hlreal1 = adsClient.CreateVariableHandle("MAIN.lreal1");
4.Функция этого предложения — прочитать переменную, соответствующую указанному дескриптору, преобразовать ее и отобразить в элементе управления TEXTBOX.
textBox3.Text = adsClient.ReadAny(hlreal1, typeof(Double)).ToString();
2.Нажмите, чтобы запустить,Эффект следующий:
В это время нажмите кнопку чтения в программе C#, и отображение будет следующим:
Измените значение типа LREAL в программе ПЛК:
Снова нажмите кнопку READ в программе C#.
Вы можете видеть, что соответствующее значение переменной было изменено.
Далее мы введем значение переменной типа LREAL.
3. Добавьте следующий оператор в программу C#, чтобы присвоить значение переменной типа LREAL.
adsClient.WriteAny(hlreal1, Double.Parse(textBox4.Text));
4. По завершении нажмите «Выполнить». Эффект следующий:
в программе C#. Измените значение типа LREAL:
Вы можете видеть, что значение переменной типа LREAL в программе ПЛК было изменено.
1. Определите переменную строкового типа str1 в системе управления ПЛК.
2.
2.Запустите программу ПЛК
Эффект следующий:
3. Добавьте элемент управления текстовым полем в дизайн интерфейса формы.
4. Добавьте дескриптор hstr1 при написании программы на C#.
5. Используйте дескриптор для связи с hstr1 в программе ПЛК.
6. Функция этого предложения — прочитать переменную, соответствующую указанному дескриптору, преобразовать ее и отобразить в элементе управления TEXTBOX.
textBox3.Text = adsClient.ReadAny(hstr1, typeof(String), new int[] { 5 }).ToString();
7..Нажмите, чтобы запустить
.Эффект следующий:
8. В программе ПЛК
Присвойте значение str1
9. Переключитесь на программу C# и нажмите «Прочитать», чтобы увидеть эффект.
10. После успеха переключитесь на интерфейс программирования C# и введите следующий код:
adsClient.WriteAny(hstr1, textBox3.Text, new int[] { 5 });
Функция этого оператора — использовать дескриптор для ввода строки из текстового поля3 в программе C# в программу ПЛК.
По завершении нажмите «Выполнить».
11. Давайте изменим символы в TEXTBOX3 в программе C# и посмотрим на результат:
После нажатия кнопки записи вы увидите, что значение переменной STRING в программе ПЛК изменится на значение, которое мы изменили:
1. Перейдите на вкладку «Типы данных» в PLC CONTROL и создайте новую структуру.
Назовите TcomplexStruct, как показано на рисунке:
2. В этой структуре назначьте два элемента: BOOLVAL типа BOOL и типа STRING.
STRINGVAL
3. Создайте ссылку на эту структуру в функции MAIN ПЛК:
4. ВОЙДИТЕ в систему, запустите программу ПЛК:
5. Переключитесь на программирование на C# и добавьте 2 TEXTBOX на чертеж интерфейса, как показано на рисунке:
5. Добавьте ссылку и класс структурного типа в программировании на C#:
[StructLayout(LayoutKind.Sequential, Pack = 1)] //Расположение адреса памяти в структуре распределения
public class ComplexStruct
{
[MarshalAs(UnmanagedType.I1)]
public bool boolVal;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]
public string stringVal = "";
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public int[] dintArr = new int[4];
}
7. Добавьте метод отображения элемента структуры в интерфейсе программы C#:
private void FillStructControls(ComplexStruct structure)
{
textBox4.Text= structure.boolVal.ToString();
textBox5.Text = structure.stringVal;
}
8. Определите дескриптор, который принимает структурную переменную
private int hcomplexStruct;
9. Присвойте значение дескриптору в методе Form1_Load:
hcomplexStruct = adsClient.CreateVariableHandle("MAIN.ComplexStruct1");
10. Напишите оператор C# для чтения значения элемента структуры из ПЛК:
FillStructControls((ComplexStruct)adsClient.ReadAny(hcomplexStruct, typeof(ComplexStruct)));
11.Нажмите, чтобы запуститьC#программа,Эффект следующий:
В это время нажмите кнопку ЧИТАТЬ,
Вы можете увидеть следующий эффект:
12. В это время мы можем изменить значение переменной в структуре программы ПЛК.
Нажмите «Прочитать» еще раз в программе C#, и вы увидите следующий эффект:
Выше приведена письменная часть структуры.
Далее мы познакомимся с написанием структур в программах ПЛК с помощью программ C#.
13. Напишите в программе C# метод для записи считываемых элементов структуры в интерфейс программы C#:
private ComplexStruct GetStructFromControls()
{
ComplexStruct structure = new ComplexStruct();
structure.boolVal = Boolean.Parse(textBox4.Text);
structure.stringVal = textBox5.Text;
return structure;
}
14. Напишите оператор C# для записи значения элемента структуры в ПЛК:
adsClient.WriteAny(hcomplexStruct, GetStructFromControls());
15. После завершения нажмите «Выполнить»:
16. Введите значение, которое будет присвоено элементу структуры в программе C#, и нажмите ЗАПИСАТЬ:
\
Вы можете видеть, что соответствующие элементы структуры в программе ПЛК также изменились:
Значение структуры было успешно изменено.
1. Добавьте переменную массива из 4 элементов в качестве элемента структуры в программе ПЛК и присвойте ей начальное значение.
Как показано ниже:
2. На рисунке интерфейса программы C# добавьте элемент управления TEXTBOX,
Как показано на рисунке:
3. Переключитесь на интерфейс программирования C# и добавьте переменную-массив в ранее определенную структуру:
public int[] dintArr = new int[4];
.
3. Напишите оператор C# для чтения значения массива структур из ПЛК:
textBox6.Text = String.Format("{0:d}, {1:d}, {2:d}, {3:d}", structure.dintArr[0],
structure.dintArr[1], structure.dintArr[2], structure.dintArr[3]);
4. Нажмите, чтобы запустить программу,
Эффект следующий:
Нажмите «ЧИТАТЬ», и вы увидите следующий эффект:
Указывает, что массив успешно прочитан.
Затем напишите оператор для записи в массив:
5. Напишите в программе C# метод для записи считанных элементов массива в интерфейс программы C#:
ComplexStruct structure = new ComplexStruct();
String[] stringArr = textBox6.Text.Split(new char[] { ',' });
for (int i = 0; i < stringArr.Length; i++)
structure.dintArr[i] = int.Parse(stringArr[i]);
6. После завершения нажмите «Выполнить».
Эффект следующий:
Введите необходимое значение массива в программу C#:
Нажмите НАПИСАТЬ
Вы можете увидеть следующий эффект:
Значение массива было успешно изменено.
Метод синхронизации означает, что мы устанавливаем интервал приема, и программа каждый раз автоматически обновляет данные.
В процессе получения данных мы сталкиваемся с такой ситуацией и нам необходимо, чтобы данные менялись в реальном времени, а не менялись каждый раз при нажатии READ. В этом случае для завершения нам нужно использовать функциональный блок таймера.
1. В дизайне интерфейса программы C# добавьте 2 кнопки.
2. Добавьте элемент управления таймером:
3. Установите состояние по умолчанию и время таймера:
4. Добавьте операторы для установки функциональных клавиш синхронизации при написании операторов программы.
private void button3_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
button3.Enabled = false;
button4.Enabled = true;
}
private void button4_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
button3.Enabled = true;
button4.Enabled = false;
}
5. Установите функцию таймера:
private void timer1_Tick(object sender, EventArgs e)
{
textBox1.Text = adsClient.ReadAny(hbool1, typeof(Boolean)).ToString();
textBox2.Text = adsClient.ReadAny(hint1, typeof(int)).ToString();
textBox4.Text = adsClient.ReadAny(hlreal1, typeof(Double)).ToString();
textBox3.Text = adsClient.ReadAny(hstr1, typeof(String), new int[] { 5 }).ToString();
FillStructControls((ComplexStruct)adsClient.ReadAny(hcomplexStruct, typeof(ComplexStruct)));
}
6. По завершении нажмите «Выполнить»:
7. Нажмите ВРЕМЯ ВКЛ.
Измените значения переменных в программе ПЛК.
Вернитесь к программе C# и наблюдайте:
Можно обнаружить, что программа C# обновила нужные нам данные в следующем цикле.
--------Данные метода уведомления
В некоторых случаях нам необходимо использовать метод синхронизации, но метод синхронизации будет производить пустой обмен данными без изменений, тратя трафик данных впустую. На данный момент нам нужен другой метод управления: метод уведомления.
Уведомление
Клиент ADS отправляет запрос ADS на сервер ADS и меняет значение клиента при получении новой информации.
1. В интерфейсе программы C# добавьте 2 элемента управления BOTTON.
Назовите Notification ON и Notification OFF соответственно в свойствах TEXT двух элементов управления.
Как показано на рисунке:
После завершения переключитесь в интерфейс программирования.
2. Вызовите библиотеку System.Collections.
using System.Collections;
3. Используйте эту библиотеку для создания нового метода.
private ArrayList notificationHandles;
4. Создайте методadsClient_AdsNotificationEx для обработки переменных параметров.
private void adsClient_AdsNotificationEx(object sender, AdsNotificationExEventArgs e)
{
TextBox textBox = (TextBox)e.UserData;
Type type = e.Value.GetType();
if (type == typeof(string) || type.IsPrimitive)
textBox.Text = e.Value.ToString();
else if (type == typeof(ComplexStruct))
FillStructControls((ComplexStruct)e.Value);
}
5. Зарегистрируйте функцию обработки событий в FORM_LOAD.
adsClient.AdsNotificationEx += new AdsNotificationExEventHandler(adsClient_AdsNotificationEx);
button4.Enabled = false;
И установите значение BUTTON4 на FALSE по умолчанию при запуске программы.
6. Зарегистрируйте переменные для клиента ADS в уведомлении.
private void button3_Click(object sender, EventArgs e)
{
notificationHandles.Clear();
try
{
//register notification
notificationHandles.Add(adsClient.AddDeviceNotificationEx("MAIN.int1", AdsTransMode.OnChange, 100, 0, textBox2, typeof(int)));
notificationHandles.Add(adsClient.AddDeviceNotificationEx("MAIN.bool1", AdsTransMode.OnChange, 100, 0, textBox1, typeof(Boolean)));
notificationHandles.Add(adsClient.AddDeviceNotificationEx("MAIN.str1", AdsTransMode.OnChange, 100, 0, textBox3, typeof(String), new int[] { 5 }));
notificationHandles.Add(adsClient.AddDeviceNotificationEx("MAIN.complexStruct1", AdsTransMode.OnChange, 100, 0, textBox5, typeof(ComplexStruct)));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
button4.Enabled = true;
button3.Enabled = false;
}
И установите, что при нажатии кнопки BUTTON3 кнопка BUTTON3 недоступна, а кнопка BUTTON4 доступна.
7. Аналогичным образом настройте реакцию клавиши BUTTON4 (отмена режима уведомления).
private void button4_Click(object sender, EventArgs e)
{
//delete registered notifications.
try
{
foreach (int handle in notificationHandles)
adsClient.DeleteDeviceNotification(handle);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
notificationHandles.Clear();
button3.Enabled = true;
button4.Enabled = false;
}
И установите, что при нажатии кнопки BUTTON4 кнопка BUTTON4 недоступна, а кнопка BUTTON3 доступна.
8. После завершения нажмите «Запустить программу».
Эффект следующий:
9. Нажмите «Уведомление». ONкнопка,Вы можете увидеть следующий эффект:
10. В это время мы изменяем переменные в программе ПЛК:
11. Вернитесь к программе C#. Вы можете видеть, что поле TEXTBOX в программе C# также изменилось соответствующим образом.
12. Снова измените значение переменной в программе ПЛК:
Вы можете видеть, что значение программы C# меняется автоматически.
13.В это время нажмите кнопку «Отключить уведомление».
В это время снова измените значение в программе ПЛК:
Вы можете видеть, что значение в программе C# больше не изменится.