ZPL
unknown
python
10 months ago
2.0 kB
14
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)
Editor is loading...
Leave a Comment