Загвоздка оказалась в том, что в зависимости от типа подключения к оборудованию станции Harris 20-20 (напрямую либо через модем) команду
ETX
необходимо посылать несколько раз.
В ходе работы я сделал 2 функции: одна проверяет доступен ли порт:
def state_port(port): # функция, проверяющая порт на "открыт/не открыт"
try:
ser = serial.Serial(port, # параметры порта
baudrate=9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=1)
return True
ser.close()
except:
return False
Другая - пытается открыть порт:
def open_port(buff, j): # функция, открывающая порт
while j != 0:
ser.write('\x03'.encode())
buff = ser.readlines()
for i in buff:
buff_jr = i.decode()
if 'Welcome' in buff_jr:
return True
else:
j -= 1
Когда удаётся успешно подключиться к станции она в порт отправляет приветствие, в котором присутствует слово
'Welcome'
. Если функция отыскивает это слово в выводе порта, то она возвращает
True
. Если нет -
False
Используя эти функции, уже не составляет проблемы открыть порт на станции, взять системные дату и время и ввести их в станцию, засинхронизировав таким образом время.