choieigun 6b72f38236 WeldingJigNo -> JigNo 필드명 통일 및 APD 구조 개선
-WeldingData.WeldingJigNo를 JigNo로 rename, WorkJigNo 필드추가
-관련 참조 일괄 수정(JigInfo, EDC, SeqAutoRunACW/CCW)
-ActualProcessData : APD파라미터를 ActualProcessParameter로 분리하고 단일 열 -> 객체별 16개열(_1~_16)구조로 변경
-SaveCellAPD()호출 위치를 report!=null 블록 내부로 이동(CellId/LotId 설정 후 저장되도록 순서 보장)
-UCMainAutoRun에 HeadNo 항목추가(Rows7->8)
-ScannerCCWH52A시뮬모드 E2.ABORTED 리턴 주석 처리
2026-03-26 12:48:07 +09:00

171 lines
8.7 KiB
C#

using Aurora.Api;
using AuroraCellTracker;
using AuroraOCT.IPG;
using CoreUnit.Control.UserControl.Canvas;
using CoreUnit.Scanner.UserControl.ScannerCanvas;
using ILSOS_CCW_H52A.Sequences;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VisionCommon.DB.Align;
using WeldingCommon;
using WeldingCommon.Data;
using WeldingCommon.RMS;
namespace ILSOS_CCW_H52A.RMS
{
internal class EDC : IEDC
{
public string ReadCellResult(SequenceContext context)
{
string strDate = DateTime.Now.Date.ToString("yyyyMMdd");
string strTime = DateTime.Now.ToString("HHmmss");
string strCellID = Status.GetProcessingWeldingData().CellId;
string strLotID = Status.GetProcessingWeldingData().LotId;
string strWeldTIme = Status.GetProcessingWeldingData().WeldingSpanTimeMilliseconds;
string strTodayProduct = Status.GetProcessingWeldingData().TodayProduct.ToString();
string strTotalProduct = Status.GetProcessingWeldingData().TotalProduct.ToString();
string strRecipeNo = Status.GetProcessingWeldingData().RecipeNo.ToString();
string strLaserCenterPower = Status.GetProcessingWeldingData().LaserPowerCore;
string strMarkSpeed = Status.GetProcessingWeldingData().MarkSpeed;
string strFocalLength = Status.GetProcessingWeldingData().FocalLength;
string strJigNo = Status.GetProcessingWeldingData().JigNo;
string strLaserPowerByLBAD = Status.GetProcessingWeldingData().LaserPowerByLBAD;
// Won : EDC 사양 확인 후 수정 필요
//return string.Format("{0};{1};{2};{3};{4};{5};{6};{7};{8};{9};{10};{11}", strDate, strTime, strLotID, strCellID, strRecipeNo, strLaserCenterPower, strMarkSpeed, strFocalLength, strJigNo, strWeldTIme, strTodayProduct, strTotalProduct);
//LBAD Laser Power 추가 버전:
return string.Format("{0};{1};{2};{3};{4};{5};{6};{7};{8};{9};{10};{11};{12}", strDate, strTime, strLotID, strCellID, strRecipeNo, strLaserCenterPower, strMarkSpeed, strFocalLength, strJigNo, strWeldTIme, strLaserPowerByLBAD, strTodayProduct, strTotalProduct);
}
// 불필요. 매 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.RampingStartPower * _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.RampingEndPower * _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, "H52A_CCW");
strData = string.Format("Date={0},Time={1},LotID={2},CellID={3},",
SplitDatalist.ElementAt(0),
SplitDatalist.ElementAt(1),
SplitDatalist.ElementAt(2),
SplitDatalist.ElementAt(3));
for (int i = 1; i + 3 < SplitDatalist.Count; i++) {
strData += string.Format("CCWDATA{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)
{
// Won : EDC 사양 확인 후 수정 필요
var strTempItem = "//Date, Time, CellID, LotID, RecipeNo, LaserPower, MarkSpeed, FocalLength, HeadNo, WeldingTime, LaserPowerByLBAD, TodayCount, TotalCount";
// var strTempItem = "//Date, Time, CellID, LotID, RecipeNo, LaserPower, MarkSpeed, FocalLength, HeadNo, WeldingTime, TodayCount, TotalCount";
var strTempData = string.Format("{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}",
//var strTempData = string.Format("{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}",
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)
);
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;
}
}
}