форум асутп
 На главную                       Здесь может быть Ваша реклама, подробнее...

здесь может быть ваша реклама

 Наверх  |  Перейти к теме  |  Поиск  |  Вход  |  Дерево    
 OPC клиент на C# помогите разобраться
Автор: sewet 
Дата:   26.07.12 07:39

Ищу пример клиента на GrayBox (gbda_aut.dll), желательно на C#, сам кое чего сделал - для работы достаточно, но функционала мало.

И ЕЩЕ
Есть рабочий клиент с исходниками (C#-VS2010)( автор-Федоренко Дениc). Скачать можно тут http://files.mail.ru/6RA9VD.
Но в нем не хватает подписки на несколько тегов одновременно, чего хотелось бы.
Слышал,что нужно в коде сделать следующее:
1.dwCount необходимо записать кол-во переменных
2.pItems представить как массив(необходимо использовать класс Marshal для работы с неуправляемой областью кучи)
Первое несложно, а вот дальше не знаю как...

Взамен могу дать еще исходники клиента .NET OPC c opcfoundation (на основе OpcNetApi).

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   26.07.12 08:04

Сейчас как раз делаю datalogger, если подождете неделю-полторы перешлю, то место, где несколько тегов в группе.
Тут, я думаю, Вас переадресуют на профильные форумы, т.к. это, вообще говоря, вопрос программирования на C# и к АСУ ТП имеет весьма косвенное отношение

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: san 
Дата:   26.07.12 10:46

Как закончите - исходники в студию! Довольно часто возникают вопросы написания ОРС-клиента на C#. Сам таким не занимаюсь (когда-то на VB баловался) но некоторые коллеги увлекаются.

Александр Пупена.
Кафедра ИАСУ,Национальный университет пищевых технологий. Киев.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   27.07.12 10:17

Исходники по DA и HDA уже давно есть, сейчас доделываю по UA. Так что если надо, укажите мыло, скину. Заниматься выкладыванием на ресурсы, к сожалению, времени нет последнее время совсем

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Ivan Zhukov 
Дата:   28.07.12 14:07

Wut писал(а):

> Исходники по DA и HDA уже давно есть, сейчас доделываю по UA. Так что если надо,
> укажите мыло, скину. Заниматься выкладыванием на ресурсы, к сожалению, времени
> нет последнее время совсем
>
> Федоренко Денис

Хотел бы посмотреть: ivzh <собака> front.ru

Адрес этого сообщения    Ответить на это сообщение
 
 Re[2]: OPC клиент на C# помогите разобраться
Автор: Андрей Перминов 
Дата:   30.07.12 10:04

Доброго времени.


Fri, 27 Jul 2012 10:17:15 +0400 от Wut <forumasutp@xxxxx.xx.xx>:
Исходники по DA и HDA уже давно есть, сейчас доделываю по UA. Так что если
надо, укажите мыло, скину. Заниматься выкладыванием на ресурсы, к
сожалению, времени нет последнее время совсем

Федоренко Денис


Пожалуйста calltopower собака mail тчк. ru вышлите, интересно посмотреть.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   03.08.12 17:55

Выложил все сюда
http://www.onlinedisk.ru/file/921567/

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: san 
Дата:   04.08.12 18:27

Хорошая работа проделана!
Я уже давно отошел от программирования на ПК, кроме как написания скриптов в SCADA, но начало обеих частей прочитал. Где будут ссылки более долговечнее на twirpx, onlinedisk? Хотел бы на них сослаться (если Вы Денис конечно не против). Может есть смысл продублировать их на файлобменнике этого форума?

Александр Пупена.
Кафедра ИАСУ,Национальный университет пищевых технологий. Киев.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   05.08.12 09:28

http://www.twirpx.com/ лежат обе, я в принципе не против любого дублирования на любом ресурсе

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: san 
Дата:   05.08.12 11:52

Ок. А как на счет ОРС UA, разбирались?

Александр Пупена.
Кафедра ИАСУ,Национальный университет пищевых технологий. Киев.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   05.08.12 13:22

Уже делаю, если со временем будет все ок, к концу осени выложу то, что касается
архитектуры, информационной модели, адресного пространства, безопасности и разработки клиентов на базе C# через SDK от OPC Foundation.
Дальше планирую с помощью WCF без SDK (т.к. SDK полностью скрывает использование SOA для программиста) и потом думал сделать клиента под Android на Java раз уже отказались от COM и перешли на сервисы

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: san 
Дата:   05.08.12 13:52

Меня больше интересует пользовательская часть, то есть то, что надо понимать пользователю-интегратору технологии при использовании её в СКАДЕ и других програмных продуктах. Если там в этом направлении ничего не поменялось (понятия и правила определения ProgID, OPCGroup, ItemID ...), то технология будет интересна только с точки зрения программирования, что более важно для программистов.
Денис, можно создать методичку с примерами для интеграторов по ОРС-UA (да и вобще по ОРС), готов подключиться, тем более что опыт и у Вас и у меня в подобных изданиях имеется. Кроме того, уже подобное пробовали вместе с CHANt по управлению преобразователями частоты по промышленным сетям. https://sites.google.com/site/fieldbusbook/seti/kommunikacii-s-elektroprivodami/kommunikacii-s-elektroprivodami
Конечно это уже ближе к зиме, так как времени сейчас тоже в обрез.

Александр Пупена.
Кафедра ИАСУ,Национальный университет пищевых технологий. Киев.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   05.08.12 14:14

Там поменялось вообще все, как с точки зрения программирования, так и с точки зрения интегратора. первая часть как раз будет наполовину посвящена теории (в том объеме, который я могу представить как человек сторонний от OPC foundation), т.к. в информационной модели этой спецификации так сходу без пол-литра не разобраться, IMHO. Напишу, выложу, а там посмотрите...

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: san 
Дата:   05.08.12 14:21

Ок. Будем ждать.

Александр Пупена.
Кафедра ИАСУ,Национальный университет пищевых технологий. Киев.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: namage 
Дата:   10.08.12 12:22

Добрый день, Денис.

Во первых хочу Вас поблагодарить за руководство по OPC которое было разработано Вами.

Я использую Ваше руководство для работы над  моим дипломным проектом.

Но следуя всем шагам Вашего руководства, при получении данных из OPC сервера
 у меня возникает ошибка "Значение не попадает в ожидаемый диапазон" в данном участке кода:

pServer.AddGroup("MyGroup", bActive, updateRate, hClientGroup, ref TimeBias, ref DeadBand, 2, out m_hGroup, out updateRate, ref riid, out iFaceObj);

Возможно я делаю что-то неверно (я раннее не работал с com и opc ). Подскажите пожалуйста в какую сторону мне смотреть

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   10.08.12 12:36

Давайте, чтоб не превращать ветку в обсуждение вопросов программирования общаться через e-mail)
Напишите мне на почту подробнее ошибку с принтскрином желательно

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Ivan Zhukov 
Дата:   10.08.12 17:18


Почему "не надо превращать"? Всё это в пределах тематики форума.
Будет хорошо, если все смогут прочитать.

модератор


Wut писал(а):

> Давайте, чтоб не превращать ветку в обсуждение вопросов программирования
> общаться через e-mail)
> Напишите мне на почту подробнее ошибку с принтскрином желательно
>
> Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: sewet 
Дата:   15.08.12 10:48

Ну как там, Денис...?

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   15.08.12 11:39

Терпение, на днях вышлю

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   15.08.12 14:02

Денег на работе не платят, поэтому появилась минутка выложить код. Ниже добавление пример чтения двух элементов. Пример сырой, так сказать в лоб, без циклов и проверок на ошибки, но это уж сами подтянете думаю, а так читаться легче будет
-----------------------

uint dwCount  = 2; // кол-во элементов
Type type = typeof(tagOPCITEMDEF); //запоминаем необходимый тип

// выделяем кусок в неуправляемой памяти под 2 элемента типа tagOPCITEMDEF
IntPtr pItems = Marshal.AllocCoTaskMem((int)dwCount*Marshal.SizeOf(type));

//создаем определения этих элементов в управляемой памяти
tagOPCITEMDEF[] itemDef = new tagOPCITEMDEF[dwCount];
itemDef[0].szItemID = itemID1;
itemDef[0].szAccessPath = null;
itemDef[0].bActive = 1;
itemDef[0].hClient = 1;
itemDef[0].vtRequestedDataType = (ushort)VarEnum.VT_EMPTY;
itemDef[0].dwBlobSize = 0;
itemDef[0].pBlob = IntPtr.Zero;

itemDef[1].szItemID = itemID2;
itemDef[1].szAccessPath = null;
itemDef[1].bActive = 1;
itemDef[1].hClient = 1;
itemDef[1].vtRequestedDataType = (ushort)VarEnum.VT_EMPTY;
itemDef[1].dwBlobSize = 0;
itemDef[1].pBlob = IntPtr.Zero;

// Переносим эти элементы в неуправляемую память

Marshal.StructureToPtr(itemDef[0], pItems, false);
Marshal.StructureToPtr(itemDef[1], pItems +Marshal.SizeOf(type), false);


// В эти две переменные будут записаны массивы ошибок и результатов выполнения
IntPtr iptrErrors = IntPtr.Zero;
IntPtr iptrResults = IntPtr.Zero;

// Добавляем элемент данных в группу
pItemMgt.AddItems(dwCount, pItems, out iptrResults, out iptrErrors);

// Переносим результаты и ошибки из неуправляемой памяти в управляемую
tagOPCITEMRESULT[] pResults = new tagOPCITEMRESULT[dwCount];
pResults[0] = (tagOPCITEMRESULT)Marshal.PtrToStructure(iptrResults, typeof(tagOPCITEMRESULT));
pResults[1] = (tagOPCITEMRESULT)Marshal.PtrToStructure(iptrResults + Marshal.SizeOf(typeof(tagOPCITEMRESULT)), typeof(tagOPCITEMRESULT));

//Создаем массив описателей айтемов
uint [] hServers = new uint [dwCount];
hServers[0] = pResults[0].hServer;
hServers[1] = pResults[1].hServer;

//Читаем данные из сервера
pSyncIO.Read(tagOPCDATASOURCE.OPC_DS_DEVICE, 2, ref hServers[0], out iptrItemState, out iptrErrors);

// Переносим результаты и ошибки из неуправляемой памяти в управляемую
tagOPCITEMSTATE []pItemState = new tagOPCITEMSTATE[2];
pItemState[0] = (tagOPCITEMSTATE)Marshal.PtrToStructure(iptrItemState, typeof(tagOPCITEMSTATE));
pItemState[1] = (tagOPCITEMSTATE)Marshal.PtrToStructure(iptrItemState + Marshal.SizeOf(typeof(tagOPCITEMSTATE)), typeof(tagOPCITEMSTATE));

------------------------------------
Готово. Два нюанса
1. Неуправляемую память надо после очистить вручную, здесь не пишу, чтоб не захломлять код, понадобиться пришлю как в отдельном порядке
2. Чтоб этот код работал нормально необходимо пересобрать библиотеку opcprox.dll, которая шла вместе с моими примерами, чтоб не пересобирать выложил ее сюда
http://www.onlinedisk.ru/file/927487/

Ну вкратце где-то так, надеюсь помог

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   15.08.12 14:06

Кстати, если метод Read выдает ошибку без всяких видимых причин, то как заметил один читатель, за что ему благодарность, проблема в значении второго параметра (который тут стоит равным 2), отвечающим за LocaleId, необходимо его скорректировать, т.к. у каждого сервера свои понятия о локализации

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   15.08.12 14:08

Пардон, не в методе Read, а в методе AddGroup, смотрите сообщение namage. Все, больше не пишу в состоянии полустоя)

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: namage 
Дата:   16.08.12 17:11

Денис, добрый день.

А как быть, если pItemState[0] содержит массив - OPC сервер отправил пакет с несколькими значениями и pItemState[0] содержит System.Object.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   16.08.12 17:48

Сейчас под рукой студии нет, чтоб точно проверить, но выглядеть должно как-то так (object преобразуется в массив double из 2х элементов).

------------------------------------------------
//Получаем object pvValues
//Выделяем память в неуправляемой области
IntPtr iptrValues = Marshal.AllocCoTaskMem(2*sizeof(double));

//Преобразуем object в Variant и копируем в область iptrValues
Marshal.GetNativeVariantForObject(pvValues, iptrValues);

//Выделяем массив под значения
double [] fValues = new double [2];

//копируем из неуправляемой области в управляемую
Marshal.Copy(iptrValues,fValues, 0, 2*sizeof(double));

//Освобождаем память
Marshal.FreeCoTaskMem(iptrValues);

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: sewet 
Дата:   21.08.12 09:02

Не идет.


    //Создаем массив описателей айтемов
     uint [] hServers = new uint [dwCount];
     hServers[0] = pResults[0].hServer;
     hServers[1] = pResults[1].hServer;

     //Читаем данные из сервера
     pSyncIO.Read(tagOPCDATASOURCE.OPC_DS_DEVICE, 2, ref hServers[0], out iptrItemState, out iptrErrors);

Тут наверно должно быть hServers(массив), а не hServers[0]...

В итоге студия ругается на метод pSyncIO.Read на неправильный набор аргументов...

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   21.08.12 09:11

библиотеку opcprox новую используете? там третий параметр ref uint. Посмотрите внимательней на прототип, если не с новой, то будет ругаться конечно. Код рабочий 100%

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: sewet 
Дата:   21.08.12 10:44

конечно новую,
просто я так понял: массив uint[] hServers создается чтобы его  подставить в функцию, как третий параметр, а в примере подставляется только его первое значение, разве не так?

Просьба, Денис: может выложите пример целиком...

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   21.08.12 10:58

Подается ссылка на первое значение массива, а от нее зная тип элемента доступны остальные. я перешлю пример старый, там функцию синхронного чтения я переделал на чтение нескольких элементов (но выводится все равно один). Но позж5е

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: sewet 
Дата:   22.08.12 07:22

исключение после

iptrErrors = IntPtr.Zero;
uint[] hServers = new uint[2];
hServers[0] = pResults[0].hServer;
hServers[1] = pResults[1].hServer;
double[] fs = new double[2];
Marshal.Copy(iptrErrors, fs, 0, sizeof(double));

т е в методе   marshal.copy    "Value cannot be null"
хотя вроде все инициализировано, незнаю что ему нужно

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   22.08.12 11:23

где ж оно инициализировано, если iptrErrors = IntPtr.Zero;
Перед тем, как копировать из области iptrErrors, надо чтоб в эту область что-то записалось (напр. метод Read и т.п.)

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: sewet 
Дата:   22.08.12 12:24

т е надо чтобы pSyncIO.Read был перед Marshal.Copy, а не после.



iptrErrors = IntPtr.Zero;
uint[] hServers = new uint[2];
hServers[0] = pResults[0].hServer;
hServers[1] = pResults[1].hServer;
double[] fs = new double[2];
//Читаем данные из сервера
pSyncIO.Read(tagOPCDATASOURCE.OPC_DS_DEVICE, 2, ref hServers[0], out iptrItemState, out iptrErrors);
Marshal.Copy(iptrErrors, fs, 0, sizeof(double));


далее исключение возникает опять же после Marshal.Copy(iptrErrors, fs, 0, sizeof(double)) но уже с текстом "Requested range extends past the end of the array"

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   22.08.12 12:34

Внимательнее посмотрите, что пишите. В iptrErrors хранятся ошибки, а вы их копируете в массив double причем не в массив, а только в первый элемент массива.
Считанные значения хранятся в iptrItemState  их надо перенести в управляемую память в массив структур tagOPCITEMSTATE. Я ж вам выслал рабочий исходник на несколько элементов

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: sewet 
Дата:   22.08.12 12:48

вобщето это все уже было в исходном файле

т.е. в исходном коде

    pSyncIO.Read был после Marshal.Copy

    и метод Marshal.Copy(iptrErrors, fs, 0, sizeof(double)) именно в таком виде в каком он тут

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: sewet 
Дата:   22.08.12 12:50

и изменение я внес только после вышеприведенного сообщения

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   22.08.12 13:03

Та это я отладкой занимался и по сути это удалите, оно там не вписывается никак. Наспех редактировал и сам не удалил, эта строчка бессмыслена и там скорее всего есть подобные еще.

Вот так результаты переносятся
tagOPCITEMSTATE []pItemState = new tagOPCITEMSTATE[2];
pItemState[0] = (tagOPCITEMSTATE)Marshal.PtrToStructure(iptrItemState, typeof(tagOPCITEMSTATE));
pItemState[1] = (tagOPCITEMSTATE)Marshal.PtrToStructure(iptrItemState + Marshal.SizeOf(typeof(tagOPCITEMSTATE)), typeof(tagOPCITEMSTATE));
Т.е. вначале переносим то, что хранится по адресу iptrItemState, потом сдвигаем на размер tagOPCITEMSTATE и переносим вторую структуру и т.д.

А вот так ошибки в тип int (т.к. HRESULT это COMвский стиль)
int []hRes = new int[dwCount]
Marshal.Copy(iptrErrors, hRes, 0, (int)dwCount);

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: sewet 
Дата:   22.08.12 14:04

понял, получилось.

а на подписке как?   как распределить пришедшее в типы csharpa?
истина где то тут...

ListViewItem lvItem = new ListViewItem();
IntPtr iptrValues = Marshal.AllocCoTaskMem(2);
Marshal.GetNativeVariantForObject(pvValues, iptrValues);
byte [] vt = new byte[2];
Marshal.Copy(iptrValues,vt, 0, 2);
ushort usVt =(ushort) (vt[0] + vt[1]*255);
Marshal.FreeCoTaskMem(iptrValues);

string value=pvValues.ToString(); //тут значение

        это все было в функции OnDataChange - подписка на один тег, а как на несколько?
подписаться у меня вроде получилось, по крайней мере добавил тег по аналогии с синхронным чтением, и в отладчике до обработки события OnDataChange все проходит без проблем

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: san 
Дата:   22.08.12 14:17

Для OnDataChange я кодга-то пользовался клиентскими хендлами. Это было правда через Automation Interface:
1. Создавал массив для всег тегов;
2. их индексы передавал как клиенсткие хендлы при создании Items.
3. В DataChange передается (по крайней мере в Automation) массив клиентских хендлов, которые поменялись;
4. Находил по этим хендлам, как по индексу, нужный элемент в массиве, и писал туда значение.
Может в Custom это и по другому.

Александр Пупена.
Кафедра ИАСУ,Национальный университет пищевых технологий. Киев.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: san 
Дата:   22.08.12 14:20

немного некорректно написал:
3. передаются хендлы для Item, у которых поменлись значение, качество или отметка времени

Александр Пупена.
Кафедра ИАСУ,Национальный университет пищевых технологий. Киев.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: sewet 
Дата:   22.08.12 14:29

для меня весь вопрос в том какой тип csharpa должен быть для принимаемых значений, т е перевод "неуправляемой памяти в управляемую" и в интернете информации на тему весьма мало.

Из всех примеров которые я по "сусекам cо скребал" как с русских, так и с иностранных форумов, вариант с proxy-stub от Дениса для отечественной АСУ-техники является наиболее надежным...

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: sewet 
Дата:   22.08.12 14:44

в смысле на тему opc

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   26.08.12 15:47

Смотрите сообщение от 16.08.12 17:48. Там принцип описан...

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: sewet 
Дата:   28.08.12 11:52

он не работает, но все равно спасибо

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   28.08.12 12:36

Я ж сказал, это только принцип. Время появится отлажу, завтра/послезавтра

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: sewet 
Дата:   28.08.12 12:50

надеюсь

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: sewet 
Дата:   02.09.12 20:47

не нашлось времени для меня?

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   02.09.12 22:55

Пока аврал, к сожалению, поэтому терпение... Там надо будет библиотеку пересобрать

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: AI 
Дата:   27.09.12 10:57

Очень интересует вопрос, как получить список ОРС серверов на удаленной машине?

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   27.09.12 11:15

Отправил на почту Вам

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Богдан Чорній 
Дата:   06.10.12 17:39

Здраствуйте ... подскажите пожалуста ... а откуда береться переменная tvNode ?
p.s.
private void DisplayChildren(TreeNode ParentNode,
IOPCBrowseServerAddressSpace pParent)
{
uint cnt;
string strName;
string szItemID;
IEnumString pEnum;
// Вначале выводим все листья на данном уровне
pParent.BrowseOPCItemIDs(tagOPCBROWSETYPE.OPC_LEAF, "", 1, 0, out
pEnum);
pEnum.RemoteNext(1, out strName, out cnt);
while (cnt != 0)
{
ParentNode.Nodes.Add(strName);
//получает полный идентификатор тега
pParent.GetItemID(strName, out szItemID);
tvNode.Tag = (object)szItemID; ------------------ > ????
pEnum.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Богдан Чорній 
Дата:   06.10.12 18:26

Также вопрос .... откуда береться переменная pServer в коде
 private void ConnectAndBrowseServer(Guid guid){
         try{
          Type typeOfServer=Type.GetTypeFromCLSID(guid);
          m_pIfaceObject=Activator.CreateInstance(typeOfServer);

          if(m_pIfaceObject is IOPCBrowseServerAddressSpace){
           IOPCBrowseServerAddressSpace pBrowse=(IOPCBrowseServerAddressSpace)m_pIfaceObject;
           DisplayChilildren(null,pBrowse);
          }
         }
         catch(ApplicationException ex){
          string msg;
          int hRes=Marshal.GetHRForException(ex);
          // запрашиваем у сервера текст ошибки
          pServer.GetErrorString(hRes,2,out msg); ----->?
          MessageBox.Show(msg,"Ошибка");
         }
        }

Если строку удалить то при виборе сервера из списка приложение зависает и видает сообщ об ошибке.
Подскажите пожалуста....хочу разобраться ...

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: sewet 
Дата:   06.10.12 20:33

tvnode - объект элемента ветви визуального компонента Treeview, вобще то это по части программирования windows forms...

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Богдан Чорній 
Дата:   06.10.12 21:16

извините .... но в коде обьект класа TreeView не создавался ... бил только параметр функции класа TreeNode...

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Богдан Чорній 
Дата:   06.10.12 21:18

также в принципе и с pServer ... переменная интерфейса IOPCServer ... а некде не определяеться .... потому і спрашиваю .

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: sewet 
Дата:   07.10.12 12:01

строка 159 Form1.cs

IOPCServer pServer = (IOPCServer)m_pIfaceObj;

строка 83 Form1.cs

TreeNode tvNode;

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Андрей Барыкин 
Дата:   23.10.12 15:21

Доброго дня, коллеги. Не могу понять. Почему возникает ошибка
Необработанное исключение типа "System.ExecutionEngineException" в
mscorlib.dll -  при попытке получить статус сервиса симатик нет из сервиса винды

var typeOfOpcService = Type.GetTypeFromProgID(this.opcParams.Server);

this.pIOPCServer = (IOPCServer)Activator.CreateInstance(typeOfOpcService);
this.pIOPCServer.GetStatus(out ppServiceStatus);
var opcServerStatus =
(OPCSERVERSTATUS)Marshal.PtrToStructure(ppServiceStatus,
typeof(OPCSERVERSTATUS));

if (opcServerStatus.dwServerState != OPCSERVERSTATE.OPC_STATUS_RUNNING)
   {
      throw new OpcException("OPC сервер не запущен");
   }

этот код прекрасно работает из под консоли, но завести его из сервиса не
могу. Может сталкивались.
Спасибо.

Система Windows 7 x64 рус. Работа с симатик нет.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: sewet 
Дата:   03.12.12 08:57

Денис, хотелось узнать насчет вашего логгера для OPC: сколько стоит и другие условия

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   03.12.12 12:28

В ближайшее время выложу упрощенный вариант бесплатно с исходниками.
Лог данных с ОРС DA в CSV, синхронное чтение (эта - следующая неделя)

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: jc_denton 
Дата:   13.12.12 20:31

Денис, меня тоже очень интересует Ваш OPC-логгер. Мне как раз в дипломном проекте нужно реализовать подключение/синхронное чтение данных с ОРС-сервера с сохранением в CSV. Был бы признателен за ссылку на исходники.
В данный момент читаю Ваше руководство по программированию ОРС-клиентов на C# и возник вопрос - как подключиться к удаленным ОРС-серверам? Пример из руководства рассчитан только на локальные соединения? А как можно реализовать поиск доступных сетевых серверов?

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Cov 
Дата:   27.12.12 15:06

Здравствуйте!

Подскажите пожалуйста: после компиляции и запуска формы связь с контроллером (DeCont) устанавливается,
а вот считать с него ничего не получается выдается сообщение: "the item definition doesn't conform to the server's syntax" ... что делать?

Спасибо.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   27.12.12 15:17

Ошибка OPC_E_INVALIDITEMID,посмотрите, корректно ли формируется идентификатор элемента (ItemId). может в сервере есть нюансы

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Cov 
Дата:   28.12.12 13:41

Денис, спасибо! Дело действительно было в сервере, необходимо было сделать настройки, теперь все исправлено.
Еще вопрос: как брать (задавать) считанные элементы (будь то аналоги или дискреты) и присваивать переменным,
чтобы потом их применять в программе.
С этим я сталкиваюсь впервые и в этом направлении опыта пока нет.
Если напишите пример хотя бы в пару строк, буду весьма признателен! Спасибо!

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: micron 
Дата:   14.01.13 01:41

Денис! Благодарю Вас за публикации и советы на форуме. Реальная помощь в собственных разработках начинающим и не только. На данный момент меня, как начинающего, интересует вопрос получения списка ОРС HDA серверов на удаленной машине и их опрос. Если есть такой опыт - подскажите, пожалуйста!

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Олеся 
Дата:   04.04.13 14:44

а где можно найти исходники по OPC UA или литературу, которая поможет в написании сервера?

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: edyardpost 
Дата:   14.11.14 04:38

Здравствуйте, Денис, не могли бы вы помочь,
Вы когда-то писали в ветку форума http://iprog.pp.ru/forum/read.php?f=1&i=66287&t=65367#REPLY
Но все ссылки давно устарели.
Не могли бы Вы поделиться исходниками OPC клиентов. Очень Нужно для работы!!
Если не сложно и сможете их найти.
Очень Нужно, спасибо.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   14.11.14 22:04

на почту отослал

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Иван З. 
Дата:   24.11.14 06:04

Денис, здравствуйте! Не могли бы вы и со мной поделится исходниками OPC клиентов?
Очень интересна ваша реализация, спасибо.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Sorgename 
Дата:   04.11.15 23:57

Здравствуйте Федоренко Денис) Как с вами можно связаться?

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   05.11.15 12:51

fedorenko.dennis(a t)gmail.com

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: ivan_ruzanov 
Дата:   05.04.16 20:17

Не открывается ссылка. Подскажите что в opcproxy нужно поправить?

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: SancheZS 
Дата:   14.04.16 19:29

Привет! Я по этой же методе сделал OPC клиент на C++, т.е. в opcproxy ничего изменять не нужно, можно добавлять целую группу тэгов за раз, и считывать также. Если нужен исходник пишите.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: SancheZS 
Дата:   14.04.16 19:31

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

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: ivan_ruzanov 
Дата:   15.04.16 10:11

Привет!Я буду благодарен, если бы ты скинул исходник для груповой подписки на тэги ruzan.kreck @ yandex.ru

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: OlgaV 
Дата:   19.10.16 16:23

Денис, здравствуйте!

Прежде всего, хочу Вас поблагодарить за предоставленный Вами проект с описанием OPC client.

Я пишу дипломную работу, одним из этапов которой является создание OPC клиента.
За основу я решила использовать Ваш проект.
Однако, у меня возникли некоторые сложности с его запуском. Проблема заключается в том, что библиотека opcproxy.dll, установленная на моем компьютере несколько отличается синтаксисом.
А ссылки на ресурсы, указанные Вами на форуме, устарели..

Буду очень благодарна, если Вы поделитесь со мной исходниками и библиотекой opcproxy.dll vlasik.olya @ gmail.com

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: SancheZS 
Дата:   20.10.16 00:25

Добрый! Вам на каком языке нужно C++ или C#?

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: OlgaV 
Дата:   20.10.16 00:36

На C#

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Артем_A2000 
Дата:   24.10.16 12:15

Здравствуйте, подскажите, писал OPC-клиент по руководству Дениса Федоренко. До асинхронного чтения пока что не дошел, рассмотрел только синхронное. И вот в чем проблема, при получение данных с одного тега все работает, но как только пытаюсь получить со второго выдает ошибку: Возникло исключение "System.Runtime.InteropServices.COMException" в OPCClient.exe ("Ошибка на сервере. (Исключение из HRESULT: 0x80010105 (RPC_E_SERVERFAULT))"). Cообщение об исключении "Ошибка на сервере. (Исключение из HRESULT: 0x80010105 (RPC_E_SERVERFAULT))". Не могу разобраться с чем это может быть связано. Буду рад, если кто-то с этим уже сталкивался и сможет меня проконсультировать.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: OlgaV 
Дата:   24.10.16 15:03

SancheZS, ?

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Артем_A2000 
Дата:   24.10.16 15:33

Если нужен OPC DA клиент Дениса Федоренко(C#), то я могу скинуть и библиотеку мной подправленную тоже.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: OlgaV 
Дата:   24.10.16 15:40

Именно это и нужно, спасибо!
Если можно, на почту vlasik.olya<at>gmail.com или vlasik.olya<at>mail.ru

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Артем_A2000 
Дата:   02.11.16 11:16

Может у кого-то есть логгер Дениса Федоренко, не могу скачать по выложенным ссылкам. Буду очень признателен, если скинете на почтовый ящик.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: asutpkz 
Дата:   21.11.16 15:14

Здравствуйте. Есть какие либо наработки по серверам OPC UA ? Изучаю сейчас технологию OPC UA, ваши разработки очень пригодились бы.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Lapu-Leen 
Дата:   27.02.17 14:43

Доброго времени суток!   Можно и мне исправленную версию OPC DA клиента Дениса Федоренко(C#)?  Адрес s-miron собачка bk.ru

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: rainer048 
Дата:   20.03.17 11:58

Добрый день! Подскажите, пожалуйста, что нужно изменить в opcproxy.dll для подписки на несколько тегов?

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: SancheZS 
Дата:   20.03.17 16:55

Добрый день! Ничего. Нужно в самой программе правильно написать код.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: rainer048 
Дата:   21.03.17 09:19

А можете тогда скинуть рабочий код с добавлением группы тегов (Вы предлагали выше)? Кучу решений попробовал - не помогает:(
email: rainer048@ gmail.com

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: kirill.ivanychev 
Дата:   21.03.17 10:47

Всем доброго дня!

Может кто-нибудь скинуть мне исходники Дениса Федоренко с примерами OPC HDA клиентов?
Скиньте пожалуйста, если есть у кого, на ivanychev.kirill @ askeng.ru

Заранее Спасибо!

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: SancheZS 
Дата:   21.03.17 22:58

К сожалению пока что нет возможности скинуть клиент с подпиской на группу тегов. Можете в документации посмотреть OPC Foundation, там тоже описано.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: kirill.ivanychev 
Дата:   22.03.17 08:24

Мне подойдет прежний вариант, который ранее рассылали.
По книжке пока не получается: не могу понять, почему pOPCHDAServer.GetItemHandles() возвращает ерунду в hItems.

Поэтому хочу посмотреть рабочий вариант, если есть такой, даже без подписки на группу тегов

Заранее спасибо.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   22.03.17 13:29

Вечером найду вышлю.
Чтобы заработала подписка на несколько тегов, нужно правильно определить маршалинг массивов в С#.
В принципе, импортировать интерфейсы и конфигурировать маршалинг Native-типов можно и без прямого изменения dll, а делать это прямо в коде. Может в течении месяца обновлю книгу, если интерес до сих пор есть и время найдется

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: SancheZS 
Дата:   22.03.17 21:20

Денис здравствуйте! Есть желание сделать симулятор аналоговых, дискретных параметров для проверки программ управления маленькой САУ. В качестве базы хотелось использовать OPC сервер. Не могли бы порекомендовать литературу по созданию OPC сервера или программной реализации записи значений тегов в OPC? Спасибо!

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: kirill.ivanychev 
Дата:   23.03.17 08:15

Да, Денис, спасибо, интерес есть. Исходники можно выслать на этот адрес: ivanychev.kirill @ askeng.ru

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   24.03.17 17:42

Литература, в принципе, одна - спецификация ОРС DA, т.к. по сути это обычный COM объект, реализующий описанные в спецификации интерфейсы. Но по-моему делать ОРС сервер для этой цели, задача несколько избыточная.

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: SancheZS 
Дата:   25.03.17 06:10

Спасибо! Согласен с вами

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: nk_lugansk 
Дата:   03.07.17 14:37

Добрый день! Помогите, пожалуйста, разобраться с чтением данных из OPC-сервера (пробую писать на C#). Нашел в сети pdf от Федоренко Д.Ю. (ссылки через одну устарели, сохранил себе на диск, вот тут сам документ: https://yadi.sk/i/ZicTKCef3KhEGT )

Список OPC-серверов получаю исправно.

При попытке подключения к нужному (CoDeSysOPC), никаких ошибок не вылетает, внизу экрана ("возле часиков") появляется ярлык этого сервера, стало быть - соединение происходит.
Эти строки:
  IOPCBrowseServerAddressSpace pBrowse = (IOPCBrowseServerAddressSpace)m_pIfaceObj;
  MessageBox.Show(pBrowse.ToString());
  DisplayChildren(null, pBrowse);
Выдают "System._ComObject", т.е. я так надеюсь - всё правильно, а дальше (уже в теле DisplayChildren()) - "беда", пробую:
  // Вначале выводим все листья на данном уровне
  pParent.BrowseOPCItemIDs(tagOPCBROWSETYPE.OPC_LEAF, "", 1, 0, out pEnum);
  pEnum.RemoteNext(1, out strName, out cnt);
  MessageBox.Show(strName + "count = " + cnt);
- Возвращается пустое значение (count = 0). На всякий случай делаю еще:
  // Получаем ветви на данном уровне
  pParent.BrowseOPCItemIDs(tagOPCBROWSETYPE.OPC_BRANCH, "", 1, 0, out pEnum);
  pEnum.RemoteNext(1, out strName, out cnt);
  MessageBox.Show(strName + "count = " + cnt);
и то же получаю пустое значение с нулевым количеством.

При это нашел на просторах скомпилированную программу, судя по ярлыку - еще на Delphi 7 писанную, она к серверу подключается и список переменных выводит. Не знаю, на сколько это корректно, вот ссылка на соответствующий экзешник: https://yadi.sk/d/g5u2L_LT3KhEZe

Да, если это имеет значение: пока что пробую всё на TestMode от самого CoDeSysOPC.exe (в коммандной строке запускаем: CoDeSysOPC.exe /TestMode).

Вообще "глобально" моя задача похожа на описанный в этой ветке логер данных, правда мне нужно будет не писать в csv, а сэмулировать простейший пульт (3 кнопки: вверх/вниз/стоп, индикация пары концевых и "изюминка" - выводить показания тензодатчика), но это "потом"! Пока что я крепко застрял на этапе получения и доступа к данным! Если кто-то может - подскажите, пожалуйста что я не так делаю, или поделитесь "рабочим из коробки" исходником, который подключается и считывает данные хотя бы 1 раз без циклов и подписок.

PS. Это моя третья безуспешная попытка((
Первая заключалась в соединении по сокету (ip:port) с самим контроллером. Не увенчалась успехом, потому что соединение происходить-происходило, но что с ним делать дальше - информации нет совсем (у меня не ModBus, а TCP/IP Level2 соединение).
Вторая же попытка, очень похожа на описанное выше, делал вот по этой методичке: https://yadi.sk/i/9wrzZkI-3KhF4k
Соединиться с сервером получилось, а вот сформировать таблицу с описанием переменных именно в требуемом формате - не понял как! Застрял на фразе "Доступ к переменным через прямые адреса не поддерживается." из описания OPC_20_how_to_use_ru.pdf, идущего в комплекте с самим CoDeSysOPC.exe Ссылка на документ: https://yadi.sk/i/2_DSWbf93KhLKz

PPS. Если кто-то сжалится, поделитесь, пожалуйста, рабочим примером на почту: nk.pochta@ gmail.com

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: asutpnovichok 
Дата:   22.03.18 15:54

Добрый день!!
Пишу opc-клиент , реализую асинхронное чтение сигналов, если выставлять на контроллере время повторения цикла выполнения программы - 10000ms, то opc-клиент работает без ошибок, если ставить меньше ~1000ms то программа практически сразу падает. REGUL OPC SERVER DA, который передаёт мне данные работает корректно. В чем может быть причина?

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: VOVA2407 
Дата:   02.04.18 14:56

Всем доброе время суток,
просьба скинуть исходники OPC клиента на c# от Дениса Федоренко на yakowlewwi собака gmail точка com

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Олег П. 
Дата:   19.04.18 17:39

Добрый день.
Разбираюсь с обращением к OPC серверу по методичке Программирование OPC
клиентов на C++ и C# Федоренко Дениса.

Возник вопрос с первым методом, который заполняет нам ListView. Возникает исключение при
получении идентификаторов серверов


public int ShowRegistredServers(ref ListView m_listOPCServers)
        {
            int nServerCnt = 0;             //Число серверов
            Guid guid = new Guid();         //переменная для временного хранения Guid сервера
            try
            {
                //void EnumClassesOfCategories(uint cImplemented, ref Guid rgcatidImpl, uint cRequired, ref Guid rgcatidReq, out IOPCEnumGUID ppenumClsid);
                pServerList.EnumClassesOfCategories(1, ref clsidcat, 0, ref clsidcat, out pIOPCEnumGuid);   //запрос по группе серверов спецификации
            }
            catch(Exception ex)
            {
                Console.WriteLine("Ошибка запроса по группе серверов!!!/n");
                Console.WriteLine(ex);
            }

            try
            {
                                                              //Получение идентификаторов
                pIOPCEnumGuid.Next(1, out guid, out iRetSvr); //Здесь возникает исключение

            }
            catch(Exception ex)
            {
                Console.WriteLine("Ошибка получения идентифиваторов серверов!!!");
                Console.WriteLine(ex);
            }

            while(iRetSvr!=0)
            {
                nServerCnt++;
                pServerList.GetClassDetails(ref guid, out pszProgID, out pszUserType, out pszVerIndProgID);

                ListViewItem lvItem = new ListViewItem();
                lvItem.Tag = (object)guid;
                lvItem.Text = pszProgID;
                m_listOPCServers.Items.Add(lvItem);  //Добавили в лист объект ListView
                pIOPCEnumGuid.Next(1, out guid, out iRetSvr);
            }

            return nServerCnt;                    //Возвращаем количество серверов в место вызова метода
        }

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Олег П. 
Дата:   19.04.18 17:57

ссылка на проект
https://yadi.sk/d/IbRVEBOO3UaDCt

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   19.04.18 18:42

Ну "возникает исключение" - весьма размытая формулировка. Что в ex.Message возвращается для начала?

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Олег П. 
Дата:   19.04.18 22:21

Добрый день.
Рад познакомиться.
Забыл указать.

Ошибка получения идентификаторов серверов!!!
System.Runtime.InteropServices.COMException (0x80004005): В результате вызова компонента COM возвращена ошибка в формате HRESULT E_FAIL.
   в OpcEnumLib.IOPCEnumGUID.Next(UInt32 celt, Guid& rgelt, UInt32& pceltFetched)
   в OPCClient.OPCOne.ShowRegistredServers(ListView& m_listOPCServers) в D:\C# projects\OPCTest\OPCTest\OPCClient\OPCClient\OPCOne.cs:строка 46

Подозреваю что я неверно указал идентификатор clsidcat

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Олег П. 
Дата:   20.04.18 19:02

Я Ошибся в Guid. После того как заменил Guid в переменной clsidcat. список серверов получил.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: pit 
Дата:   09.06.18 08:16

Добрый день, хотелось бы сразу поблагодарить за выложенный материал очень помогает новочкам
Выполнил все по методичке, но возникли вопросы по асинхронной подпиской, в частности вопрос по конструктору
//конструктор
public DataCallback(OPCClientDlg dlg, string szItemID)
 {
 m_Dlg = dlg; // Передаем ссылку на нашу форму в качестве параметра
 SetItemID(szItemID); // и идентификатор текущего элемента данных
 }
Не могу разобраться откуда берется OPCClientDlg?
И если не затруднит скиньте рабочую версию с подпиской на несколько тегов

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: pit 
Дата:   09.06.18 08:16

Почта pitver2014@xxxxxx.xx

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: pit 
Дата:   09.06.18 08:18

Ссори pitver2014(собачка )yandexточкаru

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: vint 
Дата:   06.09.18 13:07

Здравствуйте. Благодарю автора за изложенный материал в методичке "Программирование OPC клиентов на C++ и C#". Сейчас разбираюсь с подпиской на несколько тегов. Не могу корректно оформить маршалинг массивов. Если у кого-нибудь имеется версия клиента (на C#) с работой нескольких тегов, пожалуйста, вышлите на почту: vint-95(at)bk(dot)ru. Буду очень признателен.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   15.09.18 14:33

Привер чтения
    public int SyncRead()
       {
           int iRet = 0;


           if (null == m_pSyncIO)
           {
               m_pSyncIO = (IOPCSyncIO)m_pItemMgt;
           }


            tagOPCDATASOURCE ds = tagOPCDATASOURCE.OPC_DS_DEVICE;

           IntPtr iptrItemValue = IntPtr.Zero;
           IntPtr iptrErrors = IntPtr.Zero;



           try
           {
               m_pSyncIO.Read(ds, (uint)m_dwReadCount, ref m_hItems[0], out iptrItemValue, out iptrErrors);
           }
           catch(Exception ex)
           {
               iRet = -1;
           }
           try{

           tagOPCITEMSTATE[] itemSates = new tagOPCITEMSTATE[m_dwReadCount];
               Type type = typeof(tagOPCITEMSTATE);
               for (int i = 0; i < m_dwReadCount; i++)
               {
                   itemSates[i] = (tagOPCITEMSTATE)Marshal.PtrToStructure(iptrItemValue + i * Marshal.SizeOf(type), type);
                   uint index = indecies[i];

                   opcItems[(int)index].DataValue = itemSates[i].vDataValue;
                   opcItems[(int)index].TimeStamp = itemSates[i].ftTimeStamp;
                   opcItems[(int)index].wQuality = itemSates[i].wQuality;
               }

           }
           catch (Exception ex)
           {
            iRet = -1;
           }
           finally
           {

                Marshal.FreeCoTaskMem(iptrItemValue);
               Marshal.FreeCoTaskMem(iptrErrors);
           }
           return iRet;
       }

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   15.09.18 16:34

Если вопрос о том как исправить прототип функции, чтоб принимать массив вместо одного элемента могу выслать IDL с исправленными синхронным чтением и записью, честно говоря очень редко использую асинхронные вызовы и под рукой нет

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: vint 
Дата:   15.09.18 16:59

Не стоит, данный Вами пример мне помог. Спасибо Вам большое и за пример кода, и за учебник.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Jimmy 
Дата:   17.09.18 15:55

Здравствуйте, Денис. Спасибо за материал! Можно у вас попросить выслать исходники (C#) на akakiy1995 (собака)gmail точка com.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Mary_Demon 
Дата:   08.01.19 19:13

Добрый день Денис, можно ли попросить Вас прислать исходники на C#? Demonvnutri_Mari @ mail.ru. Заранее спасибо

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   09.01.19 15:29

Страшный адрес почты, слать не буду:) можно скачать здесь, по идее должно быть то что просите
https://s3.eu-central-1.amazonaws.com/opcda/OPCClient.zip

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Vovih 
Дата:   28.05.20 10:54

Здравствуйте!
Я буду признателен, если вы выложите небольшой пример получения данных с OPC-сервера на С#.
Я сначала пробовал получить данные с помощью библиотеки python OpenOPC, я подключился к серверу, я вижу структуру данных сервера, но получить значения с прибора как написано в официальной документации не получается.
Сервер OPC.DA.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: AnatolyV 
Дата:   31.05.20 14:56

Использую, при необходимости, вот эту библиотеку (она вам подойдет, если не нужны продвинутые вещи - как синхронный/асинхронный режим, получение кодов ошибок и проч).
https://github.com/hylasoft-usa/h-opc

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: rsw 
Дата:   16.02.22 10:07

Добрый день.
Разбираюсь с обращением к OPC серверу по методичке Программирование OPC
клиентов на C++ и C# Федоренко Дениса.
На локальной машине получил список установленных серверов, все ок.
подскажите пожалуйста, как подключаться и читать с удаленного OPC DA
сервера?
DCOM настроен, Matrikon OPC Explorer-ом подключаюсь и читаю теги.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: Wut 
Дата:   16.02.22 10:49

Используйте CoCreateInstanceEx ( https://docs.microsoft.com/en-us/windows/win32/api/combaseapi/nf-combaseapi-cocreateinstanceex ) вместо CoCreateInstance.

Федоренко Денис

Адрес этого сообщения    Ответить на это сообщение
 
 Re: OPC клиент на C# помогите разобраться
Автор: rsw 
Дата:   17.02.22 10:26

Понятно, буду пробовать.
Денис, спасибо Вам большое за прекрасное руководство !

Адрес этого сообщения    Ответить на это сообщение
 Список форумов    


 Список форумов  |  Нужен логин? Регистрируйтесь здесь 
 Логин пользователя
 Имя пользователя:
 Пароль:
 Помнить пароль:
   
 Забыли ваш пароль?
Введите имя пользователя или e-mail, и новый пароль будет послан на email, указанный в вашем профиле.

Рейтинг@Mail.ru