2026-06-05 13:44:39 +09:00

430 lines
18 KiB
C#

using Aurora;
using Aurora.Api;
using Aurora.Api.Manager;
using Aurora.View;
using System;
using System.Collections.ObjectModel;
using System.Globalization;
using System.Linq;
using System.Reactive.Linq;
using System.Windows;
using System.Windows.Data;
using System.Windows.Input;
using static AuroraLaser.Ekspla.LaserDeviceNL202;
using DelegateCommand = Aurora.View.DelegateCommand;
using HislogSourceLogger = Aurora.View.HislogSourceLogger;
using HislogViewModel = Aurora.View.HislogViewModel;
using Logger = Aurora.Api.Logger;
namespace AuroraLaser.Ekspla
{
public class LaserStateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is int intValue) {
//Idle, Running, Error, NotInitialized
switch (intValue) {
case 0:
return "Idle";
case 1:
return "Running";
case 2: // FALL_THROUGH
default:
return "Not Initialized";
}
}
return "Unknown";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is string strValue) {
//Idle, Running, Error, NotInitialized
switch (strValue) {
case "Idle":
return 0;
case "Running":
return 1;
case "NotInitialized": // FALL_THROUGH
return 2;
default:
break;
}
}
return -1;
}
}
public class UCLaserMaintViewModel : NotifyPropertyChangedBase
{
// UCLaserMaint : IDD_DIALOG_REPAIR_SYSTEM_LASERSLIT_SETUP_64BIT
protected readonly Logger LOG = new Logger("UCLaserMaintViewModel");
Logger LaserLog = new Logger("Laser", "LaserMaint");
public string SerialNumber { get; set; }
//private NL202Status _setlaserStatus;
public NL202Status SetLaserStatus { set; get; }
//private NL202Status _getlaserStatus;
//public NL202Status GetLaserStatus { get => _getlaserStatus; set => SetProperty(ref _getlaserStatus, value); }
private int _getLaserStatusState;
public int GetLaserStatusState { get => _getLaserStatusState; set { SetProperty(ref _getLaserStatusState, value); NotifyPropertyChanged("IsServoOn"); } }
public bool IsServoOn { get => (_getLaserStatusState == 1); }
private int _getLaserStatusEnergyLevel;
public int GetLaserStatusEnergyLevel { get => _getLaserStatusEnergyLevel; set => SetProperty(ref _getLaserStatusEnergyLevel, value); }
private double _getLaserStatusPumpLevel;
public double GetLaserStatusPumpLevel { get => _getLaserStatusPumpLevel; set => SetProperty(ref _getLaserStatusPumpLevel, value); }
private int _getLaserStatusQSWAdjustDelay;
public int GetLaserStatusQSWAdjustDelay { get => _getLaserStatusQSWAdjustDelay; set => SetProperty(ref _getLaserStatusQSWAdjustDelay, value); }
private int _getLaserStatusSyncMode;
public int GetLaserStatusSyncMode { get => _getLaserStatusSyncMode; set => SetProperty(ref _getLaserStatusSyncMode, value); }
private int _getLaserStatusBurstMode;
public int GetLaserStatusBurstMode { get => _getLaserStatusBurstMode; set => SetProperty(ref _getLaserStatusBurstMode, value); }
private int _getLaserStatusBurstCount;
public int GetLaserStatusBurstCount { get => _getLaserStatusBurstCount; set => SetProperty(ref _getLaserStatusBurstCount, value); }
private int _getLaserStatusRepetitionRate;
public int GetLaserStatusRepetitionRate { get => _getLaserStatusRepetitionRate; set => SetProperty(ref _getLaserStatusRepetitionRate, value); }
private double _getLaserStatusTemperature_TTec1;
public double GetLaserStatusTemperature_TTec1 { get => _getLaserStatusTemperature_TTec1; set => SetProperty(ref _getLaserStatusTemperature_TTec1, value); }
private double _getLaserStatusTemperature_SH1;
public double GetLaserStatusTemperature_SH1 { get => _getLaserStatusTemperature_SH1; set => SetProperty(ref _getLaserStatusTemperature_SH1, value); }
private int _getLaserStatusWaveLength;
public int GetLaserStatusWaveLength { get => _getLaserStatusWaveLength; set => SetProperty(ref _getLaserStatusWaveLength, value); }
private double _getLaserStatusAttenTrans;
public double GetLaserStatusAttenTrans { get => _getLaserStatusAttenTrans; set => SetProperty(ref _getLaserStatusAttenTrans, value); }
private int _getLaserStatusFaultCode;
public int GetLaserStatusFaultCode { get => _getLaserStatusFaultCode; set => SetProperty(ref _getLaserStatusFaultCode, value); }
private string _getLaserStatusFaultMsg;
public string GetLaserStatusFaultMsg { get => _getLaserStatusFaultMsg; set => SetProperty(ref _getLaserStatusFaultMsg, value); }
private int _getLaserStatusShotCount;
public int GetLaserStatusShotCount { get => _getLaserStatusShotCount; set => SetProperty(ref _getLaserStatusShotCount, value); }
public Aurora.View.HislogViewModel LaserLogViewModel { get; }
public ICommand CMD_VisibleChanged { get; }
public ICommand CMD_SaveConfigs { get; }
public ICommand CMD_StartLaser { get; }
public ICommand CMD_StopLaser { get; }
public ICommand CMD_Communication { get; }
public ICommand CMD_Control { get; }
public ICommand CMD_Error { get; }
public ICommand CMD_Log { get; }
public ICommand CMD_ClearLog { get; }
public double TempValue { get; set; } = 0;
public LaserConfig Config { get; set; }
protected readonly IDeviceManager _deviceManager;
protected readonly string _deviceId;
protected readonly NL202Laser _laser;
public bool IsActivated { get => _laser.IsActivated; }
public UCLaserMaintViewModel(IDeviceManager devMngr, string deviceId)
{
_deviceManager = devMngr;
_deviceId = deviceId;
Config = _deviceManager.GetDeviceConfig(deviceId) as LaserConfig;
_laser = _deviceManager.GetDevice(_deviceId) as NL202Laser;
laserSetupLog = new ObservableCollection<LogItem>();
laserSetupLog.Add(new LogItem("Initialized"));
//GetLaserStatus = new NL202Status();
SetLaserStatus = new NL202Status();
CMD_VisibleChanged = new DelegateCommand(VisibleChanged);
CMD_SaveConfigs = new DelegateCommand(SaveConfigs);
CMD_StartLaser = new DelegateCommand(StartLaser);
CMD_StopLaser = new DelegateCommand(StopLaser);
CMD_Communication = new DelegateCommand(DoCommunicationCommand);
CMD_Control = new DelegateCommand(DoControlCommand);
CMD_Error = new DelegateCommand(DoErrorCommand);
CMD_Log = new DelegateCommand(DoLogCommand);
CMD_ClearLog = new DelegateCommand(ClearLog);
var logSourceA = new HislogSourceLogger("LaserMaint", 500);
LaserLogViewModel = new HislogViewModel(logSourceA, 11);
LaserLogViewModel.FilterVisibility = Visibility.Collapsed;
LaserLogViewModel.AutoScrollVisibility = Visibility.Hidden;
UpdateControlInfo();
Observable.Merge(
Application.Current.AuroraEnv().EventObservable.AsObservable(AuroraSysEvent.SYS_DEVICE_ACTIVATED),
Application.Current.AuroraEnv().EventObservable.AsObservable(AuroraSysEvent.SYS_DEVICE_DEACTIVATED)
).Select(msg => msg.Param as string
).Where(x => x == _laser.DeviceId
).ObserveOnDispatcher(
).Subscribe(
x => NotifyPropertyChanged("IsActivated")
);
}
private void ClearLog(object obj)
{
var cmd = LaserLogViewModel.GetType().GetProperty("CMD_Clear").GetValue(LaserLogViewModel) as ICommand;
cmd.Execute(null);
}
protected virtual void HandleActivationChange(bool value)
{
if (value) {
UpdateErrorInfo();
UpdateControlInfo();
}
}
protected void UpdateErrorInfo()
{
//LOG.V("UpdateErrorInfo");
int tempErrorCode = 0;
string tempErrorMsg = "";
_laser.GetLastError(ref tempErrorCode, ref tempErrorMsg);
GetLaserStatusFaultCode = tempErrorCode;
GetLaserStatusFaultMsg = tempErrorMsg;
}
protected void UpdateControlInfo()
{
//LOG.V("UpdateControlInfo");
GetLaserStatusState = _laser.GetState();
GetLaserStatusEnergyLevel = _laser.GetEnergyLevel();
GetLaserStatusPumpLevel = _laser.GetPumpLevel();
GetLaserStatusQSWAdjustDelay = _laser.GetQSWadjDelay();
GetLaserStatusSyncMode = _laser.GetSyncMode();
GetLaserStatusBurstMode = _laser.GetBurstMode();
GetLaserStatusBurstCount = _laser.GetBurstCount();
GetLaserStatusRepetitionRate = _laser.GetRepetitionRate();
GetLaserStatusTemperature_TTec1 = _laser.GetTemperature(0);
GetLaserStatusTemperature_SH1 = _laser.GetTemperature(1);
GetLaserStatusWaveLength = _laser.GetWaveLength();
GetLaserStatusAttenTrans = _laser.GetAttTrans();
GetLaserStatusShotCount = _laser.GetShotCnt();
}
private void VisibleChanged(object obj)
{
bool visible = (bool)obj;
if (visible) {
UpdateControlInfo();
UpdateErrorInfo();
} else {
// TODO: Implement
}
}
protected void SaveConfigs(object obj)
{
LOG.V("SaveConfigs");
_deviceManager.SaveDeviceConfig(_deviceId);
MessageUtil.ShowSaveSuccessDialog();
}
protected void StartLaser(object obj)
{
LOG.V("StartLaser");
if (_laser != null && _laser.IsActivated) {
_laser.RunLaser();
GetLaserStatusState = _laser.GetState();
}
}
protected void StopLaser(object obj)
{
LOG.V("StopLaser");
if (_laser != null && _laser.IsActivated) {
_laser.StopLaser();
}
}
protected void AddLog(object obj)
{
if (obj != null) {
LaserLog.I(obj.ToString());
//LOG.I("LaserMaint Log : " + obj.ToString());
//LaserSetupLog.Add(new LogItem(obj.ToString()));
//LaserSetupLog.Insert(0, new LogItem(obj.ToString()));
}
}
protected void DoErrorCommand(object obj)
{
if (obj is string) {
switch (obj as string) {
case "Reset":
_laser.ResetFault();
break;
case "Set Error (Test)":
_laser.SetError(100, "test error");
UpdateErrorInfo();
break;
case "Clear Error (Test)":
_laser.SetError(0, "");
UpdateErrorInfo();
break;
default:
LOG.E("Unhandled : " + obj);
return;
}
}
//UpdateControlInfo();
UpdateErrorInfo();
AddLog(obj);
}
protected void DoCommunicationCommand(object obj)
{
if (obj is string) {
switch (obj as string) {
case "Connect":
_laser.Activate();
break;
case "Disconnect":
_laser.Deactivate();
break;
//case "Start Fire":
// _laser.RunLaser();
// break;
//case "Stop Fire":
// _laser.StopLaser();
// break;
default:
LOG.E("Unhandled : " + obj);
return;
}
}
UpdateControlInfo();
UpdateErrorInfo();
AddLog(obj);
}
protected void DoLogCommand(object obj)
{
if (obj is string) {
switch (obj as string) {
case "Clear Log":
LaserSetupLog.Clear();
break;
case "Add Log":
AddLog(obj);
break;
default:
LOG.E("Unhandled : " + obj);
return;
}
}
}
protected void DoControlCommand(object obj)
{
switch (obj as string) {
case "Update All":
AddLog(obj);
//UpdateControlInfo();
break;
case "Set All":
AddLog(obj);
DoControlCommand("SetLaserStatus.EnergyLevel");
DoControlCommand("SetLaserStatus.PumpLevel");
DoControlCommand("SetLaserStatus.SyncMode");
DoControlCommand("SetLaserStatus.BurstMode");
DoControlCommand("SetLaserStatus.BurstCount");
DoControlCommand("SetLaserStatus.RepetitionRate");
DoControlCommand("SetLaserStatus.WaveLength");
break;
case "Start":
AddLog(obj);
_laser.RunLaser();
break;
case "Stop":
AddLog(obj);
_laser.StopLaser();
break;
case "SetLaserStatus.QSWAdjustDelay":
//_laser.SetQSWAdjustDelay(this.SetLaserStatus.QSWAdjustDelay);
//GetLaserStatusQSWAdjustDelay = _laser.GetQSWadjDelay();
break;
case "SetLaserStatus.EnergyLevel":
_laser.SetEnergyLevel(SetLaserStatus.EnergyLevel);
//GetLaserStatusEnergyLevel = _laser.GetEnergyLevel();
AddLog(obj + " : " + SetLaserStatus.EnergyLevel);
break;
case "SetLaserStatus.PumpLevel":
_laser.SetPumpLevel(SetLaserStatus.PumpLevel);
//GetLaserStatusPumpLevel = _laser.GetPumpLevel();
AddLog(obj + " : " + SetLaserStatus.PumpLevel);
break;
case "SetLaserStatus.SyncMode":
_laser.SetSyncMode(SetLaserStatus.SyncMode);
//GetLaserStatusSyncMode = _laser.GetSyncMode();
AddLog(obj + " : " + SetLaserStatus.SyncMode);
break;
case "SetLaserStatus.BurstMode":
_laser.SetBurstMode(SetLaserStatus.BurstMode);
//GetLaserStatusBurstMode = _laser.GetBurstMode();
AddLog(obj + " : " + SetLaserStatus.BurstMode);
break;
case "SetLaserStatus.BurstCount":
_laser.SetBurstCount(SetLaserStatus.BurstCount);
//GetLaserStatusBurstCount = _laser.GetBurstCount();
AddLog(obj + " : " + SetLaserStatus.BurstCount);
break;
case "SetLaserStatus.RepetitionRate":
_laser.SetRepetitionRate(SetLaserStatus.RepetitionRate);
//GetLaserStatusRepetitionRate = _laser.GetRepetitionRate();
AddLog(obj + " : " + SetLaserStatus.RepetitionRate);
break;
case "SetLaserStatus.Temperature_TTec1":
//_laser.SetTemperature(0, SetLaserStatus.Temperature_TTec1);
//GetLaserStatusTemperature_TTec1 = _laser.GetTemperature(0);
break;
case "SetLaserStatus.Temperature_SH1":
//_laser.SetTemperature(1, SetLaserStatus.Temperature_SH1);
//GetLaserStatusTemperature_SH1 = _laser.GetTemperature(1);
break;
case "SetLaserStatus.WaveLength":
_laser.SetWaveLength(SetLaserStatus.WaveLength);
//GetLaserStatusWaveLength = _laser.GetWaveLength();
AddLog(obj + " : " + SetLaserStatus.WaveLength);
break;
case "SetLaserState":
//_laser.SetLaserState(SetLaserState);
break;
default:
LOG.E("Unhandled : " + obj);
return;
}
UpdateControlInfo();
//UpdateErrorInfo();
}
public class LogItem
{
public DateTime Time { get; set; }
public string Log { get; set; }
public LogItem(string logString)
{
Time = DateTime.Now;
Log = logString;
}
}
private ObservableCollection<LogItem> laserSetupLog;
public ObservableCollection<LogItem> LaserSetupLog { get => laserSetupLog; set => SetProperty(ref laserSetupLog, value); }
}
}