Форум TRACE MODE: техническая поддержка   
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 5 » Драйверы / Device Drivers » Драйвер для устройства

   
Автор / Author Тема / Topic: Драйвер для устройства
preo_alm
Junior Member / Новичок
Участник № / Member № 33


Icon 1 отправлено / posted      Профиль для / Profile for preo_alm           Редактировать/удалить сообщение / Edit/Delete Post 
Необходимо написать драйвер для устройства, которое на один запрос возвращает пакет, содержащий набор данных для одного канала с разными метками времени. Поддерживает ли ТМ такие устройства, и если да, то посоветуйте, как мне реализовать такой драйвер.
Сообщения / Posts 23 | Из / From: Ukraine  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 10 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Эту задачу можно решить с помошью собственного драйвера для ТМ одного из типов:
TYPE11 (обмен по произвольному протоколу по последовательному интерфейсу)
TYPE12 (обмен по произвольному носителю по произвольному протоколу)
TYPE13 (фиксированное подключение драйвера)

Сообщения / Posts 17109 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
preo_alm
Junior Member / Новичок
Участник № / Member № 33


Icon 1 отправлено / posted      Профиль для / Profile for preo_alm           Редактировать/удалить сообщение / Edit/Delete Post 
Что необходимо писать драйвер для устройства было ясно с самого начала, не совсем ясна структура драйвера и способ обмена данными с МРВ. На данный момент у меня есть только один вариант: посылка запроса, прием блока данных и сохранение этих данных в массиве. При последующих обращениях к этому каналу данные читать не из устройства а из массива. Когда будет считан весь массив - прочитать и сохранить еще один блок данных. Но при такой реализации возникает одна проблема: при выборке данных из массива число посылаемых в устройство и принимаемых байт равно нулю, а в этом случае функция Get_xxx не вызывается. Может у Вас есть более простой способ реализации такого драйвера?
Еще такой вопрос: в описании алгоритма вызова драйвера обмена по посл. порту в п.6 есть такая фраза "В ячейке (i+1) содержится метка времени...". Т.е. в ячейке p[i].V.v передаются в архив данные по каналу, а в p[i+1].V.v - метка времени этих данных, причем я могу задать любую метку времени. Если я в чем-то неправ, то поправьте меня.

Сообщения / Posts 23 | Из / From: Ukraine  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Вы поняли правильно. Действительно, Вы можете принимать от драйвера данные вместе с метками времени и при необходимости записывать их в архив (эти возможности документированы в соответствующем разделе Справочной системы).
Вам только необходимо соответствующим образом организовать реакцию драйвера на вызовы от тех или иных каналов в разных режимах - с запросом данных от устройства или без запроса, но с разборкой буфера, накопленного драйвером.

Сообщения / Posts 17109 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
preo_alm
Junior Member / Новичок
Участник № / Member № 33


Icon 1 отправлено / posted      Профиль для / Profile for preo_alm           Редактировать/удалить сообщение / Edit/Delete Post 
Но как это сделать, ведь если нет данных для приема (max_rec=0), то ф-ция Get_xxx не вызывается, а данные, соответственно, не обрабатываются?
Сообщения / Posts 23 | Из / From: Ukraine  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Прошу прощения за неполноту документации.
Если функция Set_xxx возвращает max_send = max_rec = 0 и первый байт буфера sbuf также устанавливает в 0, то первый элемент структуры RSDATA несет в себе значение канала. МРВ помещает его в атрибут ВХОД запрашивающего канала.
Для Вашего варианта целесообразно организовать цикл обмена таким образом, чтобы на одном цикле поднять в буфер драйвера блоки данных по всем каналам, а потом последовательно считывать эти данные с возможной записью в архив.
В текущем релизе, как и следует из документации, каждый канал обращается к драйверу 1 раз за цикл. Т.о., процедура распаковки больших блоков данных может растянуться на много циклов.
Мы рассматриваем возможность ускорения этого процесса с ориентацией на задачи, подобные Вашей.

Сообщения / Posts 17109 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
preo_alm
Junior Member / Новичок
Участник № / Member № 33


Icon 1 отправлено / posted      Профиль для / Profile for preo_alm           Редактировать/удалить сообщение / Edit/Delete Post 
Все это хорошо, но почему-то не работает сохранение в архив. Вот кусок кода пробного драйвера.
int x=0;
Set_xxx(........)
{
......
p[0].V.v=10; - данные
p[0].F.fmt[1]=10;
p[1].V.v=x++; - метка времени
......
}
В универсальном тренде (галочка Архивный установлена) должна быть нарисована прямая , но ее там нет. Чем это может быть вызвано?

Сообщения / Posts 23 | Из / From: Ukraine  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Видимо, остальные условия, описанные мною в предыдущем ответе, в драйвере тоже выполнены. Если я правильно, понял, данные Вы получаете, но в архив они не записываются.
Это естественно, потому что в функции Set_xxx нет параметра type_cnv, задающего запись в архив.
Практически в соответствии с Вашим запросом в очередном релизе функция Get_xxx будет поддерживать подъем блока данных одного канала с записью в архив.

Сообщения / Posts 17109 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
preo_alm
Junior Member / Новичок
Участник № / Member № 33


Icon 1 отправлено / posted      Профиль для / Profile for preo_alm           Редактировать/удалить сообщение / Edit/Delete Post 
Я понял свою ошибку.
Тут появился еще вопрос. Если устройство для чтения требует ввод пароля, причем передача пароля через удаленный адрес нежелательна. Пробовал использовать каналы как INPUT, так и OUTPUT, однако в первом случае пароль не передается в драйвер, а во втором данные в систему. Как быть в таком случае?

Сообщения / Posts 23 | Из / From: Ukraine  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
preo_alm
Junior Member / Новичок
Участник № / Member № 33


Icon 1 отправлено / posted      Профиль для / Profile for preo_alm           Редактировать/удалить сообщение / Edit/Delete Post 
Я понял свою ошибку, но ведь из этого следует, что при такой постановке задачи я не смогу записать данные в архив. Выходит, что до следующего релиза (когда он кстати выйдет ?) об этом драйвере можно забыть ?
Тут появился еще вопрос. Если устройство для чтения требует ввод пароля, причем передача пароля через удаленный адрес нежелательна. Пробовал использовать каналы как INPUT, так и OUTPUT, однако в первом случае пароль не передается в драйвер, а во втором данные в систему. Как быть в таком случае?
И еще. Есть такая задача программирования: по нажатию кнопки - однократное чтение настроек устройства, их отображение, изменение и по нажатию кнопки их однократная запись обратно в устройство. Задача похожа на предыдущую. Первых два пункта задачи я реализовал. Управление однократностью чтения осуществляется через атрибут Состояние. Но когда канал выключен, я не могу изменить его значение (кнопка с XOR) и просмотреть это на экране. Посоветуйте, как лучше реализовать данную задачу, какие каналы и программы использовать.

Сообщения / Posts 23 | Из / From: Ukraine  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
В релизе 5.10 реализован алгоритм подъема через драйвер и записи в СПАД архива из устройства.

Остальные вопросы, если они еще актуальны, я готов с Вами обсудить по e-mail, т.к. они требуют значительного углубления в задачу, что для форума неспецифично.

Сообщения / Posts 17109 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

   Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2