Проблема последовательной связи в аппаратном интерфейсе с платформой Python - PullRequest
0 голосов
/ 27 мая 2019

У меня есть одно оборудование, которое использует протокол асинхронного последовательного интерфейса, скорость 9600 бод, # Стартовые биты 1, # Биты данных 8, # Стоповые биты 1, Четность нет.Когда я связываю свое оборудование с помощью скрипта Python, используя устройство cp2102, это временное оборудование не отвечает, но когда я пытаюсь связать то же самое оборудование с Arduino nano, оно работает правильно.

Рабочий код Arduino:

void volt_currentTest()
{
 Serial.write(0xDD);
 Serial.write(0xA5);
 Serial.write(0x03);
 Serial.write(0x00);
 Serial.write(0xFF);
 Serial.write(0xFD);
 Serial.write(0x77);

  while(c != 0x77)
  {
    if(Serial.available())
    {
      if((c = Serial.read()) != -1)
      {
           Serial.println(c , HEX);
        d[i] = c;
        i++;
      }
    }   
  }
}

Код Python:

import serial
ser = serial.Serial(
    'COM9', 9600,   
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE
)

'''data = b'\xdd\xa5\x03\x00\xff\xfd\x77'
ser.write(data)'''

ser.write(b'\xDD')
ser.write(b'\xA5')
ser.write(b'\x03')
ser.write(b'\x00')
ser.write(b'\xFF')
ser.write(b'\xFD')
ser.write(b'\x77')

'''
ser.write('\xDD\r\n'.encode())
ser.write('\xA5\r\n'.encode())
ser.write('\x03\r\n'.encode())
ser.write('\x00\r\n'.encode())
ser.write('\xFF\r\n'.encode())
ser.write('\xFD\r\n'.encode())
ser.write('\x77\r\n'.encode())
'''

while True:
    response = ser.read()

    '''response = ser.readline()
      '''
     print(response)

Так что у кого-нибудь есть идеи, почему он не работает .....

1 Ответ

0 голосов
/ 27 мая 2019

Возможно, вам нужно вызвать ser.flush() после всех write (), но перед циклом while.

serial. Python по умолчанию использует буферизованный ввод / вывод - все ваши записи ждут, пока вы не вызовете flush (), после чего они отправляются в одном пакете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...