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


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