initial commit

This commit is contained in:
chi
2025-01-07 16:08:02 +09:00
parent 9e657e2558
commit 0a93a54a6f
268 changed files with 50767 additions and 0 deletions

View 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 "";
// }
// }
//}

View 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;
}
}
}

View 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
*/

View 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,
}
}

View 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}",); } }
}
}