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

#matlab #serial-port #usbserial #oscilloscope

Вопрос:

Сообщество,

Я использую систему Win 7 с установленным Matlab R2015 с управлением приборами. И осциллограф Tektronix TDS1012, подключенный к моему компьютеру через USB-последовательный разъем. Устройство подключается и распознается ПК и системой управления прибором.

Если я отправляю сообщение программы, прибор принимает его. С другой стороны, при выполнении запросов он считывает предыдущее сообщение программы, отправленное в качестве ответных сообщений. Пример:

 fprintf(deviceObj, '*IDN?')
fscanf(deviceObj)
ans = 
*IDN?
 

Более того, если бы я отправил сообщение программы, как *RST это было сделано, прибор сбросился бы, но он также выводит то же самое сообщение программы

 fprintf(deviceObj, '*RST') #This Line
fscanf(deviceObj)
ans =
*RST
 

ВОПРОС: Чего мне здесь не хватает? Может быть, это мой Usb-последовательный кабель?

PS: вот конфигурация осциллографа (она совпадает с конфигурацией прибора)

 default_val = 

              BaudRate: 9600
     BreakInterruptFcn: ''
             ByteOrder: 'littleEndian'
        BytesAvailable: 0
     BytesAvailableFcn: ''
BytesAvailableFcnCount: 48
 BytesAvailableFcnMode: 'terminator'
         BytesToOutput: 0
              DataBits: 8
     DataTerminalReady: 'on'
              ErrorFcn: ''
           FlowControl: 'none'
       InputBufferSize: 512
                  Name: 'Serial-COM5'
      ObjectVisibility: 'on'
      OutputBufferSize: 512
        OutputEmptyFcn: ''
                Parity: 'none'
             PinStatus: [1x1 struct]
          PinStatusFcn: ''
                  Port: 'COM5'
         ReadAsyncMode: 'continuous'
          RecordDetail: 'compact'
            RecordMode: 'overwrite'
            RecordName: 'record.txt'
          RecordStatus: 'off'
         RequestToSend: 'on'
                Status: 'closed'
              StopBits: 1
                   Tag: ''
            Terminator: 'LF'
               Timeout: 10
              TimerFcn: ''
           TimerPeriod: 1
        TransferStatus: 'idle'
                  Type: 'serial'
              UserData: []
        ValuesReceived: 0
            ValuesSent: 0
>> default_val.PinStatus = 

CarrierDetect: 'off'
  ClearToSend: 'on'
 DataSetReady: 'on'
RingIndicator: 'off'
 

Комментарии:

1. Сначала определите, имеете ли вы дело с локальным эхом или удаленным эхом. Например, путем отправки команд с отсоединенным от области видимости концом USB/последовательного кабеля RS-232.

2. Получаете ли вы какие-либо данные, поступающие из области видимости, смешанные с повторяемыми командами? Если вы слышите обе стороны, это «эхо» (локальное или удаленное). Если вы слышите только себя, это, вероятно, «петля».

3. Всякий раз, когда я пытаюсь получить какие-либо данные или запросы, я слышу только себя. Во время публикации я проверял адаптер, и он уже был в конфигурации обратной связи. Затем я отключаю «локальное эхо» с помощью термита, и все равно остается «эхо». Я бы проверил насчет удаленного эха! Но, это наверняка путь, по которому нужно идти, благодаря вашему комментарию.

4. «это уже было в конфигурации обратной связи», вы этого не хотите. Отключите обратную связь и посмотрите, поможет ли это.

Ответ №1:

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