Стартовая страница › Форумы › Разработка и интеграция › Создание каналов КП в Администарторе
- В этой теме 63 ответа, 4 участника, последнее обновление 4 года, 10 месяцев назад сделано Mikhail.
-
АвторСообщения
-
23.05.2019 в 09:47 #11837RomirosУчастник
Примеров открытых Kp достаточно. Взаимодействие коммуникатора с сервером довольно простое. Вся сложность драйвера как раз в общении с конкретным устройством. Выносите всю эту логику в отдельные файлы, а KpView и KpLogic должны быть максимально простыми и почти одинаковыми для разных драйверов(понятно что отличия всегда будут).
Но так проще повторно использовать исходный код в похожих драйверах.23.05.2019 в 09:58 #11838manjey73УчастникДело не в том, что примеров достаточно, а в том, чтобы их понять надо быть программистом, который без лазанья в MSDN понимает код. А чтобы лезть в MSDN надо понимать что в нем надо найти, чтобы изучить.
Многие таковыми не являются.
Плюс на примере Modbus там перекрестных ссылок между cs для меня очень много, чтобы вообще сохранилось понимание процесса работы драйвера 🙂Как раз общение программы с прибором это фигня при наличии документации на протокол от производителя. Особенно если это последовательный интерфейс, где тупой запрос-ответ. А вот совместить опрос прибора со Scada оказалось куда сложнее.
Например мне непонятно, почему нельзя создать Группу тегов и запихивать в нее теги в любой момент времени, просто указав в какую группу, надо обязательно делать это последовательно. Я понимаю, что возможно так код лаконичнее, но для взаимодействия между опросом прибора и передачей в Scada эта простота ядра сильно все усложняет.По этому очень бы не помешал комментированный подход на примерах. Чтобы понимать куда лезть в MSDN для изучения тех или иных функций, понимать как работает тот или иной механизм в Коммуникаторе. Как можно обойти те или иные ограничения, связанные с этим.
- Этот ответ был изменен 4 года, 11 месяцев назад от manjey73.
23.05.2019 в 10:06 #11840manjey73Участникчисто ремарка для понимания. Если бы мне сказали, что в возрасте за 40 я начну программировать на языках высокого уровня, я бы покрутил у виска 🙂
23.05.2019 в 10:14 #11841manjey73УчастникОбъясните как подключиться к процессу в Студии ?
Я вижу только ScadaAdmin.exe. В окне вывода вижу только KpPulsarT.dll Символы не загруженыБольше ничего.
23.05.2019 в 10:51 #11842RomirosУчастник1. Коммуникатор должен быть в работе
2. В студии в в панели меню Конфигурация решения — Debug
3. В вашем коде ставите точку останова в интересующем Вас месте (главное чтобы выполнение кода до этой точки дошло)
4. В студии в меню выбираете Отладка — Присоединиться к процессу
5. Далее выбираете списке ScadaComm.svc.exe. Если его нет поставьте галочку показывать процессы всех пользователей.
6. Нажимаете присоединиться
7. Получаете останов кода, смотрите значения переменных, исключения и т.д. делаете пошаговое выполнение кода.Например мне непонятно, почему нельзя создать Группу тегов и запихивать в нее теги в любой момент времени, просто указав в какую группу, надо обязательно делать это последовательно.
Этот момент мне не понятен. Вы на стадии конфигурации создаете теги и группы и привязываете к ним номера каналов. Вы создаете группы тегов, теги рассовываете их по группам. Потом выполняете InitKpTags(List<>). Эта команда и формирует список тегов. До её выполнения делайте с тегами что хотите. Если что-то меняется выполните её ещё раз.
Если логика работы такая, что проинициализировать список тегов №1, считать их с прибора получить допустим версию или тип прибора и в зависимости от этого подсунуть драйверу либо список тегов №2 либо №3 и проинициализировать его — это не правильно. Как тогда пользователю привязывать каналы? Список должен быть готов до запроса к прибору на этапе формирования конфига.
Это мое мнение. Или я Вас неправильно понимаю.23.05.2019 в 11:08 #11844manjey73УчастникНе совсем понял почему я должен подсоединяться к Scada.Comm.svc ? это непосредственно Коммуникатор в запущенном режиме.
Мне нужно подключиться к Администратору, когда он читает список тегов для создания каналов. Это к чему надо подключиться ?Вот-Вот, пришлось создавать сперва некий список, используя словарь, потом уже выполнять код привязки тегов до загрузки линии связи. Может оно так работает конечно, сильно не вдавался в подробности, но это ведь куча манипуляций
23.05.2019 в 11:31 #11846TawУчастникХороший пример для написания драйвера для Rapid scada был бы очень полезен. Реально не хватает справочного материала.
23.05.2019 в 11:34 #11847manjey73УчастникСтранно, нифига не остановился на моем коде.
А вот на простом из KpSimulatorView.cs примера остановился. То есть вошел в функцию
public override KPCnlPrototypes DefaultCnls
{
get (тут остановился, а на моем даже в нее не заходит)Чего не так непонятно…
23.05.2019 в 11:46 #11849RomirosУчастникЧто-то уже в дебри полезли. Открывайте исходник Администратора и смотрите там этот момент. Это внутренние механизмы Scada. Если у вас не создаются каналы, ошибку ищите в процессе ScadaCommSvc, в методе public override KPCnlPrototypes DefaultCnls Вашей dll. Поставьте точку останова внутри этого метода и смотрите что у Вас происходит со списком inCnls .
23.05.2019 в 11:49 #11850RomirosУчастникМожет какая-нибудь галочка «Использовать сервер» в коммуникаторе не стоит?
23.05.2019 в 11:58 #11851manjey73УчастникТак проблема в том, что в эту функцию и не заходит на том коде, который я хочу исполнить, А если вместо этого кода делаю простой пример с записью 3-х сигналов, то в функцию заходит и все выполняет.
Однако я смотрю пример KpModbus там тоже и чтение шаблона и переборка каналов через foreach в общем более глобально чем у меня но ведь работает…
А тут даже в нее не попадает, даже на вход, ладно бы в ней ошибки были
23.05.2019 в 12:12 #11852RomirosУчастникГалочки стоят использовать сервер? Может это влияет.
Если хотите, бросьте KpView мне на почту, я посмотрю после обеда.23.05.2019 в 12:57 #11853manjey73УчастникЕще раз, Коммуникатор может быть даже остановлен, я к ScadaAdmin подключаюсь.
Сервис — Создание каналов.
В коде сделал простой вариант с ручным определением 3-х каналов — РАБОТАЕТ
Или с загрузкой шаблона из файла — Даже не заходит в функцию…Пока предположений нет на что грешить, так как внутрь функции то оно должно было зайти…
23.05.2019 в 13:04 #11854manjey73УчастникА где смотреть переменные, когда идешь по шагам ? что в string например или в LIST ?
devTemplate = FileFunc.LoadXml(typeof(DevTemplate), filePath) as DevTemplate;
Администратор сломался на данной строке, при ее наличии не срабатывает точка останова на get{
public override KPCnlPrototypes DefaultCnls { get { // загрузка шаблона устройства string fileName = KPProps == null ? "" : KPProps.CmdLine.Trim(); if (fileName == "") return null; string filePath = Path.IsPathRooted(fileName) ? fileName : Path.Combine(AppDirs.ConfigDir, fileName); //devTemplate = null; devTemplate = FileFunc.LoadXml(typeof(DevTemplate), filePath) as DevTemplate; // создание прототипов каналов КП return myPrototypes(); }
Если команду чтения сериализации из xml закоментировать, то сработает точка останова, и далее по шагам string filename
if (filename == «»)string filePath проходят
Если далее строка активна с загрузкой из xml то даже в функцию не заходит…
Вот так от интересненько, все это работает в самом Коммуникаторе в Kp__Logic и нихрена не работает в Kp___View… Чудеса.
- Этот ответ был изменен 4 года, 11 месяцев назад от manjey73.
23.05.2019 в 13:16 #11856manjey73УчастникЯ так понимаю KPProps у меня пустой абсолютно, хотя вот с какого перепуга, если закомментировать строку чтения из xml создаются мои 3 канала ????
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.