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

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

12.10.2014, 22:35. Просмотров 20312. Ответов 50
Метки нет (Все метки)

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

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

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

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

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


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/developer-tools/developer-kits-net-4-0-wcf). Сразу перепишу либу на новый лад.

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

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

Прошу добавить в заголовок темы, а то сам тему изменить не могу.
5
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2014, 22:35
Ответы с готовыми решениями:

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

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

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

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

50
Leo28
3 / 3 / 1
Регистрация: 18.12.2014
Сообщений: 74
10.03.2016, 11:00 21
а не пробовал либу modbusTCP для .Net??? ни какой сервер не нужен, цепляйся к контроллеру и читай регистры)
0
Voland_
1758 / 1090 / 108
Регистрация: 04.01.2010
Сообщений: 3,782
11.03.2016, 09:29 22
Цитата Сообщение от Leo28 Посмотреть сообщение
ни какой сервер не нужен, цепляйся к контроллеру и читай регистры)
Вы, наверное, будете удивлены, но есть сотни другие протоколов, которые НЕ modbusTCP. Более того, бОльшая часть из них либо платная, либо вообще закрыта от простых смертных.
0
Tyiler
52 / 52 / 2
Регистрация: 30.05.2014
Сообщений: 83
13.03.2016, 22:40  [ТС] 23
Цитата Сообщение от Voland_ Посмотреть сообщение
НЕ modbusTCP
да. вот поэтому и придумали OPC, чтоб стандарт-ть. неважно какой контр-ер, какая скада и какой протокол, если все поддер OPC.

кто интересно "лучший ответ" поставил. очень сведущий похоже чел.
0
vxg
Модератор
3306 / 2098 / 332
Регистрация: 13.01.2012
Сообщений: 8,152
14.03.2016, 08:37 24
В чем вопрос то по "лучшему ответу")?
0
Voland_
1758 / 1090 / 108
Регистрация: 04.01.2010
Сообщений: 3,782
14.03.2016, 10:15 25
Цитата Сообщение от Tyiler Посмотреть сообщение
да. вот поэтому и придумали OPC, чтоб стандарт-ть.
Вот именно. И речь в этой ветке велась по поводу библиотеки OPC-клиента. Поэтому, причем тут вообще совет насчет modbusTCP - мне непонятно. OPC-клиент, конечно, может учитывать особенности конечного протокола, чтобы оптимизировать работу. Но в общем случае ему ничего об этом протоколе неизвестно.
0
OldJerk
2 / 2 / 1
Регистрация: 21.11.2015
Сообщений: 58
16.03.2016, 12:10 26
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
Tyiler
52 / 52 / 2
Регистрация: 30.05.2014
Сообщений: 83
16.03.2016, 20:37  [ТС] 27
OldJerk, скачал демо версию сервера. там доки есть. вот скрины
OPC клиент (OPC_DA v2.05) для платформы NET


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


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


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

OPC клиент (OPC_DA v2.05) для платформы NET
0
OldJerk
2 / 2 / 1
Регистрация: 21.11.2015
Сообщений: 58
17.03.2016, 12:09 28
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 и ошибки в скриншотах
1
Миниатюры
OPC клиент (OPC_DA v2.05) для платформы NET   OPC клиент (OPC_DA v2.05) для платформы NET   OPC клиент (OPC_DA v2.05) для платформы NET  

OldJerk
2 / 2 / 1
Регистрация: 21.11.2015
Сообщений: 58
17.03.2016, 12:37 29
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
Tyiler
52 / 52 / 2
Регистрация: 30.05.2014
Сообщений: 83
17.03.2016, 13:13  [ТС] 30
ну странно почему он ее не понимает. вроде правильно все написано.

а контроллер у вас подключен? а переменные такие там есть? (не помню уже, надо это вообще -нет)
0
OldJerk
2 / 2 / 1
Регистрация: 21.11.2015
Сообщений: 58
17.03.2016, 14:16 31
Tyiler, Сейчас я во Владимире. Контроллера под рукой нет, потому взял из сервера переменную статуса связи с контроллером. Это собственная переменная сервера, она, естественно, есть и меняется при включении/отключении контроллера. На скриншоте видно, что её статус "good". Но дело, собственно, не в этом, подключен контроллер или нет законченные клиенты (пробовал на In Touch) видят, сохраняют все переменные в конфигураторе и обмениваются потом с ними в runtime.
0
Tyiler
52 / 52 / 2
Регистрация: 30.05.2014
Сообщений: 83
17.03.2016, 14:28  [ТС] 32
извиняйте тогда. чем мог, как говорится..
можете в код залезть сами еще, если есть желание-время, покопаться там еще.
0
OldJerk
2 / 2 / 1
Регистрация: 21.11.2015
Сообщений: 58
17.03.2016, 14:39 33
Tyiler, Спасибо!
Ну а куда деваться, буду копать.
0
sonmax
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 71
22.09.2016, 12:54 34
Добрый день наткнулся на вашу библиотеку.
попробовал поработать с ней, но никак не могу разобраться
как правильно прописать переменную в 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);
Спасибо
0
Миниатюры
OPC клиент (OPC_DA v2.05) для платформы NET  
vajarkov
0 / 0 / 0
Регистрация: 15.11.2016
Сообщений: 1
15.11.2016, 23:20 35
Спасибо за статью, немного другую информацию искал, но обсуждение довольно интересное. Мне лично помогла статья Дениса Федоренко в 2012 http://iprog.pp.ru/forum/read.php?f=1&i=71042&t=65367
Хотя может уже не актуально, но все же может кому еще пригодится
0
Вложения
Тип файла: pdf 1fedorenko_d_yu_programmirovanie_opc_klientov_na_c_i_c_chast (1).pdf (2.64 Мб, 63 просмотров)
Тип файла: pdf 1fedorenko_d_yu_programmirovanie_opc_klientov_na_c_i_c_chast.pdf (2.35 Мб, 60 просмотров)
Lapu-Leen
0 / 0 / 0
Регистрация: 28.02.2017
Сообщений: 9
19.04.2017, 14:28 36
А может кто-нибудь выложить готовый пример данного OPC клиента? Инструкцию читал, вроде всё понятно, но почему-то когда вставляю код из мануала в свой проект - выскакивают ошибки. OPC_NET.dll подключена, все классы видит, не пойму чего ещё не хватает.
0
vxg
Модератор
3306 / 2098 / 332
Регистрация: 13.01.2012
Сообщений: 8,152
19.04.2017, 14:35 37
Цитата Сообщение от Lapu-Leen Посмотреть сообщение
выскакивают ошибки
может не стоит их скрывать?
0
Lapu-Leen
0 / 0 / 0
Регистрация: 28.02.2017
Сообщений: 9
19.04.2017, 15:01 38
Цитата Сообщение от vxg Посмотреть сообщение
может не стоит их скрывать?
Вот скрин
0
Миниатюры
OPC клиент (OPC_DA v2.05) для платформы NET  
Leo28
3 / 3 / 1
Регистрация: 18.12.2014
Сообщений: 74
20.04.2017, 07:31 39
C#
1
string blablabla = e.Vars[].Name
1
Lapu-Leen
0 / 0 / 0
Регистрация: 28.02.2017
Сообщений: 9
20.04.2017, 20:57 40
Помогло! Ошибок нет, но указанный сервер почему-то не запускается.
0
20.04.2017, 20:57
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2017, 20:57

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

Delphi8 для платформы .NET
Видели какую лажу сделали Борландовцы в 8-ой версии?! --- http://alabal.narod.ru

Посоветуйте лабораторные для изучения C# и платформы .Net
Здравствуйте дорогие друзья, хотел бы что бы вы посоветовали лабораторные для изучения C# и...

Нужна литература для быстрого изучения платформы .Net
Здраствуйте, мне нужна литература для быстрого изучения платформы .Net. Сам я являюсь Java и Ruby...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.