This is topic КОНТР_1 типа "Запрос-ответ-подтверждение" 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/000082.html

Posted by Svetlov (Участник № / Member № 1193) on :
 
Возможно ли реализовать драйвер типа не "запрос-ответ", а "запрос-ответ-подтверждение"?
Если да, то как?

Про функцию Check_xxx сказано - "Если при этом значение параметра max_send больше 0, то осуществляется посылка по последовательному порту строки из буфера rbuf. "
Сначала я подумал, что это то что надо, но ведь я не могу изменить rbuf - он нужен для функции Get_xxx.
Тогда для чего это? И как мне послать контроллеру подтверждение принятия данных?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
В функции GET_xxx есть такая опция (см.документацию)
"Если младший бит старшего байта параметра type_cnv равен 1 (0x01000000), то следующий вызов драйвера выполняется для того же самого канала (переход к обработке очередного канала не производится). Это свойство используется при разработке многопроходных драйверов."

Вам следует после получения ответа и его разборки при повторном обращении к драйверу от того же канала в функции SET_xxx задать, что надо передавать, но количество байтов в ответе указать равным 0.
 
Posted by sugar (Участник № / Member № 1198) on :
 
Есть ли еще какое-либо условие для для того чтобы драйвер продолжал обработку одного канала и не переходил к следущему?
type_cnv поставил 0x01000000 ,но каналы продолжают вызываться по очереди без задержки.
Мне необходимо реализовать цикл обработки канала запрос-ответ-запрос-ответ-запрос-ответ-запрос-ответ.Осуществить 4 прохода при обработке одного канала.Что я мог упустить?
Для отладки вел лог файл в который записывал удаленный адрес канала ia.c[3] ,который на каждом канале индивидуальный.Каждая новая строка лога шла с новым удаленным адресом,хотя должен быть по моему мнению один и тот же.
В функцию Get_xxx передается удаленный адрес ia.c[i] канала "инициатора" или "найденного"?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Просим прощения за неточность в документации.
"Если младший бит первого байта параметра type_cnv равен 1 (0x0100), то следующий вызов драйвера выполняется для того же самого канала (переход к обработке очередного канала не производится). Это свойство используется при разработке многопроходных драйверов."
 
Posted by sugar (Участник № / Member № 1198) on :
 
Поставил type_cnv=0x0100 ,но ничего не поменялось каналы как продолжались вызываться по очереди так и дальше меняются на новые.
В функцию Get_xxx передается удаленный адрес ia.c[i] канала "инициатора" или "найденного"?
В чем может быть дело?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
В функцию Get_xxx передается удаленный адрес "канала-инициатора" обмена.
 
Posted by sugar (Участник № / Member № 1198) on :
 
Для каких алгоритмов обработки даных можно написать многопроходный драйвер(DATA11,BLOCKDATA11,одиночных)?
А канал инициатор при type_cnv = 0x0100 меняется на другой или должен остаться тот же самый?
 
Posted by romer (Участник № / Member № 2) on :
 
При выдаче функцией Get_xxx type_cnv = 0x0100 разбор ответа функцией Compare_xxx не осуществляется. МРВ сразу вызывает функцию Set_xxx с удаленным адресом того же канала.
 
Posted by sugar (Участник № / Member № 1198) on :
 
Почему же эта функция c type_cnv=0x0100 не работает, вызывается следующий канал с другим удаленным адресом?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
##
У нас нет возможности детально работать с исходными кодами программ, написанных пользователями.
Режим многопроходности в драйвере проверялся и функционирует.
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2