214 lines
10 KiB
C#
214 lines
10 KiB
C#
using Aurora.Api;
|
|
using Aurora.Util.HislogPlus;
|
|
using AuroraCellTracker;
|
|
using AuroraOCT.IPG;
|
|
using CoreUnit.Control.UserControl.Canvas;
|
|
using CoreUnit.Scanner.UserControl.ScannerCanvas;
|
|
using ILSOS_KS.Sequences;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using WeldingCommon;
|
|
using WeldingCommon.Data;
|
|
using WeldingCommon.RMS;
|
|
|
|
namespace ILSOS_KS.RMS
|
|
{
|
|
internal class EDC : IEDC
|
|
{
|
|
static readonly Logger Log = new Logger("EDC");
|
|
|
|
public static string LASER_CENTER_POWER = "strCenterPower";
|
|
public static string LASER_RING_POWER = "strRingPower";
|
|
public static string LASER_DISTANCE = "strDistance";
|
|
public static string StrCellData = "";
|
|
|
|
public string ReadCellResult(SequenceContext context)
|
|
{
|
|
var _oct = context.GetOCT();
|
|
|
|
string strLDDKHD_AVG = "";
|
|
string strLDDKHD_MIN = "";
|
|
string strLDDKHD_MAX = "";
|
|
string strLDDKHD_LowSum = "";
|
|
string strLDDKHD_HighSum = "";
|
|
string strLDD_Judge = "";
|
|
int RetryCount = 0;
|
|
|
|
if (_oct.IsSimul == false && _oct.IsActivated) {
|
|
strLDD_Judge = _oct.GetJobResult();
|
|
|
|
TimeSpan spanTime;
|
|
DateTime startTime = DateTime.Now;
|
|
|
|
while (strLDD_Judge == "X" || strLDD_Judge == "") {
|
|
RetryCount++;
|
|
Log.I(string.Format("OCT GetResult Retry Count : {0}", RetryCount));
|
|
|
|
Thread.Sleep(100);
|
|
strLDD_Judge = _oct.GetJobResult();
|
|
spanTime = DateTime.Now.Subtract(startTime);
|
|
|
|
if (spanTime.TotalMilliseconds > (1000)) {
|
|
Log.I("TIMEOUT_OCT_QA_COMPLETE");
|
|
startTime = DateTime.Now;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (strLDD_Judge == "OK")
|
|
strLDD_Judge = "1";
|
|
else if (strLDD_Judge == "NOK")
|
|
strLDD_Judge = "2";
|
|
else if (strLDD_Judge == "NOQA")
|
|
strLDD_Judge = "3";
|
|
else if (strLDD_Judge == "X")
|
|
strLDD_Judge = "4";
|
|
|
|
strLDDKHD_AVG = _oct.GetKHD_AVG();
|
|
strLDDKHD_MIN = _oct.GetKHD_MIN();
|
|
strLDDKHD_MAX = _oct.GetKHD_MAX();
|
|
strLDDKHD_LowSum = _oct.GetKHD_LowSum();
|
|
strLDDKHD_HighSum = _oct.GetKHD_HighSum();
|
|
} else {
|
|
strLDD_Judge = "-1";
|
|
}
|
|
|
|
Status.GetProcessingWeldingData().LDD_Judge = strLDD_Judge;
|
|
|
|
string strDate = DateTime.Now.Date.ToString("yyyyMMdd");
|
|
string strTime = DateTime.Now.ToString("HHmmss");
|
|
string strWeldStartTime = Status.GetProcessingWeldingData().WeldStartTime;
|
|
|
|
string strCellID = Status.GetProcessingWeldingData().WorkCellId;
|
|
string strLotID = Status.GetProcessingWeldingData().WorkLotId; ;
|
|
|
|
string strWeldTIme = Status.GetProcessingWeldingData().WeldTime;
|
|
string strTodayProduct = Status.GetProcessingWeldingData().TodayProduct.ToString();
|
|
string strTotalProduct = Status.GetProcessingWeldingData().TotalProduct.ToString();
|
|
string strLBADJudge = Status.GetProcessingWeldingData().LBAD_Judge;
|
|
|
|
return string.Format("{0};{1};{2};{3};{4};{5};{6};{7};{8};{9};{10};{11};{12};{13};{14}", strDate, strTime, strLotID, strCellID, strWeldStartTime, strWeldTIme, strTodayProduct, strTotalProduct, strLDDKHD_AVG, strLDDKHD_MIN, strLDDKHD_LowSum, strLDDKHD_MAX, strLDDKHD_HighSum, strLDD_Judge, strLBADJudge);
|
|
}
|
|
|
|
// 불필요. 매 cell 마다 plc 보고가 없어짐
|
|
//public int ReportResultToPLC(SequenceContext context, int RecipeID, List<IDrawObject> SelectedDrawObjects)
|
|
//{
|
|
// var _PLC = context.GetPLC();
|
|
|
|
// int nRet = 0;
|
|
|
|
// ScannerParam Subparam = new ScannerParam();
|
|
// ScannerParam Mainparam = new ScannerParam();
|
|
|
|
// foreach (IDrawObject obj in SelectedDrawObjects) {
|
|
// if (obj is Arc) {
|
|
// Arc arc = (Arc)obj;
|
|
// Mainparam = ScannerCanvasUserCtrl.ScannerParams[arc.ScannerParamNo];
|
|
// } else if (obj is Dot) {
|
|
// Dot dot = (Dot)obj;
|
|
// Subparam = ScannerCanvasUserCtrl.ScannerParams[dot.ScannerParamNo];
|
|
// }
|
|
// }
|
|
// _PLC.SetAO2WValueInt("PC_VER_WELDING_RECIPE_NUM1", RecipeID * _PLC.ConvertTo2WordDivisionIndex("PC_VER_WELDING_RECIPE_NUM1"));
|
|
|
|
// _PLC.SetAO2WValueInt("PC_VER_WELDING_MAIN_POWER_CORE1", (int)Mainparam.LaserPower1 * _PLC.ConvertTo2WordDivisionIndex("PC_VER_WELDING_MAIN_POWER_CORE1"));
|
|
// _PLC.SetAO2WValueInt("PC_VER_WELDING_MAIN_POWER_RING1", (int)Mainparam.LaserPower2 * _PLC.ConvertTo2WordDivisionIndex("PC_VER_WELDING_MAIN_POWER_RING1"));
|
|
// //_PLC.SetAO2WValueFloat("PC_VER_WELDING_MAIN_JUMP_SPEED1", Mainparam.JumpSpeed);
|
|
// //_PLC.SetAO2WValueFloat("PC_VER_WELDING_MAIN_DRAW_SPEED1", Mainparam.MarkSpeed);
|
|
// _PLC.SetAO2WValueInt("PC_VER_WELDING_MAIN_RAMPING_START_POWER1", (int)Mainparam.RampingStartPower1 * _PLC.ConvertTo2WordDivisionIndex("PC_VER_WELDING_MAIN_RAMPING_START_POWER1"));
|
|
// _PLC.SetAO2WValueInt("PC_VER_WELDING_MAIN_RAMPING_START_DIST1", (int)Mainparam.RampingStartDist * _PLC.ConvertTo2WordDivisionIndex("PC_VER_WELDING_MAIN_RAMPING_START_DIST1"));
|
|
// _PLC.SetAO2WValueInt("PC_VER_WELDING_MAIN_RAMPING_END_POWER1", (int)Mainparam.RampingEndPower1 * _PLC.ConvertTo2WordDivisionIndex("PC_VER_WELDING_MAIN_RAMPING_END_POWER1"));
|
|
// _PLC.SetAO2WValueInt("PC_VER_WELDING_MAIN_RAMPING_END_DIST2", (int)Mainparam.RampingEndDist * _PLC.ConvertTo2WordDivisionIndex("PC_VER_WELDING_MAIN_RAMPING_END_DIST2"));
|
|
|
|
// _PLC.SetAO2WValueInt("PC_VER_WELDING_SUB_POWER_CORE1", (int)Subparam.LaserPower1 * _PLC.ConvertTo2WordDivisionIndex("PC_VER_WELDING_SUB_POWER_CORE1"));
|
|
// _PLC.SetAO2WValueInt("PC_VER_WELDING_SUB_POWER_RING1", (int)Subparam.LaserPower2 * _PLC.ConvertTo2WordDivisionIndex("PC_VER_WELDING_SUB_POWER_RING1"));
|
|
// //_PLC.SetAO2WValueFloat("PC_VER_WELDING_SUB_SPOT_SHOT_TIME1", Subparam.SpotShotTime);
|
|
|
|
// // data update 하고
|
|
|
|
// // 끝나면 PLC 에 알려주기
|
|
// //_plc.SetDOStatus("SPC_DATA_UPDATED", true); // 이신호를 살리기 전에 word 에 upload 모두 해둔 상태여야한다.
|
|
// // PLC 통해서 보고하지 않는다
|
|
// return nRet;
|
|
//}
|
|
|
|
public List<string> SendData(SequenceContext context, string str, ref string strPath)
|
|
{
|
|
//var _CellTrackerObj = context.GetCellTracker()._CellTrackerObj;
|
|
var cellTracker = context.GetCellTracker();
|
|
string strDate = null, strTime = null, strData = null;
|
|
string strAddingData = "";
|
|
List<string> SplitDatalist = new List<string>();
|
|
|
|
SplitDatalist = SplitLogData(str, ref strPath, ref strDate, ref strTime, "KS");
|
|
|
|
strData = string.Format("Date={0},Time={1},LotID={2},CellID={3},", //,WeldingStartTime={4},WeldingTime={5},TodayCount={6},TotalCount={7},LDD_AVG={8},LDD_MIN={9},LDD_Length_Under300={10},LDD_MAX={11},LDD_Length_Over900={12},LBAD_Judge={13}",
|
|
SplitDatalist.ElementAt(0),
|
|
SplitDatalist.ElementAt(1),
|
|
SplitDatalist.ElementAt(2),
|
|
SplitDatalist.ElementAt(3));
|
|
|
|
for (int i = 1; i + 3 < SplitDatalist.Count; i++) {
|
|
strData += string.Format("KSDATA{0:000}={1}", i, SplitDatalist.ElementAt(i + 3));
|
|
if (i + 3 != SplitDatalist.Count - 1) {
|
|
strData += string.Format(",");
|
|
}
|
|
}
|
|
|
|
cellTracker.SendEcsData(SplitDatalist.ElementAt(3), strPath, strData + strAddingData);
|
|
|
|
return SplitDatalist;
|
|
}
|
|
|
|
public void GetSaveDataStr(out string strItem, out string strData, List<string> SplitDataList)
|
|
{
|
|
var strTempItem = "//Date, Time, WeldingStartTime, CellID, LotID, WeldingTime, TodayCount, TotalCount, LDD_AVG, LDD_MIN, LDD_Length_Under300, LDD_MAX, LDD_Length_Over900, LDD_Judge, LBAD_Judge";
|
|
var strTempData = string.Format("{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}, {13}, {14}",
|
|
SplitDataList.ElementAt(0),
|
|
SplitDataList.ElementAt(1),
|
|
SplitDataList.ElementAt(2),
|
|
SplitDataList.ElementAt(3),
|
|
SplitDataList.ElementAt(4),
|
|
SplitDataList.ElementAt(5),
|
|
SplitDataList.ElementAt(6),
|
|
SplitDataList.ElementAt(7),
|
|
SplitDataList.ElementAt(8),
|
|
SplitDataList.ElementAt(9),
|
|
SplitDataList.ElementAt(10),
|
|
SplitDataList.ElementAt(11),
|
|
SplitDataList.ElementAt(12),
|
|
SplitDataList.ElementAt(13),
|
|
SplitDataList.ElementAt(14));
|
|
|
|
strItem = strTempItem;
|
|
strData = strTempData;
|
|
}
|
|
|
|
private List<string> SplitLogData(string str, ref string strPath, ref string strDate, ref string strTime, string strMachineName)
|
|
{
|
|
List<string> data = new List<string>();
|
|
string[] updateProductInfo = str.Split(';');
|
|
for (int i = 0; i < updateProductInfo.Length; i++) {
|
|
data.Add(updateProductInfo[i]);
|
|
}
|
|
strDate = updateProductInfo[0];
|
|
strTime = updateProductInfo[1];
|
|
//string strMachine = DB.Dao.SystemRecipe.MachineType.ToString();
|
|
//StrPath 경로 수정 필요
|
|
string directory = string.Format("D:\\ILSOSConfig\\_device\\_cellTracker\\{0}", strDate);
|
|
|
|
if (Directory.Exists(directory) == false) {
|
|
Directory.CreateDirectory(directory);
|
|
}
|
|
|
|
strPath = string.Format("D:\\ILSOSConfig\\_device\\_cellTracker\\{0}\\{1}_{2}_{3}.csv", strDate, strDate, strMachineName, strTime.Substring(0, 2));
|
|
return data;
|
|
}
|
|
}
|
|
}
|