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

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

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

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

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

setRTS

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

setDTR

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

FlowControl

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

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

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

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

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

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

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

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

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

    Можно проверить, что модемы (наборы данных) готовы связаться с компьютером путем исследования значения контакта Data Set Ready с помощью 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 функция. Эта команда помещает модем “от рычага” и эквивалентна ручному подъему телефонного приемника.

    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, затем никакое квитирование не используется.

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

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

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

Примечание

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