Куда переехали методы и сохранились ли ? v6

Стартовая страница Форумы Разработка и интеграция Куда переехали методы и сохранились ли ? v6

Просмотр 15 сообщений - с 16 по 30 (из 69 всего)
  • Автор
    Сообщения
  • #22819
    Mikhail
    Модератор

    Тип канала Input, Output и Calculated относится только к каналам. В теге он отсутствует. По сути все теги являются Input. Отправка команд происходит с помощью метода SendCommand.
    Соответственно, задать тип каналов, которые генерируются мастером в Администраторе, можно через прототипы.

    #22827
    manjey73
    Участник

    То есть прототипы дают возможность не только создать теги при запуске опроса на линии, но как раз и создавать мастером в Администраторе каналов.

    Интересует как раз возможность в одном месте (Shared) написать код, чтобы в него передать Список или Словарь с активными переменными в коде Прототипов.

    public List<CnlPrototypeGroup> GetCnlPrototypeGroups()

    Вот если я уберу отсюда static — будет работать на два фронта? для Dev__.Logic и для Dev___.View ?

    Еще вопрос — как определить команду по принципу Строка, Число, Hex строка в коде Dev___.Logic ?
    Это и есть DataTag.TypeID ?

    #22843
    Romiros
    Участник

    Что-то с архивами помощь и правда не помешала.

    while (dbDataReader.Read())
    {
    DateTime sliceDt = dbDataReader.GetDateTime(«DTime»);
    DeviceSlice slice = new DeviceSlice(sliceDt, tagGroup.DeviceTags.Count, tagGroup.DeviceTags.Count);
    slice.ArchiveMask = 4;
    slice.Descr = sliceDt.ToLocalizedString();
    int i = 0;
    foreach (DeviceTag tag in tagGroup.DeviceTags)
    {

    try
    {
    int ordinal = dbDataReader.GetOrdinal(tag.Code == «V» ? «Q» : tag.Code);
    slice.DeviceTags[i] = tag;
    slice.CnlData[i] = DecodeArcTag(dbDataReader[ordinal]);
    }
    catch (Exception ex)
    {
    Log.WriteError(tag.Code, ex);
    }
    i++;
    }
    DeviceData.EnqueueSlice(slice);
    Log.WriteInfo($»{sliceDt}»);
    }

    В статусе КП в списке «Недавние архивные данные» записи появляются, но в базе данные не обновляются. Или я что-то делаю не так, или чего-то не хватает.

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

    То есть прототипы дают возможность не только создать теги при запуске опроса на линии, но как раз и создавать мастером в Администраторе каналов.

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

    Интересует как раз возможность в одном месте (Shared) написать код, чтобы в него передать Список или Словарь с активными переменными в коде Прототипов.

    Создайте свой объект с прототипами. В методе OnCommLineStart положите его в LineContext.SharedData. Что именно не работает?

    как определить команду по принципу Строка, Число, Hex

    Когда команда приходит на обработку, срабатывает метод SendCommand. Не совсем понял вопрос.

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

    Что-то с архивами помощь и правда не помешала.

    Код выглядит правильным. У меня сомнение по поводу sliceDt. Требуется время, имеющее Kind = UTC

    И ещё не помешает deviceSlice.DeviceNum = номер устройства не нужно, ставится автоматически

    • Этот ответ был изменен 1 год, 11 месяцев назад от Mikhail.
    • Этот ответ был изменен 1 год, 11 месяцев назад от Mikhail.
    #22852
    Romiros
    Участник

    В логе коммуникатора:
    2022-04-06 16:52:10 [DESKTOP-ASUTP][DESKTOP-ASUTP$][ERR] Источник данных ScadaServer: Ошибка при конвертировании среза от устройства 4:
    System.NullReferenceException: Object reference not set to an instance of an object.

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

    Ошибка в методе ConvertSlice. Если у Вас есть возможность собрать, запустить в режиме отладки и пройти по шагам этот метод в драйвере DrvDsScadaServer, то было бы очень полезно. Хотя бы понять, на какой строчке кода возникает ошибка.

    У меня может не воспроизвестись проблема из-за каких-либо нюансов. Если нет возможности попробовать, то буду пытаться получить такую же ошибку.

    #22858
    Romiros
    Участник

    Конечно буду пробовать. Завтра постараюсь всё это построить, чтобы отследить ошибку.

    #22871
    manjey73
    Участник

    как определить команду по принципу Строка, Число, Hex

    Что непонятного в вопросе? Мы посылаем команду и выбираем Число, Строка, 16-ричные данные

    Как в драйвере определить, в каком именно виде пошла отправка команды?
    Раньше было Standard и Binary — как теперь? При этом раньше можно было задать тип команд из драйвера при создании каналов в Администраторе, а как теперь задать тип команд для тех или иных каналов?

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

    В зависимости от кода или номера команды драйвер должен её обрабатывать определённым образом — либо использовать числовое значение, либо данные.

    #22884
    manjey73
    Участник

    Я не могу оперировать номером команды или кодом. Подобным образом можно оперировать только с четко обозначенными запросами в драйвере, когда все каналы статические.

    При организации драйверов для ПЛК, или протоколов использование номера или кода НЕВОЗМОЖНО в принципе.

    Есть возможность определить в каком виде отправляется команда в коде Коммуникатора, когда мы выбираем
    Число, Строка или 16-ричное значение ? или такой возможности нет в принципе?

    Что можно использовать в данном случае вместо этого?

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

    Тогда для команды можно проверить
    double.IsNaN(cmd.CmdVal) — значит числовое значение команды отсутствует
    cmd.CmdData == null || cmd.CmdData.Length == 0 — данные команды отсутствуют

    Ссылка на пример создания срезов и событий.

    Ошибка при конвертировании среза, к сожалению, не воспроизвелась на простом примере.

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

    @romiros, у Вас установлена свежая Beta 6?

    #22887
    Romiros
    Участник

    Betta v3. Подключиться к проекту у меня получилось, но точки останова не срабатывают. Сегодня и времени особо не было. Ошибку с конвертирование среза я устранил, путем правильного именования кода тега. Хотя по идее метод сам должен был выкинуть тег с каналом null, судя по коду. В общем,нужно дебажить, чтобы понять как он проскочил.

    По поводу примера с архивами. Я так и писал. Архивная маска влияет на то, в какой срез будет записано? На windows я записал в часовой срез, а на linux с тем же кодом в минутный. Разное поведение на разных платформах.
    Завтра буду смотреть архивы утилитами. Пока ничего не понятно :). Надо на свежую голову всё проверить.

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

    Как нужно неправильно указать код тега, чтобы возникла ошибка при конвертировании?

    Если при создании DeviceSlice не указывать маску архивов, то она будет определена на основе свойств каналов. Если указать, то запишет в указанные архивы. Но конечно нужно всё проверять на практике.

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