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

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

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

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

PropertyName Описание

DataTerminalReady

Состояние контакта DTR

FlowControl

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

PinStatus

Состояние CD, CTS, DSR и контактов RI

RequestToSend

Состояние контакта RTS

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

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

Чтобы контролировать состояние CD, DSR и контакты RI, используют свойство PinStatus. Чтобы задать или контролировать состояние контакта DTR, используйте свойство DataTerminalReady.

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

Пример - соединение двух модемов

Этот пример соединяет два модема друг с другом через тот же компьютер и иллюстрирует, как контролировать коммуникационное состояние для компьютерных модемных соединений, и для соединения модем-модем. Первый модем соединяется с 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 с помощью свойства PinStatus.

    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

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

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

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

Примечание

Несмотря на то, что вы можете смочь сконфигурировать свое устройство и для аппаратного квитирования и для программного квитирования одновременно, MATLAB не поддерживает это поведение.

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

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

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

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

Примечание

Некоторые устройства также используют DTR и DSR контакты для квитирования. Однако эти контакты обычно используются, чтобы указать, что система готова к коммуникации и не используется, чтобы управлять передачей данных. В MATLAB оборудование, квитирующее всегда, использует РТС и 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.

Пример: Используя программное квитирование

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

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

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

fwrite(s,19)

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

fwrite(s,17)