Вход

Просмотр полной версии : С чего начать попытку соединить OPC Сервер и программу на C#?



nk_lg
22.06.2017, 17:27
Добрый день.
Ситуация такая: есть работающий пресс (управляется oven plk 150U). Контроллер запрограммирован, исходник программы есть. Очень грубо говоря, в самом контроллере обрабатывается ход вверх, ход вниз и стоп. Есть пульт оператора с соответствующими кнопками.
Далее, есть программа на ПК (без исходников) в которой реализована визуализация тех.процесса и возможность задания последовательности действий, входных и аварийных условий, и т.д.

Контроллер к ПК подключен по Tcp/Ip (Level2), IP контроллера: 192.168.0.50, порт: 1200.
Скриншот конфигуратора: https://yadi.sk/i/unVsXLD23KMvD7
Версия: https://yadi.sk/i/FHzM0q9w3KMvF9
Испольщуемый CoDeSysOPC.ini: https://yadi.sk/i/3R0A0ZZP3KMvJ7

При запуске программы на ПК на нём же "стартует" OPC сервер, программа связывается с контроллером и работает.
Важно: на текущий момент времени ВСЁ работает! Бекапы сделаны.

Далее: программа на ПК не удовлетворяет текущим требованиям (устарел алгоритм работы). Стоит задача - написать свою программу, которая будет подключаться к контроллеру и работать по "новым" алгоритмам.

А теперь проблемы:
1) Не нашел описания как вообще правильно подключаться к OPC и работать по выбранному способу связи (Tcp/Ip Level2). Встречаю много примеров для работы по MobBus и через COM-порт, но вроде бы у меня не тот случай?
В найденных же мной примерах люди используют owen_io.dll, однако на текущий момент времени эта библиотека не доступна для скачивания с этого сайта. Причин не знаю, возможно этот подход устарел, или библиотека стала коммерческой - не знаю, но раз убрали файл, значит этим путём лучше не ходить... вопрос: а каким тогда "ходить"?

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

Уважаемые знатоки, приведите пожалуйста в пример 5-10 рабочих(!) строк на C#, при помощи которых можно создать соединение с OPC-сервером!!

Теоретически есть еще вариант соединения непосредственно через socket'ы:

TcpClient clientSocket = new TcpClient();
try{
clientSocket.Connect("192.168.0.50", 1200);
}catch{
MessageBox.Show("Нет соединения с plk!");
}
if (clientSocket.Connected){
MessageBox.Show("Connected!");
}
Завтра попаду на место - проверю, но даже если такой метод сработает - не понятно как потом быть с этим соединением: откуда что читать, куда что писать?!

Поделитесь информацией, пожалуйста!

capzap
22.06.2017, 17:36
Вам, в одном из вариантов нужен клиент ОРС, чтоб подключиться к localhost ОРС-серверу КДС, ни по какому АйПи адресу контроллера стучаться не надо, если конечно не умеете писать свой сервер, только тут явно не в пять строчек обойдется
Лучший вариант для Вас в плк "набить" нужную конфигурацию модбасТСР и под неё то в инете полно примеров работы на любых языках

nk_lg
22.06.2017, 17:46
Вам, в одном из вариантов нужен клиент ОРС, чтоб подключиться к localhost ОРС-серверу КДС, ни по какому АйПи адресу контроллера стучаться не надо, если конечно не умеете писать свой сервер, только тут явно не в пять строчек обойдется
Лучший вариант для Вас в плк "набить" нужную конфигурацию модбасТСР и под неё то в инете полно примеров работы на любых языках

Тут такое дело: программа в plk сейчас настроена и работает с программой на ПК. Если я внесу изменения в программу на plk, или в его конфигурацию - "старая" программа перестанет работать, а новой у меня пока что совсем нет, что есть плохо.

Старая программа не удовлетворяет текущим задачам, но не по всем пунктам, кое-что из неё выжать таки получается, поэтому "рушить" взаимосвязь контроллера с имеющейся программой до того, как я полностью напишу свою рабочую замену - очень и очень не хотелось бы!

Судя по тому, что я читаю - да, мне действительно нужен пример OPC клиента, соединяющегося с овновским OPC-сервером!
Пока что всё, найденное мной по этой теме, упирается в не существующую owen_io.dll.

capzap
22.06.2017, 18:21
с каким овеновским, Вы же сами скрин кидаете на CoDeSysOPC, порт ethernet 1200, это связь самой КДС с контроллерами, поддерживающими её. Овеновский проткол обмена предназначен только для соединения через последовательные порты, порт модбас это 502


Тут такое дело: программа в plk сейчас настроена и работает с программой на ПК. Если я внесу изменения в программу на plk, или в его конфигурацию - "старая" программа перестанет работать, а новой у меня пока что совсем нет, что есть плохо.
Вот зачем Вы беретесь за это дело если в нем вообще ни чего не понимаете, начните с изучения этих документов http://www.owen.ru/catalog/codesys_v2/51162335

melky
22.06.2017, 20:00
а вот показали бы программу на ПК, а то может там просто визуализация CodeSys с кнопками и прочим ?

nk_lg
04.07.2017, 12:02
Прошу прощения, пропал немного, дальше по пунктам:

с каким овеновским, Вы же сами скрин кидаете на CoDeSysOPC, порт ethernet 1200, это связь самой КДС с контроллерами, поддерживающими её. Овеновский проткол обмена предназначен только для соединения через последовательные порты, порт модбас это 502

Плюс вот это:

Вам, в одном из вариантов нужен клиент ОРС, чтоб подключиться к localhost ОРС-серверу КДС, ни по какому АйПи адресу контроллера стучаться не надо
- Огромнейшее спасибо!!! ))
Действительно - в голове была совсем каша, так как не сталкивался ранее ни с контроллерами, не с COM-объектами. Почему-то решил, что раз "клиент-сервер", то сокеты и "всё как обычно", ан - нет! )))
Присмотрелся повнимательнее, ознакомился с соответствующей литературой - появилось больше понимания происходящего. Всем, кто как и я "с нуля" будут пытаться нащупать "дно" и разобраться что же такое OPC-сервер и что есть клиент для него, мне очень помогла методичка от Федоренко Д.Ю. (https://yadi.sk/i/ZicTKCef3KhEGT)


Вот зачем Вы беретесь за это дело если в нем вообще ни чего не понимаете
- Как бы сказать по мягче: денег нет, но мы держимся... что правда - держаться сил всё меньше, но мы пока еще стараемся. Если по сути: доработка старой программы нужна скорее нам "лично". Сейчас тупо вручную управляем циклами прессования (ловим "начало", чуть ли не с линейкой замеряем "глубину сжатия", по полученным данным - рисуем графики). Это утомляет и отвлекает от другой повседневной. Захотелось "облегчить" работу и попытаться автоматизировать, тем более, что на первый взгляд - тут "всё просто".


а вот показали бы программу на ПК, а то может там просто визуализация CodeSys с кнопками и прочим ?
- Могу кинуть Вам в личку скрины и архив с программой. Она запускается на "любом" виндовом компьютере без установки скады или кодесиса, запускаемый файл имеет расширение ".exe". Весит вся папка с программой чуть больше 10ти метров.

Тут, по моему, кто-то предлагал взяться и написать нужную программу за "адекватные деньги" (сейчас не вижу этого комментария)? Я пока что с одной стороны - не уверен в своих силах, что смогу дотянуть этот проект до реально требуемого функционала, с другой стороны - совершенно не ориентируюсь, сколько может составлять для такой программы "адекватная цена"?
Если кто-то возьмется "оценить" - постучитесь, пожалуйста, мне на почту: nk.pochta@gmail.com, я скину архив с имеющейся программой и напишу, что именно в ней не устраивает и "как надо". Спасибо и sorry, если такой просьбой нарушил какие-то внутренние правила этого форума! ))

PS. Еще раз огромнейшее спасибо to capzap за наставление на путь истинный! Я еще очень долго пытался бы разобраться с "сетевым протоколом" и "достучаться" до данных, тем более что мой же пример из первого сообщения оказался "рабочим", и "соединение напрямую" - устанавливается без проблем!! )))))

capzap
04.07.2017, 12:28
если Вам требуется заменить старую, не поддерживаемую программу, то все исходные данные нужно брать с ОРС сервера, конфиг его Вы вроде выкладывали и на основе этих данных писать свою программу, в плк для этого лезть не нужно

nk_lg
04.07.2017, 12:38
если Вам требуется заменить старую, не поддерживаемую программу, то все исходные данные нужно брать с ОРС сервера, конфиг его Вы вроде выкладывали и на основе этих данных писать свою программу, в плк для этого лезть не нужно
- Да, спасибо, это я уже понял! Даже примерно понял где/как/что (тут уже спасибо методичке - там с почти рабочим примером, который немного правится и становится вообще рабочим).
Немного смущают только темпы, с которыми я продвигаюсь в решении этого вопроса... хотя - всё относительно! ))