Стартовая страница › Форумы › Разработка и интеграция › Разработка драйвера для v6
Помечено: драйвер
- В этой теме 5 ответов, 3 участника, последнее обновление 2 года, 4 месяца назад сделано
Mikhail.
-
АвторЗаписи
-
28.03.2024 в 10:06 #31669
Alex_shs
УчастникДобрый день,
Пытаюсь написать драйвер для v6, который будет получать данные через httpclient и складывать их в каналы.
Что сделал:
1. Создал библиотеку DrvxxxView.dll, в коммуникаторе появился мой драйвер с описанием и с формой параметров конфигурирования.
2. Создал библиотеку DrvxxxLogic.dll, в ней создал несколько тегов, в текущих данных появились эти тэги (без значений конечно)Вопросы:
1. При добавлении устройства тип устройства выбирать — пользовательский драйвер?
2. В журнале линии:
Невозможно выполнить сеанс связи с устройством [3] xxx, т.к. соединение не установлено.
Почему и как это работает? Мне казалось, что метод session за это отвечает, если его переопределить, то не должно быть ошибки.
3. При создании каналов c помощью мастера — отображается каналов 0, разве тэги которые я создаю в DrvxxxLogic.dll — это не есть потенциальные каналы?Спасибо
28.03.2024 в 10:19 #31671
manjey73Участник1. База конфигурации — Вспомогательные таблицы — Типы устройств. Начиная с 1001 по аналогии с верхними прописываете свой драйвер.
1005 | BeckhoffADS | DrvBeckhoff | Драйвер TwinCAT ADS
Имя библиотеки, Наименование и т.д. должно быть вашим2. Линию надо настроить по аналогии Канал связи должен быть выставлен, Не задан, TCP клиент или Com порт. Это зависит от драйвера. Надо в примерах смотреть в зависимости на чем вы базируете драйвер.
Если должно быть Не задан, то возможно этот параметр в код надо добавить —
ConnectionRequired = false;3. Logic и View создают каналы, первый для таблицы Коммуникатора а второй как раз для мастера Администратора. Если вы сделаете только в Коммуникаторе, то в Администраторе так и будет, он то не знает, что вы там создали.
Если создаете только в Коммуникаторе, потом можно руками создать в таблицах устройства и связать. Если же еще во View, то возможность создавать мастером появляется.-
Ответ изменён 2 года, 4 месяца назад пользователем
manjey73.
28.03.2024 в 11:02 #31673Alex_shs
Участник«3. Logic и View создают каналы, первый для таблицы Коммуникатора а второй как раз для мастера Администратора. Если вы сделаете только в Коммуникаторе, то в Администраторе так и будет, он то не знает, что вы там создали.
Если создаете только в Коммуникаторе, потом можно руками создать в таблицах устройства и связать. Если же еще во View, то возможность создавать мастером появляется»Понятно, не понятно только то, что в классе DeviceLogic есть метод InitDeviceTags, а в DeviceView его нет или я не увидел (
Где тэги и группы тэгов создавать в DrvxxxView.dll
Я так понимаю код программный должен быть одинаковым связка будет через параметр «string:code»?спасибо
28.03.2024 в 11:09 #31675
manjey73УчастникInitDeviceTagsэто как раз метод Logic для КоммуникатораВо View метод другой.
public override ICollection<CnlPrototype> GetCnlPrototypes()28.03.2024 в 11:15 #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 из моего драйвера Пульсар.
Там можно многое создавать, вплоть до входных формул если требуется для мастера создания каналов.
Можете посмотреть в исходниках и другие варианты. Тут у меня из словаря активных сигналов создается на основе шаблона.
Вроде можно руками все сделать, если набор переменных статичный.28.03.2024 в 14:01 #31687
MikhailМодераторДобрый день!
DevXXXView можно оставить в минимальном виде, просто чтобы драйвер был виден в Администраторе. После разработки логики уже доработать View. -
Ответ изменён 2 года, 4 месяца назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.