Создание каналов КП в Администарторе

Стартовая страница Форумы Разработка и интеграция Создание каналов КП в Администарторе

Просмотр 15 сообщений - с 16 по 30 (из 64 всего)
  • Автор
    Сообщения
  • #11837
    Romiros
    Участник

    Примеров открытых Kp достаточно. Взаимодействие коммуникатора с сервером довольно простое. Вся сложность драйвера как раз в общении с конкретным устройством. Выносите всю эту логику в отдельные файлы, а KpView и KpLogic должны быть максимально простыми и почти одинаковыми для разных драйверов(понятно что отличия всегда будут).
    Но так проще повторно использовать исходный код в похожих драйверах.

    #11838
    manjey73
    Участник

    Дело не в том, что примеров достаточно, а в том, чтобы их понять надо быть программистом, который без лазанья в MSDN понимает код. А чтобы лезть в MSDN надо понимать что в нем надо найти, чтобы изучить.
    Многие таковыми не являются.
    Плюс на примере Modbus там перекрестных ссылок между cs для меня очень много, чтобы вообще сохранилось понимание процесса работы драйвера 🙂

    Как раз общение программы с прибором это фигня при наличии документации на протокол от производителя. Особенно если это последовательный интерфейс, где тупой запрос-ответ. А вот совместить опрос прибора со Scada оказалось куда сложнее.
    Например мне непонятно, почему нельзя создать Группу тегов и запихивать в нее теги в любой момент времени, просто указав в какую группу, надо обязательно делать это последовательно. Я понимаю, что возможно так код лаконичнее, но для взаимодействия между опросом прибора и передачей в Scada эта простота ядра сильно все усложняет.

    По этому очень бы не помешал комментированный подход на примерах. Чтобы понимать куда лезть в MSDN для изучения тех или иных функций, понимать как работает тот или иной механизм в Коммуникаторе. Как можно обойти те или иные ограничения, связанные с этим.

    • Этот ответ был изменен 4 года, 11 месяцев назад от manjey73.
    #11840
    manjey73
    Участник

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

    #11841
    manjey73
    Участник

    Объясните как подключиться к процессу в Студии ?
    Я вижу только ScadaAdmin.exe. В окне вывода вижу только KpPulsarT.dll Символы не загружены

    Больше ничего.

    #11842
    Romiros
    Участник

    1. Коммуникатор должен быть в работе
    2. В студии в в панели меню Конфигурация решения — Debug
    3. В вашем коде ставите точку останова в интересующем Вас месте (главное чтобы выполнение кода до этой точки дошло)
    4. В студии в меню выбираете Отладка — Присоединиться к процессу
    5. Далее выбираете списке ScadaComm.svc.exe. Если его нет поставьте галочку показывать процессы всех пользователей.
    6. Нажимаете присоединиться
    7. Получаете останов кода, смотрите значения переменных, исключения и т.д. делаете пошаговое выполнение кода.

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

    Этот момент мне не понятен. Вы на стадии конфигурации создаете теги и группы и привязываете к ним номера каналов. Вы создаете группы тегов, теги рассовываете их по группам. Потом выполняете InitKpTags(List<>). Эта команда и формирует список тегов. До её выполнения делайте с тегами что хотите. Если что-то меняется выполните её ещё раз.

    Если логика работы такая, что проинициализировать список тегов №1, считать их с прибора получить допустим версию или тип прибора и в зависимости от этого подсунуть драйверу либо список тегов №2 либо №3 и проинициализировать его — это не правильно. Как тогда пользователю привязывать каналы? Список должен быть готов до запроса к прибору на этапе формирования конфига.
    Это мое мнение. Или я Вас неправильно понимаю.

    #11844
    manjey73
    Участник

    Не совсем понял почему я должен подсоединяться к Scada.Comm.svc ? это непосредственно Коммуникатор в запущенном режиме.
    Мне нужно подключиться к Администратору, когда он читает список тегов для создания каналов. Это к чему надо подключиться ?

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

    #11846
    Taw
    Участник

    Хороший пример для написания драйвера для Rapid scada был бы очень полезен. Реально не хватает справочного материала.

    #11847
    manjey73
    Участник

    Странно, нифига не остановился на моем коде.
    А вот на простом из KpSimulatorView.cs примера остановился. То есть вошел в функцию
    public override KPCnlPrototypes DefaultCnls
    {
    get (тут остановился, а на моем даже в нее не заходит)

    Чего не так непонятно…

    #11849
    Romiros
    Участник

    Что-то уже в дебри полезли. Открывайте исходник Администратора и смотрите там этот момент. Это внутренние механизмы Scada. Если у вас не создаются каналы, ошибку ищите в процессе ScadaCommSvc, в методе public override KPCnlPrototypes DefaultCnls Вашей dll. Поставьте точку останова внутри этого метода и смотрите что у Вас происходит со списком inCnls .

    #11850
    Romiros
    Участник

    Может какая-нибудь галочка «Использовать сервер» в коммуникаторе не стоит?

    #11851
    manjey73
    Участник

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

    Однако я смотрю пример KpModbus там тоже и чтение шаблона и переборка каналов через foreach в общем более глобально чем у меня но ведь работает…

    А тут даже в нее не попадает, даже на вход, ладно бы в ней ошибки были

    #11852
    Romiros
    Участник

    Галочки стоят использовать сервер? Может это влияет.
    Если хотите, бросьте KpView мне на почту, я посмотрю после обеда.

    #11853
    manjey73
    Участник

    Еще раз, Коммуникатор может быть даже остановлен, я к ScadaAdmin подключаюсь.
    Сервис — Создание каналов.
    В коде сделал простой вариант с ручным определением 3-х каналов — РАБОТАЕТ
    Или с загрузкой шаблона из файла — Даже не заходит в функцию…

    Пока предположений нет на что грешить, так как внутрь функции то оно должно было зайти…

    #11854
    manjey73
    Участник

    А где смотреть переменные, когда идешь по шагам ? что в 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.
    #11856
    manjey73
    Участник

    Я так понимаю KPProps у меня пустой абсолютно, хотя вот с какого перепуга, если закомментировать строку чтения из xml создаются мои 3 канала ????

Просмотр 15 сообщений - с 16 по 30 (из 64 всего)
  • Вы должны авторизироваться для ответа в этой теме.