preo_alm
Junior Member / Новичок
Участник № / Member № 33
отправлено / posted
Необходимо написать драйвер для устройства, которое на один запрос возвращает пакет, содержащий набор данных для одного канала с разными метками времени. Поддерживает ли ТМ такие устройства, и если да, то посоветуйте, как мне реализовать такой драйвер.
Сообщения / Posts 23 | Из / From: Ukraine
| IP / IP: IP адрес / IP address |
отправлено / posted
Эту задачу можно решить с помошью собственного драйвера для ТМ одного из типов: TYPE11 (обмен по произвольному протоколу по последовательному интерфейсу) TYPE12 (обмен по произвольному носителю по произвольному протоколу) TYPE13 (фиксированное подключение драйвера)
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
preo_alm
Junior Member / Новичок
Участник № / Member № 33
отправлено / posted
Что необходимо писать драйвер для устройства было ясно с самого начала, не совсем ясна структура драйвера и способ обмена данными с МРВ. На данный момент у меня есть только один вариант: посылка запроса, прием блока данных и сохранение этих данных в массиве. При последующих обращениях к этому каналу данные читать не из устройства а из массива. Когда будет считан весь массив - прочитать и сохранить еще один блок данных. Но при такой реализации возникает одна проблема: при выборке данных из массива число посылаемых в устройство и принимаемых байт равно нулю, а в этом случае функция Get_xxx не вызывается. Может у Вас есть более простой способ реализации такого драйвера? Еще такой вопрос: в описании алгоритма вызова драйвера обмена по посл. порту в п.6 есть такая фраза "В ячейке (i+1) содержится метка времени...". Т.е. в ячейке p[i].V.v передаются в архив данные по каналу, а в p[i+1].V.v - метка времени этих данных, причем я могу задать любую метку времени. Если я в чем-то неправ, то поправьте меня.
Сообщения / Posts 23 | Из / From: Ukraine
| IP / IP: IP адрес / IP address |
отправлено / posted
Вы поняли правильно. Действительно, Вы можете принимать от драйвера данные вместе с метками времени и при необходимости записывать их в архив (эти возможности документированы в соответствующем разделе Справочной системы). Вам только необходимо соответствующим образом организовать реакцию драйвера на вызовы от тех или иных каналов в разных режимах - с запросом данных от устройства или без запроса, но с разборкой буфера, накопленного драйвером.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
preo_alm
Junior Member / Новичок
Участник № / Member № 33
отправлено / posted
Но как это сделать, ведь если нет данных для приема (max_rec=0), то ф-ция Get_xxx не вызывается, а данные, соответственно, не обрабатываются?
Сообщения / Posts 23 | Из / From: Ukraine
| IP / IP: IP адрес / IP address |
отправлено / posted
Прошу прощения за неполноту документации. Если функция Set_xxx возвращает max_send = max_rec = 0 и первый байт буфера sbuf также устанавливает в 0, то первый элемент структуры RSDATA несет в себе значение канала. МРВ помещает его в атрибут ВХОД запрашивающего канала. Для Вашего варианта целесообразно организовать цикл обмена таким образом, чтобы на одном цикле поднять в буфер драйвера блоки данных по всем каналам, а потом последовательно считывать эти данные с возможной записью в архив. В текущем релизе, как и следует из документации, каждый канал обращается к драйверу 1 раз за цикл. Т.о., процедура распаковки больших блоков данных может растянуться на много циклов. Мы рассматриваем возможность ускорения этого процесса с ориентацией на задачи, подобные Вашей.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
preo_alm
Junior Member / Новичок
Участник № / Member № 33
отправлено / posted
Все это хорошо, но почему-то не работает сохранение в архив. Вот кусок кода пробного драйвера. 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 |
отправлено / posted
Видимо, остальные условия, описанные мною в предыдущем ответе, в драйвере тоже выполнены. Если я правильно, понял, данные Вы получаете, но в архив они не записываются. Это естественно, потому что в функции Set_xxx нет параметра type_cnv, задающего запись в архив. Практически в соответствии с Вашим запросом в очередном релизе функция Get_xxx будет поддерживать подъем блока данных одного канала с записью в архив.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
preo_alm
Junior Member / Новичок
Участник № / Member № 33
отправлено / posted
Я понял свою ошибку. Тут появился еще вопрос. Если устройство для чтения требует ввод пароля, причем передача пароля через удаленный адрес нежелательна. Пробовал использовать каналы как INPUT, так и OUTPUT, однако в первом случае пароль не передается в драйвер, а во втором данные в систему. Как быть в таком случае?
Сообщения / Posts 23 | Из / From: Ukraine
| IP / IP: IP адрес / IP address |
preo_alm
Junior Member / Новичок
Участник № / Member № 33
отправлено / posted
Я понял свою ошибку, но ведь из этого следует, что при такой постановке задачи я не смогу записать данные в архив. Выходит, что до следующего релиза (когда он кстати выйдет ?) об этом драйвере можно забыть ? Тут появился еще вопрос. Если устройство для чтения требует ввод пароля, причем передача пароля через удаленный адрес нежелательна. Пробовал использовать каналы как INPUT, так и OUTPUT, однако в первом случае пароль не передается в драйвер, а во втором данные в систему. Как быть в таком случае? И еще. Есть такая задача программирования: по нажатию кнопки - однократное чтение настроек устройства, их отображение, изменение и по нажатию кнопки их однократная запись обратно в устройство. Задача похожа на предыдущую. Первых два пункта задачи я реализовал. Управление однократностью чтения осуществляется через атрибут Состояние. Но когда канал выключен, я не могу изменить его значение (кнопка с XOR) и просмотреть это на экране. Посоветуйте, как лучше реализовать данную задачу, какие каналы и программы использовать.
Сообщения / Posts 23 | Из / From: Ukraine
| IP / IP: IP адрес / IP address |
отправлено / posted
В релизе 5.10 реализован алгоритм подъема через драйвер и записи в СПАД архива из устройства.
Остальные вопросы, если они еще актуальны, я готов с Вами обсудить по e-mail, т.к. они требуют значительного углубления в задачу, что для форума неспецифично.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |