525 lines
19 KiB
C#
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";
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|