ZPL

 avatar
unknown
python
a month ago
2.0 kB
11
Indexable
import socket
import time


def send_zpl_command_with_retries(zpl_command, printer_ip, port=9100, buffer_size=1024, timeout=5, max_retries=3):
    """
    Wysyła komendę ZPL do drukarki Zebra przez TCP/IP, odbiera odpowiedź,
    a jeśli brak odpowiedzi w ciągu 'timeout' sekund, ponawia wysyłanie do maksymalnej liczby prób.

    :param zpl_command: Komenda ZPL do wysłania.
    :param printer_ip: Adres IP drukarki.
    :param port: Port TCP/IP drukarki (domyślnie 9100).
    :param buffer_size: Rozmiar bufora do odbioru danych (domyślnie 1024).
    :param timeout: Czas oczekiwania na odpowiedź w sekundach (domyślnie 5).
    :param max_retries: Maksymalna liczba prób wysłania komendy (domyślnie 3).
    :return: Odpowiedź od drukarki jako string lub None, jeśli nie udało się uzyskać odpowiedzi.
    """
    for attempt in range(max_retries):
        try:
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.settimeout(timeout)
            sock.connect((printer_ip, port))
            sock.sendall(zpl_command.encode('utf-8'))

            # Odbieranie odpowiedzi
            response = sock.recv(buffer_size).decode('utf-8')
            print(f"Odpowiedź od drukarki: {response}")
            return response
        except socket.timeout:
            print(f"Wysłano komendę do drukarki, próba {attempt + 1}/{max_retries}.")
        except Exception as e:
            print(f"Błąd podczas wysyłania danych: {e}")
        finally:
            sock.close()

        # Odczekaj chwilę przed kolejną próbą
        time.sleep(1)

    print("Nie udało się uzyskać odpowiedzi od drukarki po kilku próbach.")
    return None


# Komenda ZPL, którą chcesz wysłać
zpl_command = '! U1 getvar "sensor.peeler"'
printer_ip = "10.0.10.179"  # Zastąp prawidłowym adresem IP drukarki

# Wysyłanie komendy z powtórzeniami
response = send_zpl_command_with_retries(zpl_command, printer_ip)
Leave a Comment