Обработка сигналов RTS, CTS, DTR и DSR
Состояние линий RTS, CTS, DTR и DSR может передаваться между VSP и DS. Это означает, что VSP может удалённо управлять состоянием выходов RTS и DTR последовательного порта на DS, а DS может уведомлять VSP об изменениях состояния входов CTS и DSR своего последовательного порта. В этом разделе подробно описано, как это работает.
Выходы RTS и DTR последовательного порта DS
Когда приложению нужно изменить состояние линии RTS или DTR, VSP отправляет в DS соответствующую команду on-the-fly. Вот как это отражается в Port Monitor:
12/16/03 09:46:24 - COM3 (INFO): "On-the-Fly" command for 192.168.100.92: set RTS to low...success
12/16/03 09:46:27 - COM3 (INFO): "On-the-Fly" command for 192.168.100.92: set RTS to high...success
12/16/03 10:05:06 - COM3 (INFO): "On-the-Fly" command for 192.168.100.92: set DTR to low...success
12/16/03 10:05:06 - COM3 (INFO): "On-the-Fly" command for 192.168.100.92: set DTR to high...success
DS всегда отвечает на каждую такую команду кодом состояния A (OK) *. Выполнит ли DS команду на самом деле, зависит от текущей настройки DS:
Если приложение работает с отключённым управлением потоком RTS/CTS (то есть VSP отправил параметр Flow Control (FC) = 0), DS обрабатывает все команды on-the-fly, связанные с RTS. Если приложение работает с включённым управлением потоком RTS/CTS (VSP отправил параметр Flow Control (FC) = 1), DS игнорирует все команды on-the-fly, связанные с RTS (но всё равно отвечает A). Это происходит потому, что в этом режиме DS самостоятельно управляет линией RTS, и её функция - регулировать поток данных от подключённого последовательного устройства в последовательный порт DS (см. также настройку Flow Control (FC)).
Что касается линии DTR, обработка команд on-the-fly, связанных с DTR, зависит от настройки DTR Mode (DT). Если эта настройка равна 0 (idle), DS обрабатывает все команды, связанные с DTR. Если она равна 1 (connection mode), DS игнорирует все такие команды. Это происходит потому, что в этом режиме DS самостоятельно управляет линией DTR, и её функция - отражать текущее состояние соединения данных.
Входы CTS и DSR последовательного порта DS
Изменения состояния входов CTS и DSR последовательного порта DS передаются в VSP с помощью уведомительных сообщений (J). Чтобы уведомления работали, DS сначала должен получить информацию о том, состояние каких линий нужно передавать в VSP. Это задаётся через параметр Notification Bitmask (NB). В зависимости от режима управления потоком, выбранного приложением, VSP задаёт битовую маску одним из двух способов:
- Если приложение работает с отключённым управлением потоком RTS/CTS, VSP настраивает DS на реакцию на изменения обеих линий: CTS и DSR.
- Если приложение работает с включённым управлением потоком RTS/CTS, VSP настраивает DS на реакцию только на изменения линии DSR. Это связано с тем, что при включённом управлении потоком линия CTS обрабатывается на уровне DS: она используется для регулировки потока последовательных данных из DS в последовательное устройство.
Так как битовая маска зависит от выбранного управления потоком, она перенастраивается каждый раз, когда приложение меняет режим управления потоком:
--- приложение отключает управление потоком RTS/CTS, поэтому битовая маска включает линию CTS ---
12/16/03 10:10:18 - COM3 (INFO): "On-the-Fly" command for 192.168.100.92: set flowcontrol to none...success
12/16/03 10:10:18 - COM3 (INFO): "On-the-Fly" command for 192.168.100.92: enabling line change notification for DSR, CTS...success
---
--- приложение включает управление потоком RTS/CTS, поэтому битовая маска исключает линию CTS ---
12/16/03 10:10:20 - COM3 (INFO): "On-the-Fly" command for 192.168.100.92: set flowcontrol to RTS/CTS...success
12/16/03 10:10:20 - COM3 (INFO): "On-the-Fly" command for 192.168.100.92: enabling line change notification for DSR...success
Дополнительные замечания об уведомительных сообщениях
Так же как команды on-the-fly могут отправляться методом out-of-band или inband, уведомительные сообщения тоже могут отправляться out-of-band или inband. Когда настройка Inband (IB) DS установлена в 1 (включено), DS отправляет уведомления inband; в противном случае DS отправляет уведомления out-of-band.
Чтобы уведомления inband работали, дополнительная настройка DS не требуется (помимо предварительной настройки, необходимой для того, чтобы DS вообще принимал команды inband - см. подготовку DS к доступу inband).
Чтобы уведомления out-of-band работали корректно, настройка Notification Destination (ND) DS должна быть установлена в 0 (last known port). В этом случае DS отправляет свои уведомления на порт, с которого он последний раз получил команду on-the-fly. Так как VSP отправляет команды on-the-fly с «автоматического» порта, DS заранее не может знать, какой будет номер этого порта. Поэтому DS не отправит уведомления, пока не получит хотя бы одну команду on-the-fly от VSP. Это не является ограничением, так как VSP формирует команды on-the-fly сразу после открытия и/или установления соединения (см. когда VSP отправляет команды on-the-fly).
С уведомительными сообщениями связаны определённые ограничения:
- Уведомления формируются только тогда, когда установлено соединение данных между VSP и DS. Это отличается от команд on-the-fly, которые VSP может отправлять в любой момент, даже если соединение данных ещё не установлено.
- Изменение состояния входа CTS или DSR последовательного порта DS распознаётся с задержкой 20 миллисекунд. То есть линия должна изменить состояние и оставаться в новом состоянии не менее 20 миллисекунд, чтобы изменение было обнаружено и уведомление отправлено в VSP.
* То есть при условии, что команды on-the-fly вообще включены.