Таким образом, часть более крупного проекта должна получить длинную шестнадцатеричную строку символов из последовательного порта с использованием малинового пи. Я думал, что все это работает, но потом обнаружил, что он потерял часть данных в середине строки.Потеря данных в полученной последовательной строке
def BUTTON_Clicked(self, widget, data= None):
ser = serial.Serial("/dev/ex_device", 115200, timeout=3)
RECEIVEDfile = open("RECIEVED.txt", "r+", 0) #unbuffered
#Commands sent out
ser.write("*n\r")
time.sleep(1)
ser.flush()
ser.write("*E")
ser.write("\r")
#Read back string rx'd
RECEIVED= ser.read()
RECEIVED= re.sub(r'[\W_]+', '', RECEIVED) #remove non-alphanumeric characters (caused by noise maybe?)
RECEIVEDfile.write(re.sub("(.{4})", "\\1\n", RECEIVED, 0, re.DOTALL)) #new line every 4 characters
RECEIVEDfile.close
ser.write("*i\r")
ser.close
Это скрипт, используемый для извлечения данных, скорость передачи данных и последовательные команды установлены правильно и скрипт запускается как «небуферизован» (-u), но все же полная строка не сохраняется. Строка составляет примерно 16384 символов, но сохраняется только около 9520 символов (она меняется) (невозможно передать строку для анализа). Кто-нибудь знает, что мне не хватает? Приветствия за любую помощь, которую вы можете мне дать.
Что вы теряете на шаге 'remove not-alphanumeric characters'? Возможно, стоит использовать одно и то же регулярное выражение для подсчета количества удаленных символов и посмотреть, совпадает ли он с отсутствующими данными. – mfitzp
Это тайм-аут на 3 секунды, чтобы получить данные? Можете ли вы попробовать его с тайм-аутом = Нет? – mfitzp
Я полностью удалил синтаксический анализ, чтобы убедиться, что это проблема, но, к сожалению, не имеет успеха. – CaramelElectron