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,66 +374,57 @@
<!-- 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">
<div class="control-group">
<label class="control-label">Минимальный ток лазера 1 (мА):</label>
<input type="number" class="settings-input" id="laserMinCurrent1" <input type="number" class="settings-input" id="laserMinCurrent1"
min="15" max="70" step="0.1" value="33" disabled> min="15" max="70" step="0.1" value="33" disabled>
</div> </div>
<div class="control-group"> <div class="laser-param-cell laser-param-input">
<label class="control-label">Максимальный ток лазера 1 (мА):</label>
<input type="number" class="settings-input" id="laserMaxCurrent1" <input type="number" class="settings-input" id="laserMaxCurrent1"
min="15" max="70" step="0.1" value="70" disabled> min="15" max="70" step="0.1" value="70" disabled>
</div> </div>
<div class="control-group"> <div class="laser-param-cell laser-param-input">
<label class="control-label">Шаг дискретизации тока лазера 1 (0.002-0.5 мА):</label>
<input type="number" class="settings-input" id="laserDeltaCurrent1" <input type="number" class="settings-input" id="laserDeltaCurrent1"
min="0.002" max="0.5" step="0.001" value="0.05" disabled> min="0.002" max="0.5" step="0.001" value="0.05" disabled>
</div> </div>
</div> <div class="laser-param-cell laser-param-input">
</div>
<div class="control-subsection">
<h5 class="control-subsection-title">Фиксированные параметры</h5>
<div class="control-grid">
<div class="control-group">
<label class="control-label">Температура лазера 1 (°C):</label>
<input type="number" class="settings-input" id="laserScanTemp1"
min="-1" max="45" step="0.1" value="28" disabled>
</div>
<div class="control-group">
<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 class="control-subsection">
<h5 class="control-subsection-title">Параметры времени</h5>
<div class="control-grid">
<div class="control-group">
<label class="control-label">Шаг дискретизации времени (20-100 мкс, шаг 10):</label>
<input type="number" class="settings-input" id="laserDeltaTime" <input type="number" class="settings-input" id="laserDeltaTime"
min="20" max="100" step="10" value="50" disabled> min="20" max="100" step="10" value="50" disabled>
</div> </div>
<div class="control-group">
<label class="control-label">Время задержки (3-10 мс):</label> <!-- Row 3: Fixed params headers -->
<div class="laser-param-cell laser-param-header">T1 (°C)</div>
<div class="laser-param-cell laser-param-header">T2 (°C)</div>
<div class="laser-param-cell laser-param-header">Ток L2 (мА)</div>
<div class="laser-param-cell laser-param-header">Tau (мс)</div>
<!-- Row 4: Fixed params inputs -->
<div class="laser-param-cell laser-param-input">
<input type="number" class="settings-input" id="laserScanTemp1"
min="-1" max="45" step="0.1" value="28" disabled>
</div>
<div class="laser-param-cell laser-param-input">
<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" <input type="number" class="settings-input" id="laserTau"
min="3" max="10" step="1" value="10" disabled> min="3" max="10" step="1" value="10" disabled>
</div> </div>
</div> </div>
</div> </div>
</div>
<!-- Control Buttons --> <!-- Control Buttons -->
<div class="control-section"> <div class="control-section">