initial commit
This commit is contained in:
926
Cs_HMI/Project/Class/CParser.cs
Normal file
926
Cs_HMI/Project/Class/CParser.cs
Normal file
@@ -0,0 +1,926 @@
|
||||
//using System;
|
||||
//using System.Collections.Generic;
|
||||
//using System.Diagnostics;
|
||||
//using System.Globalization;
|
||||
//using System.IO;
|
||||
//using System.Linq;
|
||||
//using System.Reflection;
|
||||
//using System.Runtime.CompilerServices;
|
||||
//using System.Security;
|
||||
//using System.Text;
|
||||
//using System.Threading.Tasks;
|
||||
//using System.Collections;
|
||||
|
||||
//namespace Project
|
||||
//{
|
||||
// public class CParser
|
||||
// {
|
||||
// private string SrcText;
|
||||
// private ArrayList CommandList; // //여기엔 Scommand 가 들어있다.
|
||||
// private System.Text.StringBuilder ErrMsg;
|
||||
// // Public Log As System.Text.StringBuilder
|
||||
|
||||
// public event MessageEventHandler Message;
|
||||
// public void raiseMessage(string m, Boolean err)
|
||||
// {
|
||||
// if (Message != null) Message(m, err);
|
||||
// }
|
||||
// public delegate void MessageEventHandler(string M, bool Err);
|
||||
|
||||
// public CParser()
|
||||
// {
|
||||
|
||||
// }
|
||||
|
||||
// public new string toString
|
||||
// {
|
||||
// get
|
||||
// {
|
||||
// if (this.isError == false)
|
||||
// {
|
||||
// object Value = ParseCommand(SrcText, true);
|
||||
// return Value.ToString();
|
||||
// }
|
||||
// return "";
|
||||
// }
|
||||
// }
|
||||
// public new object GetData
|
||||
// {
|
||||
// get
|
||||
// {
|
||||
// if (this.isError == false)
|
||||
// {
|
||||
// object Value = ParseCommand(SrcText, true);
|
||||
// return Value;
|
||||
// }
|
||||
// return null;
|
||||
// }
|
||||
// }
|
||||
// public bool isError
|
||||
// {
|
||||
// get
|
||||
// {
|
||||
// if (this.ErrMsg.ToString() != "")
|
||||
// return true;
|
||||
// else
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
// private void Check_error(string vSrcText)
|
||||
// {
|
||||
// // Return '//임시로 해제
|
||||
|
||||
// int Lcnt = 0;
|
||||
// int Rcnt = 0;
|
||||
|
||||
// ErrMsg = new System.Text.StringBuilder();
|
||||
|
||||
// return; //
|
||||
// foreach (string EXP_ in vSrcText.Split(';')) // //각명령을 ;로 구분되어잇기떄문에 구분됫것들이 각자의 명령이다.
|
||||
// {
|
||||
// var EXP = EXP_.Trim();
|
||||
// Lcnt = EXP.ToCharArray().Where(t => t == '(').Count();// MyString.GetInCountChar(EXP, "("); // //파라미터 시작갯수
|
||||
// Rcnt = EXP.ToCharArray().Where(t => t == ')').Count();// MyString.GetInCountChar(EXP, ")"); // //파라미터 종료갯수
|
||||
// if (Lcnt != Rcnt)
|
||||
// ErrMsg.AppendLine(EXP + "파라미터 시작기호 ( 와 종료기호 ) 가 일치하지 않습니다");
|
||||
// Lcnt = EXP.ToCharArray().Where(t => t == '"').Count();// MyString.GetInCountChar(EXP, Strings.Chr(34)); // //파라미터 시작갯수
|
||||
// Rcnt = EXP.ToCharArray().Where(t => t == '"').Count();// MyString.GetInCountChar(EXP, Strings.Chr(34)); // //파라미터 종료갯수
|
||||
// if (Lcnt != Rcnt)
|
||||
// ErrMsg.AppendLine(EXP + "문자열묶음기호(\")가 일치하지 않습니다");
|
||||
// }
|
||||
// }
|
||||
|
||||
// public virtual void CommandText(string s)
|
||||
// {
|
||||
// SrcText = s;
|
||||
// Check_error(SrcText);
|
||||
// if (this.isError)
|
||||
// Util.MsgE(ErrMsg.ToString());// Interaction.MsgBox(ErrMsg.ToString(), MsgBoxStyle.Critical, "오류");
|
||||
// }
|
||||
|
||||
// protected string Buffer1 = "";
|
||||
// protected string Buffer2 = "";
|
||||
// protected string Buffer3 = "";
|
||||
// protected string Buffer4 = "";
|
||||
|
||||
// private object ParseCommand(string vSrcText, bool isfirst, object NEwValue = null)
|
||||
// {
|
||||
// // //각명령어를 쪼갠다.
|
||||
// // //중첩명령어의 경우에도 쪼갠다.
|
||||
|
||||
// // Dim Cmd As String '//명령어
|
||||
// // Dim Param As String '//명렁파라미터
|
||||
// // Dim target As String '//타겏값
|
||||
// // Dim Str As String
|
||||
// // Dim Line As String
|
||||
|
||||
// if (isfirst)
|
||||
// this.CommandList = new ArrayList();// //처음에만 이것을 초기화한다.
|
||||
|
||||
// vSrcText = vSrcText.Replace("\r\n","\n");//Constants.vbCrLf, Constants.vbLf);
|
||||
// vSrcText = vSrcText.Replace("\r","\n");//Constants.vbCr, Constants.vbLf);
|
||||
// vSrcText = vSrcText.Replace("\n\n","\n");//Constants.vbLf + Constants.vbLf, Constants.vbLf);
|
||||
// vSrcText = vSrcText.Replace(";","\n");// Constants.vbLf);
|
||||
|
||||
// raiseMessage("Command Expression : " + vSrcText, false);
|
||||
// foreach (string EXP_ in vSrcText.Split('\n')) // //각명령을 ;로 구분되어잇기떄문에 구분됫것들이 각자의 명령이다.
|
||||
// {
|
||||
// if (EXP_.Trim() == "")
|
||||
// continue;
|
||||
// if (EXP_.Length < 3)
|
||||
// continue;
|
||||
// if (EXP_.Substring(0, 2) == "//")
|
||||
// continue;
|
||||
|
||||
// // Me.Log.AppendLine("New Line Value is : " & NEwValue.ToString)
|
||||
|
||||
// var EXP = EXP_.Trim();
|
||||
// bool CmdFind = false; // //명령어를다 찾앗는가?
|
||||
// bool ParamFind = false;
|
||||
// System.Text.StringBuilder NewParam = new System.Text.StringBuilder();
|
||||
// bool Isfunction = false;
|
||||
// bool IsFunctionEnd = false;
|
||||
// short InnerFuncCnt = 0;
|
||||
// System.Text.StringBuilder NewCmd = new System.Text.StringBuilder();
|
||||
// ArrayList ParamList = new ArrayList();
|
||||
// bool IsTextInner = false;
|
||||
|
||||
// if (EXP != "")
|
||||
// {
|
||||
|
||||
// // My.Computer.FileSystem.WriteAllText("c:\command.txT", "expressiong=" & EXP, True)
|
||||
|
||||
// if (EXP.Substring(0, 1) == "\"")//Strings.Chr(34))
|
||||
// NEwValue = EXP; // //해당문자자체가 값이된다.
|
||||
// else
|
||||
// // //파라미터란 ()사이의 명령어이며, 콤마(,)로 분리된다
|
||||
// // //단 "" 사이의 콤마는 인정하지않는다.
|
||||
|
||||
// foreach (char C in EXP.ToCharArray())
|
||||
// {
|
||||
// if (CmdFind == false)
|
||||
// {
|
||||
// if (C == '(')
|
||||
// CmdFind = true;
|
||||
// else
|
||||
// NewCmd.Append(C);
|
||||
// }
|
||||
// else
|
||||
// switch (C)
|
||||
// {
|
||||
// case ',':
|
||||
// {
|
||||
// if (IsTextInner)
|
||||
// NewParam.Append(C);
|
||||
// else if (Isfunction == false)
|
||||
// {
|
||||
// if (IsFunctionEnd)
|
||||
// ParamList.Add(NewParam.ToString()); // //파라미터를 찾았으므로 파람리스트에 추가한다.
|
||||
// else
|
||||
// ParamList.Add(NewParam.ToString());// //파라미터를 찾았으므로 파람리스트에 추가한다.
|
||||
// NewParam = new System.Text.StringBuilder(); // //파라미터부분 초기화
|
||||
// IsFunctionEnd = false;
|
||||
// }
|
||||
// else
|
||||
// NewParam.Append(C);
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case '(':
|
||||
// {
|
||||
// if (IsTextInner)
|
||||
// NewParam.Append(C);
|
||||
// else if (Isfunction)
|
||||
// {
|
||||
// InnerFuncCnt += 1;
|
||||
// NewParam.Append(C);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Isfunction = true; // //이파라미터가 또 함수를 가지고있다 ㅠ_ㅠ;
|
||||
// NewParam.Append(C);
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case ')':
|
||||
// {
|
||||
// if (IsTextInner)
|
||||
// NewParam.Append(C);
|
||||
// else if (Isfunction)
|
||||
// {
|
||||
// if (InnerFuncCnt > 0)
|
||||
// {
|
||||
// InnerFuncCnt -= 1;
|
||||
// NewParam.Append(C);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Isfunction = false; // //이파라미터가 또 함수를 가지고있다 ㅠ_ㅠ;
|
||||
// IsFunctionEnd = true;
|
||||
// NewParam.Append(C);
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if (NewParam.ToString() != "")
|
||||
// ParamList.Add(NewParam.ToString()); // //파라미터를 찾았으므로 파람리스트에 추가한다.
|
||||
// NewParam = new System.Text.StringBuilder(); // //파라미터부분 초기화
|
||||
// IsFunctionEnd = false;
|
||||
|
||||
// // MsgBox("명령어실행 : " & NewCmd.ToString)
|
||||
// // //각 파라미터들의 값을 가져온다
|
||||
// raiseMessage("New COmmand : " + NewCmd.ToString() + " paramCount=" + ParamList.Count, false);
|
||||
// switch (NewCmd.ToString().ToUpper())
|
||||
// {
|
||||
// case "MUL":
|
||||
// {
|
||||
// if (ParamList.Count != 2)
|
||||
// raiseMessage("MUL 함수에 2개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
|
||||
// // Me.Log.AppendLine("MUL " & Param1 & vbTab & Param2)
|
||||
|
||||
// if (Param1.ToString().IsNumeric()==false || Param2.ToString().IsNumeric()==false)
|
||||
// // Me.Log.AppendLine("MUL param error support only number")
|
||||
// return 0;
|
||||
// else
|
||||
// NEwValue = System.Convert.ToDecimal(Param1) * System.Convert.ToDecimal(Param2);
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "PLUS":
|
||||
// {
|
||||
// if (ParamList.Count != 2)
|
||||
// raiseMessage("PLUS 함수에 2개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
|
||||
|
||||
// if (Param1.ToString().IsNumeric()==false || Param2.ToString().IsNumeric()==false)
|
||||
// return 0;
|
||||
// else
|
||||
// NEwValue = System.Convert.ToDecimal(Param1) + System.Convert.ToDecimal(Param2);
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "MINUS":
|
||||
// {
|
||||
// if (ParamList.Count != 2)
|
||||
// raiseMessage("MINUS 함수에 2개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
|
||||
// // Me.Log.AppendLine("PLUS " & Param1 & vbTab & Param2)
|
||||
// if (Param1.ToString().IsNumeric()==false || Param2.ToString().IsNumeric()==false )
|
||||
// // Me.Log.AppendLine("MINUS param error support only number")
|
||||
// return 0;
|
||||
// else
|
||||
// NEwValue = System.Convert.ToDecimal(Param1) - System.Convert.ToDecimal(Param2);
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "ISEQULE":
|
||||
// case "EQ" // //둘이 같은지 반환해준다.
|
||||
// :
|
||||
// {
|
||||
// if (ParamList.Count != 2)
|
||||
// raiseMessage("ISEQULE 함수에 2개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
|
||||
// // MsgBox(ParamList[1].ToString & "/" & NewValue)
|
||||
// // Me.Log.AppendLine("ISEQULE " & Param1 & vbTab & Param2)
|
||||
// if (Param1 != Param2)
|
||||
// {
|
||||
// raiseMessage("ISEQULE RETURN FALSE", true);
|
||||
// return false;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// raiseMessage("ISEQULE RETURN TRUE", true);
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "NEQ":
|
||||
// case "DIFF" // //둘이 다르면 true 반환해준다.
|
||||
// :
|
||||
// {
|
||||
// if (ParamList.Count != 2)
|
||||
// raiseMessage("DIFF(NEQ) 함수에 2개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
|
||||
// // MsgBox(ParamList[1].ToString & "/" & NewValue)
|
||||
// // Me.Log.AppendLine("ISEQULE " & Param1 & vbTab & Param2)
|
||||
// if (Param1 != Param2)
|
||||
// {
|
||||
// raiseMessage("DIFF RETURN True", true);
|
||||
// return true;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// raiseMessage("DIFF RETURN False", true);
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "IF":
|
||||
// {
|
||||
// if (ParamList.Count != 2)
|
||||
// raiseMessage("IF 함수에 2개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
|
||||
// if (Param1.ToString().ToLower() != Param2.ToString().ToLower())
|
||||
// {
|
||||
// raiseMessage("IF문 조건이 서로 다르므로 실행을 종료합니다.", false);
|
||||
// return ""; // //해당구문전체를 모두 FALSE한다.
|
||||
// }
|
||||
// else
|
||||
// // RaiseEvent RaiseMessage("IF문 조건이 동일 True Case IN(" & Param1 & " " & Param2 & ")")
|
||||
// Console.WriteLine("sdf");
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "IFNOT":
|
||||
// {
|
||||
// if (ParamList.Count != 2)
|
||||
// raiseMessage("IFNOT 함수에 2개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
|
||||
// if (Param1 == Param2)
|
||||
// {
|
||||
// raiseMessage("IF문 조건이 서로 같으므로 실행을 종료합니다.", true);
|
||||
// return ""; // //해당구문전체를 모두 FALSE한다.
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// }
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "MSGBOX":
|
||||
// case "MSG":
|
||||
// {
|
||||
// if (ParamList.Count != 1)
|
||||
// raiseMessage("MSGBOX 함수에 1개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// Util.MsgE(Param1, MsgBoxStyle.Information, "확인");
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "ISNUM":
|
||||
// {
|
||||
// if (ParamList.Count != 1)
|
||||
// raiseMessage("ISNUM 함수에 1개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// NEwValue = Information.IsNumeric(Param1);
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "NVL":
|
||||
// {
|
||||
// if (ParamList.Count != 2)
|
||||
// raiseMessage("ISEMPTY 함수에 2개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
|
||||
// if (Param1.Trim() == "")
|
||||
// NEwValue = Param2;
|
||||
// else
|
||||
// NEwValue = Param1;
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "INDEXOF":
|
||||
// {
|
||||
// if (ParamList.Count != 2)
|
||||
// raiseMessage("INDEXOF 함수에 2개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
|
||||
// NEwValue = Param1.IndexOf(Param2) + 1;
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "LINDEXOF":
|
||||
// {
|
||||
// if (ParamList.Count != 2)
|
||||
// raiseMessage("LINDEXOF 함수에 2개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
|
||||
// NEwValue = Param1.LastIndexOf(Param2) + 1;
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "REPLACE":
|
||||
// {
|
||||
// if (ParamList.Count != 3)
|
||||
// raiseMessage("REPLACE 함수에 3개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
|
||||
// object Param3 = RunParam(ParamList[2].ToString(), NEwValue.ToString());
|
||||
// NEwValue = Param1.ToString().Replace(Param2, Param3);
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "REMOVECHAR":
|
||||
// {
|
||||
// if (ParamList.Count != 2)
|
||||
// raiseMessage("REMOVESPACE 함수에 1개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
|
||||
// NEwValue = Param1.Trim(Param2.ToCharArray()).ToString().Trim();
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "REMOVESCHAR" // //특수기호삭제한다.
|
||||
// :
|
||||
// {
|
||||
// if (ParamList.Count != 1)
|
||||
// raiseMessage("REMOVESCHAR 함수에 1개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// System.Text.StringBuilder NewString = new System.Text.StringBuilder();
|
||||
// foreach (char Cc in Param1.ToCharArray())
|
||||
// {
|
||||
// switch (Strings.Asc(Cc))
|
||||
// {
|
||||
// case object _ when 65 <= Strings.Asc(Cc) && Strings.Asc(Cc) <= 90:
|
||||
// case object _ when 48 <= Strings.Asc(Cc) && Strings.Asc(Cc) <= 57:
|
||||
// case object _ when 97 <= Strings.Asc(Cc) && Strings.Asc(Cc) <= 122:
|
||||
// case object _ when Strings.Asc(Cc) < 0:
|
||||
// case 32:
|
||||
// {
|
||||
// NewString.Append(Cc);
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// NEwValue = NewString.ToString();
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "REMOVESPACE":
|
||||
// {
|
||||
// if (ParamList.Count != 1)
|
||||
// raiseMessage("REMOVESPACE 함수에 1개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// NEwValue = Param1.Replace(Strings.Space(1), Constants.vbNullString);
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "TOUPPER":
|
||||
// {
|
||||
// if (ParamList.Count != 1)
|
||||
// raiseMessage("TOUPPER 함수에 1개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// NEwValue = Param1.ToUpper();
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "TRIM":
|
||||
// {
|
||||
// if (ParamList.Count != 1)
|
||||
// raiseMessage("TRIM 함수에 1개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// NEwValue = Param1.Trim();
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "TOLOWER":
|
||||
// {
|
||||
// if (ParamList.Count != 1)
|
||||
// raiseMessage("TOLOWER 함수에 1개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// NEwValue = Param1.ToLower();
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "LENB":
|
||||
// {
|
||||
// if (ParamList.Count != 1)
|
||||
// raiseMessage("LENB 함수에 1개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// NEwValue = System.Text.Encoding.Default.GetByteCount(Param1.ToString());
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "LEN":
|
||||
// {
|
||||
// if (ParamList.Count != 1)
|
||||
// raiseMessage("LEN 함수에 1개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// NEwValue = Param1.Length;
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "RIGHTADD":
|
||||
// case "ADDRIGHT":
|
||||
// {
|
||||
// if (ParamList.Count != 2)
|
||||
// raiseMessage("RIGHTADD 함수에 2개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
|
||||
// NEwValue = Param1 + Param2;
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "ADDNUM":
|
||||
// {
|
||||
// if (ParamList.Count != 2)
|
||||
// raiseMessage("ADDNUM 함수에 2개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
|
||||
// NEwValue = Param1 + Param2;
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "LEFTADD":
|
||||
// case "ADDLEFT":
|
||||
// {
|
||||
// if (ParamList.Count != 2)
|
||||
// raiseMessage("LEFTADD 함수에 2개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
|
||||
// NEwValue = Param2 + Param1;
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "TODATE":
|
||||
// {
|
||||
// if (ParamList.Count != 1)
|
||||
// raiseMessage("TODATE 함수에 1개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// NEwValue = ((DateTime)Param1);
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "TOSTRING":
|
||||
// {
|
||||
// if (ParamList.Count != 1)
|
||||
// raiseMessage("TOSTRING 함수에 1개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// NEwValue = (System.Convert.ToString(Param1));
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "TOINT":
|
||||
// {
|
||||
// if (ParamList.Count != 1)
|
||||
// raiseMessage("TOINT 함수에 1개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// NEwValue = Param1;
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "NOW":
|
||||
// {
|
||||
// NEwValue = DateTime.Now;
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "SUBSTRING":
|
||||
// case "SUBSTR" // //2개의 파라미터를 사용한다.
|
||||
// :
|
||||
// {
|
||||
// if (ParamList.Count < 2)
|
||||
// raiseMessage("SUBSTRING 함수에 2개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
|
||||
// object param3 = "";
|
||||
// if (ParamList.Count == 3)
|
||||
// param3 = RunParam(ParamList[2].ToString(), NEwValue.ToString());
|
||||
// if (Param1.Trim() == "" || Information.IsNumeric(Param2) == false || System.Convert.ToInt32(Param2) < 0)
|
||||
// NEwValue = "";
|
||||
// else if (param3 != "")
|
||||
// {
|
||||
// // //길이를 참고한다. 너무 긴건 처리하지 못하므로
|
||||
// if (System.Convert.ToInt32(Param2) + System.Convert.ToInt32(param3) > Param1.Length)
|
||||
// NEwValue = Param1.Substring(Param2, (Param1.Length - System.Convert.ToInt32(Param2)));
|
||||
// else
|
||||
// NEwValue = Param1.Substring(Param2, param3);
|
||||
// }
|
||||
// else
|
||||
// NEwValue = Param1.Substring(Param2);
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "SAVE1":
|
||||
// {
|
||||
// if (ParamList.Count < 1)
|
||||
// Util.MsgE("SAVE1 함수에 1개의 파라미터가 없습니다");
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// Buffer1 = Param1;
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "SAVE2":
|
||||
// {
|
||||
// if (ParamList.Count < 1)
|
||||
// Util.MsgE("SAVE1 함수에 1개의 파라미터가 없습니다");
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// Buffer2 = Param1;
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "SAVE3":
|
||||
// {
|
||||
// if (ParamList.Count < 1)
|
||||
// Util.MsgE("SAVE1 함수에 1개의 파라미터가 없습니다");
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// Buffer3 = Param1;
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "SAVE4":
|
||||
// {
|
||||
// if (ParamList.Count < 1)
|
||||
// Util.MsgE("SAVE1 함수에 1개의 파라미터가 없습니다");
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// Buffer4 = Param1;
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "LEFT" // //2개의 파라미터를 사용한다.
|
||||
// :
|
||||
// {
|
||||
// if (ParamList.Count != 2)
|
||||
// raiseMessage("LEFT 함수에 2개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
|
||||
// NEwValue = Strings.Left(Param1, Param2);
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "RIGHT" // //2개의 파라미터를 사용한다.
|
||||
// :
|
||||
// {
|
||||
// if (ParamList.Count != 2)
|
||||
// raiseMessage("RIGHT 함수에 2개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// var Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString()).ToString();
|
||||
// var Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString()).ToString();
|
||||
// NEwValue = Param1.Substring(Param1.Length-int.Parse(Param2));// Strings.Right(Param1, Param2);
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "MID": // //2개의 파라미터를 사용한다.
|
||||
// {
|
||||
// if (ParamList.Count != 3)
|
||||
// raiseMessage("MID 함수에 3개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// var Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// var Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
|
||||
// var Param3 = RunParam(ParamList[2].ToString(), NEwValue.ToString());
|
||||
// if (Param2 == "-1" || int.Parse(Param3.ToString()) < 1)
|
||||
// {
|
||||
// raiseMessage("MID 함수의 시작위치값은 0이상이여야합니다\nMID 함수의 추출길이는 1이상이여야합니다", true);
|
||||
// NEwValue = "";
|
||||
// }
|
||||
// else
|
||||
// NEwValue = Param1.ToString().Substring(int.Parse(Param2.ToString()), int.Parse(Param3.ToString()));
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// case "FORMAT":
|
||||
// {
|
||||
// if (ParamList.Count != 2)
|
||||
// raiseMessage("FORMAT 함수에 2개의 파라미터가 없습니다", true);
|
||||
// else
|
||||
// {
|
||||
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
|
||||
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
|
||||
|
||||
// // MsgBox(Param1 & "/" & Param2)
|
||||
// if(Param1.GetType()== typeof(int))
|
||||
// NEwValue = ((int)Param1).ToString(Param2.ToString());
|
||||
// else
|
||||
// NEwValue = Param1.ToString();
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// default:
|
||||
// {
|
||||
// //raiseMessage("미지원 함수 입니다")
|
||||
// raiseMessage("미지원 : " + NewCmd.ToString(),true);
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// break;
|
||||
// }
|
||||
|
||||
// default:
|
||||
// {
|
||||
// if (C == '"')
|
||||
// {
|
||||
// IsTextInner = !IsTextInner;
|
||||
// NewParam.Append(C);
|
||||
// }
|
||||
// else if (IsFunctionEnd)
|
||||
// raiseMessage("내부한수 종결문다음에 , 가 와야하는데 " + C + "가 왔습니다", true);
|
||||
// else
|
||||
// NewParam.Append(C);
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// // Me.Log.AppendLine("ParseCOmmand Return : " & NEwValue.ToString)
|
||||
// return NEwValue;
|
||||
// }
|
||||
|
||||
// public object RunParam(string vParam, string SrcValue)
|
||||
// {
|
||||
// // My.Computer.FileSystem.WriteAllText("c:\log.txT", "runparam param=" & vParam, True)
|
||||
// vParam = vParam.Trim();
|
||||
// if (vParam == "")
|
||||
// return "";
|
||||
// if (vParam.Substring(0, 1) == "\"")
|
||||
// return vParam.Replace("\"", "");
|
||||
// if (vParam.ToUpper() == "TRUE")
|
||||
// return true;
|
||||
// if (vParam.ToUpper() == "FALSE")
|
||||
// return false;
|
||||
|
||||
// // //시작값이 숫자라면 이건 숫자값이다.
|
||||
// if (vParam.Substring(0, 1).IsNumeric() == true)
|
||||
// return vParam;
|
||||
|
||||
// // //시작값이 # 라면 원본 데이터이다.
|
||||
// if (vParam == "#")
|
||||
// return SrcValue;
|
||||
// if (vParam == "#1")
|
||||
// return Buffer1;
|
||||
// if (vParam == "#2")
|
||||
// return Buffer2;
|
||||
// if (vParam == "#3")
|
||||
// return Buffer3;
|
||||
// if (vParam == "#4")
|
||||
// return Buffer4;
|
||||
|
||||
// // //시작값이 숫자도 일반 문자도 공백도 아니라면 영문단어이다.
|
||||
// // // ( 가 있다면 함수이므로 함수를 실행한다.
|
||||
// switch (vParam.ToUpper())
|
||||
// {
|
||||
// case "NOW" // //date 타입을 반환한다.
|
||||
// :
|
||||
// {
|
||||
// return DateTime.Now;
|
||||
// }
|
||||
|
||||
// default:
|
||||
// {
|
||||
// if (vParam.IndexOf("(") != -1)
|
||||
// return this.ParseCommand(vParam, false, SrcValue);
|
||||
// else
|
||||
// return "";// return RunUnknown(vParam, SrcValue);// //비지원 목록으로 반환한다.
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// return "";
|
||||
// }
|
||||
|
||||
// }
|
||||
//}
|
||||
|
||||
236
Cs_HMI/Project/Class/CResult.cs
Normal file
236
Cs_HMI/Project/Class/CResult.cs
Normal file
@@ -0,0 +1,236 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using static Project.StateMachine;
|
||||
|
||||
namespace Project
|
||||
{
|
||||
public class CResult
|
||||
{
|
||||
|
||||
public bool SMSG_ProgressEnable = false;
|
||||
//public string SMSG_Text = string.Empty;
|
||||
public float SMSG_ProgressMax = 0;
|
||||
public int SMSG_ProgressMin = 0;
|
||||
public Color SMSG_ProgressForeColor = Color.Red;
|
||||
public Color SMSG_ForeColor = Color.Black;
|
||||
public Color SMSG_BackColor = Color.White;
|
||||
public Color SMSG_BackColor2 = Color.White;
|
||||
public Color SMSG_ShadowColor = Color.Transparent;
|
||||
public float SMSG_ProgressValue = 0;
|
||||
public string SMSG_Tag = string.Empty;
|
||||
//public event EventHandler SMSG_Update;
|
||||
//public void UpdateStatusMessage()
|
||||
//{
|
||||
// SMSG_Update?.Invoke(null, null);
|
||||
//}
|
||||
/// <summary>
|
||||
/// 작업시작시간
|
||||
/// </summary>
|
||||
public DateTime JobStartTime;
|
||||
|
||||
/// <summary>
|
||||
/// 작업종료시간
|
||||
/// </summary>
|
||||
public DateTime JobEndTime;
|
||||
|
||||
//public DateTime IdleStartTime = DateTime.Parse("1982-11-23");
|
||||
|
||||
/// <summary>
|
||||
/// 작업진행시간
|
||||
/// </summary>
|
||||
public TimeSpan JobRunTime
|
||||
{
|
||||
get
|
||||
{
|
||||
if (JobStartTime.Year == 1982) return new TimeSpan(0);
|
||||
if (JobEndTime.Year == 1982) return DateTime.Now - JobStartTime;
|
||||
else return JobEndTime - JobStartTime;
|
||||
}
|
||||
}
|
||||
|
||||
//public DateTime ChargeStartTime = DateTime.Parse("1982-11-23");
|
||||
|
||||
|
||||
#region "AGV Status Value"
|
||||
public string PLC1_RawData { get; set; }
|
||||
public string PLC2_RawData { get; set; }
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// 이동대상위치(상차,하차,충전)
|
||||
/// </summary>
|
||||
private ePosition _targetPos = ePosition.NONE;
|
||||
|
||||
public event EventHandler TargetPosSet;
|
||||
|
||||
public string result_message = "";
|
||||
public double result_progressmax = 0;
|
||||
public double result_progressvalue = 0;
|
||||
|
||||
|
||||
public DateTime StopMessageTimePLC = DateTime.Parse("1982-11-23");
|
||||
public DateTime StopMessageTimeSWR = DateTime.Parse("1982-11-23");
|
||||
public string StopMessagePLC = string.Empty;
|
||||
public string StopMessageSWR = string.Empty;
|
||||
//public DateTime LastChar
|
||||
//geTime = DateTime.Parse("1982-11-23");
|
||||
|
||||
public ePosition NextPos = ePosition.NONE;
|
||||
public ePosition TargetPos
|
||||
{
|
||||
get
|
||||
{
|
||||
return _targetPos;
|
||||
}
|
||||
set
|
||||
{
|
||||
_targetPos = value;
|
||||
TargetPosSet?.Invoke(this, null);
|
||||
|
||||
PUB.log.Add(string.Format("대상위치설정:{0}", value));
|
||||
}
|
||||
}
|
||||
|
||||
private char _comandKit { get; set; }
|
||||
public char CommandKit
|
||||
{
|
||||
get
|
||||
{
|
||||
return _comandKit;
|
||||
}
|
||||
set
|
||||
{
|
||||
_comandKit = value;
|
||||
|
||||
PUB.log.Add(string.Format("명령을 내린 KIT 설정 No={0}", value));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//private ePosition _currentPos = ePosition.NONE;
|
||||
//public ePosition CurrentPos
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
// return _currentPos;
|
||||
// }
|
||||
// set
|
||||
// {
|
||||
// if (_currentPos != value) //값이바뀔떄만 메세지 220628
|
||||
// PUB.log.Add(string.Format("현재위치 설정:{0}->{1}", _currentPos, value));
|
||||
|
||||
// _currentPos = value;
|
||||
// }
|
||||
//}
|
||||
|
||||
private ePosition _currentpos = ePosition.NONE;
|
||||
private string _currentposcw = string.Empty;
|
||||
|
||||
// public ePosition LastPos = ePosition.NONE;
|
||||
public string LastTAG { get; set; } = string.Empty;
|
||||
public ePosition CurrentPos
|
||||
{
|
||||
get
|
||||
{
|
||||
return _currentpos; }
|
||||
set
|
||||
{
|
||||
|
||||
if (_currentpos != value) //값이 바뀔때만 메세지 220628
|
||||
PUB.log.Add(string.Format("TAG위치 설정:{0}->{1}", _currentpos, value));
|
||||
_currentpos = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public string CurrentPosCW
|
||||
{
|
||||
get
|
||||
{
|
||||
|
||||
return _currentposcw;
|
||||
}
|
||||
set
|
||||
{
|
||||
|
||||
if (_currentposcw != value) //값이바뀔때만 메세지 220628
|
||||
PUB.log.Add(string.Format("TAG방향 설정:{0}->{1}", _currentposcw, value));
|
||||
_currentposcw = value;
|
||||
}
|
||||
}
|
||||
public string Memo;
|
||||
|
||||
public eResult ResultCode { get; set; }
|
||||
public eECode ResultErrorCode;
|
||||
public string ResultMessage { get; set; }
|
||||
|
||||
#region "SetResultMessage"
|
||||
|
||||
public void SetResultMessage(eResult code, eECode err, eNextStep systempause, params object[] args)
|
||||
{
|
||||
|
||||
var rltMsg = UTIL.GetResultCodeMessage(code);
|
||||
var codeMSg = $"[E{(int)err}] ";// + Util.GetResultCodeMessage(code);
|
||||
if (err == eECode.MESSAGE_ERROR)
|
||||
{
|
||||
codeMSg = $"[{rltMsg} ERROR MESSAGE]\n";
|
||||
}
|
||||
else if (err == eECode.MESSAGE_INFO)
|
||||
{
|
||||
codeMSg = $"[{rltMsg} INFORMATION]\n";
|
||||
}
|
||||
|
||||
|
||||
|
||||
var erMsg = UTIL.GetErrorMessage(err, args);
|
||||
var msg = codeMSg + erMsg;
|
||||
|
||||
this.ResultCode = code;
|
||||
this.ResultErrorCode = err;
|
||||
this.ResultMessage = msg;
|
||||
|
||||
if (systempause == eNextStep.PAUSENOMESAGE) this.ResultMessage = string.Empty; //210129
|
||||
|
||||
PUB.log.AddE(msg);
|
||||
if (systempause == eNextStep.PAUSE) PUB.sm.SetNewStep(eSMStep.PAUSE);
|
||||
else if (systempause == eNextStep.PAUSENOMESAGE) PUB.sm.SetNewStep(eSMStep.PAUSE);
|
||||
else if (systempause == eNextStep.ERROR) PUB.sm.SetNewStep(eSMStep.ERROR);
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
public Boolean isError { get; set; }
|
||||
|
||||
public int retry = 0;
|
||||
public DateTime retryTime;
|
||||
public Device.Socket.Message RecvMessage;
|
||||
|
||||
public CResult()
|
||||
{
|
||||
this.Clear();
|
||||
}
|
||||
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
JobStartTime = DateTime.Parse("1982-11-23");
|
||||
JobEndTime = DateTime.Parse("1982-11-23");
|
||||
|
||||
Memo = string.Empty;
|
||||
isError = false;
|
||||
ResultCode = eResult.NoError;
|
||||
ResultMessage = string.Empty;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
379
Cs_HMI/Project/Class/EEMStatus.cs
Normal file
379
Cs_HMI/Project/Class/EEMStatus.cs
Normal file
@@ -0,0 +1,379 @@
|
||||
using Project;
|
||||
using Project.Device;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Management;
|
||||
using System.Net;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using static Project.StateMachine;
|
||||
|
||||
/// <summary>
|
||||
/// ============================================================================
|
||||
/// 장비기술 상태 모니터링 관련 클래스
|
||||
/// 이 클래스는 SQLfiletoDB 프로그램과 같이 사용하는 것을 권장합니다.
|
||||
/// 현재 실행 중인 프로그램의 하위 폴더 Status 에 입력된 상태값을 SQL 파일로 기록합니다.
|
||||
/// SQLfiletoDB는 SQL파일을 실제 DB에 기록하는 프로그램입니다.
|
||||
/// ============================================================================
|
||||
/// 작성자 : chi
|
||||
/// 작성일 : 202-06-15
|
||||
/// GIT : (none)
|
||||
/// </summary>
|
||||
public static partial class EEMStatus
|
||||
{
|
||||
static System.Threading.ManualResetEvent mre = new System.Threading.ManualResetEvent(true);
|
||||
static string ip = string.Empty;
|
||||
static string mac = string.Empty;
|
||||
static DateTime StatusChecktime = DateTime.Now;
|
||||
static DateTime MonitorChecktime = DateTime.Now.AddYears(-1);
|
||||
static DateTime FileCheckTime = DateTime.Now;
|
||||
static string monitorfile = string.Empty;
|
||||
/// <summary>
|
||||
/// UpdateStatusSQL 명령이 동작하는 간격이며 기본 180초(=3분)로 되어 있습니다.
|
||||
/// </summary>
|
||||
public static int UpdateStatusInterval { get; set; } = 180;
|
||||
public static int UpdateFileInterval { get; set; } = 3;
|
||||
static bool queryok = false;
|
||||
static bool UpdateRun = false;
|
||||
|
||||
public static string IP
|
||||
{
|
||||
get
|
||||
{
|
||||
if (queryok == false) GetNetworkInfo();
|
||||
return ip;
|
||||
}
|
||||
set { ip = value; }
|
||||
}
|
||||
public static string MAC
|
||||
{
|
||||
get
|
||||
{
|
||||
if (queryok == false) GetNetworkInfo();
|
||||
return mac;
|
||||
}
|
||||
set
|
||||
{
|
||||
mac = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 현재 시스템의 IP/MAC정보를 취득합니다.
|
||||
/// </summary>
|
||||
static void GetNetworkInfo()
|
||||
{
|
||||
|
||||
ip = "";
|
||||
mac = "";
|
||||
// string prgmName = Application.ProductName;
|
||||
|
||||
var nif = NetworkInterface.GetAllNetworkInterfaces();
|
||||
var host = Dns.GetHostEntry(Dns.GetHostName());
|
||||
string fullname = System.Net.Dns.GetHostEntry("").HostName;
|
||||
foreach (IPAddress r in host.AddressList)
|
||||
{
|
||||
string str = r.ToString();
|
||||
|
||||
if (str != "" && str.Substring(0, 3) == "10.")
|
||||
{
|
||||
ip = str;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
string rtn = string.Empty;
|
||||
ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled='TRUE'");
|
||||
ManagementObjectSearcher query1 = new ManagementObjectSearcher(oq);
|
||||
foreach (ManagementObject mo in query1.Get())
|
||||
{
|
||||
string[] address = (string[])mo["IPAddress"];
|
||||
if (address[0] == ip && mo["MACAddress"] != null)
|
||||
{
|
||||
mac = mo["MACAddress"].ToString();
|
||||
break;
|
||||
}
|
||||
}
|
||||
queryok = true;
|
||||
}
|
||||
|
||||
public static void UpdateStatusSQL(eSMStep status, bool _extrun = false, string remark = "")
|
||||
{
|
||||
var tsrun = DateTime.Now - StatusChecktime;
|
||||
if (tsrun.TotalSeconds >= UpdateStatusInterval)
|
||||
{
|
||||
AddStatusSQL(status, "UPDATE", extrun: _extrun);
|
||||
StatusChecktime = DateTime.Now;
|
||||
}
|
||||
|
||||
//내부실행모드일때에만 파일을 처리한다
|
||||
if (_extrun == false)
|
||||
{
|
||||
var tsfile = DateTime.Now - FileCheckTime;
|
||||
if (tsfile.TotalSeconds >= UpdateFileInterval)
|
||||
{
|
||||
if (UpdateRun == false)
|
||||
{
|
||||
UpdateRun = true;
|
||||
Task.Run(() =>
|
||||
{
|
||||
UpdateFileToDB();
|
||||
UpdateRun = false;
|
||||
});
|
||||
}
|
||||
FileCheckTime = DateTime.Now;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 상태모니터링 프로그램의 실행파일 명
|
||||
/// </summary>
|
||||
static string StatusMonitorFile
|
||||
{
|
||||
get
|
||||
{
|
||||
if (string.IsNullOrEmpty(monitorfile))
|
||||
monitorfile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Status", "SQLFileToDB.exe");
|
||||
return monitorfile;
|
||||
}
|
||||
}
|
||||
|
||||
static System.Diagnostics.Process CheckMonitor()
|
||||
{
|
||||
if (System.IO.File.Exists(StatusMonitorFile) == false) return null;
|
||||
|
||||
var prcs = System.Diagnostics.Process.GetProcesses();
|
||||
return prcs.Where(t => t.ProcessName.ToLower().StartsWith("sqlfiletodb")).FirstOrDefault();
|
||||
}
|
||||
|
||||
public static bool RunStatusMonitor()
|
||||
{
|
||||
//파일이 없으면 실행 불가
|
||||
if (System.IO.File.Exists(StatusMonitorFile) == false) return false;
|
||||
|
||||
//실행프로세스 검사
|
||||
var prc = CheckMonitor();
|
||||
if (prc == null)
|
||||
{
|
||||
try
|
||||
{
|
||||
prc = new System.Diagnostics.Process();
|
||||
prc.StartInfo = new System.Diagnostics.ProcessStartInfo
|
||||
{
|
||||
Arguments = string.Empty,
|
||||
FileName = StatusMonitorFile,
|
||||
};
|
||||
prc.Start();
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 작업수량을 입력합니다
|
||||
/// </summary>
|
||||
/// <param name="cnt"></param>
|
||||
/// <returns></returns>
|
||||
public static string AddStatusCount(int cnt, string remark = "")
|
||||
{
|
||||
if (remark.isEmpty()) remark = $"Count Set : {cnt}";
|
||||
return AddStatusSQL(PUB.sm.Step, remark, count: cnt);
|
||||
}
|
||||
/// <summary>
|
||||
/// 상태메세지를 status 폴더에 기록합니다.
|
||||
/// </summary>
|
||||
/// <param name="status">상태머신의 상태값</param>
|
||||
/// <param name="remark">비고</param>
|
||||
/// <param name="wdate">기록일시</param>
|
||||
/// <returns>오류발생시 오류메세지가 반환 됩니다</returns>
|
||||
public static string AddStatusSQL(eSMStep status, string remark = "", DateTime? wdate = null, bool extrun = false, int? count = null)
|
||||
{
|
||||
if (queryok == false || MAC.isEmpty()) GetNetworkInfo();
|
||||
if (status == eSMStep.CLOSEWAIT || status == eSMStep.CLOSED) return string.Empty;
|
||||
|
||||
if (extrun)
|
||||
{
|
||||
//상태모니터링 프로그램을 실행합니다.
|
||||
var tsMon = DateTime.Now - MonitorChecktime;
|
||||
if (tsMon.TotalMinutes > 5) RunStatusMonitor();
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var state = 0;
|
||||
string cntstr = "null";
|
||||
if (count != null) cntstr = count.ToString();
|
||||
var alarmid = string.Empty;
|
||||
var alarmmsg = string.Empty;
|
||||
if (string.IsNullOrEmpty(remark)) remark = $"STS:{status}";
|
||||
|
||||
if (status == eSMStep.RUN) state = 1;
|
||||
else if (status == eSMStep.ERROR || status == eSMStep.EMERGENCY)
|
||||
{
|
||||
state = 2;
|
||||
alarmid = PUB.Result.ResultErrorCode.ToString();
|
||||
alarmmsg = PUB.Result.ResultMessage;
|
||||
}
|
||||
else if (status == eSMStep.PAUSE) //일시중지도 오류코드가 포함된다,
|
||||
{
|
||||
if (PUB.Result.ResultErrorCode == eECode.USER_STEP || PUB.Result.ResultErrorCode == eECode.USER_STOP || PUB.Result.ResultErrorCode.ToString().StartsWith("MESSAGE"))
|
||||
{
|
||||
//사용자에의해 멈추는 것은 오류코드를 넣지 않는다.
|
||||
}
|
||||
else
|
||||
{
|
||||
alarmid = PUB.Result.ResultErrorCode.ToString();
|
||||
alarmmsg = PUB.Result.ResultMessage;
|
||||
}
|
||||
}
|
||||
else if (status == eSMStep.INIT) state = 3; //시작
|
||||
else if (status == eSMStep.CLOSING) state = 4; //종료
|
||||
|
||||
//length check
|
||||
if (alarmid.Length > 10) alarmid = alarmid.Substring(0, 10);
|
||||
if (remark.Length > 99) remark = remark.Substring(0, 99);
|
||||
if (alarmmsg.Length > 250) alarmmsg = alarmmsg.Substring(0, 50);
|
||||
|
||||
var mcid = Project.PUB.setting.MCID;//.Data.MCID;
|
||||
var path = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Status");
|
||||
var file = System.IO.Path.Combine(path, $"{DateTime.Now.ToString("HHmmssfff")}_{status}.sql");
|
||||
var sql = "insert into MCMonitor_Rawdata(Model,status,remark,ip,mac,time,alarmid,alarmmsg,count,version) " +
|
||||
" values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}',{8},'{9}')";
|
||||
|
||||
var timestr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
if (wdate != null) timestr = ((DateTime)wdate).ToString("yyyy-MM-dd HH:mm:ss");
|
||||
var VersionNumber = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
|
||||
sql = string.Format(sql, mcid, state, remark.Replace("'", "''"), IP, MAC, timestr, alarmid, alarmmsg, cntstr, VersionNumber);
|
||||
System.IO.File.WriteAllText(file, sql, System.Text.Encoding.Default);
|
||||
|
||||
////만들어진지 3분이 지난 파일은 삭제한다.
|
||||
//var di = new System.IO.DirectoryInfo(path);
|
||||
//var fi = di.GetFiles("*.sql", System.IO.SearchOption.TopDirectoryOnly).Where(t => t.LastWriteTime < DateTime.Now.AddMinutes(-3)).FirstOrDefault();
|
||||
//if (fi != null) fi.Delete();
|
||||
if (state == 4 && extrun == false) UpdateFileToDB();
|
||||
return string.Empty;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return ex.Message;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void UpdateFileToDB()
|
||||
{
|
||||
if (mre.WaitOne(1000) == false) return;
|
||||
mre.Reset();
|
||||
var cs = "Data Source=10.131.15.18;Initial Catalog=EE;Persist Security Info=True;User ID=eeuser;Password=Amkor123!";
|
||||
var path = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Status");
|
||||
var di = new System.IO.DirectoryInfo(path);
|
||||
if (di.Exists == false) return;
|
||||
var file = di.GetFiles("*.sql", System.IO.SearchOption.TopDirectoryOnly)
|
||||
.Where(t => t.LastWriteTime < DateTime.Now.AddSeconds(-3))
|
||||
.OrderByDescending(t => t.LastWriteTime).FirstOrDefault();
|
||||
|
||||
if (file == null)
|
||||
{
|
||||
mre.Set();
|
||||
return;
|
||||
}
|
||||
|
||||
//파일을 찾아야한다
|
||||
// PUB.log.Add($">> {file.FullName}");
|
||||
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
var sql = System.IO.File.ReadAllText(file.FullName, System.Text.Encoding.Default);
|
||||
if (string.IsNullOrEmpty(sql))
|
||||
{
|
||||
//비어잇다면
|
||||
var errpath = System.IO.Path.Combine(di.FullName, "Error");
|
||||
var errfile = System.IO.Path.Combine(errpath, file.Name);
|
||||
if (System.IO.Directory.Exists(errpath) == false) System.IO.Directory.CreateDirectory(errpath);
|
||||
System.IO.File.Move(file.FullName, errfile);// file.MoveTo(errfile);
|
||||
// ecnt += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
// var csstr = PUB.setting.ConnectionString;
|
||||
// if (string.IsNullOrEmpty(csstr)) csstr = "Data Source=10.131.15.18;Initial Catalog=EE;Persist Security Info=True;User ID=eeuser;Password=Amkor123!";
|
||||
var cn = new System.Data.SqlClient.SqlConnection(cs);
|
||||
var cmd = new System.Data.SqlClient.SqlCommand(sql, cn);
|
||||
cn.Open();
|
||||
var cnt = cmd.ExecuteNonQuery();
|
||||
//if (cnt == 0) PUB.log.Add($"Result Empty : {sql}");
|
||||
cn.Close();
|
||||
cnt += 1;
|
||||
|
||||
var errpath = System.IO.Path.Combine(di.FullName, "Complete");
|
||||
var errfile = System.IO.Path.Combine(errpath, file.Name);
|
||||
if (System.IO.Directory.Exists(errpath) == false) System.IO.Directory.CreateDirectory(errpath);
|
||||
//file.MoveTo(errfile);
|
||||
System.IO.File.Move(file.FullName, errfile);
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var errpath = System.IO.Path.Combine(di.FullName, "Error");
|
||||
var errfile = System.IO.Path.Combine(errpath, file.Name);
|
||||
if (System.IO.Directory.Exists(errpath) == false) System.IO.Directory.CreateDirectory(errpath);
|
||||
try
|
||||
{
|
||||
//file.MoveTo(errfile);
|
||||
System.IO.File.Move(file.FullName, errfile);
|
||||
}
|
||||
catch (Exception ex2)
|
||||
{
|
||||
Console.WriteLine($"move error : {ex2.Message} : {errfile}");
|
||||
}
|
||||
|
||||
//ecnt += 1;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
//생성된지 10일이 넘은 자료는 삭제한다.
|
||||
//시간소비를 피해서 1개의 파일만 작업한다
|
||||
var sqlfiles = di.GetFiles("*.sql", System.IO.SearchOption.AllDirectories);
|
||||
//총3번의 데이터를 처리한다
|
||||
var files = sqlfiles.Where(t => t.LastWriteTime < DateTime.Now.AddDays(-10)).Select(t => t.FullName);
|
||||
int i = 0;
|
||||
var dellist = files.TakeWhile(t => i++ < 3);
|
||||
foreach (var delfile in dellist)
|
||||
System.IO.File.Delete(delfile);
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
mre.Set();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
=================================================
|
||||
변경내역
|
||||
=================================================
|
||||
230619 chi UpdateFileToDB 에서 폴더가 없다면 return 하도록 함
|
||||
230615 chi UpdateFiletoDB의 ManualResetEvent적용
|
||||
Version 항목 추가
|
||||
230612 chi 프로그램 시작/종료 alarmid항목 추가
|
||||
완료된 파일 10일간 보존하도록 함
|
||||
230522 chi extrun 모드 추가(agv용 - SQL파일을 외부 프로그램에서 처리하도록 함)
|
||||
230617 chi 파일쓰기함수를 Task 로 처리
|
||||
3분지난데이터 삭제기능 제거
|
||||
230516 chi initial commit
|
||||
*/
|
||||
108
Cs_HMI/Project/Class/EnumData.cs
Normal file
108
Cs_HMI/Project/Class/EnumData.cs
Normal file
@@ -0,0 +1,108 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Project
|
||||
{
|
||||
public enum StepResult
|
||||
{
|
||||
Wait = 0,
|
||||
Complete,
|
||||
Error,
|
||||
Cancel,
|
||||
}
|
||||
public enum eNextStep : byte
|
||||
{
|
||||
NOTHING = 0,
|
||||
PAUSE,
|
||||
PAUSENOMESAGE,
|
||||
ERROR
|
||||
}
|
||||
|
||||
public enum EFlag : byte
|
||||
{
|
||||
MINSPACE = 0,
|
||||
|
||||
MOTZ_LIMD,
|
||||
MOTZ_LIMU,
|
||||
WAIT_COVER_DOWN,
|
||||
WAIT_COVER_UP,
|
||||
POSITION_OUT,
|
||||
FLAG_CHARGEALIGN,
|
||||
//FLAG_AUTORUN,
|
||||
FLAG_MOVING,
|
||||
FLAG_NEXTSTOP_MARK,
|
||||
FLAG_DIR_BW,
|
||||
FLAG_SETUP,
|
||||
FLAG_GATEOUT,
|
||||
FLAG_STOP,
|
||||
FLAG_LIMITHIGH,
|
||||
FLAG_LIMITHIGHL,
|
||||
FLAG_LIMITHIGHR,
|
||||
FLAG_LIMITLOW,
|
||||
FLAG_LIMITLOWL,
|
||||
FLAG_LIMITLOWR,
|
||||
}
|
||||
|
||||
public enum eECode : byte
|
||||
{
|
||||
NOERROR,
|
||||
EMERGENCY,
|
||||
NOMODELV,
|
||||
USER_STOP ,
|
||||
USER_STEP,
|
||||
|
||||
AGVCONN,
|
||||
PLCCONN,
|
||||
|
||||
MESSAGE_INFO,
|
||||
MESSAGE_ERROR,
|
||||
|
||||
DOOFF,
|
||||
DOON,
|
||||
DIOFF,
|
||||
DION,
|
||||
|
||||
NOTALLOWUP,
|
||||
}
|
||||
|
||||
|
||||
public enum eResult : byte
|
||||
{
|
||||
TimeOut,
|
||||
Dio,
|
||||
NoError,
|
||||
Setting,
|
||||
NoModel,
|
||||
Emergency,
|
||||
Sensor,
|
||||
Hardware,
|
||||
Motion,
|
||||
HomeTimeout,
|
||||
PCBDetect,
|
||||
Vision,
|
||||
LOT,
|
||||
}
|
||||
|
||||
public enum ePosition : byte
|
||||
{
|
||||
NONE = 0,
|
||||
NOT,
|
||||
QA,
|
||||
QA_QC,
|
||||
QC,
|
||||
CHARGE,
|
||||
QC_F1,
|
||||
F1,
|
||||
F1_F2,
|
||||
F2,
|
||||
F2_F3,
|
||||
F3,
|
||||
F3_F4,
|
||||
F4,
|
||||
F4_F5,
|
||||
F5,
|
||||
POT,
|
||||
}
|
||||
}
|
||||
75
Cs_HMI/Project/Class/Lang.cs
Normal file
75
Cs_HMI/Project/Class/Lang.cs
Normal file
@@ -0,0 +1,75 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Policy;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Project
|
||||
{
|
||||
public static class Lang
|
||||
{
|
||||
public static string 상차 = "상차";
|
||||
public static string 하차 = "하차";
|
||||
public static string 연결실패 = "연결 실패";
|
||||
public static string 비상정지 = "비상 정지";
|
||||
public static string 홈검색완료 = "홈 검색 완료";
|
||||
public static string 현재위치를검색합니다 = "현재 위치를 검색 합니다";
|
||||
public static string 충전완료로해제합니다 = "충전 완료로 해제 합니다";
|
||||
public static string 오버로드감지 = "오버로드 감지";
|
||||
public static string 상차작업을시작합니다 { get { return string.Format("{0} 작업을 시작 합니다",상차); } }
|
||||
public static string 하차작업을시작합니다 { get { return string.Format("{0} 작업을 시작 합니다", 하차); } }
|
||||
public static string 안전커버를내려주세요 = "안전 커버를 내려 주세요";
|
||||
public static string 안전커버를올려주세요 = "안전 커버를 올려 주세요";
|
||||
public static string 안전커버를올리면하차가완료됩니다 = "안전 커버를 올리면 하차가 완료 됩니다";
|
||||
public static string 안전커버를올리면상차가완료됩니다 = "안전 커버를 올리면 상차가 완료 됩니다";
|
||||
public static string 안전커버를내립니다 = "안전 커버를 내립니다";
|
||||
public static string 장비상태초기화 = "장비 상태 초기화";
|
||||
public static string 충전을시작합니다 = "충전을 시작 합니다";
|
||||
public static string 충전을해제합니다 = "충전을 해제 합니다";
|
||||
public static string 충전을위해홈위치로이동합니다 = "충전을 위해 홈 위치로 이동 합니다";
|
||||
public static string 충전기검색실패 = "충전기 검색 실패";
|
||||
public static string 충전기를검색합니다 = "충전기를 검색 합니다";
|
||||
public static string 수동충전을시작합니다 = "수동충전을 시작 합니다";
|
||||
public static string 수동충전을해제합니다 = "수동충전을 해제 합니다";
|
||||
public static string 하드웨어오류발생 = "하드웨어 오류 발생";
|
||||
public static string 하드웨어오류로인해진행할수없습니다 = "하드웨어 오류로 인해 진행할 수 없습니다";
|
||||
public static string 초기화완료 = "초기화 완료";
|
||||
public static string 자동재부팅을실행합니다 = "자동 재부팅을 실행 합니다";
|
||||
public static string 충전기작동확인이오버되어홈으로이동조치합니다 = "충전기 작동 확인이 30초 이내로 확인이 안되어 홈으로 이동 합니다";
|
||||
public static string 충전시작명령을전송합니다 = "충전 시작명령을 전송 합니다";
|
||||
public static string 충전기위치오류로작업을취소합니다 = "충전기 위치 오류로 인해 작업을 취소 합니다";
|
||||
public static string 프로그램이초기화되었습니다 = "프로그램이 초기화 되었습니다";
|
||||
public static string 홈으로이동합니다 = "홈 으로 이동 합니다";
|
||||
public static string 전방에물체가감지되었습니다 = "전방에 물체가 감지 되었습니다";
|
||||
public static string 비상정지신호가감지되었습니다 = "비상정지 신호가 감지 되었습니다";
|
||||
public static string 비상정지로인해작업을중단합니다 = "비상정지로 인해 작업을 중단 합니다";
|
||||
public static string 선로를이탈했습니다 = "선로를 이탈 했습니다";
|
||||
public static string 충전이필요합니다자동모드로전환하세요 = "충전이 필요 합니다. 자동모드로 전환 하세요";
|
||||
public static string 충전이필요합니다 = "충전이 필요 합니다";
|
||||
public static string 배터리통신에문제가있습니다 = "배터리 통신에 문제가 있습니다";
|
||||
public static string 자동운전상태가아닙니다 = "자동운전 상태가 아닙니다";
|
||||
public static string 위치로이동합니다 = "위치로 이동 합니다";
|
||||
public static string 대기상태로전환합니다 = "대기 상태로 전환 합니다";
|
||||
public static string 홈이동완료대기상태로전환합니다 = "홈 이동이 완료 되었습니다. 대기 상태로 전환 합니다";
|
||||
public static string 커버를내립니다 = "커버를 내립니다";
|
||||
public static string 커버를올립니다 = "커버를 올립니다";
|
||||
public static string 홈검색을시작합니다 = "홈 검색을 시작 합니다";
|
||||
public static string 홈위치로이동합니다 = "홈 위치로 이동 합니다";
|
||||
public static string 하차작업이완료되었습니다 = "하차 작업이 완료 되었습니다";
|
||||
public static string 상차작업이완료되었습니다 = "상차 작업이 완료 되었습니다";
|
||||
public static string 작업종료 = "작업 종료";
|
||||
public static string 자동전환 = "자동 전환";
|
||||
public static string 충전기위치오류 = "충전기 위치 오류";
|
||||
public static string 다음마크위치에서정지합니다 = "다음 마크위치에서 정지 합니다";
|
||||
public static string 충전이감지되어수동충전으로전환합니다 = "충전이 감지되어 수동충전으로 전환 합니다";
|
||||
public static string 커버업대기상태가아닙니다 = "커버 업 대기 상태가 아닙니다";
|
||||
public static string QC이동버튼은상하차에서만사용가능합니다 = "QC이동 버튼은 상,하차 에서만 사용 가능합니다";
|
||||
public static string QA이동버튼은상하차에서만사용가능합니다 = "QA이동 버튼은 상,하차 에서만 사용 가능합니다";
|
||||
public static string 하차상태에서만사용가능합니다 = "하차 상태에서만 사용가능 합니다";
|
||||
|
||||
public static string PLC연결실패 { get { return string.Format("PLC {0}", 연결실패); } }
|
||||
public static string PLC통신실패 = "PLC 통신실패";
|
||||
public static string AGV연결실패 { get { return string.Format("AGV {0}",연결실패); } }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user