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,323 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using arCtl;
using Euresys.Open_eVision_2_11;
using static Project.StateMachine;
namespace Project
{
public partial class fMain
{
void sm_SPS(object sender, EventArgs e)
{
//always run
_SPS();
}
DateTime lastDeleteTime = DateTime.Now;
enum EScreen
{
Auto=0,
Manual,
IO,
Flag
}
void SetScreen( System.Windows.Forms.Form newscreen)
{
if(this.InvokeRequired)
{
this.BeginInvoke(new Action(() => {
SetScreen(newscreen);
}));
}
else
{
if(panDlg.Controls.Count > 0)
{
var f = panDlg.Controls[0] as System.Windows.Forms.Form;
if (f.GetType() == newscreen.GetType()) return;
}
panDlg.Controls.Clear();
panDlg.Controls.Add(newscreen);
newscreen.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
newscreen.WindowState = System.Windows.Forms.FormWindowState.Maximized;
newscreen.Show();
}
}
void sm_Running(object sender, StateMachine.RunningEventArgs e)
{
//main loop
switch (e.Step)
{
case eSMStep.NOTSET:
Pub.log.Add("S/M Initialize Start");
Pub.sm.setNewStep(eSMStep.INIT);
break;
case eSMStep.INIT: //최초실행이다.
if (_SM_RUN_INIT(e.isFirst, Pub.sm.StepRunTime))
{
//메인화면을 설정한다
form_auto = new ViewForm.fAuto();
form_manu = new ViewForm.fManual();
form_io = new ViewForm.fIO();
form_flag = new ViewForm.fFlag();
form_auto.TopLevel = false;
form_manu.TopLevel = false;
form_io.TopLevel = false;
form_flag.TopLevel = false;
form_auto.Dock = System.Windows.Forms.DockStyle.Fill;
form_manu.Dock = System.Windows.Forms.DockStyle.Fill;
form_io.Dock = System.Windows.Forms.DockStyle.Fill;
form_flag.Dock = System.Windows.Forms.DockStyle.Fill;
SetScreen(form_auto);
Pub.sm.setNewStep(eSMStep.IDLE);
}
break;
case eSMStep.IDLE:
//창을 닫아야하는 상황에는 처리하지 않는다.
if (Pub.popup.needClose)
{
System.Threading.Thread.Sleep(10); //팝업이 닫힐때까지 기다린다.
Pub.sm.WaitFirstRun = true;
return;
}
else Pub.sm.WaitFirstRun = false;
if(e.isFirst)
{
Pub.sm.bPause = false;
Pub.flag.set(eFlag.UserStepCheck, false);
Pub.sm.ClearRunStep();
// Util_DO.SetMGZMotor(false);
lbMsg.ProgressEnable = false;
// Pub.popup.needClose = true;
}
//자동소거기능
if(Pub.setting.AutoDeleteDay > 0)
{
if(Pub.flag.get(eFlag.MINSPACE)==true)
{
var ts = DateTime.Now - lastDeleteTime;
if(ts.TotalSeconds > 1)
{
//파일을 찾아서 소거한다.
if (System.IO.Directory.Exists(Pub.path.FullName))
DeleteFile(Pub.path.FullName);
lastDeleteTime = DateTime.Now;
}
}
}
break;
case eSMStep.RUN:
//창을 닫아야하는 상황에는 처리하지 않는다.
if (Pub.popup.needClose)
{
System.Threading.Thread.Sleep(10); //팝업이 닫힐때까지 기다린다.
Pub.sm.WaitFirstRun = true;
return;
}
else Pub.sm.WaitFirstRun = false;
_SM_RUN(e.isFirst, e.StepTime);
break;
case eSMStep.PAUSE:
case eSMStep.EMERGENCY:
case eSMStep.ERROR:
//창을 닫아야하는 상황에는 처리하지 않는다.
if (Pub.popup.needClose)
{
System.Threading.Thread.Sleep(10); //팝업이 닫힐때까지 기다린다.
Pub.sm.WaitFirstRun = true;
return;
}
else Pub.sm.WaitFirstRun = false;
if (e.isFirst)
{
if (Pub.Result.ResultCode != eResult.NoError)
{
//에러메세지가 있는 경우에만 표시함
if (Pub.Result.ResultMessage != "")
Pub.popup.setMessage(Pub.Result.ResultMessage);
}
if (e.Step == eSMStep.EMERGENCY) Pub.log.AddE("Enter Emergency Step");
else if (e.Step == eSMStep.PAUSE) Pub.log.AddE("Enter Pause Step : " + Pub.Result.ResultMessage);
else Pub.log.AddE(string.Format("Enter Error Step : {0}", Pub.Result.ResultMessage));
Pub.sm.bPause = false;
Pub.sm.setNewStep(eSMStep.IDLE);
}
break;
case eSMStep.RESET:
//창을 닫아야하는 상황에는 처리하지 않는다.
if (Pub.popup.needClose)
{
System.Threading.Thread.Sleep(10); //팝업이 닫힐때까지 기다린다.
Pub.sm.WaitFirstRun = true;
return;
}
else Pub.sm.WaitFirstRun = false;
if (e.isFirst)
{
ClearBarcode();
Pub.sm.bPause = false;
}
break;
}
}
void DeleteFile(string path)
{
var basetime = DateTime.Now.AddDays(-1 * Pub.setting.AutoDeleteDay);
var di = new System.IO.DirectoryInfo(path);
if (di.Exists)
{
var dirYear = di.GetDirectories().OrderBy(t => t.Name).FirstOrDefault();
if (dirYear != null)
{
var dirMon = dirYear.GetDirectories().OrderBy(t => t.Name).FirstOrDefault();
if (dirMon != null)
{
var dirDay = dirMon.GetDirectories().OrderBy(t => t.Name).FirstOrDefault();
if (dirDay != null)
{
var curDay = DateTime.Parse(string.Format("{0}-{1}-{2} 00:00:00", dirYear.ToString(), dirMon.ToString(), dirDay.ToString()));
if (curDay < basetime)
{
var dirLot = dirDay.GetDirectories().OrderBy(t => t.Name).FirstOrDefault();
if (dirLot != null)
{
var delfile = dirLot.GetFiles().FirstOrDefault();
if (delfile != null)
{
try
{
Pub.log.AddI("Remove Fle : " + delfile.FullName + ",time=" + delfile.LastWriteTime.ToString());
delfile.Delete();
}
catch (Exception ex)
{
Pub.log.AddE("deleete error : " + ex.Message);
}
}
else
{
string delpath = dirLot.FullName;
try
{
dirLot.Delete(true);
}
catch (Exception ex)
{
Pub.log.AddE("remove dir" + ex.Message + "," + delpath);
}
}
}
else
{
//이 폴더아래에 다른 폴더가 하나도 없다 즉 비어 있따.
string delpath = dirDay.FullName;
try
{
dirDay.Delete(true);
}
catch (Exception ex)
{
Pub.log.AddE("remove dir" + ex.Message + "," + delpath);
}
}
}
}
else
{
//날짜에 해당하는 폴더가 하나도 없다. 월 폴더를 제거한다.
string delpath = dirMon.FullName;
try
{
dirMon.Delete(true);
}
catch (Exception ex)
{
Pub.log.AddE("remove dir" + ex.Message + "," + delpath);
}
}
}
else
{
//이 달에 해당하는 데이터가 없다. 이 년도를 삭제한다.
string delpath = dirYear.FullName;
try
{
dirYear.Delete(true);
}
catch (Exception ex)
{
Pub.log.AddE("remove dir" + ex.Message + "," + delpath);
}
}
}
//년도별폴더목록을 정리함
//가장작은 년도를 기준으로 파일을 검색해서 1개씩 삭제함
}
}
void sm_Message(object sender, StateMachine.StateMachineMessageEventArgs e)
{
//상태머신에서 발생한 메세지
Pub.log.Add(e.Header, e.Message);
}
void sm_StepChanged(object sender, StateMachine.StepChangeEventArgs e)
{
//상태머신의 스텝이 변경될때 발생함
//Pub.log.Add(string.Format("SM:Step Changed {0} to {1}",e.Old,e.New));
}
//void uploadForm_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e)
//{
// //이벤트 해제
// if (uploadForm != null)
// uploadForm.FormClosed -= uploadForm_FormClosed;
// //업로드 창이 닫히면 그 결과를 화면에 표시 해준다.
// //foreach (System.Windows.Forms.ListViewItem lv in uploadForm.listView1.Items)
// //{
// // string slot = lv.SubItems[0].Text;
// // string wafer = lv.SubItems[2].Text;
// // string state = lv.SubItems[3].Text;
// //}
//}
}
}