У меня есть устройство, которое работает на serial communication
.Я пишу код Python, который будет отправлять некоторые команды для получения данных с устройства.
Есть три команды.
1.COMMAND - sop
Device does its internal calculation and sends below data
Response - "b'SOP,0,921,34,40,207,0,x9A\r\n'"
2.COMMAND - time
This gives a date time values which normally do not change untill the device is restarted
3.START - "\r\r" or (<cr><cr>)
This command puts the device in responsive mode after which it responds to above commands. This command is basically entering <enter> twice & only have to do once at the start.
Теперь проблема, с которой я сталкиваюсь, заключается в том, что частота данных, получаемых из команды sop
, не является фиксированной, и, следовательно, данные принимаются в любое время.Эту команду также нельзя остановить после запуска, поэтому, если я запускаю другую команду, например time
, и читаю данные, я не получаю значения времени, и они когда-нибудь объединяются с данными sop
.Ниже приведен код, который я использую:
port = serial.Serial('/dev/ttyS0',115200) #Init serial port
port.write(("\r\r".encode())) #Sending the start command
bytesToRead = port.in_waiting #Checking data bytesize
res = port.read(bytesToRead) #Reading the data which is normally a welcome msg
port.reset_input_buffer() #Clearing the input serial buffer
port.reset_output_buffer() #Clearing the output serial buffer
port.write(("sop\r".encode())) #Sending the command sop
while True:
time.sleep(5)
bytesToRead = port.in_waiting
print(bytesToRead)
res = port.read(bytesToRead)
print(res)
port.reset_input_buffer()
port.write(("time\r".encode()))
res = port.readline()
print(res)
Используя вышеупомянутую команду, я иногда не получаю значение времени после выполнения его команды или иногда оно объединяется с командой sop
.Также с помощью команды sop я получил много данных в течение sleep(5)
, из которых мне нужно получить последние данные.Если я не включу sleep(5)
, я пропущу данные sop
, и они будут получены после выполнения команды time
.
Я надеялся, что кто-нибудь может указать мне правильное направление, как разработать его лучше.Кроме того, я думаю, что это легко сделать с помощью обработчика прерываний, но я не нашел ни одного кода о псевдо-прерываниях.Может ли кто-нибудь предложить какой-нибудь хороший код для использования прерываний в pyserial.
Спасибо