196 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			196 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Drawing;
 | |
| using System.Linq;
 | |
| using System.Security.Cryptography;
 | |
| using System.Text;
 | |
| using AR;
 | |
| 
 | |
| namespace Project
 | |
| {
 | |
|     public partial class FMain
 | |
|     {
 | |
|         //Int32[] _hDevice = new Int32[] { 0, 0, 0 };
 | |
|         //Int32[] _width = new Int32[] { 0, 0, 0 };
 | |
|         //Int32[] _height = new Int32[] { 0, 0, 0 };
 | |
|         //Int32[] _stride = new Int32[] { 0, 0, 0 };
 | |
|         //Int32[] _bufferSize = new Int32[] { 0, 0, 0 };
 | |
|         //Boolean[] _isCrevisOpen = new bool[] { false, false, false };
 | |
|         //Boolean[] _isCrevisACQ = new bool[] { false, false, false };
 | |
|         // IntPtr[] _pImage = new IntPtr[] { IntPtr.Zero, IntPtr.Zero, IntPtr.Zero };
 | |
| 
 | |
|         public void _STEP_INIT_START(eSMStep step)
 | |
|         {
 | |
| 
 | |
|             int progress = 0;
 | |
|             var ProgressMax = 13;
 | |
|             Color fColor = Color.DarkViolet;
 | |
| 
 | |
| 
 | |
|             PUB.sm.RaiseStateProgress(++progress, "Motion Initialize", ProgressMax, fColor); System.Threading.Thread.Sleep(5);
 | |
|             if (PUB.mot.Init() == false)
 | |
|             {
 | |
|                 PUB.log.AddE(string.Format("MOT INIT ERROR : {0}", PUB.mot.ErrorMessage));
 | |
|                 PUB.log.AddE("Motion initialization error, retrying shortly");
 | |
|                 System.Threading.Thread.Sleep(1000);
 | |
|                 if (PUB.mot.Init() == false)
 | |
|                 {
 | |
|                     PUB.log.AddE("Motion initialization retry failed " + PUB.mot.ErrorMessage);
 | |
|                 }
 | |
|             }
 | |
|             _SM_RUN_INIT_MOTION();
 | |
| 
 | |
| 
 | |
|             PUB.sm.RaiseStateProgress(++progress, "DIO Initialize", ProgressMax, fColor); System.Threading.Thread.Sleep(5);
 | |
|             if (PUB.dio.Init())
 | |
|             {
 | |
|                 DIO.InitDIOSensitive();
 | |
|                 PUB.log.Add("DIO RUN MONITOR");
 | |
|                 PUB.dio.RunMonitor();
 | |
| 
 | |
| 
 | |
|                 //포트동작을 멈춘다
 | |
|                 DIO.SetPortMotor(0, eMotDir.CW, false, "init");
 | |
|                 DIO.SetPortMotor(1, eMotDir.CW, false, "init");
 | |
|                 DIO.SetPortMotor(2, eMotDir.CW, false, "init");
 | |
|             }
 | |
|             else PUB.log.AddE(string.Format("DIO INIT ERROR : {0}", PUB.dio.ErrorMessage));
 | |
|             TowerLamp.Init(PUB.dio,
 | |
|                 DIO.Pin[eDOName.TWR_REDF].terminalno,
 | |
|                 DIO.Pin[eDOName.TWR_GRNF].terminalno,
 | |
|                 DIO.Pin[eDOName.TWR_YELF].terminalno);
 | |
| 
 | |
|             TowerLamp.Enable = !SETTING.Data.Disable_TowerLamp;
 | |
| 
 | |
|             PUB.sm.RaiseStateProgress(++progress, "Set DIO Names", ProgressMax, fColor); System.Threading.Thread.Sleep(5);
 | |
|             _SM_RUN_INIT_SETDIONAME();
 | |
| 
 | |
|             PUB.log.AddI("Motion initialization flag setup complete");
 | |
|             PUB.flag.set(eVarBool.FG_INIT_MOTIO, true, "INIT");
 | |
| 
 | |
|             //230504
 | |
|             hmi1.SetDIO(PUB.dio);
 | |
|             hmi1.SetMOT(PUB.mot);
 | |
| 
 | |
|             //남은 공간
 | |
|             PUB.sm.RaiseStateProgress(++progress, "Space Check", ProgressMax, fColor); System.Threading.Thread.Sleep(5);
 | |
|             CheckFreeSpace(); //181225
 | |
| 
 | |
| 
 | |
|             //프린터설정
 | |
|             PUB.sm.RaiseStateProgress(++progress, "Printer Setup", ProgressMax, fColor); System.Threading.Thread.Sleep(5);
 | |
|             PUB.PrinterL = new Device.SATOPrinterAPI();
 | |
|             PUB.PrinterL.PortName = AR.SETTING.Data.PrintL_Port;
 | |
|             PUB.PrinterL.BaudRate = AR.SETTING.Data.PrintL_Baud;
 | |
| 
 | |
|             PUB.PrinterR = new Device.SATOPrinterAPI();
 | |
|             PUB.PrinterR.PortName = AR.SETTING.Data.PrintR_Port;
 | |
|             PUB.PrinterR.BaudRate = AR.SETTING.Data.PrintR_Baud;
 | |
| 
 | |
|             PUB.flag.set(eVarBool.FG_INIT_PRINTER, true, "INIT");
 | |
| 
 | |
|             //모델자동선택 181206
 | |
|             PUB.sm.RaiseStateProgress(++progress, "Previous Model Check", ProgressMax, fColor); System.Threading.Thread.Sleep(5);
 | |
| 
 | |
|             //
 | |
|             if (SETTING.User.LastModelV != "") PUB.SelectModelV(SETTING.User.LastModelV, false);
 | |
|             var motionmodel = SETTING.User.LastModelM;
 | |
|             if (motionmodel.isEmpty()) motionmodel = PUB.Result.vModel.Motion ?? string.Empty;
 | |
|             if (motionmodel.ToUpper().StartsWith("CONV")) PUB.flag.set(eVarBool.Use_Conveyor, true, "load");
 | |
|             else PUB.flag.set(eVarBool.Use_Conveyor, false, "load");
 | |
|             PUB.SelectModelM(motionmodel, false);
 | |
| 
 | |
|             PUB.sm.RaiseStateProgress(ProgressMax, "Initialization Complete", ProgressMax, Color.Gold); System.Threading.Thread.Sleep(5);
 | |
|             PUB.log.Add("init finish");
 | |
| 
 | |
|             //조명 ON
 | |
|             DIO.SetRoomLight(true);
 | |
|         }
 | |
| 
 | |
|         public StepResult _STEP_INIT(eSMStep step, TimeSpan stepTime, TimeSpan seqTime)
 | |
|         {
 | |
|             PUB.sm.SetNewStep(eSMStep.IDLE);
 | |
|             return StepResult.Complete;
 | |
|         }
 | |
| 
 | |
|         public void _SM_RUN_INIT_SETDIONAME()
 | |
|         {
 | |
|             //DIO 이름설정
 | |
|             Console.WriteLine("## SET DI NAME ##");
 | |
|             for (int i = 0; i < PUB.dio.GetDICount; i++)
 | |
|             {
 | |
|                 var name = Enum.GetName(typeof(eDIName), i);
 | |
|                 Console.WriteLine($"[{i}] {name}");
 | |
|                 PUB.dio.SetDIName(i, name);
 | |
|             }
 | |
|             Console.WriteLine("## SET DO NAME ##");
 | |
|             for (int i = 0; i < PUB.dio.GetDOCount; i++)
 | |
|             {
 | |
|                 var name = Enum.GetName(typeof(eDOName), i);
 | |
|                 Console.WriteLine($"[{i}] {name}");
 | |
|                 PUB.dio.SetDOName(i, name);
 | |
|             }
 | |
| 
 | |
|             //Console.WriteLine("## SET FLAG NAME ##");
 | |
|             //for (int i = 0; i < PUB.flag.Length; i++)
 | |
|             //{
 | |
|             //    var name = Enum.GetName(typeof(eFlag), i);
 | |
|             //    PUB.flag.Name[i] = name;
 | |
|             //    Console.WriteLine($"[{i}] {name}");
 | |
|             //}
 | |
|         }
 | |
| 
 | |
|         private void _SM_RUN_INIT_MOTION()
 | |
|         {
 | |
|             PUB.mot.SetAlarmClearOn();
 | |
|             System.Threading.Thread.Sleep(5);
 | |
|             PUB.mot.SetAlarmClearOff();
 | |
| 
 | |
|             //7개의 축을 사용한다
 | |
|             if (PUB.mot.IsInit == false)
 | |
|             {
 | |
|                 PUB.log.AddE("Motion board initialization error, configuration will not proceed");
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 for (short i = 0; i < SETTING.System.MotaxisCount; i++)
 | |
|                 {
 | |
|                     //설정파일이 있다면 불러온다
 | |
|                     var file = System.IO.Path.Combine(UTIL.CurrentPath, "Model", "axis" + i.ToString() + ".motaxt");
 | |
|                     if (System.IO.File.Exists(file) == false)
 | |
|                     {
 | |
|                         PUB.log.AddAT($"Motion ({i}) configuration file not found!!");
 | |
|                         PUB.mot.InitAxis(i, file);
 | |
|                     }
 | |
|                     else
 | |
|                     {
 | |
|                         if (PUB.mot.InitAxis((short)i, file) == false)
 | |
|                             PUB.log.AddE("Motion setup failed axis:" + i.ToString());
 | |
|                         else
 | |
|                             PUB.log.AddI($"Motion ({i}) setup complete");
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 //EStop Disable
 | |
|                 PUB.mot.SetEStopEnable(0, false);
 | |
|                 PUB.mot.SetEStopEnable(1, false);
 | |
|                 PUB.mot.SetEStopEnable(2, false);
 | |
|                 PUB.mot.SetEStopEnable(3, false);
 | |
|                 PUB.mot.SetEStopEnable(4, false);
 | |
|                 PUB.mot.SetEStopEnable(5, false);
 | |
|                 PUB.mot.SetEStopEnable(6, false);
 | |
| 
 | |
|                 //softlimit 적용 - 201214
 | |
|                 UpdateSoftLimit();
 | |
| 
 | |
| 
 | |
|                 PUB.log.Add("MOT RUN MONITOR");
 | |
|                 PUB.mot.RunMonitor();
 | |
|                 PUB.log.AddAT("ALL SERVO ON");
 | |
|                 PUB.mot.SetServOn(true);
 | |
|             }
 | |
| 
 | |
|         }
 | |
|     }
 | |
| }
 | 
