From c6e9783950b75d7a9ac9e11c1a3ce8951390226b Mon Sep 17 00:00:00 2001 From: choieigun Date: Sat, 21 Feb 2026 10:04:45 +0900 Subject: [PATCH] =?UTF-8?q?APD=20=EC=B6=94=EA=B0=80=20-=20HeadNo(JigNo)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PLC API 추가 --- .../Device/PLC/PLCController.Logic.cs | 32 +++++++++++++++++++ .../WeldingCommon/Data/ActualProcessData.cs | 13 ++++---- .../Sequences/Main/SeqUploadWeldingList.cs | 7 ++-- 3 files changed, 43 insertions(+), 9 deletions(-) diff --git a/Machines/ILSOS_CCW_H52A/Device/PLC/PLCController.Logic.cs b/Machines/ILSOS_CCW_H52A/Device/PLC/PLCController.Logic.cs index a8181ab..1901063 100644 --- a/Machines/ILSOS_CCW_H52A/Device/PLC/PLCController.Logic.cs +++ b/Machines/ILSOS_CCW_H52A/Device/PLC/PLCController.Logic.cs @@ -33,6 +33,38 @@ namespace ILSOS_CCW_H52A.Device return sb.ToString(); } + public int WriteWordToBit((eWordOutput addrOffset, int bitNo) address, bool on) + { + var value = base.ReadWord((int)address.addrOffset, ePLCDevice.W, false); + short current = value.data; + + if (on) { + current |= (short)(1 << address.bitNo); + } else { + current &= (short)~(1 << address.bitNo); + } + + return base.WriteWord((int)address.addrOffset, current, ePLCDevice.W); + } + + public bool ReadWordToBit((eWordInput addrOffset, int bitNo) address) + { + short current = ReadWord(address.addrOffset).data; + return (current & (1 << address.bitNo)) != 0; + } + public IEnumerable ReadWordToBits(eWordInput address, bool isLowerFirst = true) + { + var ret = new List(); + int word = ReadWord(address).data; + if (isLowerFirst) { + for (int idx = 0; idx < 15; idx++) + ret.Add((word & (1 << idx)) != 0); + } else { + for (int idx = 15; idx > 0; idx--) + ret.Add((word & (1 << idx)) != 0); + } + return ret; + } public override void MappingPLCAddr() { diff --git a/WeldingComponents/WeldingCommon/Data/ActualProcessData.cs b/WeldingComponents/WeldingCommon/Data/ActualProcessData.cs index 195995a..7d3add5 100644 --- a/WeldingComponents/WeldingCommon/Data/ActualProcessData.cs +++ b/WeldingComponents/WeldingCommon/Data/ActualProcessData.cs @@ -28,6 +28,7 @@ namespace WeldingCommon.Data table.Columns.Add("Time", typeof(string)); table.Columns.Add(nameof(ActualProcessUnit.LotID), typeof(string)); table.Columns.Add(nameof(ActualProcessUnit.CellID), typeof(string)); + table.Columns.Add(nameof(ActualProcessUnit.HeadNo), typeof(string)); table.Columns.Add(nameof(ActualProcessUnit.WeldType), typeof(string)); table.Columns.Add(nameof(ActualProcessUnit.EncoderCheck), typeof(bool)); table.Columns.Add(nameof(ActualProcessUnit.StartPointX), typeof(double)); @@ -61,10 +62,10 @@ namespace WeldingCommon.Data protected override void InsertItem(int index, ActualProcessUnit item) { base.InsertItem(index, item); - table.Rows.Add(item.Date.ToString("yyyy-MM-dd"), item.Date.ToString("HH:mm:ss.fff"), item.LotID, item.CellID, item.WeldType, item.EncoderCheck, - item.StartPointX, item.StartPointY, item.EndPointX, item.EndPointY, - item.WeldCondition, item.LaserOnDelay, item.LaserOffDelay, item.JumpDelay, item.MarkDelay, - item.PolygonDelay, item.Power, item.JumpSpeed, item.MarkSpeed, item.JumpX, + table.Rows.Add(item.Date.ToString("yyyy-MM-dd"), item.Date.ToString("HH:mm:ss.fff"), item.LotID, item.CellID, item.HeadNo, item.WeldType, item.EncoderCheck, + item.StartPointX, item.StartPointY, item.EndPointX, item.EndPointY, + item.WeldCondition, item.LaserOnDelay, item.LaserOffDelay, item.JumpDelay, item.MarkDelay, + item.PolygonDelay, item.Power, item.JumpSpeed, item.MarkSpeed, item.JumpX, item.JumpY); } @@ -81,10 +82,10 @@ namespace WeldingCommon.Data private DateTime _Date; public string LotID { get => _LodID; set => SetProperty(ref _LodID, value); } private string _LodID; - public string CellID { get => _CellID; set => SetProperty(ref _CellID, value); } private string _CellID; - + public string HeadNo { get => _HeadNo; set => SetProperty(ref _HeadNo, value); } + private string _HeadNo; public string WeldType { get => _WeldType; set => SetProperty(ref _WeldType, value); } private string _WeldType; public bool EncoderCheck { get => _EncoderCheck; set => SetProperty(ref _EncoderCheck, value); } diff --git a/WeldingComponents/WeldingCommon/Sequences/Main/SeqUploadWeldingList.cs b/WeldingComponents/WeldingCommon/Sequences/Main/SeqUploadWeldingList.cs index 1986992..9e470ce 100644 --- a/WeldingComponents/WeldingCommon/Sequences/Main/SeqUploadWeldingList.cs +++ b/WeldingComponents/WeldingCommon/Sequences/Main/SeqUploadWeldingList.cs @@ -701,7 +701,7 @@ namespace WeldingCommon.Sequences { Log.I(string.Format($"[Line Weld] Mark(Ramping) ({obj.PF2.X},{obj.PF2.Y})")); } else { // Ramping 이 없는 경우 - + _Scanner.WriteDA((uint)eAnalogPortOut.DA1, percentLaser1, eFunctionType.LIST); _Scanner.WriteDA((uint)eAnalogPortOut.DA2, percentLaser2, eFunctionType.LIST); _Scanner.MarkAbs(obj.PF2.X + xOffset, obj.PF2.Y + yOffset); @@ -726,6 +726,7 @@ namespace WeldingCommon.Sequences { laserLog.EndPointY = obj.PF2.Y; laserLog.LotID = Status.GetProcessingWeldingData().WorkLotId; laserLog.CellID = Status.GetProcessingWeldingData().WorkCellId; + laserLog.HeadNo = Status.GetProcessingWeldingData().WeldingJigNo; Status.GetProcessingWeldingData().APD.Add(laserLog); } @@ -1607,7 +1608,7 @@ namespace WeldingCommon.Sequences { // 2.2.3.1. Constant Range 파워 설정 _Scanner.WriteDA((uint)eAnalogPortOut.DA1, percentLaser1, eFunctionType.LIST); _Scanner.WriteDA((uint)eAnalogPortOut.DA2, percentLaser2, eFunctionType.LIST); - + // 2.2.3.2. Constant Range 구간 위치 변경 for (int iter = risingEdgeCount+firstEdgeCount; iter < totalCount - fallingEdgeCount; iter++) { _Scanner.ArcAbs(obj.CenterPointF.X + xOffset, obj.CenterPointF.Y + yOffset, theta); @@ -1686,7 +1687,7 @@ namespace WeldingCommon.Sequences { SetScannerProcessCondition(param, out percentLaser1, out percentLaser2); Log.I(string.Format($"[Arc3P Weld] Weld Condition(No:{param.No + 1}) Setting(LaserOnDelay:{param.LaserOnDelay},LaserOffDelay:{param.LaserOffDelay},JumpDelay:{param.JumpDelay},MarkDelay:{param.MarkDelay},PolygonDelay:{param.PolygonDelay},Power:{param.LaserPower1},JumpSpeed:{param.JumpSpeed},MarkSpeed:{param.MarkSpeed})")); - + //CSV Laser Log 추가 laserLog.Date = DateTime.Now; laserLog.WeldType = "Arc3";