ZPL
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