LGES-OC5-PtoP-Welder/AuroraDevices/AuroraOCT/Views/UCOCTManualMotionViewModel.cs
2026-06-05 13:44:39 +09:00

525 lines
19 KiB
C#

using Aurora.Api.Manager;
using Aurora.Api;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Aurora.View;
using Aurora;
using System.Collections.ObjectModel;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Threading;
using AuroraOCT.IPG;
namespace AuroraOCT.Views
{
internal class UCOCTManualMotionViewModel : NotifyPropertyChangedBase
{
Logger Log = new Logger("OCT");
#region Xaml Property
private ObservableCollection<ListItem> _ListItemSerialNumbers;
public ObservableCollection<ListItem> ListItemSerialNumbers { get => _ListItemSerialNumbers; set => SetProperty(ref _ListItemSerialNumbers, value); }
private ObservableCollection<ListItem> _ListItemLDDSerialNumbers;
public ObservableCollection<ListItem> ListItemLDDSerialNumbers { get => _ListItemLDDSerialNumbers; set => SetProperty(ref _ListItemLDDSerialNumbers, value); }
private string _strCellSerialNumber;
public string strCellSerialNumber { get => _strCellSerialNumber; set => SetProperty(ref _strCellSerialNumber, value); }
private string _strSequenceFileName;
public string strSequenceFileName { get => _strSequenceFileName; set => SetProperty(ref _strSequenceFileName, value); }
private string _strSequenceResult;
public string strSequenceResult { get => _strSequenceResult; set => SetProperty(ref _strSequenceResult, value); }
private string _strJobResult;
public string strJobResult { get => _strJobResult; set => SetProperty(ref _strJobResult, value); }
private string _strJobLastError;
public string strJobLastError { get => _strJobLastError; set => SetProperty(ref _strJobLastError, value); }
private string OCTState = "Initializing";
private bool _bRadioInitializing;
public bool bRadioInitializing { get => _bRadioInitializing; set => SetProperty(ref _bRadioInitializing, value); }
private bool _bRadioReady;
public bool bRadioReady { get => _bRadioReady; set => SetProperty(ref _bRadioReady, value); }
private bool _bRadioBusy;
public bool bRadioBusy { get => _bRadioBusy; set => SetProperty(ref _bRadioBusy, value); }
private bool _bRadioNoRespone;
public bool bRadioNoRespone { get => _bRadioNoRespone; set => SetProperty(ref _bRadioNoRespone, value); }
private bool _bRadioAcquiring;
public bool bRadioAcquiring { get => _bRadioAcquiring; set => SetProperty(ref _bRadioAcquiring, value); }
private bool _bRadioProcessing;
public bool bRadioProcessing { get => _bRadioProcessing; set => SetProperty(ref _bRadioProcessing, value); }
private bool _bRadioWaitingTrigger;
public bool bRadioWaitingTrigger { get => _bRadioWaitingTrigger; set => SetProperty(ref _bRadioWaitingTrigger, value); }
private bool _bRadioNotRemoteMode;
public bool bRadioNotRemoteMode { get => _bRadioNotRemoteMode; set => SetProperty(ref _bRadioNotRemoteMode, value); }
#endregion
#region Envent Command
public ICommand CMD_VisibleChanged { get; }
public ICommand CMD_ReloadSerialNumber { get; }
public ICommand CMD_ClearSerialNumber { get; }
public ICommand CMD_GetSerialNumberFromFile { get; }
public ICommand CMD_AddSerialNumber { get; }
public ICommand CMD_CheckSerialNumber { get; }
public ICommand CMD_RemoveSerialNumber { get; }
public ICommand CMD_Connent { get; }
public ICommand CMD_DisConnect { get; }
public ICommand CMD_StartSW { get; }
public ICommand CMD_SetSequenceFile { get; }
public ICommand CMD_RunSequence { get; }
public ICommand CMD_StopSequence { get; }
public ICommand CMD_GetLastSequenceResult { get; }
public ICommand CMD_GetLastJobResult { get; }
public ICommand CMD_OCTStateChanged { get; }
public ICommand CMD_ENTER_REMOTE { get; }
public ICommand CMD_SET_REMOTE_SEQ { get; }
public ICommand CMD_START_SEQ { get; }
public ICommand CMD_GET_REMOTE_MODE { get; }
public ICommand CMD_GETKHD { get; }
public ICommand CMD_GETKHD2 { get; }
public ICommand CMD_STOP_SEQ { get; }
private readonly DispatcherTimer _CurrentStatusUpdateTimer;
#endregion
private readonly IDeviceManager _deviceManger;
private readonly OCT _OCT;
//private readonly OCTConfig _config;
public UCOCTManualMotionViewModel(IAuroraEnvironment aurora, string deviceId)
{
_deviceManger = aurora.DeviceManager;
_OCT = _deviceManger[deviceId] as OCT;
#region DelegateCommand
CMD_VisibleChanged = new DelegateCommand(VisibleChanged);
CMD_ReloadSerialNumber = new DelegateCommand(ReloadSerialNumber);
CMD_ClearSerialNumber = new DelegateCommand(ClearSerialNumber);
CMD_GetSerialNumberFromFile = new DelegateCommand(GetSerialNumberFromFile);
CMD_AddSerialNumber = new DelegateCommand(AddSerialNumber);
CMD_CheckSerialNumber = new DelegateCommand(CheckSerialNumber);
CMD_RemoveSerialNumber = new DelegateCommand(RemoveSerialNumber);
CMD_Connent = new DelegateCommand(Connect);
CMD_DisConnect = new DelegateCommand(DisConnect);
CMD_StartSW = new DelegateCommand(StartSW);
CMD_SetSequenceFile = new DelegateCommand(SetSequenceFile);
CMD_RunSequence = new DelegateCommand(RunSequence);
CMD_StopSequence = new DelegateCommand(StopSequence);
CMD_GetLastSequenceResult = new DelegateCommand(GetLastSequenceResult);
CMD_GetLastJobResult = new DelegateCommand(GetLastJobResult);
CMD_OCTStateChanged = new DelegateCommand(OCTStateChanged);
CMD_GETKHD = new DelegateCommand(KHDTEST);
CMD_GETKHD2 = new DelegateCommand(QATEST);
CMD_STOP_SEQ = new DelegateCommand(StopSequence);
CMD_ENTER_REMOTE = new DelegateCommand(EnterRemote);
CMD_SET_REMOTE_SEQ = new DelegateCommand(SetRemoteSeq);
CMD_START_SEQ = new DelegateCommand(StartSeq);
CMD_GET_REMOTE_MODE = new DelegateCommand(GetRemoteMode);
#endregion
InitializeUIProperties();
_CurrentStatusUpdateTimer = new DispatcherTimer();
_CurrentStatusUpdateTimer.Tick += OnMonitoring;
_CurrentStatusUpdateTimer.Interval = TimeSpan.FromMilliseconds(200);
}
private void InitializeUIProperties()
{
strSequenceResult = "";
strSequenceFileName = "";
}
private void OnMonitoring(object sender, EventArgs e)
{
GetOCTState();
OCTStateChange();
}
#region Event Functions
private void VisibleChanged(object obj)
{
bool visible = (bool)obj;
if (visible) {
_CurrentStatusUpdateTimer?.Start();
} else {
_CurrentStatusUpdateTimer?.Stop();
}
}
private void ReloadSerialNumber(object obj)
{
if (_OCT.IsSimul) {
return;
}
if (_OCT != null) {
if (_OCT.Config.Type == eOCTType.IPG_LDD700) {
}
// _OCT..functions
}
}
private void ClearSerialNumber(object obj)
{
if (_OCT.IsSimul) {
return;
}
if (_OCT != null) {
// _OCT..functions
}
}
private void GetSerialNumberFromFile(object obj)
{
if (_OCT.IsSimul) {
return;
}
if (_OCT != null) {
//var oct = _OCT._OCT as LDD700;
_ListItemLDDSerialNumbers.Clear();
foreach (var item in ListItemSerialNumbers) {
string strRet;
//if (oct.get_serial_number(item.Name, out strRet) == (int)eLDDErr.ACK) {
if (_OCT.get_serial_number(item.Name, out strRet) == (int)eLDDErr.ACK) {
ListItem listItem = new ListItem { Name = strRet };
_ListItemLDDSerialNumbers.Add(listItem);
}
}
// _OCT..functions
}
}
public void AddSerialNumber(object obj)
{
if (_OCT.IsSimul) {
return;
}
if (strCellSerialNumber.Length < 1) {
MessageUtil.CreateAndShowMessageDialog("Fail", "SerialNumber is empty");
}
if (_OCT != null) {
//var oct = _OCT._OCT as LDD700;
//oct.AddWorkPieceID(strCellSerialNumber);
_OCT.AddWorkPieceID(strCellSerialNumber);
}
}
public void CheckSerialNumber(object obj)
{
if (_OCT.IsSimul) {
return;
}
if (strCellSerialNumber.Length < 1) {
MessageUtil.CreateAndShowMessageDialog("Fail", "SerialNumber is empty");
}
if (_OCT != null) {
//var oct = _OCT._OCT as LDD700;
//if (oct.CheckWorkPieceID(strCellSerialNumber) == 0) {
if (_OCT.CheckWorkPieceID(strCellSerialNumber) == 0) {
MessageUtil.CreateAndShowMessageDialog("Success", string.Format("{0} SerialNumber is registered", strCellSerialNumber));
} else {
MessageUtil.CreateAndShowMessageDialog("Fail", string.Format("{0} SerialNumber is not registered", strCellSerialNumber));
}
}
}
private void RemoveSerialNumber(object obj)
{
if (_OCT.IsSimul) {
return;
}
if (_OCT != null) {
// _OCT..functions
}
}
private void Connect(object obj)
{
if (_OCT.IsSimul) {
return;
}
if (_OCT != null) {
//var oct = _OCT._OCT as LDD700;
//oct.Open(_OCT.Config);
_OCT.Open(_OCT.Config);
//if (_OCT._OCT.GetConnected()) {
if (_OCT.GetConnected()) {
MessageUtil.CreateAndShowMessageDialog("Success", "OCT is Connected.");
} else {
MessageUtil.CreateAndShowMessageDialog("Fail", "OCT is not Connected.");
}
}
}
private void DisConnect(object obj)
{
if (_OCT.IsSimul) {
return;
}
if (_OCT != null) {
//var oct = _OCT._OCT as LDD700;
//oct.DisConnect();
_OCT.DisConnect();
}
}
private void StartSW(object obj)
{
if (_OCT.IsSimul) {
return;
}
if (_OCT != null) {
//var oct = _OCT._OCT as LDD700;
//oct.start_software();
_OCT.start_software();
//if (_OCT._OCT.GetConnected()) {
if (_OCT.GetConnected()) {
MessageUtil.CreateAndShowMessageDialog("Success", "OCT is Connected.");
} else {
MessageUtil.CreateAndShowMessageDialog("Fail", "OCT is not Connected.");
}
}
}
private void SetSequenceFile(object obj)
{
if (_OCT.IsSimul) {
return;
}
if (_OCT != null) {
//var oct = _OCT._OCT as LDD700;
//if (oct.set_sequence_file(strSequenceFileName) == 0) {
if (_OCT.set_sequence_file(strSequenceFileName) == 0) {
MessageUtil.CreateAndShowMessageDialog("Success", "Sequence File Setting is Completed.");
} else {
MessageUtil.CreateAndShowMessageDialog("Fail", "Sequence File Setting is Failed.");
}
}
}
private void RunSequence(object obj)
{
if (_OCT.IsSimul) {
return;
}
if (_OCT != null) {
//var oct = _OCT._OCT as LDD700;
//// Set Sequence File 이 있는데, Start 도 file 이름을 받는다. 왜그런지는 모름..
//if (oct.start(strSequenceFileName) == 0) {
if (_OCT.start(strSequenceFileName) == 0) {
} else {
MessageUtil.CreateAndShowMessageDialog("Fail", "Sequence Starting is Failed.");
}
}
}
private void StopSequence(object obj)
{
if (_OCT.IsSimul) {
return;
}
if (_OCT != null) {
//var oct = _OCT._OCT as LDD700;
//if (oct.stop() == 0) {
if (_OCT.stop() == 0) {
MessageUtil.CreateAndShowMessageDialog("Success", "Sequence Stopped.");
} else {
MessageUtil.CreateAndShowMessageDialog("Fail", "Sequence Stop is Failed.");
}
}
}
private void GetLastSequenceResult(object obj)
{
if (_OCT.IsSimul) {
return;
}
if (_OCT != null) {
//var oct = _OCT._OCT as LDD700;
string strResult;
//if (oct.get_last_seqeunce_result(out strResult) == 0) {
if (_OCT.get_last_seqeunce_result(out strResult) == 0) {
strSequenceResult = strResult;
} else {
MessageUtil.CreateAndShowMessageDialog("Fail", "Sequence Running Failed.");
}
}
}
private void GetLastJobResult(object obj)
{
if (_OCT.IsSimul) {
return;
}
if (_OCT != null) {
//var oct = _OCT._OCT as LDD700;
List<string> strResult;
List<string> strLastErr;
//if (oct.get_last_job_result(out strResult) == 0) {
if (_OCT.get_last_job_result(out strResult) == 0) {
// strResult 를 parsing 해서 strJobResult 에 넣을 것
} else {
MessageUtil.CreateAndShowMessageDialog("Fail", "Job Running Failed.");
}
//if (oct.get_last_job_fail_codes(out strLastErr) == 0) {
if (_OCT.get_last_job_fail_codes(out strLastErr) == 0) {
// strLastErr 를 parsing 해서 strJobLastError 에 넣을 것
} else {
MessageUtil.CreateAndShowMessageDialog("Fail", "Job Error Code Response Failed.");
}
}
}
#endregion
public class ListItem
{
public string Name { get; set; }
public override string ToString()
{
return Name;
}
}
private void OCTStateChanged(object obj)
{
OCTState = (string)obj;
}
private void EnterRemote(object obj)
{
if (_OCT.IsSimul) {
return;
}
if (_OCT != null) {
//var oct = _OCT._OCT as LDD700;
//if (oct.EnterRemoteMode(30000) == 0) {
if (_OCT.EnterRemoteMode(30000) == 0) {
}
}
}
private void SetRemoteSeq(object obj)
{
if (_OCT.IsSimul) {
return;
}
if (_OCT != null) {
//var oct = _OCT._OCT as LDD700;
//if (oct.SetRemoteControl(2) == 0) {
if (_OCT.SetRemoteControl(2) == 0) {
}
}
}
private void StartSeq(object obj)
{
if (_OCT.IsSimul) {
return;
}
if (_OCT != null) {
//var oct = _OCT._OCT as LDD700;
//if (oct.SetProgram(1) == 0) {
if (_OCT.SetProgram(1) == 0) {
}
}
}
private void GetRemoteMode(object obj)
{
if (_OCT.IsSimul) {
return;
}
int nRet = 0;
if (_OCT != null) {
//var oct = _OCT._OCT as LDD700;
//nRet = oct.GetRemoteControl();
nRet = _OCT.GetRemoteControl();
}
if (nRet == 0) {
strSequenceResult = "OFF";
} else if (nRet == 1) {
strSequenceResult = "Remote Job Mode";
} else if (nRet == 2) {
strSequenceResult = "Remote Sequence Mode";
} else {
strSequenceResult = "";
}
}
private void KHDTEST(object obj)
{
strSequenceResult = "";
//r OCT = _OCT._OCT as LDD700;
string strAVG = _OCT.GetKHD_AVG();
string strMIN = _OCT.GetKHD_MIN();
string strMAX = _OCT.GetKHD_MAX();
string strUnder = _OCT.GetKHD_LowSum();
string strUpper = _OCT.GetKHD_HighSum();
strSequenceResult = strAVG + ", " + strMIN + ", " + strMAX + ", " + strUnder + ", " + strUpper;
}
private void QATEST(object obj)
{
strSequenceResult = "";
//var OCT = _OCT._OCT as LDD700;
List<string> list = new List<string>();
list = _OCT.GetKHD_Total();
for (int i = 0; i < list.Count; i++) {
strSequenceResult += list[i] + ", ";
}
}
private void OCTStateChange()
{
// 이 함수가 호출되어야 OCTState 변수를 바꾸고 나서 UI 에 적용된다.
bRadioInitializing = OCTState == "Initializing" ? true : false;
bRadioReady = OCTState == "Ready for Command" ? true : false;
bRadioBusy = OCTState == "Busy" ? true : false;
bRadioNoRespone = OCTState == "No Response" ? true : false;
bRadioAcquiring = OCTState == "Acquiring" ? true : false;
bRadioProcessing = OCTState == "Processing" ? true : false;
bRadioWaitingTrigger = OCTState == "Waiting for Trigger" ? true : false;
bRadioNotRemoteMode = OCTState == "Not in Remote Mode" ? true : false;
}
private void GetOCTState()
{
if (_OCT.IsSimul) {
OCTState = "No Response";
return;
}
if (_OCT != null) {
//var oct = _OCT._OCT as LDD700;
string strResult;
//if (oct.get_system_state(out strResult) != -1) {
if (_OCT.get_system_state(out strResult) != -1) {
OCTState = strResult;
} else {
OCTState = "No Response";
}
}
}
}
}