interface upd

This commit is contained in:
awe
2025-11-27 18:25:56 +03:00
parent 2742cfe856
commit bfc3949c4d
2 changed files with 118 additions and 61 deletions

View File

@ -1,5 +1,7 @@
import logging import logging
import time import time
import json
from pathlib import Path
from typing import Optional, Dict, Any from typing import Optional, Dict, Any
from datetime import datetime from datetime import datetime
@ -26,7 +28,7 @@ class LaserController:
TaskType format: String-based ("TT_CHANGE_CURR_1", "TT_CHANGE_CURR_2") TaskType format: String-based ("TT_CHANGE_CURR_1", "TT_CHANGE_CURR_2")
""" """
def __init__(self): def __init__(self, config_path: Optional[str] = None):
self.prt = None # Serial port object self.prt = None # Serial port object
self.is_connected = False self.is_connected = False
self.is_running = False self.is_running = False
@ -34,14 +36,78 @@ class LaserController:
self.current_status = LaserStatus() self.current_status = LaserStatus()
self.last_data: Optional[Dict[str, Any]] = None self.last_data: Optional[Dict[str, Any]] = None
# Default PI coefficients (multiplied by 256 as per device protocol) # Load default parameters from JSON
self._load_default_parameters(config_path)
logger.info("LaserController initialized")
def _load_default_parameters(self, config_path: Optional[str] = None) -> None:
"""
Load default parameters from JSON configuration file.
Args:
config_path: Path to JSON config file. If None, uses default location.
"""
try:
# Determine config file path
if config_path is None:
# Default path relative to this file
current_dir = Path(__file__).parent
config_path = current_dir / "RadioPhotonic_PCB_PC_software" / "init_params.json"
else:
config_path = Path(config_path)
# Load JSON file
if not config_path.exists():
logger.warning(f"Config file not found: {config_path}, using hardcoded defaults")
self._set_hardcoded_defaults()
return
with open(config_path, 'r') as f:
config = json.load(f)
# Set parameters from config
self.initial_temperature_1 = config.get("INITIAL_TEMPERATURE_1", 28)
self.initial_temperature_2 = config.get("INITIAL_TEMPERATURE_2", 28.9)
self.initial_current_1 = config.get("INITIAL_CURRENT_1", 33)
self.initial_current_2 = config.get("INITIAL_CURRENT_2", 35)
# PI coefficients (multiplied by 256 as per device protocol)
self.proportional_coeff_1 = int(config.get("PROPORTIONAL_COEFF_1", 10) * 256)
self.proportional_coeff_2 = int(config.get("PROPORTIONAL_COEFF_2", 10) * 256)
self.integral_coeff_1 = int(config.get("INTEGRAL_COEFF_1", 0.5) * 256)
self.integral_coeff_2 = int(config.get("INTEGRAL_COEFF_2", 0.5) * 256)
self.message_id = config.get("MESSAGE_ID", "00FF")
# Additional parameters
self.gui_timeout_interval = config.get("GUI_TIMEOUT_INTERVAL", 5)
self.save_points_number = config.get("SAVE_POINTS_NUMBER", 1000)
logger.info(f"Default parameters loaded from {config_path}")
logger.info(f" Initial T1: {self.initial_temperature_1}°C, T2: {self.initial_temperature_2}°C")
logger.info(f" Initial I1: {self.initial_current_1} mA, I2: {self.initial_current_2} mA")
except json.JSONDecodeError as e:
logger.error(f"Invalid JSON in config file: {e}")
self._set_hardcoded_defaults()
except Exception as e:
logger.error(f"Error loading config file: {e}")
self._set_hardcoded_defaults()
def _set_hardcoded_defaults(self) -> None:
"""Set hardcoded default parameters as fallback."""
self.initial_temperature_1 = 28
self.initial_temperature_2 = 28.9
self.initial_current_1 = 33
self.initial_current_2 = 35
self.proportional_coeff_1 = int(10 * 256) self.proportional_coeff_1 = int(10 * 256)
self.proportional_coeff_2 = int(10 * 256) self.proportional_coeff_2 = int(10 * 256)
self.integral_coeff_1 = int(0.5 * 256) self.integral_coeff_1 = int(0.5 * 256)
self.integral_coeff_2 = int(0.5 * 256) self.integral_coeff_2 = int(0.5 * 256)
self.message_id = "00FF" self.message_id = "00FF"
self.gui_timeout_interval = 5
logger.info("LaserController initialized") self.save_points_number = 1000
logger.info("Using hardcoded default parameters")
def start_cycle(self, parameters: LaserParameters) -> Dict[str, Any]: def start_cycle(self, parameters: LaserParameters) -> Dict[str, Any]:
""" """

View File

@ -348,10 +348,10 @@
<div class="control-section" id="laserManualSection"> <div class="control-section" id="laserManualSection">
<h4 class="control-section-title">Параметры ручного режима</h4> <h4 class="control-section-title">Параметры ручного режима</h4>
<div class="laser-params-table"> <div class="laser-params-table">
<div class="laser-param-cell laser-param-header">Температура лазера 1 (°C)</div> <div class="laser-param-cell laser-param-header">T1 (°C)</div>
<div class="laser-param-cell laser-param-header">Температура лазера 2 (°C)</div> <div class="laser-param-cell laser-param-header">T2 (°C)</div>
<div class="laser-param-cell laser-param-header">Управляющий ток лазера 1 (15-60 мА)</div> <div class="laser-param-cell laser-param-header">Ток L1 (мА)</div>
<div class="laser-param-cell laser-param-header">Управляющий ток лазера 2 (15-60 мА)</div> <div class="laser-param-cell laser-param-header">Ток L2 (мА)</div>
<div class="laser-param-cell laser-param-input"> <div class="laser-param-cell laser-param-input">
<input type="number" class="settings-input" id="laserTemp1" <input type="number" class="settings-input" id="laserTemp1"
@ -374,63 +374,54 @@
<!-- Scan Mode Controls --> <!-- Scan Mode Controls -->
<div class="control-section" id="laserScanSection" style="display: none;"> <div class="control-section" id="laserScanSection" style="display: none;">
<h4 class="control-section-title">Режим сканирования тока лазера 1</h4> <h4 class="control-section-title">Параметры сканирования тока лазера 1</h4>
<div class="laser-params-table">
<!-- Row 1: Headers -->
<div class="laser-param-cell laser-param-header">Мин ток L1 (мА)</div>
<div class="laser-param-cell laser-param-header">Макс ток L1 (мА)</div>
<div class="laser-param-cell laser-param-header">Шаг тока L1 (мА)</div>
<div class="laser-param-cell laser-param-header">Δt (мкс)</div>
<div class="control-subsection"> <!-- Row 2: Inputs -->
<h5 class="control-subsection-title">Параметры сканирования</h5> <div class="laser-param-cell laser-param-input">
<div class="control-grid"> <input type="number" class="settings-input" id="laserMinCurrent1"
<div class="control-group"> min="15" max="70" step="0.1" value="33" disabled>
<label class="control-label">Минимальный ток лазера 1 (мА):</label>
<input type="number" class="settings-input" id="laserMinCurrent1"
min="15" max="70" step="0.1" value="33" disabled>
</div>
<div class="control-group">
<label class="control-label">Максимальный ток лазера 1 (мА):</label>
<input type="number" class="settings-input" id="laserMaxCurrent1"
min="15" max="70" step="0.1" value="70" disabled>
</div>
<div class="control-group">
<label class="control-label">Шаг дискретизации тока лазера 1 (0.002-0.5 мА):</label>
<input type="number" class="settings-input" id="laserDeltaCurrent1"
min="0.002" max="0.5" step="0.001" value="0.05" disabled>
</div>
</div> </div>
</div> <div class="laser-param-cell laser-param-input">
<input type="number" class="settings-input" id="laserMaxCurrent1"
<div class="control-subsection"> min="15" max="70" step="0.1" value="70" disabled>
<h5 class="control-subsection-title">Фиксированные параметры</h5> </div>
<div class="control-grid"> <div class="laser-param-cell laser-param-input">
<div class="control-group"> <input type="number" class="settings-input" id="laserDeltaCurrent1"
<label class="control-label">Температура лазера 1 (°C):</label> min="0.002" max="0.5" step="0.001" value="0.05" disabled>
<input type="number" class="settings-input" id="laserScanTemp1" </div>
min="-1" max="45" step="0.1" value="28" disabled> <div class="laser-param-cell laser-param-input">
</div> <input type="number" class="settings-input" id="laserDeltaTime"
<div class="control-group"> min="20" max="100" step="10" value="50" disabled>
<label class="control-label">Температура лазера 2 (°C):</label>
<input type="number" class="settings-input" id="laserScanTemp2"
min="-1" max="45" step="0.1" value="28.9" disabled>
</div>
<div class="control-group">
<label class="control-label">Управляющий ток лазера 2 (мА):</label>
<input type="number" class="settings-input" id="laserScanCurrent2"
min="15" max="60" step="0.1" value="35" disabled>
</div>
</div> </div>
</div>
<div class="control-subsection"> <!-- Row 3: Fixed params headers -->
<h5 class="control-subsection-title">Параметры времени</h5> <div class="laser-param-cell laser-param-header">T1 (°C)</div>
<div class="control-grid"> <div class="laser-param-cell laser-param-header">T2 (°C)</div>
<div class="control-group"> <div class="laser-param-cell laser-param-header">Ток L2 (мА)</div>
<label class="control-label">Шаг дискретизации времени (20-100 мкс, шаг 10):</label> <div class="laser-param-cell laser-param-header">Tau (мс)</div>
<input type="number" class="settings-input" id="laserDeltaTime"
min="20" max="100" step="10" value="50" disabled> <!-- Row 4: Fixed params inputs -->
</div> <div class="laser-param-cell laser-param-input">
<div class="control-group"> <input type="number" class="settings-input" id="laserScanTemp1"
<label class="control-label">Время задержки (3-10 мс):</label> min="-1" max="45" step="0.1" value="28" disabled>
<input type="number" class="settings-input" id="laserTau" </div>
min="3" max="10" step="1" value="10" disabled> <div class="laser-param-cell laser-param-input">
</div> <input type="number" class="settings-input" id="laserScanTemp2"
min="-1" max="45" step="0.1" value="28.9" disabled>
</div>
<div class="laser-param-cell laser-param-input">
<input type="number" class="settings-input" id="laserScanCurrent2"
min="15" max="60" step="0.1" value="35" disabled>
</div>
<div class="laser-param-cell laser-param-input">
<input type="number" class="settings-input" id="laserTau"
min="3" max="10" step="1" value="10" disabled>
</div> </div>
</div> </div>
</div> </div>