Данный алгоритм следует использовать при единичных запросах или при блоковых, если заранее известен порядок размещения значений, которые будут переданы устройством в ответе.
При разборе ответа от контроллера по данному алгоритму МРВ выполняет следующие операции:
1. Осуществляет проход по базе с ее начала. (Повторный проход выполняется с места окончания предыдущего блокового запроса). При этом выбираются каналы с тем же подтипом, дополнением к подтипу и двумя младшими байтами удаленного адреса (ia.i[0] == ia1.i[0]). Количество вызываемых каналов определяется значением параметра q_rec.
2. Если найден канал, удовлетворяющий описанным условиям, то для него вызывается функция zCompare_xxx. В эту функцию передаются удаленные адреса канала-инициатора запроса и найденного канала. В ней надо проанализировать принадлежность выбранного канала к разбираемому блоковому запросу.
Если данные для анализируемого канала в запросе не содержатся, то функция должна вернуть значение 0. В противном случае возвращаемая величина должна быть больше 0, а значение параметра count будет равно индексу элемента в массиве структур RSDATA, содержащего значение для записи в канал.
3. Для найденного канала анализируется элемент p[ind].F.fmt[1] массива структур RSDATA. Значение этого элемента определяет следующие действия:
0 – присвоить входу канала значение элемента p[ind].V.v массива структур RSDATA;
1 – сформировать для канала признак аппаратной недостоверности.
Выход из алгоритма осуществляется либо после прохода по всем каналам, либо при равенстве количества выбранных каналов значению q_rec.