Ошибка кода Коммуникатора

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

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

    Когда в прототипах указываю format = FormatCode.DateTime;
    как в Logic так и во View. то все хорошо, Коммуникатор показывает время и дату.
    При создании канала Формат канала Date and Time

    Но когда применяю format = FormatCode.Date; то Коммуникатор показывает просто число, а при создании каналов формат создается D.DD

    Похоже ошибка и там и там, или где-то в общей части ядра.
    Если создать DateTime, потом в базе выставить Date, то все работает, ну кроме того, что Коммуникатор продолжает показывать Дату и Время в таблице статуса устройства

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

    Проверю.

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

    С точки зрения Коммуникатора FormatCode.DateTime и FormatCode.Date должны одинаково работать. Ссылка

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

    Попробуйте создать новый проект из шаблона. Может быть в нём заработает.

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

    В драйвере с помощью отладчика нужно проверить, чему равно свойство Format тега после его создания из прототипа канала.

    • Ответ изменён 6 месяцев, 1 неделя назад пользователем Mikhail.
    #38674
    manjey73
    Участник

    1

    2

    3

    4

    #38675
    manjey73
    Участник

    Первые 2 скрина это выбран Date в коде
    Вторые 2 это выбран DateTime

    на первом видно, что Format = null, а там где выбирается DateTime, там Format — Scada.Comm.Devices.TagFormat

    #38676
    manjey73
    Участник

    Странно. в Форматах 4 это D.DD
    а вот 32 это Date, а Date and Time это 31. Хотя на скринах при FormateCode.DateTime показывает 32

    #38677
    a80808
    Участник

    Может считают от 0 или 1?

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

    Где в коде создаются теги устройства?

    #38717
    manjey73
    Участник

    В Logic и во View.
    Или нужно какое-то точное место и как?

    #38722
    manjey73
    Участник

    https://github.com/Manjey73/OpenDrivers/blob/main/DrvMercury23x/DrvMercury23x.Logic/DevMercury23xLogic.cs#L452

    Собственно тут вставлено простое

                                if (devTemplate.CmdGroups[c].Code.ToLower() == "verifidt")
                                {
                                    cnlType = CnlTypeID.InputOutput;
                                    format = FormatCode.DateTime; // TEST
                                }

    Ну а обработка ошибки завернута в else потом.
    Просто проверяется наличие Кода тега с фиксированным именем и подставляется формат и тип канала
    Так вот если там поставить FormatCode.Date то получим D.DD и вывод числа. вместо даты.

    #38723
    manjey73
    Участник

    И еще момент. Если делать через создание тегов таким образом

    DeviceTag deviceTag = new DeviceTag();
      deviceTag = tagGroup.AddTag(comm.Code, comm.Name);
    
      if (comm.Code.ToLower() == "verifidt")
      {
       deviceTag.Format = TagFormat.DateTime;
       deviceTag.Cnl.CnlTypeID = CnlTypeID.InputOutput;
      }

    то валится с ошибкой NulReference на строчке deviceTag.Cnl.CnlTypeID = CnlTypeID.InputOutput
    Как в таком случае задавать тип канала в коде драйвера?

    #38724
    manjey73
    Участник

    К сожалению это идет на старте линии и я не знаю, как тут отладчиком стать…

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

    > К сожалению это идет на старте линии и я не знаю, как тут отладчиком стать
    Сначала подключиться к ScadaCommWkr отладчиком, а затем перезапустить линию связи из Коммуникатора.

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

    Пример создания тегов устройства на основе прототипов каналов по ссылке.

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