Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 7, 2021 08:39:53

Nghtwsh
Зарегистрирован: 2021-04-07
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Pyserial

Суть проблемы: есть ПО которое через csd модемы опрашивает показания счетчиков, но если модем совершает серию звонков на номера которые не в сети, Мегафон блокирует вызов с этой сим карты до момента перезагрузки модема.
Чтобы этого избежать написал код.

i=1
while i <= 10:
import serial
import time

ser = serial.Serial(port='COM7' , baudrate=9600 , bytesize=8 , parity='N' , stopbits=1 , timeout=1 , rtscts=False ,
dsrdtr=False)
cmd = “AT+CFUN=1,1\r”
ser.write(cmd.encode())
msg = ser.read(64)
print(msg)
time.sleep(300)
print(“reset”)
ser.close()

Если com порт не занят все работает отлично, но если в момент открытия com порта он занят ПО, то вылетает ошибка “serial.serialutil.SerialException: could not open port ‘COM7’: PermissionError(13, ‘Отказано в доступе.’, None, 5”. Собственно как можно обойти эту проблему ?

Офлайн

#2 Апрель 7, 2021 10:43:56

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Pyserial

Nghtwsh для обработкт ошибок есть try-except
примерно както так:

 while True:
    try:
        ser = serial.Serial(port='COM7' , baudrate=9600 , bytesize=8 , parity='N' , stopbits=1 , timeout=1 , rtscts=False , dsrdtr=False)
    except serial.serialutil.SerialException:
        time.sleep(10) # пауза перед повторным открытием.
    else:
        break       



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Апрель 7, 2021 10:45:01)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version