# Контроль потока данных

Контроль потока данных (flow control) — это возможность приостанавливать поток данных при асинхронной передаче по запросу удаленной системы. Контроль потока данных необходим, когда скорость обработки принимаемых данных может быть меньше скорости поступления данных.

Случается, что данные поступают со слишком большой скоростью, а у компьютера не хватает процессорных ресурсов, необходимых для их обработки. Тогда, через некоторое время, может наступить переполнение буфера приема, и данные, поступающие от удаленной системы, будут потеряны.

Контроль потока данных можно рассматривать с двух сторон: контроль потока принимаемых данных и контроль потока передаваемых данных. Контроль потока принимаемых данных означает возможность сообщать удаленной стороне о том, что ей следует приостановить передачу данных. Контроль потока передаваемых данных означает возможность правильно отрабатывать запрос удаленной стороны о приостановке передачи данных.

Система Аргус практически никогда не пользуется контролем потока принимаемых данных. Чтением из порта занимается отдельный подпроцесс с повышенным приоритетом, и переполнения буфера приема практически никогда не происходит.

Если использовать 19200-BPS модем на скорости порта 38400, данные будут поступать от компьютера к модему с вдвое большей скоростью, то есть в среднем половину времени входной буфер модема будет заполнен, и модем будет запрашивать о приостановке передачи потока. Чтобы предотвратить потери данных, система Аргус должна правильно отрабатывать запросы модема на приостановку передачи потока.

Существует два типа контроля потока данных — аппаратный и программный.

## Аппаратный контроль потока данных

Аппаратный контроль потока данных осуществляется при помощи контрольных сигналов последовательного кабеля. Название и значение этих сигналов соответствует спецификации RS-232.

Аппаратный контроль потока данных, в соответствии со стандартами, требует, чтобы модем поднял сигнал CTS перед тем, как PC начнет передавать символы. PC, в свою очередь, должен опустить сигнал RTS, когда его входной заполнится во время приема. Как только PC обработает весь входной буфер, он снова поднимает RTS.

Вот и все, что Вам необходимо знать об аппаратном контроле потока данных при работе с системой Аргус. Далее следует более детальный обзор темы.

PC |  | Устройство
data input | п | data output
data output | р | data input
    DTR
| р |
    DSR
    RTS
| р |
    CTS
    DSR
| п |
    DTR
    CTS
| п |
    RTS

По проводам data input/data output происходит последовательная асинхронная передача данных, остальные сигналы соответствуют спецификации RS-232.

    DTR
| data terminal ready | готовность устройства
    RTS
| request to send | запрос на посылку
    DSR
| data set ready | набор данных готов
    CTS
| clear to send | передача разрешена

Каждый сигнал может находиться в одном из двух состояний: поднятом или опущенном (включен или выключен; on или off; high или low; raised или lowered; asserted или de-asserted).

Сигнал DTR поднимается системой Аргус сразу после инициализации COM-порта и означает, что Аргус работает с этим портом. RTS тоже поднимается после инициализации COM-порта, и означает готовность Аргуса принимать данные. Так как чтением из порта в системе Аргус занимается отдельный подпроцесс с повышенным приоритетом, и переполнения буфера приема практически никогда не происходит, сигнал RTS поднят постоянно.

DSR — это входной сигнал от устройства, означающий, что устройство подсоединено и включено, но не обязательно готово принимать данные. CTS это входной сигнал от устройства, означающий, что устройство, кроме того, что подсоединено и включено, готово к приему данных.

DTR и DSR применяются в системе Аргус не контроля потока данных, а для индикации готовности к работе. Для аппаратного контроля потока в системе Аргус применяются RTS/CTS — если это не запрещено в диалоге настройки порта. Эти сигналы обрабатываются драйвером Windows автоматически. При обнаружении заполнения буфера приема драйвер опускает RTS. При обнаружении падения сигнала CTS драйвер приостанавливает передачу.

## Программный контроль потока данных

Программный контроль потока данных (XOn/XOff flow control) осуществляется двумя специальными символами: символ приостановления потока — XOff (ASCII 19) и символ продолжения потока — XOn (ASCII 17). Обычно в системе Аргус программный контроль потока данных не используется, но если разрешить его в диалоге настройки порта, коммуникационный драйвер будет приостанавливать передачу при получении символа XOff и продолжать при получении XOn.