import socket
import time
import datetime
import os
HOST = "192.168.100.1"
PORT = 23
LOG_FILE = "C:/laser_time/report.csv"
# Создаём папку для отчётов, если её нет
os.makedirs(os.path.dirname(LOG_FILE), exist_ok=True)
def connect_to_laser():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(5)
s.connect((HOST, PORT))
return s
print("Подключаемся к станку...")
s = connect_to_laser()
print("✅ Подключено. Слушаем поток команд...")
start_time = None
last_activity = time.time()
idle_limit = 3 # секунд простоя, после которых считаем резку завершённой
while True:
try:
data = s.recv(1024)
now = time.time()
if data:
if start_time is None:
start_time = datetime.datetime.now()
print("▶ Резка началась:", start_time.strftime("%H:%M:%S"))
last_activity = now
# Если данные перестали идти дольше idle_limit
if start_time and (now - last_activity > idle_limit):
end_time = datetime.datetime.now()
duration = end_time - start_time
with open(LOG_FILE, "a", encoding="utf-8") as f:
f.write(f"{start_time.date()};{start_time.time()};{end_time.time()};{duration.total_seconds():.1f}\n")
print("■ Резка завершена. Длительность:", duration)
start_time = None
except (ConnectionResetError, BrokenPipeError, socket.timeout):
print("Соединение разорвано, пробуем переподключиться...")
time.sleep(2)
try:
s = connect_to_laser()
print("✅ Переподключено")
except:
print("❌ Не удалось переподключиться, ждём...")
time.sleep(5)
except KeyboardInterrupt:
print("\nОстановлено вручную")
break