Загрузка данных


import socket
import time
import datetime
import os

HOST = "192.168.100.1"
PORT = 23

LOG_FILE = "C:/laser_time/report.csv"
IDLE_LIMIT = 3.0  # сколько секунд "тишины" = конец резки

os.makedirs(os.path.dirname(LOG_FILE), exist_ok=True)

def connect_to_station():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(5)
    s.connect((HOST, PORT))
    s.settimeout(1)
    return s

print(f"Подключаемся к {HOST}:{PORT}...")

while True:
    try:
        station = connect_to_station()
        print("✅ Подключено. Ожидаю команды от UniCut...")
        break
    except Exception as e:
        print(f"❌ Не удалось подключиться: {e}")
        print("Повтор через 5 секунд...")
        time.sleep(5)

start_time = None
last_activity = time.time()

while True:
    try:
        data = station.recv(4096)
        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
            print(f"[{now.strftime('%H:%M:%S')}] {len(data)} байт")

        # Если данных нет дольше 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 socket.timeout:
        # timeout в recv — просто продолжаем слушать
        pass

    except (ConnectionResetError, BrokenPipeError, OSError):
        print("⚠️ Соединение разорвано. Пробую переподключиться...")
        time.sleep(3)
        while True:
            try:
                station = connect_to_station()
                print("✅ Переподключено")
                break
            except:
                print("❌ Станок недоступен, жду...")
                time.sleep(5)

    except KeyboardInterrupt:
        print("\nОстановлено вручную")
        break