[Python] Erro de abertura na porta serial alternado

Discussão em 'Python' iniciado por Stack, Maio 15, 2025.

  1. Stack

    Stack Membro Participativo

    Oi! Estou fazendo um programa para conectar uma bomba de seringa da marca New Era Pump Systems ao computador, utilizando Python para isso. As primeiras conexões são feitas com sucesso, porém nas segundas ocorre este erro:

    '''Erro ao conectar na porta COM7: Cannot configure port, something went wrong. Original message: PermissionError(13, 'Um dispositivo conectado ao sistema não está funcionando.', None, 31)'''

    Para solucionar, tenho que mudar o baud rate no código e na bomba e rodar de novo, mas sempre funciona apenas a primeira vez. Alguém sabe como posso solucionar isso? Vi falando que a porta pode não ter sido fechada, mas tem uma parte do código para isso.

    O código é este aqui:

    import serial
    from time import sleep

    #Definir a porta em que a bomba está conectada e outros parâmetros

    porta_serial = 'COM7' #Substituir pelo número da porta
    baudrate = 19200 #Velocidade de transmissão de dados da bomba
    timeout = 2 #O timeout é o tempo que o programa aguardará por uma resposta da bomba

    #neste bloco é colocado o código que pode dar erro
    try:
    # Abre a conexão serial
    bomba = serial.Serial(port=porta_serial, baudrate=baudrate, timeout=timeout)
    #passando o tempo de timeout, retorna todos os bytes recebidos até então
    print(f"Conectado com sucesso na porta {porta_serial}")

    # Envia um comando simples para testar
    bomba.write(b'VER\r')
    resposta = bomba.read(100)
    print(f"Resposta: {resposta.decode(errors='ignore')}")

    # Aguardar um tempo para a bomba estar pronta
    sleep(2)


    #neste bloco é colocada a exceção e a ação a partir dela
    #SerialException é usado para identificar erros na abertura da porta serial
    except serial.SerialException as e: #e contém os detalhes do erro
    print(f"Erro ao conectar na porta {porta_serial}: {e}")

    #este bloco rodará se não houver erros no try
    else:
    def fase_1():
    #Define as características que serão aplicadas à bomba na fase 1

    # Define uma fase na função Rate Data
    bomba.write(b'FUN RAT\r') # Define a fase atual como de controle de taxa
    sleep(0.5)

    # Define a taxa de bombeamento (por exemplo, 5.0 mL/min)
    bomba.write(b'RAT 20.0\r')
    sleep(0.5)

    # Define o volume total a ser dispensado (por exemplo, 10.0 mL)
    bomba.write(b'VOL 1.0\r')
    sleep(0.5)

    # Define a direção do bombeamento: INF (infusão) ou WDR (retirada)
    bomba.write(b'DIR INF\r') #'DIR INF' ou 'DIR WDR'
    sleep(0.5)

    # Inicia a bomba
    bomba.write(b'RUN\r')

    sleep(5)

    bomba.write(b'STP\r')

    def fase_2():
    #Define as características que serão aplicadas à bomba na fase 1

    # Define uma fase na função Rate Data
    bomba.write(b'FUN RAT\r') # Define a fase atual como de controle de taxa
    sleep(0.5)

    # Define a taxa de bombeamento (por exemplo, 5.0 mL/min)
    bomba.write(b'RAT 90.0\r')
    sleep(0.5)

    # Define o volume total a ser dispensado (por exemplo, 10.0 mL)
    bomba.write(b'VOL 5.0\r')
    sleep(0.5)

    # Define a direção do bombeamento: INF (infusão) ou WDR (retirada)
    bomba.write(b'DIR INF\r') #'DIR INF' ou 'DIR WDR'
    sleep(0.5)

    # Inicia a bomba
    bomba.write(b'RUN\r')

    sleep(5)

    bomba.write(b'STP\r')

    fase_1()
    fase_2()

    #este bloco sempre roda, independente de erros, e é útil para liberar recursos
    #ou finalizar algo importante
    finally:
    # Garante que a porta será fechada
    if 'bomba' in locals() and bomba.is_open:
    bomba.close()
    print("Porta serial fechada com sucesso.")'''

    Continue reading...

Compartilhe esta Página