Используя контакты управления

Управление контактами

Как описано в Сигналах Последовательного порта и Назначениях контактов, 9-контактные последовательные порты включают шесть контактов управления. Свойства, сопоставленные с контактами управления последовательным портом, следующие:

Свойства контакта управления последовательным портом

PropertyName

Описание

DataTerminalReady

Задайте состояние контакта DTR.

FlowControl

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

PinStatus

Укажите на состояние CD, CTS, DSR и контактов RI.

RequestToSend

Задайте состояние контакта RTS.

Сигнализация о присутствии подключенных устройств

DTEs и DCEs часто используют CD, DSR, RI и контакты DTR, чтобы указать, устанавливается ли связь между устройствами последовательного порта. Если связь устанавливается, можно начать писать или считывать данные.

Можно контролировать состояние CD, DSR и контактов RI со свойством PinStatus. Можно задать или контролировать состояние контакта DTR со свойством DataTerminalReady.

Следующий пример иллюстрирует, как эти контакты используются, когда два модема соединяются друг с другом.

Соединение двух модемов

Этот пример (показанный на машине Windows®) соединяет два модема друг с другом через тот же компьютер и иллюстрирует, как можно контролировать коммуникационное состояние для компьютерных модемных соединений, и для соединения модем-модем. Первый модем соединяется с COM1, в то время как второй модем соединяется с COM2:

  1. Создайте инструментальные объекты — После того, как модемы включаются, объект последовательного порта, s1 создается для первого модема и объекта последовательного порта, s2 создается для второго модема.

    s1 = serial('COM1');
    s2 = serial('COM2');
  2. Соединитесь с инструментамиs1 и s2 соединяются с модемами. Поскольку значением по умолчанию для свойства ReadAsyncMode является continuous, данные асинхронно возвращены во входные буферы, как только это доступно от модемов.

    fopen(s1)
    fopen(s2)

    Поскольку значением по умолчанию свойства DataTerminalReady является on, компьютер (терминал) теперь готов обмениваться данными с модемами. Можно проверить, что модемы (наборы данных) готовы связаться с компьютером путем исследования значения контакта Data Set Ready с помощью thePinStatus свойство.

    	s1.Pinstatus
    
    ans = 
        CarrierDetect: 'off'
          ClearToSend: 'on'
         DataSetReady: 'on'
        RingIndicator: 'off'

    Значением поля DataSetReady является on, потому что оба модема были включены, прежде чем они были соединены с объектами.

  3. Сконфигурируйте свойства — Оба модема сконфигурированы для скорости в бодах 2 400 бит в секунду и терминатора строки возврата каретки (CR).

    s1.BaudRate = 2400;
    s1.Terminator = 'CR';
    s2.BaudRate = 2400;
    s2.Terminator = 'CR';
  4. Запишите и считайте данные — Запись команда atd к первому модему. Эта команда помещает модем “от рычага”, который эквивалентен ручному подъему телефонного получателя.

    fprintf(s1,'atd')

    Запишите команду ata во второй модем. Эта команда помещает модем в “режим ответа”, который обеспечивает его, чтобы соединиться с первым модемом.

    fprintf(s2,'ata')

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

    s1.PinStatus
    
    ans = 
        CarrierDetect: 'on'
          ClearToSend: 'on'
         DataSetReady: 'on'
        RingIndicator: 'off'

    Можно также проверить соединение модем-модем путем чтения описательного сообщения, возвращенного вторым модемом.

    s2.BytesAvailable
    
    ans =
        25
    
    out = fread(s2,25);
    char(out)'
    
    ans =
    ata
    CONNECT 2400/NONE

    Теперь повредите связь между этими двумя модемами путем конфигурирования свойства DataTerminalReady к off. Можно проверить, что модемы отключаются путем исследования значения контакта обнаружения несущей.

    s1.DataTerminalReady = 'off';
    s1.PinStatus
    
    ans = 
        CarrierDetect: 'off'
          ClearToSend: 'on'
         DataSetReady: 'on'
        RingIndicator: 'off'
  5. Разъединитесь и вымойтесь — Разъединение объекты от модемов и удалите объекты из памяти и из рабочей области MATLAB®.

    fclose([s1 s2])
    delete([s1 s2])
    clear s1 s2

Управление потоком данных: Квитирование

Управление потоком данных или квитирование являются методом, используемым для передачи между DCE и DTE, чтобы предотвратить потерю данных во время передачи. Например, предположите, что ваш компьютер может получить только ограниченный объем данных, прежде чем это должно будет быть обработано. Когда этот предел достигнут, сигнал квитирования передается к DCE, чтобы прекратить отправлять данные. Когда компьютер может принять больше данных, другой сигнал квитирования передается к DCE, чтобы продолжить отправлять данные.

Если поддержано вашим устройством, можно управлять потоком данных с помощью одного из этих методов:

Примечание

Несмотря на то, что можно смочь сконфигурировать устройство и для аппаратного квитирования и для программного квитирования одновременно, программное обеспечение Instrument Control Toolbox™ не поддерживает это поведение.

Можно задать метод управления потока данных со свойством FlowControl. Если FlowControl является hardware, то аппаратное квитирование используется, чтобы управлять потоком данных. Если FlowControl является software, то программное квитирование используется, чтобы управлять потоком данных. Если FlowControl является none, то никакое квитирование не используется.

Аппаратное квитирование

Аппаратное квитирование использует определенные контакты последовательного порта, чтобы управлять потоком данных. В большинстве случаев это РТС и CTS контакты. Аппаратное квитирование с помощью этих контактов описано в РТС и CTS контактах.

Если FlowControl является hardware, то РТС и CTS контакты автоматически управляемы DTE и DCE. Можно возвратить значение контакта CTS со свойством PinStatus. Можно сконфигурировать или возвратить значение контакта RTS со свойством RequestToSend.

Примечание

Некоторые устройства также используют DTR и DSR контакты для квитирования. Однако эти контакты обычно используются, чтобы указать, что система готова к коммуникации и не используется, чтобы управлять передачей данных. Для программного обеспечения Instrument Control Toolbox оборудование, квитирующее всегда, использует РТС и CTS контакты.

Если ваше устройство не использует аппаратное квитирование стандартным способом, то вы можете должны быть вручную сконфигурировать свойство RequestToSend. В этом случае необходимо сконфигурировать FlowControl к none. Если FlowControl является hardware, то значение RequestToSend, которое вы задаете, не может соблюдаться. Обратитесь к документации устройства, чтобы определить ее определенное поведение контакта.

Программное квитирование

Программное квитирование использует определенные символы ASCII, чтобы управлять потоком данных. Эти символы, известные как Xon и Xoff (или XON и XOFF), описаны ниже.

Символы программного квитирования

Символ

Целочисленное значение

Описание

Xon

17

Возобновите передачу данных.

Xoff

19

Приостановите передачу данных.

При использовании программного квитирования управляющие символы отправляются по линии передачи тот же путь как регулярные данные. Поэтому вам нужны только TD, RD и контакты GND.

Основной недостаток программного квитирования - то, что вы не можете записать символы Xon или Xoff, в то время как числовые данные пишутся в инструмент. Это вызвано тем, что числовые данные могут содержать 17 или 19, который лишает возможности различать управляющие символы и данные. Однако можно записать Xon или Xoff, в то время как данные асинхронно считываются из инструмента, потому что вы используете и TD и контакты RD.

Используя программное квитирование.  Предположим, что вы хотите использовать программное управление потоком в сочетании со своим приложением последовательного порта. Для этого необходимо сконфигурировать инструмент и объект последовательного порта для программного управления потоком. Для объекта последовательного порта s соединился с осциллографом Tektronix® TDS 210, эта настройка выполняется со следующими командами.

fprintf(s,'RS232:SOFTF ON')
s.FlowControl = 'software';

Чтобы приостановить передачу данных, вы пишете численному значению 19 (Xoff) к инструменту.

fwrite(s,19)

Чтобы возобновить передачу данных, вы пишете численному значению 17 (Xon) к инструменту.

fwrite(s,17)