Используйте функцию последовательного управления Контактов

Управляющие контакты

Как описано в Signals Serial Port и Назначения Контактов, девятиконтактные последовательные порты включают шесть контактов управления. Функции и свойства, сопоставленные с последовательными контактами управления портами, следующие.

ФункцияЦель
getpinstatus

Получите статус последовательного контакта.

setRTS

Укажите состояние контакта RTS.

setDTR

Укажите состояние контакта DTR.

FlowControl

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

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

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

Можно контролировать состояние контактов CD, DSR и RI с помощью getpinstatus функция. Можно задать состояние контакта DTR с помощью setDTR функция.

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

Соедините два модема

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

  1. Подключитесь к инструментам - После включения модемов объект последовательного порта s1 создается для первого модема и объекта последовательного порта s2 создается для второго модема. оба модема сконфигурированы для скорости передачи данных 9600 бит в секунду.

    s1 = serialport("COM1",9600);
    s2 = serialport("COM2",9600);

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

    getpinstatus(s)
    ans = 
    
      struct with fields:
    
          ClearToSend: 1
         DataSetReady: 1
        CarrierDetect: 0
        RingIndicator: 0

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

  2. Сконфигурируйте свойства - Оба модема сконфигурированы для терминатора строки возврата каретки (CR) с помощью configureTerminator функция.

    configureTerminator(s1,"CR")
    configureTerminator(s2,"CR")
  3. Запись и чтение данных - Запись atd команду первому модему, используя writeline функция. Эта команда устанавливает модем «off the hook», и эквивалентна ручному подъему телефонного приемника.

    writeline(s1,'atd')

    Напишите ata команду второму модему с помощью writeline функция. Эта команда переводит модем в «режим ответа», что заставляет его подключиться к первому модему.

    writeline(s2,'ata')

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

    getpinstatus(s)
    ans = 
    
      struct with fields:
    
          ClearToSend: 1
         DataSetReady: 1
        CarrierDetect: 1
        RingIndicator: 0

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

    s2.NumBytesAvailable
    
    ans =
    
         25
    out = read(s2,25,"uint32")
    out =
    ata
    CONNECT 2400/NONE

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

    setDTR(s1,false)
    getpinstatus(s1)
    
    ans = 
    
      struct with fields:
    
          ClearToSend: 1
         DataSetReady: 1
        CarrierDetect: 0
        RingIndicator: 0
  4. Отключить и очистить - Очистить объекты от MATLAB® рабочей области, когда вы сделаны.

    clear s1 s2

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

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

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

Примечание

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

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

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

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

Если FlowControl является hardware, затем контакты RTS и CTS автоматически управляются DTE и DCE. Вы можете вернуть значение контакта CTS с getpinstatus функция. Вы можете сконфигурировать значение контакта RTS с помощью setRTS функция.

Примечание

Некоторые устройства также используют контакты DTR и DSR для квитирования. Однако эти контакты обычно используются для указания того, что система готова к передаче данных, и не используются для управления передачей данных. В MATLAB аппаратное квитирование всегда использует контакты RTS и CTS.

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

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

Для программного квитирования ПО используются специальные символы ASCII. В следующей таблице описываются эти символы, известные как Xon и Xoff (или XON и XOFF).

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

Символ

Целое Значение

Описание

Xon

17

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

Xoff

19

Пауза передачи данных.

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

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

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

writeline(s,"RS232:SOFTF ON")
s.FlowControl = "software";

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

write(s,19,"uint32");

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

write(s,17,"uint32");