Итак, у меня есть неосведомленный (может быть?) Вопрос.Я впервые работаю с записью на последовательное устройство.У меня есть кадр [12, 0, 0, 0, 0, 0, 0, 0, 7, 0, X, Y], который мне нужно отправить.X и Y являются значениями контрольной суммы.Мое понимание использования модуля pyserial заключается в том, что мне нужно преобразовать этот фрейм в строковое представление.Хорошо, это нормально, но я запутался в том, в каком формате должны быть объекты. Я пытался сделать
a = [12, 0, 0, 0, 0, 0, 0, 0, 7, 0, X, Y]
send = "".join(chr(t) for t in a)
Но моя путаница связана с тем фактом, что X и Y при использовании chr превращаются в странныестроки (при условии их представления ascii).Например, если X равен 36, chr (x) будет «$» вместо «\ x24».Есть ли способ получить строку, представляющую значение '\ xnn' вместо кода ASCII?Что меня смущает, так это то, что 12 и 7 правильно конвертируют в '\ x0b' и '\ x07'.Я что-то упустил?
Обновление:
Возможно, я не совсем понимаю, как выполняются последовательные записи или что мое устройство ожидает от меня.Это часть моего кода на C, который работает:
fd=open("/dev/ttyS2",O_RDWR|O_NDELAY);
char buff_out[20]
//Next line is psuedo
for i in buff_out print("%x ",buff_out[i]); // prints b 0 0 0 0 0 0 0 9 b3 36
write(fd,buff_out,11);
sleep()
read(fd,buff_in,size);
for i in buff_in print("%x ",buff_in[i]); // prints the correct frame that I'm expecting
Python:
frame = [11, 0, 0, 0, 0, 0, 0, 0, 9] + [crc1, crc1]
senddata = "".join(chr(x) for x in frame)
IEC = serial.Serial(port='/dev/ttyS2', baudrate=1200, timeout=0)
IEC.send(senddata)
IEC.read(18) # number of bytes to read doesn't matter, it's always 0
Правильно ли я поступаю?Очевидно, что вы не можете точно сказать, так как это зависит от устройства, и я не могу дать слишком много подробностей.Но тот ли это правильный формат, в котором serial.send () ожидает данные?