Методы драйверов v6

  • В этой теме 34 ответа, 4 участника, последнее обновление 2 года назад сделано Mikhail.
Просмотр 15 сообщений - с 16 по 30 (из 35 всего)
  • Автор
    Сообщения
  • #22708
    manjey73
    Участник

    Сейчас в таблице Коммуникатора Номер и Код

    я могу управлять Номером ? Менять его, как менял ранее ?

    #22709
    manjey73
    Участник

    Могу ли я добавить свой формат в добавление к существующим в TagFormat ?

    #22715
    Mikhail
    Модератор

    Нашел причину такого поведения, вопрос выше в самом начале в силе..

    Какой?

    При запуске опроса какие методы и в какой последовательности исполняются в Версии 6

    Ссылка

    OnAddedToCommLine() — теперь нет, так понимаю вместо него InitDeviceTags() или с оговорками ?

    Создание тегов должно быть в InitDeviceTags

    Сейчас в таблице Коммуникатора Номер и Код
    я могу управлять Номером ? Менять его, как менял ранее ?

    Уточните, как меняли ранее?

    Могу ли я добавить свой формат в добавление к существующим в TagFormat ?

    Можете создать свой формат new TagFormat(…). Если он используется часто, то записать его в отдельную константу static readonly внутри своего класса DeviceLogic, например.

    #22717
    manjey73
    Участник

    Уточните, как меняли ранее?

    tagGroup.KPTags.Add(new KPTag(МОЙ НОМЕР, dAct.Value.OuVal.ValName));

    МОЙ НОМЕР как раз и был номером сигнала в таблице и в случае исключения из списка номер никогда не менялся, пока я сам его не поменяю. Он же был Номером сигнала, передаваемым в cmdNum. Вот по этой части не помешало бы какого-то пояснения, как теперь со всем этим быть? Ранее обходили индексную нумерацию обманом, а как теперь? Так же в другой теме спрашивал, а что если код «DO» пользователь сменить на «DO1» — команда перестанет приниматься?

    С порядком я понял уже, когда увидел, что в старте линии у меня не корректно рассчитывалась CRC, так как параметры по ней у меня считывались из шаблона, который как раз в InitTag запихнул. Вопрос и был связан с последовательностью и какие методы изменились.

    • Этот ответ был изменен 2 года назад от manjey73.
    #22723
    manjey73
    Участник
    [2] CE301_serv
    --------------
    Драйвер       : DrvIEC61107 1.0.0.0
    Состояние     : норма
    Время сеанса  : 30.03.2022 17:22:10
    Время команды : неопределено
    
    Сеансы  (всего / ошибок) : 3 / 0
    Команды (всего / ошибок) : 0 / 0
    Запросы (всего / ошибок) : 39 / 0
    
    Текущие данные
    +-------+--------+-----------------+-----------------------+-------+
    | Номер | Код    | Наименование    |              Значение | Канал |
    +-------+--------+-----------------+-----------------------+-------+
    | ******************* Счетчик Энергомера CE301 ******************* |
    +-------+--------+-----------------+-----------------------+-------+
    | 1     | serial | Serial #        | 8 841 163 127 043,000 |       |
    +-------+--------+-----------------+-----------------------+-------+
    | 2     | 2      | Voltage L1      |               235,903 |       |
    +-------+--------+-----------------+-----------------------+-------+
    | 3     | 3      | Voltage L2      |               244,102 |       |
    +-------+--------+-----------------+-----------------------+-------+
    | 4     | 4      | Voltage L3      |               257,160 |       |
    +-------+--------+-----------------+-----------------------+-------+
    

    Раньше Номер я мог устанавливать свой и именно по своему номеру я идентифицировал передаваемую команду. Теперь то, что у меня было номером стало Кодом. Но Код в Администраторе можно сменить ненароком. В общем пока не понял концепции, как идентифицировать поступающую команду, так как Код(если я буду использовать цифровое значение) и Номер могут не совпадать. Пример ниже

    +-------+--------+-----------------+-----------------------+-------+
    | 19    | 26     | tg_f L1         |                -0,410 |       |
    +-------+--------+-----------------+-----------------------+-------+
    | 20    | 27     | tg_f L2         |                -0,440 |       |
    +-------+--------+-----------------+-----------------------+-------+
    | 21    | 28     | tg_f L3         |                -1,370 |       |
    +-------+--------+-----------------+-----------------------+-------+
    | 22    | Time   | Time            |              17:32:50 |       |
    +-------+--------+-----------------+-----------------------+-------+
    | 23    | 31     | Date            |            30.03.2022 |       |
    +-------+--------+-----------------+-----------------------+-------+
    
    #22724
    manjey73
    Участник

    С Форматом даты и времени разобрался, а вот со строковой нет. Номер сигнала 1 — Serial# остался в цифровом виде.

    По факту строка серийника выглядит так 008841163127043 и в Коммуникаторе передается в виде числа 8 841 163 127 043,000

    В старом коде был метод ConvertTagDataToStr в котором можно было показать строкой в логе Коммуникатора.
    В коде был перевод в double, предварительно сохраняя всю строку в буфере

    double d = ScadaUtils.EncodeAscii(data);
    SetCurData(sndList[i].tagIdx, d, 1);

    а в методе просто возвращал полную строку. Теперь что необходимо вместо указанного кода SetCurData (аналог для 6-й версии) чтобы так же в Коммуникаторе отобразилась строка ? при этом сохранилась возможность в БД отправить просто в числовом виде ?

    #22725
    Romiros
    Участник

    DeviceData.SetUnicode не подходит?

    #22728
    manjey73
    Участник

    @Romiros попробую чуть позже. Вопрос в том, что в БД попадает 8 байт и в Коммуникаторе ранее вроде тоже можно было отобразить только 8 байт строки, тоже проверю.
    Из протокола IEC61107 есть только счетчик CE301 в офисе, а я сейчас на гибридном графике работы 🙂

    Вопрос к Михаилу, если есть возможность контролировать Номер сигнала самостоятельно, то как это сделать?
    Если в 6-й версии вместо Номера возможен контроль только Кода, то насколько сложно сделать перегрузки метода добавления тега, чтобы можно было добавлять тег как по Номеру (как было в 5-й версии) так и по Коду ?

    Например сделать Словарь такого плана Dictionary<sting, class Tag>
    где класс Tag это int Номер, string Имя Тега ???
    В общем любая вариация которая позволит оперировать не только Кодом, но и Номером Сигнала.

    #22729
    a80808
    Участник

    Это у вас там такой перекос по фазам по напряжению? Выгорит же все…

    #22731
    manjey73
    Участник

    Где вы увидели перекос? все вполне в пределах нормы. Ну третья да, чутка не очень хороша… 🙂

    #22738
    Mikhail
    Модератор

    Номера тегов теперь идут последовательно. От них планируется постепенно отказаться.
    Используйте строковый код тега.

    а что если код «DO» пользователь сменить на «DO1» — команда перестанет приниматься?
    Но Код в Администраторе можно сменить ненароком.

    Пользователь не имеет доступа к проекту. Если инженер изменит код тега, то работа может нарушиться. Точно также, как и изменение поля «Сигнал» в 5-й версии.

    если есть возможность контролировать Номер сигнала самостоятельно, то как это сделать?

    Нет

    #22739
    Mikhail
    Модератор

    Для работы со строками, установите тип данных тега — строка.
    Также важна длина данных тега. В 1-й единице длины 4 символа Unicode.

    #22740
    manjey73
    Участник

    Я установил тип данных тега string но это не помогло. Выше привел код, как в 5-й версии в double для БД переводилась строка.

    Почему это в 1-й единице 4-ре символа Unicode ? что за единица такая, о чем именно речь?

    4-ре символа Unicode это 8 байт же? так понимаю как было раньше 8 байт так и осталось

    В 6-й версии добавились же вроде БД текстовые, как перенаправить канал в другую БД из драйвера ?

    з.ы. ну и ладно, будем оперировать Кодом, надо будет подумать как это теперь подшаманить без глобальной переделки кода….

    • Этот ответ был изменен 2 года назад от manjey73.
    #22745
    a80808
    Участник

    Где вы увидели перекос?
    Ничего себе, больше 5%, между А и С аж 9%. А С превышает допустимое напряжение даже для МЭК (110% от 230 в — 253 в). Ничего хорошего для оборудования.

    #22749
    Mikhail
    Модератор

    Строки используются в драйвере OPC UA. Ссылка
    Имел ввиду, что в теге длины 1 помещаются 4 символа Юникод.

    Архивы, в которые пишутся данные канала, указываются в свойствах канала.

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