Изначально предполагается общение хоста с прибором, посредством ASCII символов.
Где сам протокол посылки состоит из запроса ENQ с хоста , ответа прибора ACK, отправки посылки с хоста STX, "TESTTEXT", ETX, CR, LF, ответа от прибора ACK и завершения сессии хостом EOT.
Сам код:
#!/usr/bin/python
import os
import time
import serial
import sqlite3
import requests
conn = sqlite3.connect("uart.db")
cursor = conn.cursor()
port = serial.Serial("/dev/ttyUSB0", baudrate=9600, timeout=1,bytesize=8,parity=serial.PARITY_NONE,stopbits=1)
print("go")
m=''
v=0
URL = "http://192.168.2.80/zxf.php?vx=uart-send"
x=1
while True:
rcv = port.read(1)
if rcv == '\x05':
print ('send-05')
port.write("\x06")
print ("host-send-06\x06")
elif rcv =='\x0A':
print ('end-text')
port.write("\x06")
print ("host-send-06\x06")
elif rcv == '\x04':
print ('end-transmit')
print(m)
albums = [('insert',m)]
cursor.executemany("INSERT INTO msg (P0,P1) VALUES (?,?)", albums)
conn.commit()
PARAMS ={'msg': m }
r = requests.get(url=URL,params=PARAMS)
m=''
print (r.text)
#sending from host
elif rcv == '\x06':
print ("send-06\x06")
port.write("\x02")
port.write("text")
port.write("\x03")
port.write("D4")
port.write("\0D\0A")
print ("host-send-text")
print ("wait-confirm")
elif rcv == '\x15':
print ("NAK - 15")
else:
m+=rcv
# print('.'+rcv)
Интересует часть начиная с sending from host
Я прибору передаю символ \x05 и если получаю ответ \x06, начинаю отправку посылки (Начало текста , сам текст, конец текста, перевод каретки, и перевод строки).
После этого прибор возвращает хосту Подтверждаю! ACK
Вопрос звучит так:
Каким образом мне передать второй раз условие
elif rcv == '\x06':
в котором
port.write
будет иметь значение EOT? Это нужно делать только после получения подтверждения что на хост второй раз пришло ACK (\x06).
Я пробовал вариант делать
time.sleep()
или прописывать уже внутри elif условие if получаем \x06 true а если else то false.
И как бы я не старался все равно сначала отрабатывает код с хоста а после только приходит от прибора \x06.
PS: Заранее прошу не судить за возможно сумбурное объяснение проблемы и за корявый код.