Возможно ли реализовать драйвер типа не "запрос-ответ", а "запрос-ответ-подтверждение"? Если да, то как?
Про функцию 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 :
## У нас нет возможности детально работать с исходными кодами программ, написанных пользователями. Режим многопроходности в драйвере проверялся и функционирует.