Разработка драйвера для v6

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

Помечено: 

Просмотр 6 сообщений - с 1 по 6 (из 6 всего)
  • Автор
    Записи
  • #31669
    Alex_shs
    Участник

    Добрый день,

    Пытаюсь написать драйвер для v6, который будет получать данные через httpclient и складывать их в каналы.
    Что сделал:
    1. Создал библиотеку DrvxxxView.dll, в коммуникаторе появился мой драйвер с описанием и с формой параметров конфигурирования.
    2. Создал библиотеку DrvxxxLogic.dll, в ней создал несколько тегов, в текущих данных появились эти тэги (без значений конечно)

    Вопросы:
    1. При добавлении устройства тип устройства выбирать — пользовательский драйвер?
    2. В журнале линии:
    Невозможно выполнить сеанс связи с устройством [3] xxx, т.к. соединение не установлено.
    Почему и как это работает? Мне казалось, что метод session за это отвечает, если его переопределить, то не должно быть ошибки.
    3. При создании каналов c помощью мастера — отображается каналов 0, разве тэги которые я создаю в DrvxxxLogic.dll — это не есть потенциальные каналы?

    Спасибо

    #31671
    manjey73
    Участник

    1. База конфигурации — Вспомогательные таблицы — Типы устройств. Начиная с 1001 по аналогии с верхними прописываете свой драйвер.

    1005 | BeckhoffADS | DrvBeckhoff | Драйвер TwinCAT ADS
    Имя библиотеки, Наименование и т.д. должно быть вашим

    2. Линию надо настроить по аналогии Канал связи должен быть выставлен, Не задан, TCP клиент или Com порт. Это зависит от драйвера. Надо в примерах смотреть в зависимости на чем вы базируете драйвер.
    Если должно быть Не задан, то возможно этот параметр в код надо добавить —
    ConnectionRequired = false;

    3. Logic и View создают каналы, первый для таблицы Коммуникатора а второй как раз для мастера Администратора. Если вы сделаете только в Коммуникаторе, то в Администраторе так и будет, он то не знает, что вы там создали.
    Если создаете только в Коммуникаторе, потом можно руками создать в таблицах устройства и связать. Если же еще во View, то возможность создавать мастером появляется.

    • Ответ изменён 2 года, 4 месяца назад пользователем manjey73.
    #31673
    Alex_shs
    Участник

    «3. Logic и View создают каналы, первый для таблицы Коммуникатора а второй как раз для мастера Администратора. Если вы сделаете только в Коммуникаторе, то в Администраторе так и будет, он то не знает, что вы там создали.
    Если создаете только в Коммуникаторе, потом можно руками создать в таблицах устройства и связать. Если же еще во View, то возможность создавать мастером появляется»

    Понятно, не понятно только то, что в классе DeviceLogic есть метод InitDeviceTags, а в DeviceView его нет или я не увидел (
    Где тэги и группы тэгов создавать в DrvxxxView.dll
    Я так понимаю код программный должен быть одинаковым связка будет через параметр «string:code»?

    спасибо

    #31675
    manjey73
    Участник

    InitDeviceTags это как раз метод Logic для Коммуникатора

    Во View метод другой.

    public override ICollection<CnlPrototype> GetCnlPrototypes()

    #31676
    manjey73
    Участник
     /// Gets the channel prototypes for the device.
     /// </summary>
     public override ICollection<CnlPrototype> GetCnlPrototypes()
     {
         List<CnlPrototype> cnlPrototypes = new();
         int tagNum = 1;
    
         GetTemplateFile();
    
         string format = "";
    
         foreach (var dev in ActiveValue) // ActiveCnl
         {
             CnlPrototype cannel = new CnlPrototype();
             format = dev.Value.Format;
    
             int typeId = CnlTypeID.Input;
             if (dev.Value.Writable) typeId = CnlTypeID.InputOutput;
    
             cannel.Name = dev.Value.Name;
             cannel.CnlTypeID = typeId;
             cannel.TagCode = dev.Value.Code;
    
             if (format == "float" || format == "double")
                 cannel.FormatCode = FormatCode.N2;
             else if (format == "DateTime")
                 cannel.FormatCode = FormatCode.DateTime;
             else if (format == "uint16" || format == "uint32")
                 cannel.FormatCode = FormatCode.N0;
    
             if (cannel.FormatCode == FormatCode.String) cannel.DataTypeID = DataTypeID.Unicode;
    
             cnlPrototypes.Add(cannel);
             tagNum++;
         }
    
         foreach (var dev in ActiveCmd)
         {
             format = dev.Value.Format;
             CnlPrototype cannel = new CnlPrototype();
    
             cannel.Name = dev.Value.Name;
             cannel.CnlTypeID = CnlTypeID.Output;
             cannel.TagCode = dev.Value.Code;
             if (format == "float" || format == "double")
                 cannel.FormatCode = FormatCode.N2;
             else if (format == "DateTime")
                 cannel.FormatCode = FormatCode.DateTime;
             else if (format == "uint16" || format == "uint32") 
                 cannel.FormatCode = FormatCode.N0;
    
             if (cannel.FormatCode == FormatCode.String) cannel.DataTypeID = DataTypeID.Unicode;
    
             cnlPrototypes.Add(cannel);
             tagNum++;
         }
    
         return cnlPrototypes;
    
     }

    Вот пример для DevXXXView из моего драйвера Пульсар.
    Там можно многое создавать, вплоть до входных формул если требуется для мастера создания каналов.
    Можете посмотреть в исходниках и другие варианты. Тут у меня из словаря активных сигналов создается на основе шаблона.
    Вроде можно руками все сделать, если набор переменных статичный.

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

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

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