Форум программистов, компьютерный форум, киберфорум
АСУ ТП, промэлектроника
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/193: Рейтинг темы: голосов - 193, средняя оценка - 4.69
54 / 54 / 2
Регистрация: 30.05.2014
Сообщений: 83

OPC клиент (OPC_DA v2.05) для платформы NET

12.10.2014, 22:35. Показов 46020. Ответов 51
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Предлагаю следующую библиотеку для обмена данными с OPC сервером в приложении NET.

Библиотека "OPC_NET" представляет OPC клиент для платформы NET и предназначена для легкого обмена с любыми OPC серверами поддерживающими стандарт OPC_DA v2.05. Основана на SDK OpcNetApi организации OPC Foundation - разработчика стандарта.
Данные для обмена объявляются в файле типа xlsx. Данные читаются и пишутся по именам заданным в этом файле.

Пример работы:

1. Заполнение таблицы сигналов



2. Соединение с сервером
C#
1
2
3
4
5
6
7
8
  // создаем клиент
   OPC_NET.OPCclient cl = new OPC_NET.OPCclient();
 
  // объявляем переменные     
   cl.Init(@".\TableSignal.xlsx");
 
  // запрос на соединение с сервером
    int er =  cl.ConnectOpcServer(_ipAddrOPCserver, _nameOPCserver, _timeUpdDataOPCserver);
3. Читаем значения переменных:
C#
1
2
3
4
5
6
7
8
9
       bool err;
           
    bool val0 =  cl.ReadBool("enaFW", out err);
 
    int val1 =  cl.ReadInt16("driveFlt", out err);
 
    int val2 =  cl.ReadInt32("sensorFlt", out err);
 
    double val3 = cl.ReadReal("pressure", out err);
4. Пишем значения переменных:
C#
1
2
3
4
5
    bool err;
           
     cl.WriteInt16("dag", 34, out err);
 
     cl.WriteBool("sensEna", true, out err);

Скачать (исходник и мануал прилагаются):OPC_NET_RUS_V1.0.rar

PS: буду благодарен, если кто поделится этим чудом - ".NET4.0(WCF)" от OPC Foundation (https://opcfoundation.org/deve... et-4-0-wcf). Сразу перепишу либу на новый лад.

Изменения версии 1.11:
- переделаны события изменения данных: удалены события конкретных типов и создано общее событие – содержащее информацию обо всех измененных переменных;
- в классе Items добавлены несколько методов для коллекции объектов;
- открыты перечисления для входных числовых значений;
- переименованы некоторые объекты;

Скачать (исходник и мануал прилагаются): OPC_NET_RUS_V1.11.rar

Прошу добавить в заголовок темы, а то сам тему изменить не могу.
5
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.10.2014, 22:35
Ответы с готовыми решениями:

OPC клиент для сохранения данных с OPC сервера
Добрый день! Подскажите библиотеку для создания OPC клиента или возможно есть готовый OPC клиент, сохраняющий опрошенные данные?

ASP.net OPC клиент
Я подключаю dll-ки к проекту web-forms OpcNetApi.dll то есть делаю opc-клиент. при разработке все работает теги принимаю как запускаю...

OPC DA клиент на библиотеках OPC Foundation
Народ, подскажите pls, если кто знает... Написал пробного OPC клиента на C#, использовал библиотеки от OPC Foundation OpcNetApi.Com.dll и...

51
3 / 3 / 1
Регистрация: 18.12.2014
Сообщений: 74
10.03.2016, 11:00
Студворк — интернет-сервис помощи студентам
а не пробовал либу modbusTCP для .Net??? ни какой сервер не нужен, цепляйся к контроллеру и читай регистры)
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
11.03.2016, 09:29
Цитата Сообщение от Leo28 Посмотреть сообщение
ни какой сервер не нужен, цепляйся к контроллеру и читай регистры)
Вы, наверное, будете удивлены, но есть сотни другие протоколов, которые НЕ modbusTCP. Более того, бОльшая часть из них либо платная, либо вообще закрыта от простых смертных.
0
54 / 54 / 2
Регистрация: 30.05.2014
Сообщений: 83
13.03.2016, 22:40  [ТС]
Цитата Сообщение от Voland_ Посмотреть сообщение
НЕ modbusTCP
да. вот поэтому и придумали OPC, чтоб стандарт-ть. неважно какой контр-ер, какая скада и какой протокол, если все поддер OPC.

кто интересно "лучший ответ" поставил. очень сведущий похоже чел.
0
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,473
14.03.2016, 08:37
В чем вопрос то по "лучшему ответу")?
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
14.03.2016, 10:15
Цитата Сообщение от Tyiler Посмотреть сообщение
да. вот поэтому и придумали OPC, чтоб стандарт-ть.
Вот именно. И речь в этой ветке велась по поводу библиотеки OPC-клиента. Поэтому, причем тут вообще совет насчет modbusTCP - мне непонятно. OPC-клиент, конечно, может учитывать особенности конечного протокола, чтобы оптимизировать работу. Но в общем случае ему ничего об этом протоколе неизвестно.
0
 Аватар для OldJerk
2 / 2 / 1
Регистрация: 21.11.2015
Сообщений: 58
16.03.2016, 12:10
Tyiler, здравствуйте!
Вынужден опять Вас побеспокоить.
С прошлой проблемой разобрался, суть в том, что 32 битный Core Components не правильно регистрируется в 64 битной винде. Собрал всё на 32 бита, всё заработало, но теперь появилась новая проблема. Научился находить сервера, подключаться, строить дерево. Не получается это дерево правильно сохранить, чтобы потом в Runtime, используя его читать и писать переменные. Пробовал тупо записать нужные мне теги в xml файл (все настройки программы у меня в xml), но как бы я не описывал теги в xml, в ответ всегда одно: переменная ...... не соответствует правилам описания сервера. А как это правило получить не понимаю. Понимаю одно, раз другие клиенты это правило видят и работают, значит за ним не надо обращаться к разработчику сервера. Может Вы мне подскажете как получать из сервера и сохранять теги в нужном формате.
ОРС сервер MULTI-PROTOCOL-MASTEROPCSERVER_DEMO компании ИнСАТ полнофункциональный на 32 тега, мне за глаза.
Фрагмент одного из моих бесчисленных вариантов описания тега в xml:
XML
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<Tags>
  <Item> 
    <Name>Volume1</Name>
    <Addr>SIMENSPLC.simensplc.DB4,DBD0</Addr>
    <TypeRW>read</TypeRW>
  </Item>
 </Tags>
Помогите пожалуйста понять тему.
Заранее благодарен!
0
54 / 54 / 2
Регистрация: 30.05.2014
Сообщений: 83
16.03.2016, 20:37  [ТС]
OldJerk, скачал демо версию сервера. там доки есть. вот скрины






вот этот идентиф вставляйте в поле <Addr>

0
 Аватар для OldJerk
2 / 2 / 1
Регистрация: 21.11.2015
Сообщений: 58
17.03.2016, 12:09
Tyiler, Здравствуйте!
Документация это хорошо, первое, что я сделал - её прочитал.
Но вот предметно что у меня получается.
Код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
        private void button1_Click(object sender, EventArgs e)
        {
            TypeCnfFile typefile = TypeCnfFile.xmlFile;
            cl.Init(@"TableSignal44.xml", typefile);
            //cl.Init(@"TableSignal1.xlsx", 1);
            errInit = cl.Connect("localhost", treeView1.Nodes[0].FirstNode.Text, 500);
            if (errInit != 0)
            {
                string message = cl.ErrTxt;
                string caption = "DanoneReport - Сообщение об ошибке";
                MessageBoxButtons buttons = MessageBoxButtons.OK;
                MessageBoxIcon icon = MessageBoxIcon.Exclamation;
                MessageBox.Show(message, caption, buttons, icon);
            }
            XElement st = XElement.Load(@"TableSignal44.xml", LoadOptions.SetBaseUri | LoadOptions.SetLineInfo);
            System.Xml.Linq.XDocument xDoc = new System.Xml.Linq.XDocument(st);
            Items _items = cl.GetItems();
            cl.CheckInputData(xDoc, out errInit);//внутри этой функции выдаётся сообщение о не соответствии адреса правилам описания
            if (errInit != 0)
            {
                string message = cl.ErrTxt;
                string caption = "DanoneReport - Сообщение об ошибке";
                MessageBoxButtons buttons = MessageBoxButtons.OK;
                MessageBoxIcon icon = MessageBoxIcon.Exclamation;
                MessageBox.Show(message, caption, buttons, icon);
            }
            bool result;
            bool failure = cl.ReadBool("Failure", out result);// эта функция говорит, что переменной с таким именем не существует
            if (!result) { label1.Text = failure.ToString(); }
            else
            {
                string message = cl.ErrTxt;
                string caption = "DanoneReport - Сообщение об ошибке";
                MessageBoxButtons buttons = MessageBoxButtons.OK;
                MessageBoxIcon icon = MessageBoxIcon.Exclamation;
                MessageBox.Show(message, caption, buttons, icon);
            }
        }
Соотношение имени тега в контроллере и в xml и ошибки в скриншотах
Миниатюры
OPC клиент (OPC_DA v2.05) для платформы NET   OPC клиент (OPC_DA v2.05) для платформы NET   OPC клиент (OPC_DA v2.05) для платформы NET  

1
 Аватар для OldJerk
2 / 2 / 1
Регистрация: 21.11.2015
Сообщений: 58
17.03.2016, 12:37
Tyiler, Немного поторопился, не изменил имя тега в xml с Volume1 на Failure, но после изменения имени CheckInputData даёт ту же ошибку, а ReadBool сообщает, что переменная имеет другой тип.

Добавлено через 8 минут
Tyiler, Излечение из адреса имени переменной ничего не меняет
XML
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<Tags>
  <Item> 
    <Name>Failure</Name>
    <Addr>SIMENSPLC.simensplc.Diagnosis</Addr>
    <TypeRW>read</TypeRW>
  </Item>
 </Tags>
0
54 / 54 / 2
Регистрация: 30.05.2014
Сообщений: 83
17.03.2016, 13:13  [ТС]
ну странно почему он ее не понимает. вроде правильно все написано.

а контроллер у вас подключен? а переменные такие там есть? (не помню уже, надо это вообще -нет)
0
 Аватар для OldJerk
2 / 2 / 1
Регистрация: 21.11.2015
Сообщений: 58
17.03.2016, 14:16
Tyiler, Сейчас я во Владимире. Контроллера под рукой нет, потому взял из сервера переменную статуса связи с контроллером. Это собственная переменная сервера, она, естественно, есть и меняется при включении/отключении контроллера. На скриншоте видно, что её статус "good". Но дело, собственно, не в этом, подключен контроллер или нет законченные клиенты (пробовал на In Touch) видят, сохраняют все переменные в конфигураторе и обмениваются потом с ними в runtime.
0
54 / 54 / 2
Регистрация: 30.05.2014
Сообщений: 83
17.03.2016, 14:28  [ТС]
извиняйте тогда. чем мог, как говорится..
можете в код залезть сами еще, если есть желание-время, покопаться там еще.
0
 Аватар для OldJerk
2 / 2 / 1
Регистрация: 21.11.2015
Сообщений: 58
17.03.2016, 14:39
Tyiler, Спасибо!
Ну а куда деваться, буду копать.
0
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 209
22.09.2016, 12:54
Добрый день наткнулся на вашу библиотеку.
попробовал поработать с ней, но никак не могу разобраться
как правильно прописать переменную в xlsx файл для моего сервера.
пробовал разные варианты.
сервер запускается, но кол-во переменных пишет 0.
код такой:
C#
1
2
3
4
      OPCclient cl = new OPCclient();
      int err = cl.Init(@".\TableSignal1.xlsx", TypeCnfFile.xlsxTable1);
      err = cl.Connect("localhost", "Lectus.OPC.1", 1000);
      MessageBox.Show("Code: " + err + ",  stat: " + cl.ErrTxt);
и останавливается на
C#
1
err = cl.Connect("localhost", "Lectus.OPC.1", 1000);
Спасибо
Миниатюры
OPC клиент (OPC_DA v2.05) для платформы NET  
0
0 / 0 / 0
Регистрация: 15.11.2016
Сообщений: 1
15.11.2016, 23:20
Спасибо за статью, немного другую информацию искал, но обсуждение довольно интересное. Мне лично помогла статья Дениса Федоренко в 2012 http://iprog.pp.ru/forum/read.... 42&t=65367
Хотя может уже не актуально, но все же может кому еще пригодится
Вложения
Тип файла: pdf 1fedorenko_d_yu_programmirovanie_opc_klientov_na_c_i_c_chast (1).pdf (2.64 Мб, 107 просмотров)
Тип файла: pdf 1fedorenko_d_yu_programmirovanie_opc_klientov_na_c_i_c_chast.pdf (2.35 Мб, 101 просмотров)
0
0 / 0 / 0
Регистрация: 28.02.2017
Сообщений: 9
19.04.2017, 14:28
А может кто-нибудь выложить готовый пример данного OPC клиента? Инструкцию читал, вроде всё понятно, но почему-то когда вставляю код из мануала в свой проект - выскакивают ошибки. OPC_NET.dll подключена, все классы видит, не пойму чего ещё не хватает.
0
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,473
19.04.2017, 14:35
Цитата Сообщение от Lapu-Leen Посмотреть сообщение
выскакивают ошибки
может не стоит их скрывать?
0
0 / 0 / 0
Регистрация: 28.02.2017
Сообщений: 9
19.04.2017, 15:01
Цитата Сообщение от vxg Посмотреть сообщение
может не стоит их скрывать?
Вот скрин
Миниатюры
OPC клиент (OPC_DA v2.05) для платформы NET  
0
3 / 3 / 1
Регистрация: 18.12.2014
Сообщений: 74
20.04.2017, 07:31
C#
1
string blablabla = e.Vars[].Name
1
0 / 0 / 0
Регистрация: 28.02.2017
Сообщений: 9
20.04.2017, 20:57
Помогло! Ошибок нет, но указанный сервер почему-то не запускается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.04.2017, 20:57

Использование OPC-сервера от OPC Foundation (.NET)
Всем привет, возникла необходимость в разработке OPC DA 2.05a сервера под .NET, среди бесплатных вариантов ничего не нашел, писать...

Клиент OPC DA для Quantum
Добрый день всем! Мне необходимо создать клиента для обмена данными с контроллерами Quantum (Schneider Electric) через OPC DA. Опыт...

OPC UA Клиент для работы с TeslaScada2 в Debian
Здравствуйте. Я создал проект в TeslaSCADA2 IDE, создал там Modbus сервер, тэг, на всякий случай цифровой дисплей для вывода результата....

Клиент для OPC сервер Kepware и удаленное подключение
Добрый день, подскажите пожалуйста. Есть маленький клиент на c#, который читает значения тегов и записывает в них значения. Сервер OPC...

Выпущен официальный ICQ-клиент для платформы Android
Интернет-сервис ICQ объявил о выпуске официального клиента ICQ Mobile для смартфонов под управлением операционной системы Android. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru