53 / 53 / 2
Регистрация: 30.05.2014
Сообщений: 83
|
||||||||||||||||
1 | ||||||||||||||||
OPC клиент (OPC_DA v2.05) для платформы NET12.10.2014, 22:35. Показов 39348. Ответов 51
Метки нет (Все метки)
Предлагаю следующую библиотеку для обмена данными с OPC сервером в приложении NET.
Библиотека "OPC_NET" представляет OPC клиент для платформы NET и предназначена для легкого обмена с любыми OPC серверами поддерживающими стандарт OPC_DA v2.05. Основана на SDK OpcNetApi организации OPC Foundation - разработчика стандарта. Данные для обмена объявляются в файле типа xlsx. Данные читаются и пишутся по именам заданным в этом файле. Пример работы: 1. Заполнение таблицы сигналов 2. Соединение с сервером
Скачать (исходник и мануал прилагаются):OPC_NET_RUS_V1.0.rar PS: буду благодарен, если кто поделится этим чудом - ".NET4.0(WCF)" от OPC Foundation (https://opcfoundation.org/deve... et-4-0-wcf). Сразу перепишу либу на новый лад. Изменения версии 1.11: - переделаны события изменения данных: удалены события конкретных типов и создано общее событие – содержащее информацию обо всех измененных переменных; - в классе Items добавлены несколько методов для коллекции объектов; - открыты перечисления для входных числовых значений; - переименованы некоторые объекты; Скачать (исходник и мануал прилагаются): OPC_NET_RUS_V1.11.rar Прошу добавить в заголовок темы, а то сам тему изменить не могу.
5
|
12.10.2014, 22:35 | |
Ответы с готовыми решениями:
51
OPC клиент для сохранения данных с OPC сервера ASP.net OPC клиент OPC DA клиент на библиотеках OPC Foundation Использование OPC-сервера от OPC Foundation (.NET) Клиент OPC DA для Quantum |
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,413
|
|
13.10.2014, 21:23 | 2 |
Сообщение было отмечено raxp как решение
Решение
я понимаю, что критиковать легче чем делать, но все таки:
-почему для хранения таблицы сигналов использован файл формата xlsx? если вы стремились к простоте и доступности почему не выбрали текстовый файл? вы думаете, что excel (причем старше 2007) стоит (должен стоять) на всех ПК и примитивен (распространен) как блокнот? на мой взгляд было бы неплохо дополнительно предусмотреть более примитивный альтернативный формат. -почему данные в xlsx-файле так структурированы? разве не логично было бы сделать всего один лист и четыре столбца - имя, адрес, тип и признак чтения/записи? excel позволяет легко ориентироваться в подобном перечне не окосев от висящих по бокам "лишних" таблиц которые выглядят на мой вкус не совсем естественно. единственный минус предложенного перечня необходимость ввода типа и признака, но автоматическое заполнение успешно решает эту проблему. -почему нельзя указать имя, адрес, тип и признак чтения/записи вручную (не при помощи таблицы сигналов, а путем вызова некой функции и передачи ей имени, адреса, типа и признака чтения/записи)? на мой взгляд было бы неплохо дополнительно предусмотреть такую возможность для тех кто хранит информацию о тегах в иных местах (специфических файлах своей программы, базах данных или внутри самой программы). в противном случае им придется генерировать xlsx-файл только потому что этого хочет библиотека, а не потому что он нужен. -почему теги хранятся в списках? я не пишу на .net но разве там нет как минимум чего-то наподобие map (это такая штука где элементы... как бы проиндексированы и поиск как таковой не требуется)? то есть зачем библиотеке просматривать весь список пытаясь найти тег с указанным именем если это можно было бы сделать гораздо быстрее? для одного двух тегов это не сыграет роли, но если их будет больше - зачем разбрасываться ресурсами на ровном месте? если все это магическим образом делает использованный объект-список значит я просто полез не в свой огород и прошу меня извинить. -аналогичная мысль о производительности возникает когда читается код в функции получающей обновленные данные построенный на switch ... case. наверное, реализовав перечень на базе map и просто доставая из него элемент по его имени мы получим большую скорость. -наблюдение философского плана - концепция при которой для доступа к тегам используются имена (строки) стимулирует человека делать ошибки. потому что сделать ошибку 1001 раз написав одну и туже строку которая никак не проверяется компилятором проще простого. если вместо имени будет использоваться серверный хэндл или что-то подобное (некий идентификатор) полученный при вызове некой функции в которую передается собственно имя, то ошибок наверное будет меньше (во всяком случае в области видимости). хотя размер исходного кода при интенсивных вызовах будет конечно больше. кроме того, возможно, было бы полезным указывать при вызове подобной функции еще и клиентский хэндл для возможности быстрого доступа к тегу на клиентской стороне при обратных вызовах. на самом деле это наблюдение почти повторяет путь которым пошли разработчики стандарта OPC - там тоже используются серверный и клиентский хэндл. все это - просто мысли в слух. ваша библиотека скорее всего была создана именно что бы приземлить стандарт. или это они сами себя так приземлили при выпуске порта на .net. не знаю. ---- если что не так прошу прощения. все это не печали ради, а исключительно в целях перфекционизма
2
|
53 / 53 / 2
Регистрация: 30.05.2014
Сообщений: 83
|
|
13.10.2014, 21:30 [ТС] | 3 |
спасибо. прислушаюсь. исправлю кое что.
1
|
1978 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
14.10.2014, 17:55 | 4 |
Tyiler, Круто! я не пишу под .нет, для opc-клиента это, имхо, бесполезная фича. Но последователям такой класс явно придется по нраву.
Как уже и говорилось - древовидную структуру было бы (имхо) удобно хранить в xml - ексель не очень хорош. Ну, и понадобятся классы для вычитки тегов из OPC для быстрой подвязки к серверу. Добавлено через 1 минуту ...скажем, вычитали все бенчи, отфильтровали по усатновленному признаку, и кладете в xml.
0
|
53 / 53 / 2
Регистрация: 30.05.2014
Сообщений: 83
|
|
21.10.2014, 20:46 [ТС] | 5 |
Изменения версии 1.1:
- добавлена возможность объявлять переменные с помощью текст файла; - добавлена возможность объявлять переменные с помощью xml файла; - добавлен другой вид таблицы xlsx объявления переменных; - добавлен класс «Items», который позволяет добавлять/удалять переменные напрямую и через xml документ, выгружать переменные в xml документ; - изменены внутренние структуры хранения данных для более быстрого поиска. Скачать (исходник и мануал прилагаются): OPC_NET_RUS_V1.1.rar Прошу добавить в заголовок темы, а то сам тему изменить не могу.
2
|
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,413
|
|
21.10.2014, 22:03 | 6 |
эх как широко душа развернулась)
-то что списки теперь являются словарями наверное хорошо и более естественно -не знаю возможно ли это в дотнете, но в плюсах я наполнял бы списки абстрактными объектами -если в списках будут абстрактные объекты не ясно зачем подписываться на события изменения данных только конкретного типа -если в списках будут абстрактные объекты не ясно зачем в событии изменения данных анализировать тип -наверное возврат массива изменившихся элементов был бы более производителен чем засыпание клиента кучей сообщений об изменении каждого элемента по отдельности -не могу представить людей которые хотели бы получать изменившиеся данные в виде XML файла, но может я просто не все знаю... может народ их в какой нибудь JSON или SOAP сует транзитом... хз -не ясно что мешает использовать в качестве типа какое-нибудь перечисление или константы вместо совершенно стерильных цифр 1 (R) и 2 (W) -структура файлов на любителя но тут я уже не буду повторяться) -чисто религиозный вопрос - мое понимание английского выворачивается от некоторых имен использованных в библиотеке. может я просто не в теме но *GetDataToXml почему то хочу назвать GetDataAsXml *GetStateConnect - GetConnectionState *RemoveOfName - RemoveByName *ConnectOpcServer - Connect (ведь мы и так знаем к какому объекту мы применяем данный метод и никаких других видов подключения мы вроде не предусматриваем) *CheckInputDataAtXml - CheckXmlCfgFile (хотя в первом названии тоже вроде как можно найти смысл, хз)
0
|
53 / 53 / 2
Регистрация: 30.05.2014
Сообщений: 83
|
|
21.10.2014, 22:36 [ТС] | 7 |
на этом она и остановится пожалуй.
ждем например тип bool, перем-е такого типа и получаем, привести труда не составит польз-лю решать, возможность предоставлена и такая. xml в этом плане лучше, чем была бы мной определенная структура, которую придется объявлять и иметь та же причина. чтобы польз-лю не пришлось создавать это перечисление в своем проекте, лишнее.. имхо ...... не знаю даже что сказать. похоже вы правы. красивое именование это искусство, я им пока не владею. даже не замечаю, когда пишу, вроде кажется все норм.. может с англицким не очень, поэтому...
1
|
1978 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
22.10.2014, 13:02 | 8 |
0
|
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
|
|||||||||||
08.12.2014, 09:22 | 9 | ||||||||||
Тоже буду очень благодарен если кто поделиться!
От себя добавлю пару строк: Получаем список OPC серверов установленных на машине Кликните здесь для просмотра всего текста
Выколупываем тэги выбранного OPC сервера (если сервер поддерживает данные манипуляции) Кликните здесь для просмотра всего текста
1
|
3 / 3 / 1
Регистрация: 18.12.2014
Сообщений: 74
|
||||||
11.08.2015, 14:54 | 10 | |||||
Tyiler, здравствуйте, поюзал вашу библиотеку, на локально компе всё хорошо, а с удалённым вылетает исключение из класса библиотеки OPCclient.cs
перепроверил все настройки ОС как на клиенте так и на сервере, бесполезно(((( м.б посветит меня кто нибудь, в какую сторону ещё можно покапать???
0
|
53 / 53 / 2
Регистрация: 30.05.2014
Сообщений: 83
|
|
11.08.2015, 15:03 [ТС] | 11 |
там в руководстве написано как настраивать для удаленного подключения, фаервол проверьте, может он не пускает. в общем настройка сети и DCOM. в программе можно не копаться.
в поисковике забейте "настройка DCOM" почитайте.
1
|
3 / 3 / 1
Регистрация: 18.12.2014
Сообщений: 74
|
|
11.08.2015, 15:24 | 12 |
Tyiler, воот, даже документацию проюзал дополнительную, суть знаете в чём, что в итоге то клиент конектится и считывает один раз, а дальше при изменении данных на сервере, он ссылается на событие DataChanged(((
я уже и группу создал и правила добавил, и DCOM везде где надо разрешил, всё перепроверил, реакции вообще ноль, а может это быть то что у меня студия express и она тупо ограничена где то в правах на запросы там или ещё что??? Добавлено через 5 минут Tyiler, всёёёё, починил, проблема была в том что на стороне сервера в DCOM нужно было указать запуск сервера под юзером на котором клиент!!!!
0
|
53 / 53 / 2
Регистрация: 30.05.2014
Сообщений: 83
|
|
11.08.2015, 15:29 [ТС] | 13 |
да..помню. неприятная такая штука с этим юзером.
0
|
4 / 4 / 0
Регистрация: 17.05.2011
Сообщений: 262
|
|
14.10.2015, 13:01 | 14 |
Tyiler, привет. Как доработать исходник, чтобы реализовать IOPCommon::SetClientName ?
0
|
53 / 53 / 2
Регистрация: 30.05.2014
Сообщений: 83
|
|
14.10.2015, 16:23 [ТС] | 15 |
ну.. тут уже ничего не скажу. уже год как с контроллерами не имею дела. и орс тоже.. забыл как страшный сон.
0
|
2 / 2 / 1
Регистрация: 21.11.2015
Сообщений: 58
|
|
09.03.2016, 15:36 | 16 |
Tyiler, волею судьбы (шефа) вынужден дописать к моей новой программе OPC клиента на c#. Нашёл Вашу тему, начал пользоваться и всё вроде пошло как по маслу. Но в один не самый прекрасный момент прога начала выдавать сообщение:
и на запрос списка серверов и на подключение к конкретному серверу с которым всё поначалу работало. При этом Terravic Visual OPC Validator все сервера видит, подключается, меняет переменные. Если вы понимаете, что это такое, подскажите пожалуйста. Пробовал отключать антивирус, брандмауэр, дважды переустановил OPC Core Component из вашей сборки. Не помогает.
0
|
53 / 53 / 2
Регистрация: 30.05.2014
Сообщений: 83
|
|
09.03.2016, 16:06 [ТС] | 17 |
выше было написано.
попробуйте, может у вас тоже самое. кроме переустановки Core Component (которую вы и так делали уже) ничего не могу сказать. в ошибке написано - что COM не зареган, они регаются как раз при установке Core Component, те.. смотрите что сделали такое что перестало работать.
1
|
2 / 2 / 1
Регистрация: 21.11.2015
Сообщений: 58
|
|
09.03.2016, 16:29 | 18 |
Tyiler, добрый день! Но у меня сервер то локальный, именно для того, чтобы не пользоваться DCOM. Сервер видит переменные контроллера, сторонний клиент видит переменные сервера. А я не вижу с такой ошибкой. Я ни чего не делал, автоматически обновилась винда и всё.
0
|
53 / 53 / 2
Регистрация: 30.05.2014
Сообщений: 83
|
|
09.03.2016, 16:44 [ТС] | 19 |
хм.. ну да. с локальным никаких проблем не должно быть.
1
|
2 / 2 / 1
Регистрация: 21.11.2015
Сообщений: 58
|
|
09.03.2016, 17:38 | 20 |
Tyiler, спасибо! Буду копать дальше.
0
|
09.03.2016, 17:38 | |
09.03.2016, 17:38 | |
Помогаю со студенческими работами здесь
20
OPC UA Клиент для работы с TeslaScada2 в Debian Клиент для OPC сервер Kepware и удаленное подключение Выпущен официальный ICQ-клиент для платформы Android Delphi8 для платформы .NET Разработать оконное приложение для платформы .NET Посоветуйте лабораторные для изучения C# и платформы .Net Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |