Связь TWINCAT PLC ADS (c#)
Связь TWINCAT PLC ADS (c#)

Используйте 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.

Прочитайте и назначьте целочисленную переменную в программе ПЛК с помощью программы C#.

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#.

Чтение и присвоение числа двойной точности с плавающей запятой в программе ПЛК с помощью программы 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 в программе ПЛК изменится на значение, которое мы изменили:

Чтение и присвоение структуры в программе ПЛК через программу C#

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#, и нажмите ЗАПИСАТЬ:

\

Вы можете видеть, что соответствующие элементы структуры в программе ПЛК также изменились:

Значение структуры было успешно изменено.

Чтение и присвоение массива в программе ПЛК через программу 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# больше не изменится.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose