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

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

Как описано в Сигналах Последовательного порта и Назначениях контактов, 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)