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

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

 Наверх  |  Перейти к теме  |  Поиск  |  Вход  |  Дерево    
 Создание OPC DA клиентов
Автор: Wut 
Дата:   07.01.12 18:27

Добрый день,

Недавно стала задача написать что-то типа быстрого старта по разработке OPC DA клиентов.
Сделал и выложил сюда, вдруг еще кому понадобится что-нибудь подобное

http://depositfiles.com/files/6w9ttbhwt

Документ (72 листа) содержит немного общих слов об ОРС DA (которых пруд пруди),
а остальная часть посвещена программированию с помощью C++/MFC и C# под .NET.

Рассмотрены вопросы
1. Просмотра списка локальных серверов(с помощью OPC Enum)
2. Подключения к выбранному серверу и просмотру адресного пространства (с помощью IOPCBrowseServerAddressSpace [DA 2.0] и IBrowse [DA 3.0])
3. Синхронному чтению данных из сервера (с помощью IOPCSyncIO::Read)
4. Асинхронному обмену (с помощью точек подключения к IOPCDataCallback и IOPCAsync2::Read)

Все реализовано через чистый Custom интерфейс без каких-либо SDK от OPC Foundation, т.е., по большому счету, потребуется только библиотеки типов OPCEnum.exe и opcproxy.dll, которые устанавливаются практически с любой SCADA или OPC-сервером.

Если кому-то понадобится могу выслать исходники обоих версий клиента (на С++ и С#).

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

Текст может быть немного сыроват, т.к. не успел особо отредактировать, поэтому заранее извиняюсь).

В перспективе надо будет сделать, что-то подобное для HDA и UA клиентов и перейти на сервера.

Буду рад, если кому-нибудь поможет

Федоренко Денис
Приазовский гос.тех.университет

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: san 
Дата:   07.01.12 18:51

Здравствуйте Денис.
Я думаю, было бы очень неплохо, если б вы обнюхали ОРС-UA, так как в конце концов все двиагется к нему, а информации немного, и на та англицком языке.

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

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Wut 
Дата:   08.01.12 15:24

Ok, следующим сделаю OPC UA

Федоренко Денис
Приазовский гос.тех.университет

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: sewet 
Дата:   13.03.12 12:15

Был бы очень признателен, если пришлете исходные коды C# OPCDA и OPCHDA на v8226 @ mail.ru

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: sewet 
Дата:   13.03.12 12:21

или прошу выложить куда нибудь

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: buddy 
Дата:   06.04.12 14:13

Скиньте пожалуйста исходный код C# на buddy[at]mail2k.ru
Спасибо

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: freydman 
Дата:   12.04.12 16:49

В портфеле у MatrikonOPC имеются бесплатные программы для тестирования
связи с клиентами и серверами OPC, например, OPC Explorer.
Кстати, открылся русскоязычный сайт MatrikonOPC.
Теперь информацию об основных продуктах (пока немногих) этой компании
можно получить на сайте matrikonopc.ru по-русски.
Интерфейс сайта повторяет дизайн англоязычного сайта matrikonopc.com
Доступ к сайту здесь: http://www.matrikonopc.ru

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: dimm 
Дата:   22.04.12 19:49

Скиньте пожалуйста исходный код на C# на dimmentius [at] rambler.ru. Буду весьма обязан.

Заранее большое спасибо.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: optipav 
Дата:   10.01.13 11:47

Пришлите пожалуйста исходники на C# на optipav<собака>yandex.ru, заранее спасибо!

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: margarita 
Дата:   05.03.13 15:25

Вышлите, пожалуйста, исходники opc клиента на c#  на почту margarita.v.i собака mail.ru.
Заранее спасибо!

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: DelSnos 
Дата:   06.03.13 17:11

Коллега, спасибо за полезный труд!
Можно исходники!? user3532<гав>gmail.com
Спасибо!

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Wut 
Дата:   06.03.13 22:42

http://dfiles.ru/files/vy7pam2jk

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

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Wut 
Дата:   07.03.13 23:42

http://dfiles.ru/files/gym7xq1ze?redirect

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

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: kokhanenkoSA 
Дата:   09.03.13 20:35

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

Можно исходный код для C++ на kokhanenkoSA@xxxxxx.xx ?

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

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: kokhanenkoSA 
Дата:   09.03.13 20:37

Извиняюсь kokhanenkoSA<a>yandex.ru

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Wut 
Дата:   09.03.13 20:44

http://dfiles.ru/files/u4cbqjxx8

http://dfiles.ru/files/06oz2pw9z

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

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: kokhanenkoSA 
Дата:   10.03.13 02:34

Помогите пожалуйста разобраться.
При компиляции исходников для С++ (VS) вылетают такие ошибки:

"OPCClient.exe": Загружено: "D:\1С МФТИ\исходники OPC клиента\C++\OPC DA\OPCClient\Debug\OPCClient.exe", Символы загружены.
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\ntdll.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\kernel32.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\KernelBase.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\mfc100ud.dll", Символы загружены.
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\msvcr100d.dll", Символы загружены.
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\user32.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\gdi32.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\lpk.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\usp10.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\msvcrt.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\advapi32.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\sechost.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\rpcrt4.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\sspicli.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\cryptbase.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\shlwapi.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7601.17514_none_41e6975e2bd6f2b2\comctl32.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\msimg32.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\ole32.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\oleaut32.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\imm32.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\msctf.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\nvinit.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\uxtheme.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\dwmapi.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\mfc100rus.dll", Двоичный код не был построен с отладочной информацией.
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\shell32.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\clbcatq.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\cryptsp.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\rsaenh.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\RpcRtRemote.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\opccomn_ps.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\comsvcs.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\atl.dll", Невозможно найти или открыть файл PDB
"OPCClient.exe": Загружено: "C:\Windows\SysWOW64\opcproxy.dll", Невозможно найти или открыть файл PDB

Но программа запускается.
Я установил OPC сервер от GreyBox -> Gray Simulator v1.8
Клиент находит его, но некоторые теги не читаются. + Иногда все совсем все рушится и вылетает.
Я разбираюсь по вашей методичке OPC DA. Там сказано про файл OPCEnum.exe
так и не смог найти его на просторах интернета(
Нашел на компьютере файл с таким именем(он появился после установки OPC сервера от ICONICS). Чует мое сердце что он не такой как надо))

Еще не пойму. У вас в stdafx.h есть строчки:

#import "c:\\Windows\system32\opcproxy.dll" rename_namespace("OPCDA")
#import "c:\\Windows\system32\opcenum.exe" rename_namespace("OPCENUM")


самое интересное что среда находит эти файлы. А я нет))

На самом деле стоит задача написать простейший клиент который умеет читать и записывать в теги.
За C++ сел только на время этого задания, и нет времени глубоко в этом разбираться.
Можете подсказать бесплатный toolkit для написания клиента, если такой существует?

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: GenOfDrag 
Дата:   17.04.13 21:30

Спасибо за исходники программы "OPC2SQLLogger"(язык C#).

Но не могли бы вы пересобрать исходник (или написать как сделать), чтобы не было деревьев, кучи окон, а чтобы параметры забивались в теле самой программы, то есть если заранее известны сервер, орс-сервер, имена тегов...пробовал сам, но не выходит...

Это требуется для решения задачи - считывать значения тегов и передавать их в поля ввода/вывода.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Wut 
Дата:   17.04.13 21:36

структура проекта хранится в xml файле, который можно спокойно править руками.
пересобирать, а это скорее всего переделать, увы времени нет

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

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: denver130184 
Дата:   13.08.13 03:04

Доброго времени суток Денис, спасибо вам за проделанные труды.
Я тоже сейчас разбираюсь с OPC серверами и уже почти написал своего клиента(C#), правда пошел немного по другому пути, без использования библиотек opcproxy и opcenum (реализовав все интерфейсы вручную в программе, тем самым не приходиться зависить от библиотек и их корявого перевода RCW-ном.)
У меня есть вопрос к вам, в моем OPC клиенте необходимо предусмотреть восстановление связи в случае сбоя клиента, как я понимаю по стандартам OPC связь происходит по технологии:
 1) На стороне OPC сервера создаем группу.
 2) Добавляем туда теги необходимые для чтения
 3) Делаем подписку.
 Так вот по идеи при обрыве связи с клиентом группа с прописанными тегами все равно будет продолжать работать на стороне OPC сервера и если сделать функцию в клиенте которая до этого записала хэндер группы и сохранила хэндеры тегов то проблем не должно быть с подключением к ним? но это по идее, вы в своем OPC2SQLLogger судя по всему, сохраняете все в в файл а при последующем открытие логера и загрузки файла сохраненых настроек, создаете заново туже группу и добавляете в нее сохраненые теги? или же подключаетесь к уже существующей группе? Я еще не успел посмотреть ваш код думаю потом станет понятно. но хотелось бы услышать предположение что будет с группой созданной на сервере при обрыве связи с OPC клиентом? можно ли к ней заново подключиться?

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Wut 
Дата:   13.08.13 10:09

IOPCServer::GetGroupByName вернет потерянный указать на группу, но на случай если количество ссылок на группу не равно 0 (т.е. Release не вызывалось в том же количестве, что AddRef). Но это на случай, если сервером не была удалена группа: может его перегружали или у него настроены тайм ауты на чтение и т.п.
Плюс, если клиент был закрыт и открыт заново, то в любом случае лучше производить полный список инициализации связи для взаимодействия с сервером и создавать группы, добавлять в них элементы и т.п.

Я делал когда-то клиент, который брал данные (около 1500 тегов) с сервера через интернет, сервер был за 4к км от клиента и связь была соответствующая. Так были моменты очень часто, когда вроде связь с сервером есть, а чтение выдает ошибку. У меня на этот случай даже в тестовом логгере был поток HeartBeat, который отслеживал эти ошибки и инициализировал переподключение с удалением групп, освобождением интерфейсов сервера и т.п.

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

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: denver130184 
Дата:   13.08.13 12:00

Спасибо за помощь теперь ясно, значить лучше будет в любом случае делать новую инициализацию так как может будут проблемы и с OPC сервером, а это значить что GetGroupByName вернет 0 и придеться танцевать с бубном.
И последний вопрос на который, не нашел ответа даже в спецификации OPC DA, если я к примеру к клиенте оформлю подписку к примеру на 10000 тегов и буду работать с OPC сервером по локальной сети, как такая нагрузка скажется на сервере? т.е могут ли быть сбои в OPC сервере ? Необходимо исключить любой даже малейший глюк на зависание OPC сервера, писать в сервер ничего я не собираюсь, только чтений из сервера и последующая запись в MySQL.
Заранее спасибо за помощь.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: denver130184 
Дата:   13.08.13 12:06

Может есть разница создать две группы и разместить там по 5000 тегов, или же содать одну и добавить туда 10000?

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Wut 
Дата:   13.08.13 17:08

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

Я чаще использую синхронное чтение. создаю несколько групп и каждую опрашиваю в своем потоке, соответственно потоки надо синхронизировать. Так эрогономичнее и эстетичнее, чем создавать одну большую группу. И надо аккуратнее быть со времен опроса, задавать без фанатизма, а исходя с логического смысла

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

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: denver130184 
Дата:   13.08.13 21:12

Теперь ясна логика, спасибо вам за помощь =)

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Busha 
Дата:   14.10.13 20:59

Подскажите где я мог ошибиться!
Создал клиент на базе примера выложенного Федоренко Денисом. Все великолепно читает в синхронном режиме с OPC-сервера Teconic.
Стал проверять на утечку памяти и тут выяснилось, что она имеется и приличная. При комментировании строчки pSyncIO->Read..... утечка исчезает. Полностью этот кусок кода ниже:


  hRes=pItemMgt->QueryInterface(IID_IOPCSYNCIO,(void**)&pSyncIO);

  tagOPCITEMSTATE *pItemValue=NULL;
  hRes=pSyncIO->Read(OPC_DS_CACHE,1,&(ArrayhServer[i]),&pItemValue,&pErrors);
....... обработка данных....
  pSyncIO->Release();
  CoTaskMemFree(pItemValue);

Перед этим для всех тегов делаю AddGroup, tagOPCITEMDEF в AddItems использовал как выделяемую динамически так и статически. Добавлял переменные по одной в AddItems. При этом из возвращаемого параметра pResults сохранял значение hServer в массив ArrayhServer. И далее каждый раз когда надо обновить данные выполняю вышеуказанный кусок кода для всех тегов по очереди.
Что тут не так? Ведь все работает и не вылетает! Но память утекает по 2-3 байта на каждом вызове Read.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Busha 
Дата:   14.10.13 21:01

Забыл указать, что pErrors после вызова read тоже чистю вызовом CoTaskMemFree(pErrors).

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Wut 
Дата:   20.10.13 16:51

Очень часто причиной утечки становятся сами методы библиотеки ОРС из-за некорректной внутренней организации. Именно поэтому при всей моей любви к С++ при написании пришлось уйти в С# особенно, если это касается ОРС UA  и сервисов.
Все-таки С# и .NET действительно облегчает жизнь

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

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Busha 
Дата:   21.10.13 18:42

С утечкой памяти разобрался. Все как всегда оказалось проще. Одна из переменных оказалась строковая и после чтения требовалось отдельно делать free с помощью функции SysFreeString.
Вот кусок правильно работающего кода чтения списка параметров из одной группы:
-------------------------------------------------------------------------
hRes=pItemMgt->QueryInterface(IID_IOPCSYNCIO,(void**)&pSyncIO);
if(hRes!=S_OK){
  //обработка ошибки
  return hRes;
}

hRes=pSyncIO->Read(OPC_DS_CACHE,nParam,pListParam->aHServerRes,&aItemValue,&aErrors);
if(hRes!=S_OK){
  //обработка ошибки
}else{
  for(i=0;i<nParam;i++){
    // обработка данных
    if(aItemValue[i].vDataValue.vt==VT_BSTR){
      SysFreeString(aItemValue[i].vDataValue.bstrVal);
    }
  }
}
CoTaskMemFree(aItemValue);
CoTaskMemFree(aErrors);
pSyncIO->Release();
---------------------------------
Естественно такое же освобождение требуется для всех array или блоб и т.д.

Большое спасибо Денис за пример! Понятно и доходчиво.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: ldar 
Дата:   27.01.14 20:27

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

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Wut 
Дата:   28.01.14 11:51

В основе ОРС лежит технология COM, которая использует таблицу виртуальных функций для реализации интерфейсов, а это по сути C++.
VB работает с COM серверами через ф-ию Dispatch, т.е. не напрямую, т.к. интерпретируемые языки не имеют таблицы виртуальных функций.
ОРС foundation, насколько мне помнится, была создана в году 94, тогда С# не существовало, а когда он появился, то использовался совместно с .NET. которая начала вытеснять COMовские подходы и очень удачно,потому C# также работает с COM через маршалинг, опять же не напрямую.
Поэтому OPC сервера (будучи COM компонентами) и реализуются на С++, хотя есть SDK и на С#

OPC UA же, которая по сути реализуется на базе служб, уже налегает на C# и VB, т.к. реализация на С++ мягко говоря проблематична.

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

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Ivan Zhukov 
Дата:   28.01.14 12:46

Wut писал(а):

> В основе ОРС лежит технология COM

Да, вот такие ужасы.
Как вообще можно было допускать такое безумие -
универсальный промышленный стандарт завязывать
на закрытую операционку монополиста, причём
совсем из другой сферы (десктопные офисные и
домашние системы для персоналок)?

Адрес этого сообщения    Ответить на это сообщение
 
 RE: Создание OPC DA клиентов
Автор: ИА 
Дата:   28.01.14 13:39

> Wut писал(а):
>
> > В основе ОРС лежит технология COM
>
> Да, вот такие ужасы.
> Как вообще можно было допускать такое безумие - универсальный
> промышленный стандарт завязывать на закрытую операционку
> монополиста, причём совсем из другой сферы (десктопные офисные и
> домашние системы для персоналок)?

Ну, все же серверные операционки у Майкрософта с самого начала были
приличные.
А какие у вас в эту середину 90-х были альтернативы? Linux был в пеленках,
Unix - дорог. Межплатформенная CORBA, которая конкурировала с COM, была
тяжелее в реализации, весе и т.п. на порядок, не имела полноценной поддержки
в виде готовых библиотек, а перспективы использования стандарта на x-машинах
были по тем временам призрачны.

Аблин Илья
Компания ИнСАТ
+7-495-989-22-49
ablin@xxxxx.xx
www.insat.ru
www.masterscada.ru

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Wut 
Дата:   28.01.14 13:50

В свое время большинство производителей ПО верхнего уровня для АСУТП сделали ставку на Майкрософт и в принципе они-то сейчас и на коне, и они же в OPC foundation, поэтому и универсализация была исключительно для них, по большому счету.
И мое скромное мнение, что слишком их уж ругают, у них есть вполне рациональные и удобные моменты и их много

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

Адрес этого сообщения    Ответить на это сообщение
 
 RE: Создание OPC DA клиентов
Автор: ИА 
Дата:   28.01.14 13:58

> В свое время большинство производителей ПО верхнего уровня для
> АСУТП сделали ставку на Майкрософт и в принципе они-то сейчас и на
> коне, и они же в OPC foundation, поэтому и универсализация была
> исключительно для них, по большому счету.
> И мое скромное мнение, что слишком их уж ругают, у них есть вполне
> рациональные и удобные моменты и их много

Вы все же, вероятно, тех времен не застали. Альтернатива по факту
отсутствовала.

Аблин Илья
Компания ИнСАТ
+7-495-989-22-49
ablin@xxxxx.xx
www.insat.ru
www.masterscada.ru

Адрес этого сообщения    Ответить на это сообщение
 
 RE: Создание OPC DA клиентов
Автор: Wut 
Дата:   28.01.14 14:09

>Альтернатива по факту отсутствовала.
Кто ж отрицает, потому и сделали ставку на Майкрософт

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

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: ldar 
Дата:   28.01.14 14:33

Спасибо. А никто не встречал примеров по реализации OPC UA на C# или доку, я понимаю он условно закрытый протокол, но все же? С чего мне начать?  Думаю мож лучше в OPC UA лучше начать копаться, чем ворошиться в старом OPC DA который вытесняется OPC UA.

Адрес этого сообщения    Ответить на это сообщение
 
 RE: Создание OPC DA клиентов
Автор: Ivan Zhukov 
Дата:   28.01.14 14:41

ИА писал(а):

> Ну, все же серверные операционки у Майкрософта с самого начала были
> приличные.
> А какие у вас в эту середину 90-х были альтернативы? Linux был в пеленках,
> Unix - дорог. Межплатформенная CORBA, которая конкурировала с COM, была
> тяжелее в реализации, весе и т.п. на порядок, не имела полноценной поддержки
> в виде готовых библиотек, а перспективы использования стандарта на x-машинах
> были по тем временам призрачны.

А зачем вообще нужна привязка к определённой операционке?
Написали бы например сетевой протокол поверх TCP/HTTP или UDP
(как сделан DNS). Подключился к сокету - выдал команду, получил
ответ. Модбас же независим от ОС.

Адрес этого сообщения    Ответить на это сообщение
 
 RE: Создание OPC DA клиентов
Автор: ИА 
Дата:   28.01.14 14:42

> -----Original Message-----
> From: asutp@googlegroups.com [mailto:asutp@googlegroups.com] On
> Behalf Of ldar
> Sent: Tuesday, January 28, 2014 2:33 PM
> To: ASUTP@googlegroups.com
> Subject: Re: [asutp] Создание OPC DA клиентов
>
> Спасибо. А никто не встречал примеров по реализации OPC UA на C# или
> доку, я понимаю он условно закрытый протокол, но все же? С чего мне
> начать?
> Думаю мож лучше в OPC UA лучше начать копаться, чем ворошиться в
> старом OPC DA который вытесняется OPC UA.

На OPC Foundation есть. Только подскажите, где вытесняется. Вот мы
поставляем несколько тысяч SCADA-систем в год. И всех спрашиваем уже не один
год подряд :  "Нам пора уже включить в ближайшую версию OPC UA клиента?", но
все отвечают: "Нет, у нас серверов таких пока нет и не ожидается."


Аблин Илья
Компания ИнСАТ
+7-495-989-22-49
ablin@xxxxx.xx
www.insat.ru
www.masterscada.ru

Адрес этого сообщения    Ответить на это сообщение
 
 RE: Создание OPC DA клиентов
Автор: ldar 
Дата:   29.01.14 07:18

Извиняюсь не верно выразил мысль. имел ввиду, что OPC UA с большими перспективами.

Адрес этого сообщения    Ответить на это сообщение
 
 RE: Создание OPC DA клиентов
Автор: ИА 
Дата:   29.01.14 13:10

> Извиняюсь не верно выразил мысль. имел ввиду, что OPC UA с большими
> перспективами.

Да, по содержанию стандарта так и есть, он универсальный, кроссплатформенный
и т.п. Но стандарт существует давно, а его внедрения практически не видно.
Коллеги - вопрос ко всем: есть ли у вас примеры внедрений, планируется ли.
Если есть сознательное отношение к этой теме (положительное или
отрицательное), то какое?

Аблин Илья
Компания ИнСАТ
+7-495-989-22-49
ablin@xxxxx.xx
www.insat.ru
www.masterscada.ru

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Serge 
Дата:   29.01.14 23:02

на C# написать сервер возможно под любой протокол: DA, HDA, UA, AE.

По сравнению с C++ (при сравнимых человеко-затратах):
 производительность будет тажа,
 памяти будет есть раза в 3 больше,
 падать будет раз в 5 реже

SDK под .net есть на самом opc foundation
.net-либы (с описанием com-интерфейсов), вроде, раздают даже и без членства

--
Best regards,
 Serge                            mailto:legar@xxxx.xx

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: ldar 
Дата:   31.01.14 18:03

А кто нибудь использовал Light OPC? есть примеры?

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Ирина Чаплина 
Дата:   25.12.14 09:52

Всем добрый день!

Откликнитесь пожалуйста, кто уже успел поработать с спецификацией OPC UA? Она лучше, чем DA?

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Алексей Угрюмов 
Дата:   25.12.14 11:01

> Откликнитесь пожалуйста, кто уже успел поработать с спецификацией OPC UA? Она лучше, чем DA?
Она другая

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Ирина Чаплина 
Дата:   25.12.14 11:03

Алексей, а Вы со спецификацией OPC UA работали уже ?

Адрес этого сообщения    Ответить на это сообщение
 
 RE: Создание OPC DA клиентов
Автор: ИА 
Дата:   25.12.14 15:12

Она кроссплатформенная и универсальная.  Обеспечивает безопасную передачу данных через Интернет. И т.п. К DA она относится также, как ракета к телеге.

Аблин Илья
Компания ИнСАТ
ablin@xxxxx.xx
www.insat.ru
www.masterscada.ru

> -----Original Message-----
> From: asutp@googlegroups.com [mailto:asutp@googlegroups.com] On
> Behalf Of Ирина Чаплина
> Sent: Thursday, December 25, 2014 9:53 AM
> To: ASUTP@googlegroups.com
> Subject: Re: [asutp] Создание OPC DA клиентов
>
> Всем добрый день!
>
> Откликнитесь пожалуйста, кто уже успел поработать с спецификацией
> OPC UA?
> Она лучше, чем DA?
>
> ----
> E-mail автора: irinkin_st@xxxx.xx
> (по данным регистрации на iprog.pp.ru/forum)
>
> --
>
>

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Алексей Угрюмов 
Дата:   25.12.14 15:42

> Алексей, а Вы со спецификацией OPC UA работали уже ?
Ирина, спасибо. Работа у меня уже есть. Даже несколько. С этим бы справиться.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Ирина Чаплина 
Дата:   25.12.14 15:50

Алексей,понимаю.  А может можете кого-нибудь порекомендовать?  :)))
З/п выше среднего по рынку.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: Bill Gilbert 
Дата:   11.06.19 09:07

Добрый день,
Изучил труды Федоренко Денис в теме "Создание OPC DA клиентов" по написанию DA клиента, огромное спасибо, очень помогло, но есть две вещи которые ломают мой мозг, если кто может подскажите, написал клиента на C#, использовал библиотеку переделанную Денисом OPCProx.dll, все работает, НО !
1. при синхронном чтении больших массивов (любых массивов) командой pSyncIO.Read(tagOPCDATASOURCE.OPC_DS_DEVICE, dwCount, ref hServers[0], out iptrItemState1, out iptrErrors1); Не очищается использованная неуправляемая память !, жрет и жрет,пока не достигнет 1.6 Гб, конечно я использовал команды очищения памяти после чтения,
  Marshal.FreeCoTaskMem(iptrItemState1);
  Marshal.FreeCoTaskMem(iptrErrors1);
 но они не работают должным образом,

 я видел пост Автора Busha, от Дата:   21.10.13 18:42
где автор описывает похожую проблему но он использует строковые переменные и требовалась дополнительная очитка командой SysFreeString(aItemValue[i].vDataValue.bstrVal); к тому же автор пишет на C++ в котором он легко обращается к памяти как массиву "aItemValue[i]", в C# я так не могу обратиться к памяти и главный вопрос как очистить из неуправляемой памяти "out iptrItemState1" прочитанные массивы. они так и остаются и не очищаются, и при новом чтении добавляются новые в памяти.

2. Вопрос, кто знает, как при асинхронном чтении например методом OnDataChange(uint dwTransid, uint hGroup, int hrMasterquality, int hrMastererror, uint dwCount, ref uint phClientItems, ref object pvValues, ref ushort pwQualities, ref _FILETIME pftTimeStamps, ref int pErrors) извлечь из полученного объекта "ref object pvValues" (или из памяти) несколько прочитанных массивов например типа double, при попадании в метод OnDataChange, я вижу количество прочитанных массивов dwCount=10,я вижу в "pvValues" только первый массив из 10,его я могу забрать, как забрать остальные массивы, ведь они там есть ?

я так понимаю на C# никто клиенты OPC DA особы на пишет, для него нужно что-то допиливать в библиотеке OPCProxy.dll, и всё проще на C++ ?

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: SuperMik 
Дата:   23.06.19 17:01

Всем здравствуйте!

Никак не выходит скачать документацию по ссылке первого поста.Такое ощущение, что
http://depositfiles.com/files/6w9ttbhwt
уже не существует.
Буду очень благодарен за помощь.

С уважением.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: sewet 
Дата:   06.10.20 09:07

да, такое бывает когда много лет проходит, ссылка https://yadi.sk/d/cVbnN7LaXGiMjg

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: glink 
Дата:   14.01.22 14:12

Добрый день.
Возникла проблема с чтением нескольких тегов в одной группе. При попытке чтения массив tagOPCITAMSTATE заполняется не полностью, если быть более точным, то при чтении 30 объектов заполняется каждый 5, остальные остаются пустыми. Делал по аналогии с документацией, кроме того, что для синхронного чтения добавлял в группу несколько тегов. Используемый OPCServer KepwareEX v6.0. Ниже приведен фрагмент кода с чтением:
---------------------------------------------
hRes = m_pOPCServer->AddGroup((LPWSTR)L"OPCCLIENTAPPGROUP", bActive,
        updateRate, 1, NULL, NULL, 0, &m_hGroup, &updateRate,
        (GUID*)&__uuidof(IOPCItemMgt), (IUnknown**)&pItemMgt);

    if (FAILED(hRes)) {
        //ОШИБКА
    }
    tagOPCITEMDEF* pItem = new tagOPCITEMDEF[dwCount];
    tagOPCITEMRESULT *pResult = NULL;
    HRESULT *pErrors = NULL;
    for (int i = 0; i < dwCount; i++) {
        pItem[i].szItemID = (LPWSTR)elements[i].name.c_str();
        pItem[i].szAccessPath = NULL;
        pItem[i].bActive = TRUE;
        pItem[i].hClient = 0;
        pItem[i].vtRequestedDataType = VT_EMPTY;
        pItem[i].dwBlobSize = 0;
        pItem[i].pBlob = NULL;

    }
    hRes = pItemMgt->AddItems(dwCount, pItem, &pResult, &pErrors);


    CoTaskMemFree(pErrors);
    IOPCSyncIO* pSyncIO = NULL;
    IID IID_IOPCSYNCIO = __uuidof(IOPCSyncIO);
    hRes = pItemMgt->QueryInterface(IID_IOPCSYNCIO, (void**)&pSyncIO);
    tagOPCITEMSTATE* pItemValue = NULL;
    Sleep(50);
    hRes = pSyncIO->Read(OPC_DS_CACHE, dwCount, &pResult->hServer, &pItemValue, &pErrors);
---------------------------------------------

Если у кого-то была подобная проблема или вы знаете ее решение, был бы очень признателен, получить ее решение.

Если данный вопрос не относится к данному посту, просьба написать об этом.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Создание OPC DA клиентов
Автор: glink 
Дата:   14.01.22 14:31

Прошу прощения, написал изначально вопрос не в ту ветку

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


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

Рейтинг@Mail.ru