Теги в драйверах устройств с пропусками

Стартовая страница Форумы Разработка и интеграция Теги в драйверах устройств с пропусками

Просмотр 15 сообщений - с 1 по 15 (из 19 всего)
  • Автор
    Сообщения
  • #4178
    manjey73
    Участник

    Собственно, если будет запись вида

    tagGroup.KPTags.Add(new KPTag(39, «Сумма R+, (кВт*ч)»));
    tagGroup.KPTags.Add(new KPTag(40, «Тариф 1 R+, (кВт*ч)»));
    tagGroup.KPTags.Add(new KPTag(41, «Тариф 2 R+, (кВт*ч)»));
    tagGroup.KPTags.Add(new KPTag(42, «Тариф 3 R+, (кВт*ч)»));
    tagGroup.KPTags.Add(new KPTag(43, «Тариф 4 R+, (кВт*ч)»));
    tagGroup.KPTags.Add(new KPTag(44, «Потери R+, (кВт*ч)»));
    tagGroup.KPTags.Add(new KPTag(45, «Сумма R-, (кВт*ч)»));
    tagGroup.KPTags.Add(new KPTag(46, «Тариф 1 R-, (кВт*ч)»));
    tagGroup.KPTags.Add(new KPTag(47, «Тариф 2 R-, (кВт*ч)»));

    То, что зачеркнул будет удалено или по условию выключено, как будут восприниматься теги 45, 46, 47 в SetCurData(x, значение, 1).

    x будет соответствовать 45, 46, 47 ? ну соответственно 45-1, 46-1, 47-1 И собственно можно нумеровать теги как попало ?
    А то хочется скрывать простыню тегов из Коммуникатора, но не хочется чтобы менялись номера, чтобы в любой момент можно было начать чтение параметра или его отключить…

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

    По идее, должно работать. Например, в KpOpc номера тегов могут быть произвольными. В будущем хотелось бы сделать строковые ключи тегов, чтобы не зависеть от смещения номеров.

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

    Кстати, в KpModbus можно отключать теги.

    #4183
    manjey73
    Участник

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

    Интересует больше реакция именно SetCurData, он привязывается к номеру с -1 или он четко записи последовательно выбирает и у него своя последовательная нумерация ?
    и если я скрою 3 тега у него уже будет нумерация х-3 вместо х-1 ?

    #4184
    manjey73
    Участник

    Все, я вспомнил, SetCurData по записям списка, и если мы его скрываем, то нумерация у нас съезжает…

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

    Нужно смотреть в коде и в отладчике в процессе работы. В любом случае, большинство методов для КП виртуальные и их можно переопределить.

    #4190
    manjey73
    Участник

    Покопался в своем старом драйвере, вроде это как-то обошел, при скрытии или открытии списка.
    Из меня программист еще тот, с чтением параметров из файла сразу в настройки Коммуникатора я так и не разобрался, а KpModbus для меня трудно понимаем.
    Я программирую на уровне Если то, то это…. чтобы понятнее было.

    Вот например в C# есть функция Encoding.ASCII.ToString(byte[]) вот на данном этапе мне все равно как работает внутри эта функция, каким образом она все это преобразует и т.д. мне достаточно что она возвращает мне то, что мне нужно.
    Такой же темный лес для меня попытка разобраться с KpModbus.

    Из-за этого у меня несколько драйверов зависли в состоянии недоделок.
    Максимум что могу, это использовать Командную строку для ввода параметров, но это немного не кошерно.

    Вот банально простой пример с небольшим описанием в разделе «Для разработчиков» помог бы. Не привязанный к какому-то механизму динамического создания переменных, как это в KpModbus реализовано. То есть имеем набор статических переменных, которые нужно записать в файл при помощи формы или руками и они попадут куда надо и правильно будут взаимодействовать с Коммуникатором.

    #4273
    manjey73
    Участник

    Пример кода

    public KpMercury23xLogic(int number) : base(number)
    {

    Как здесь считать параметр из командной строки ? На данный момент просто параметр прописываю в
    public sealed class KpMercury23xLogic : KPLogic
    {
    Тут переменная mask_g1 = нужное мне, что должно считаться из командной строки
    }

    if (mgn_znac != 0)
    {
    tagGroup = new TagGroup(«Мгновенные значения:»);

    bool mgn_P = GetBit(mask_g1, 0);
    if (mgn_P)
    {
    tagGroup.KPTags.Add(new KPTag(1, «Мощность P Сумм (Вт)»));
    tagGroup.KPTags.Add(new KPTag(2, «Мощность P L1 (Вт)»));
    tagGroup.KPTags.Add(new KPTag(3, «Мощность P L2 (Вт)»));
    tagGroup.KPTags.Add(new KPTag(4, «Мощность P L3 (Вт)»));
    }
    …….

    #4274
    manjey73
    Участник

    public static string ss()
    {
    string ss = ReqParams.CmdLine.Trim();
    return ss;
    }

    Если записать так, то ругается на ReqParams — Для нестатического поля, метода или свойства «KPLogic.ReqParams» требуется ссылка на объект.

    Нужно как-то вычитать именно до создания таблицы…

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

    Командная строка начинает быть доступной в методе OnAddedToCommLine. Пример: https://github.com/RapidScada/scada/blob/master/ScadaComm/OpenKPs/KpModbus/KpModbusLogic.cs#L272

    Здесь же можно создать теги КП.

    #4276
    manjey73
    Участник

    А не совсем програмистким языком ?
    Возможно из Командной строки получить переменную до создания Списка тегов ?
    Или я просто потеряю время ?

    public KpMercury23xLogic(int number) : base(number)
    {

    string ss = ReqParams.CmdLine.Trim();

    То есть здесь, нет никакой ругани на ошибку, что что-то недоступно, но при этом нет и чтения переменной.

    • Этот ответ был изменен 7 лет, 1 месяц назад от manjey73.
    #4278
    Mikhail
    Модератор

    Возможно создание списка тегов отодвинуть немного позже — в то место драйвера, когда командная строка уже доступна. Напишите отдельный метод, который создаёт теги. А затем вызовите его из Вашего метода OnAddedToCommLine — его нужно добавить по аналогии с примером.

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

    Могу научить Вас проходить Ваш код драйвера по шагам из отладчика — весьма полезно. Если интересно, заведите отдельную тему.

    #4283
    manjey73
    Участник

    Я оперирую примером драйверов согласно темы «Для разработчиков» на сайте. Не совсем понимаю куда и что надо запихать, чтобы это сработало.
    Сам счетчик прекрасно читаю, но вот с тегами какая-то засада. Думал это будет попроще 🙂

    На счет отладчика было бы полезно. Тут проблема в другом, что для меня чужой код это темный лес, где, что, куда, зачем практически ничего не понятно.

    • Этот ответ был изменен 7 лет, 1 месяц назад от manjey73.
    #4285
    manjey73
    Участник

    Переместил весь список тегов после
    public override void Session()
    {

    Теперь работает опрос тегов исходя из переменной, введенной в Командную строку.
    Пока так сойдет.

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