This is topic Драйвер для устройства in forum Драйверы / Device Drivers at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/14/t/000013.html

Posted by preo_alm (Участник № / Member № 33) on :
 
Необходимо написать драйвер для устройства, которое на один запрос возвращает пакет, содержащий набор данных для одного канала с разными метками времени. Поддерживает ли ТМ такие устройства, и если да, то посоветуйте, как мне реализовать такой драйвер.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Эту задачу можно решить с помошью собственного драйвера для ТМ одного из типов:
TYPE11 (обмен по произвольному протоколу по последовательному интерфейсу)
TYPE12 (обмен по произвольному носителю по произвольному протоколу)
TYPE13 (фиксированное подключение драйвера)
 
Posted by preo_alm (Участник № / Member № 33) on :
 
Что необходимо писать драйвер для устройства было ясно с самого начала, не совсем ясна структура драйвера и способ обмена данными с МРВ. На данный момент у меня есть только один вариант: посылка запроса, прием блока данных и сохранение этих данных в массиве. При последующих обращениях к этому каналу данные читать не из устройства а из массива. Когда будет считан весь массив - прочитать и сохранить еще один блок данных. Но при такой реализации возникает одна проблема: при выборке данных из массива число посылаемых в устройство и принимаемых байт равно нулю, а в этом случае функция Get_xxx не вызывается. Может у Вас есть более простой способ реализации такого драйвера?
Еще такой вопрос: в описании алгоритма вызова драйвера обмена по посл. порту в п.6 есть такая фраза "В ячейке (i+1) содержится метка времени...". Т.е. в ячейке p[i].V.v передаются в архив данные по каналу, а в p[i+1].V.v - метка времени этих данных, причем я могу задать любую метку времени. Если я в чем-то неправ, то поправьте меня.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Вы поняли правильно. Действительно, Вы можете принимать от драйвера данные вместе с метками времени и при необходимости записывать их в архив (эти возможности документированы в соответствующем разделе Справочной системы).
Вам только необходимо соответствующим образом организовать реакцию драйвера на вызовы от тех или иных каналов в разных режимах - с запросом данных от устройства или без запроса, но с разборкой буфера, накопленного драйвером.
 
Posted by preo_alm (Участник № / Member № 33) on :
 
Но как это сделать, ведь если нет данных для приема (max_rec=0), то ф-ция Get_xxx не вызывается, а данные, соответственно, не обрабатываются?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Прошу прощения за неполноту документации.
Если функция Set_xxx возвращает max_send = max_rec = 0 и первый байт буфера sbuf также устанавливает в 0, то первый элемент структуры RSDATA несет в себе значение канала. МРВ помещает его в атрибут ВХОД запрашивающего канала.
Для Вашего варианта целесообразно организовать цикл обмена таким образом, чтобы на одном цикле поднять в буфер драйвера блоки данных по всем каналам, а потом последовательно считывать эти данные с возможной записью в архив.
В текущем релизе, как и следует из документации, каждый канал обращается к драйверу 1 раз за цикл. Т.о., процедура распаковки больших блоков данных может растянуться на много циклов.
Мы рассматриваем возможность ускорения этого процесса с ориентацией на задачи, подобные Вашей.
 
Posted by preo_alm (Участник № / Member № 33) on :
 
Все это хорошо, но почему-то не работает сохранение в архив. Вот кусок кода пробного драйвера.
int x=0;
Set_xxx(........)
{
......
p[0].V.v=10; - данные
p[0].F.fmt[1]=10;
p[1].V.v=x++; - метка времени
......
}
В универсальном тренде (галочка Архивный установлена) должна быть нарисована прямая , но ее там нет. Чем это может быть вызвано?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Видимо, остальные условия, описанные мною в предыдущем ответе, в драйвере тоже выполнены. Если я правильно, понял, данные Вы получаете, но в архив они не записываются.
Это естественно, потому что в функции Set_xxx нет параметра type_cnv, задающего запись в архив.
Практически в соответствии с Вашим запросом в очередном релизе функция Get_xxx будет поддерживать подъем блока данных одного канала с записью в архив.
 
Posted by preo_alm (Участник № / Member № 33) on :
 
Я понял свою ошибку.
Тут появился еще вопрос. Если устройство для чтения требует ввод пароля, причем передача пароля через удаленный адрес нежелательна. Пробовал использовать каналы как INPUT, так и OUTPUT, однако в первом случае пароль не передается в драйвер, а во втором данные в систему. Как быть в таком случае?
 
Posted by preo_alm (Участник № / Member № 33) on :
 
Я понял свою ошибку, но ведь из этого следует, что при такой постановке задачи я не смогу записать данные в архив. Выходит, что до следующего релиза (когда он кстати выйдет ?) об этом драйвере можно забыть ?
Тут появился еще вопрос. Если устройство для чтения требует ввод пароля, причем передача пароля через удаленный адрес нежелательна. Пробовал использовать каналы как INPUT, так и OUTPUT, однако в первом случае пароль не передается в драйвер, а во втором данные в систему. Как быть в таком случае?
И еще. Есть такая задача программирования: по нажатию кнопки - однократное чтение настроек устройства, их отображение, изменение и по нажатию кнопки их однократная запись обратно в устройство. Задача похожа на предыдущую. Первых два пункта задачи я реализовал. Управление однократностью чтения осуществляется через атрибут Состояние. Но когда канал выключен, я не могу изменить его значение (кнопка с XOR) и просмотреть это на экране. Посоветуйте, как лучше реализовать данную задачу, какие каналы и программы использовать.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
В релизе 5.10 реализован алгоритм подъема через драйвер и записи в СПАД архива из устройства.

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


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2