From 455e18f4279abda7802c9a20b0f085976bbc6126 Mon Sep 17 00:00:00 2001 From: backuppc Date: Mon, 8 Dec 2025 15:12:41 +0900 Subject: [PATCH] =?UTF-8?q?=EC=8B=9C=EB=AE=AC=EB=A0=88=EC=9D=B4=ED=84=B0?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EB=A7=B5=20=EB=A1=9C=EB=93=9C=EC=8B=9C?= =?UTF-8?q?=EC=97=90=20=EB=A7=B5=EC=97=90=20=EB=B0=B0=EA=B2=BD=EC=83=89?= =?UTF-8?q?=EC=9D=B4=20=EC=9E=88=EB=8B=A4=EB=A9=B4=20=EC=A0=81=EC=9A=A9=20?= =?UTF-8?q?=ED=95=98=EA=B2=8C=20=ED=95=A8=20Xbee=20Open=20=EC=8B=9C?= =?UTF-8?q?=EC=97=90=20return=EA=B0=92=20=EB=B3=80=EA=B2=BD=20return=20tru?= =?UTF-8?q?e=20->=20return=20isopen=20LogFlushAll=20=ED=95=A8=EC=88=98?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20(=5Fstep=5Fclose=20=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AGVLogic/AGVMapEditor/Forms/MainForm.cs | 32 +-- .../Controls/UnifiedAGVCanvas.Events.cs | 1 + .../Controls/UnifiedAGVCanvas.cs | 1 - .../Forms/SimulatorForm.Designer.cs | 26 +++ .../AGVSimulator/Forms/SimulatorForm.cs | 16 +- Cs_HMI/Data/NewMap.agvmap | 188 +++++++++--------- Cs_HMI/Project/Device/Xbee.cs | 2 +- Cs_HMI/Project/Device/_DeviceManagement.cs | 2 +- Cs_HMI/Project/PUB.cs | 13 ++ .../Project/StateMachine/Step/_STEP_CLOSE.cs | 13 +- Cs_HMI/Project/StateMachine/_AGV.cs | 2 +- Cs_HMI/Project/StateMachine/_Xbee.cs | 4 + Cs_HMI/Project/ViewForm/fAuto.cs | 2 +- 13 files changed, 175 insertions(+), 127 deletions(-) diff --git a/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.cs b/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.cs index 99236d3..9ff2d75 100644 --- a/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.cs +++ b/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.cs @@ -110,7 +110,7 @@ namespace AGVMapEditor.Forms // 이벤트 연결 _mapCanvas.NodeAdded += OnNodeAdded; - _mapCanvas.NodeSelected += OnNodeSelected; + //_mapCanvas.NodeSelected += OnNodeSelected; _mapCanvas.NodesSelected += OnNodesSelected; // 다중 선택 이벤트 _mapCanvas.NodeMoved += OnNodeMoved; _mapCanvas.NodeDeleted += OnNodeDeleted; @@ -182,22 +182,22 @@ namespace AGVMapEditor.Forms // RFID 자동 할당 } - private void OnNodeSelected(object sender, MapNode node) - { - _selectedNode = node; + //private void OnNodeSelected(object sender, MapNode node) + //{ + // _selectedNode = node; - if (node == null) - { - // 빈 공간 클릭 시 캔버스 속성 표시 - ShowCanvasProperties(); - } - else - { - // 노드 클릭 시 노드 속성 표시 - UpdateNodeProperties(); - UpdateImageEditButton(); // 이미지 노드 선택 시 이미지 편집 버튼 활성화 - } - } + // if (node == null) + // { + // // 빈 공간 클릭 시 캔버스 속성 표시 + // ShowCanvasProperties(); + // } + // else + // { + // // 노드 클릭 시 노드 속성 표시 + // UpdateNodeProperties(); + // UpdateImageEditButton(); // 이미지 노드 선택 시 이미지 편집 버튼 활성화 + // } + //} private void OnNodesSelected(object sender, List nodes) { diff --git a/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.Events.cs b/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.Events.cs index f95703a..9263dd7 100644 --- a/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.Events.cs +++ b/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.Events.cs @@ -1468,6 +1468,7 @@ namespace AGVNavigationCore.Controls const int liftWidth = 16; // 리프트 너비 (더욱 크게) const int liftDistance = AGV_SIZE / 2 + 2; // AGV 본체 면에 바로 붙도록 + var currentPos = agv.CurrentPosition; var targetPos = agv.PrevPosition; var dockingDirection = agv.DockingDirection; diff --git a/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.cs b/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.cs index f6e25eb..2acbb86 100644 --- a/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.cs +++ b/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.cs @@ -146,7 +146,6 @@ namespace AGVNavigationCore.Controls // 맵 편집 이벤트 public event EventHandler NodeAdded; - public event EventHandler NodeSelected; public event EventHandler> NodesSelected; // 다중 선택 이벤트 public event EventHandler NodeDeleted; public event EventHandler NodeMoved; diff --git a/Cs_HMI/AGVLogic/AGVSimulator/Forms/SimulatorForm.Designer.cs b/Cs_HMI/AGVLogic/AGVSimulator/Forms/SimulatorForm.Designer.cs index 13b8e30..3683837 100644 --- a/Cs_HMI/AGVLogic/AGVSimulator/Forms/SimulatorForm.Designer.cs +++ b/Cs_HMI/AGVLogic/AGVSimulator/Forms/SimulatorForm.Designer.cs @@ -118,6 +118,8 @@ namespace AGVSimulator.Forms this._liftDirectionLabel = new System.Windows.Forms.Label(); this._motorDirectionLabel = new System.Windows.Forms.Label(); this.timer1 = new System.Windows.Forms.Timer(this.components); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.propertyNode = new System.Windows.Forms.PropertyGrid(); this._menuStrip.SuspendLayout(); this._toolStrip.SuspendLayout(); this._statusStrip.SuspendLayout(); @@ -127,6 +129,7 @@ namespace AGVSimulator.Forms this._agvControlGroup.SuspendLayout(); this._canvasPanel.SuspendLayout(); this._agvInfoPanel.SuspendLayout(); + this.groupBox1.SuspendLayout(); this.SuspendLayout(); // // _menuStrip @@ -455,6 +458,7 @@ namespace AGVSimulator.Forms // _controlPanel // this._controlPanel.BackColor = System.Drawing.SystemColors.Control; + this._controlPanel.Controls.Add(this.groupBox1); this._controlPanel.Controls.Add(this._statusGroup); this._controlPanel.Controls.Add(this._pathGroup); this._controlPanel.Controls.Add(this._agvControlGroup); @@ -789,6 +793,25 @@ namespace AGVSimulator.Forms this.timer1.Interval = 500; this.timer1.Tick += new System.EventHandler(this.timer1_Tick); // + // groupBox1 + // + this.groupBox1.Controls.Add(this.propertyNode); + this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox1.Location = new System.Drawing.Point(0, 546); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(233, 94); + this.groupBox1.TabIndex = 4; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "노드 정보"; + // + // propertyNode + // + this.propertyNode.Dock = System.Windows.Forms.DockStyle.Fill; + this.propertyNode.Location = new System.Drawing.Point(3, 17); + this.propertyNode.Name = "propertyNode"; + this.propertyNode.Size = new System.Drawing.Size(227, 74); + this.propertyNode.TabIndex = 0; + // // SimulatorForm // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F); @@ -821,6 +844,7 @@ namespace AGVSimulator.Forms this._canvasPanel.ResumeLayout(false); this._agvInfoPanel.ResumeLayout(false); this._agvInfoPanel.PerformLayout(); + this.groupBox1.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); @@ -899,5 +923,7 @@ namespace AGVSimulator.Forms private System.Windows.Forms.ToolStripButton btMakeMap; private System.Windows.Forms.ToolStripMenuItem 맵저장SToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem 맵다른이름으로저장ToolStripMenuItem; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.PropertyGrid propertyNode; } } \ No newline at end of file diff --git a/Cs_HMI/AGVLogic/AGVSimulator/Forms/SimulatorForm.cs b/Cs_HMI/AGVLogic/AGVSimulator/Forms/SimulatorForm.cs index 40b4b8a..39c20dd 100644 --- a/Cs_HMI/AGVLogic/AGVSimulator/Forms/SimulatorForm.cs +++ b/Cs_HMI/AGVLogic/AGVSimulator/Forms/SimulatorForm.cs @@ -104,7 +104,7 @@ namespace AGVSimulator.Forms _simulatorCanvas.Dock = DockStyle.Fill; // 목적지 선택 이벤트 구독 - _simulatorCanvas.NodeSelected += OnTargetNodeSelected; + _simulatorCanvas.NodesSelected += OnTargetNodeSelected; _canvasPanel.Controls.Add(_simulatorCanvas); } @@ -394,10 +394,13 @@ namespace AGVSimulator.Forms } } - private void OnTargetNodeSelected(object sender, MapNode selectedNode) + private void OnTargetNodeSelected(object sender, List selectedNodes) { try { + // PropertyGrid 업데이트 (항상 수행) + propertyNode.SelectedObject = selectedNodes.FirstOrDefault(); + // 타겟계산 모드에서만 처리 if (_isTargetCalcMode) { @@ -406,6 +409,7 @@ namespace AGVSimulator.Forms //_targetCalcButton.Text = "타겟계산"; //_targetCalcButton.BackColor = SystemColors.Control; //_simulatorCanvas.CurrentEditMode = UnifiedAGVCanvas.EditMode.Select; + var selectedNode = selectedNodes.FirstOrDefault(); if (selectedNode == null) return; // 목적지를 선택된 노드로 설정 @@ -865,6 +869,13 @@ namespace AGVSimulator.Forms // 시뮬레이터 캔버스에 맵 설정 _simulatorCanvas.Nodes = _mapNodes; + // 맵 설정 적용 (배경색, 그리드 표시) + if (result.Settings != null) + { + _simulatorCanvas.BackColor = System.Drawing.Color.FromArgb(result.Settings.BackgroundColorArgb); + _simulatorCanvas.ShowGrid = result.Settings.ShowGrid; + } + // 설정에 마지막 맵 파일 경로 저장 _config.LastMapFilePath = filePath; if (_config.AutoSave) @@ -1876,6 +1887,7 @@ namespace AGVSimulator.Forms } + /// /// 맵 데이터를 파일에 저장 (MapLoader 공통 저장 로직 사용) /// diff --git a/Cs_HMI/Data/NewMap.agvmap b/Cs_HMI/Data/NewMap.agvmap index 2dc83fe..f2c9084 100644 --- a/Cs_HMI/Data/NewMap.agvmap +++ b/Cs_HMI/Data/NewMap.agvmap @@ -13,10 +13,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-11T08:34:44.9548285+09:00", - "ModifiedDate": "2025-11-06T17:17:49.1294796+09:00", + "ModifiedDate": "2025-12-08T11:54:03.1730939+09:00", "IsActive": true, "DisplayColor": "Red", - "RfidId": "001", + "RfidId": "0001", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -35,7 +35,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N001 - UNLOADER - [001]" + "DisplayText": "N001 - UNLOADER - [0001]" }, { "NodeId": "N002", @@ -51,10 +51,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-11T08:34:48.2957516+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:54:05.9083675+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "002", + "RfidId": "0002", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -73,7 +73,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N002 - N002 - [002]" + "DisplayText": "N002 - N002 - [0002]" }, { "NodeId": "N003", @@ -89,10 +89,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-11T08:34:49.2226656+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:54:07.7966472+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "003", + "RfidId": "0003", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -111,7 +111,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N003 - N003 - [003]" + "DisplayText": "N003 - N003 - [0003]" }, { "NodeId": "N004", @@ -129,10 +129,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-11T08:34:50.1681027+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:54:09.4014966+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "004", + "RfidId": "0004", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -151,7 +151,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N004 - N004 - [004]" + "DisplayText": "N004 - N004 - [0004]" }, { "NodeId": "N006", @@ -167,10 +167,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-11T08:34:51.1111368+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:54:49.3718611+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "013", + "RfidId": "0013", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -189,7 +189,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N006 - N006 - [013]" + "DisplayText": "N006 - N006 - [0013]" }, { "NodeId": "N007", @@ -205,10 +205,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-11T08:34:51.9266982+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:54:51.4185821+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "014", + "RfidId": "0014", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -227,7 +227,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N007 - N007 - [014]" + "DisplayText": "N007 - N007 - [0014]" }, { "NodeId": "N008", @@ -243,10 +243,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-11T08:34:53.9595825+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:54:13.626916+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "009", + "RfidId": "0009", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -265,7 +265,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N008 - N008 - [009]" + "DisplayText": "N008 - N008 - [0009]" }, { "NodeId": "N009", @@ -281,10 +281,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-11T08:34:54.5035702+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:54:15.2395639+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "010", + "RfidId": "0010", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -303,7 +303,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N009 - N009 - [010]" + "DisplayText": "N009 - N009 - [0010]" }, { "NodeId": "N010", @@ -318,10 +318,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-11T08:34:55.0563237+09:00", - "ModifiedDate": "2025-11-06T17:17:49.1294796+09:00", + "ModifiedDate": "2025-12-08T11:54:17.075895+09:00", "IsActive": true, "DisplayColor": "Red", - "RfidId": "011", + "RfidId": "0011", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -340,7 +340,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N010 - TOPS - [011]" + "DisplayText": "N010 - TOPS - [0011]" }, { "NodeId": "N011", @@ -357,10 +357,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-11T08:34:55.8875335+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:54:30.5451017+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "005", + "RfidId": "0005", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -379,7 +379,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N011 - N011 - [005]" + "DisplayText": "N011 - N011 - [0005]" }, { "NodeId": "N012", @@ -395,10 +395,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-11T08:34:56.3678144+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:54:32.3566504+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "006", + "RfidId": "0006", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -417,7 +417,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N012 - N012 - [006]" + "DisplayText": "N012 - N012 - [0006]" }, { "NodeId": "N013", @@ -433,10 +433,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-11T08:34:56.8390845+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:54:34.1608589+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "007", + "RfidId": "0007", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -455,7 +455,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N013 - N013 - [007]" + "DisplayText": "N013 - N013 - [0007]" }, { "NodeId": "N014", @@ -470,10 +470,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-11T08:34:57.2549726+09:00", - "ModifiedDate": "2025-11-06T17:17:49.1294796+09:00", + "ModifiedDate": "2025-12-08T11:54:36.2103863+09:00", "IsActive": true, "DisplayColor": "Red", - "RfidId": "008", + "RfidId": "0008", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -492,7 +492,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N014 - LOADER - [008]" + "DisplayText": "N014 - LOADER - [0008]" }, { "NodeId": "N019", @@ -507,10 +507,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-11T08:35:56.5359098+09:00", - "ModifiedDate": "2025-11-06T17:18:12.0236215+09:00", + "ModifiedDate": "2025-12-08T11:54:53.4706808+09:00", "IsActive": true, "DisplayColor": "Magenta", - "RfidId": "015", + "RfidId": "0015", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -529,7 +529,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N019 - CHARGER #2 - [015]" + "DisplayText": "N019 - CHARGER #2 - [0015]" }, { "NodeId": "N022", @@ -546,10 +546,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-11T08:36:48.0311551+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:54:47.1279261+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "012", + "RfidId": "0012", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -568,7 +568,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N022 - N022 - [012]" + "DisplayText": "N022 - N022 - [0012]" }, { "NodeId": "N023", @@ -584,10 +584,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-11T09:41:36.8738794+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:55:02.2993636+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "016", + "RfidId": "0016", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -606,7 +606,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N023 - N023 - [016]" + "DisplayText": "N023 - N023 - [0016]" }, { "NodeId": "N024", @@ -622,10 +622,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-11T09:41:37.4551853+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:55:00.0899323+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "017", + "RfidId": "0017", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -644,7 +644,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N024 - N024 - [017]" + "DisplayText": "N024 - N024 - [0017]" }, { "NodeId": "N025", @@ -660,10 +660,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-11T09:41:38.0142374+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:54:57.8459375+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "018", + "RfidId": "0018", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -682,7 +682,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N025 - N025 - [018]" + "DisplayText": "N025 - N025 - [0018]" }, { "NodeId": "N026", @@ -697,10 +697,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-11T09:41:38.5834487+09:00", - "ModifiedDate": "2025-11-06T17:18:12.0236215+09:00", + "ModifiedDate": "2025-12-08T11:54:55.6038784+09:00", "IsActive": true, "DisplayColor": "Magenta", - "RfidId": "019", + "RfidId": "0019", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -719,7 +719,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N026 - CHARGER #1 - [019]" + "DisplayText": "N026 - CHARGER #1 - [0019]" }, { "NodeId": "LBL001", @@ -805,10 +805,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-12T17:22:47.8065756+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:54:28.0157957+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "037", + "RfidId": "0037", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -827,7 +827,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N015 - [037]" + "DisplayText": "N015 - [0037]" }, { "NodeId": "N016", @@ -843,10 +843,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-12T17:22:48.6628848+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:54:26.4584771+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "036", + "RfidId": "0036", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -865,7 +865,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N016 - [036]" + "DisplayText": "N016 - [0036]" }, { "NodeId": "N017", @@ -881,10 +881,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-12T17:22:49.8138877+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:54:24.9652264+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "035", + "RfidId": "0035", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -903,7 +903,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N017 - [035]" + "DisplayText": "N017 - [0035]" }, { "NodeId": "N018", @@ -920,10 +920,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-12T17:22:50.6790623+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:54:23.246666+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "034", + "RfidId": "0034", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -942,7 +942,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N018 - [034]" + "DisplayText": "N018 - [0034]" }, { "NodeId": "N005", @@ -959,10 +959,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-12T17:22:51.5267199+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:54:21.6078399+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "033", + "RfidId": "0033", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -981,7 +981,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N005 - [033]" + "DisplayText": "N005 - [0033]" }, { "NodeId": "N020", @@ -998,10 +998,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-12T17:22:52.3666114+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:54:20.2707567+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "032", + "RfidId": "0032", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -1020,7 +1020,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N020 - [032]" + "DisplayText": "N020 - [0032]" }, { "NodeId": "N021", @@ -1036,10 +1036,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-12T17:22:53.0958619+09:00", - "ModifiedDate": "2025-11-06T17:17:37.2685386+09:00", + "ModifiedDate": "2025-12-08T11:54:18.362104+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "031", + "RfidId": "0031", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -1058,7 +1058,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N021 - [031]" + "DisplayText": "N021 - [0031]" }, { "NodeId": "N027", @@ -1073,10 +1073,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-12T17:22:54.7345704+09:00", - "ModifiedDate": "2025-11-06T17:10:24.191353+09:00", + "ModifiedDate": "2025-12-08T11:54:43.1573737+09:00", "IsActive": true, "DisplayColor": "Green", - "RfidId": "041", + "RfidId": "0041", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -1095,7 +1095,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N027 - BUF1 - [041]" + "DisplayText": "N027 - BUF1 - [0041]" }, { "NodeId": "N028", @@ -1110,10 +1110,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-12T17:22:55.5263512+09:00", - "ModifiedDate": "2025-11-06T17:10:29.1638454+09:00", + "ModifiedDate": "2025-12-08T11:54:41.5219283+09:00", "IsActive": true, "DisplayColor": "Green", - "RfidId": "040", + "RfidId": "0040", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -1132,7 +1132,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N028 - BUF2 - [040]" + "DisplayText": "N028 - BUF2 - [0040]" }, { "NodeId": "N029", @@ -1147,10 +1147,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-12T17:22:56.6623294+09:00", - "ModifiedDate": "2025-11-06T17:10:35.6234001+09:00", + "ModifiedDate": "2025-12-08T11:54:39.9945926+09:00", "IsActive": true, "DisplayColor": "Green", - "RfidId": "039", + "RfidId": "0039", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -1169,7 +1169,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N029 - BUF3 - [039]" + "DisplayText": "N029 - BUF3 - [0039]" }, { "NodeId": "N030", @@ -1184,10 +1184,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-12T17:22:57.5510908+09:00", - "ModifiedDate": "2025-11-06T17:10:38.6071751+09:00", + "ModifiedDate": "2025-12-08T11:54:38.3326835+09:00", "IsActive": true, "DisplayColor": "Green", - "RfidId": "038", + "RfidId": "0038", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -1206,7 +1206,7 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N030 - BUF4 - [038]" + "DisplayText": "N030 - BUF4 - [0038]" }, { "NodeId": "N031", @@ -1222,10 +1222,10 @@ "StationId": "", "StationType": null, "CreatedDate": "2025-09-15T11:18:40.5366059+09:00", - "ModifiedDate": "2025-11-06T17:17:28.6401293+09:00", + "ModifiedDate": "2025-12-08T11:54:12.0214781+09:00", "IsActive": true, "DisplayColor": "Cyan", - "RfidId": "030", + "RfidId": "0030", "RfidStatus": "정상", "RfidDescription": "", "LabelText": "", @@ -1244,13 +1244,13 @@ "Scale": "1, 1", "Opacity": 1.0, "Rotation": 0.0, - "DisplayText": "N031 - [030]" + "DisplayText": "N031 - [0030]" } ], "Settings": { "BackgroundColorArgb": -14671840, "ShowGrid": false }, - "CreatedDate": "2025-11-06T17:18:20.440108+09:00", + "CreatedDate": "2025-12-08T11:55:04.9060276+09:00", "Version": "1.1" } \ No newline at end of file diff --git a/Cs_HMI/Project/Device/Xbee.cs b/Cs_HMI/Project/Device/Xbee.cs index fb68f33..7f0982f 100644 --- a/Cs_HMI/Project/Device/Xbee.cs +++ b/Cs_HMI/Project/Device/Xbee.cs @@ -75,7 +75,7 @@ namespace Project.Device try { base.Open(); - return true; + return IsOpen; } catch (Exception ex) { diff --git a/Cs_HMI/Project/Device/_DeviceManagement.cs b/Cs_HMI/Project/Device/_DeviceManagement.cs index 2c26166..e389051 100644 --- a/Cs_HMI/Project/Device/_DeviceManagement.cs +++ b/Cs_HMI/Project/Device/_DeviceManagement.cs @@ -50,6 +50,7 @@ namespace Project /// /// 장치 관리 태스크 종료 + /// File : /device/_DeviceManagement.cs /// public void StopDeviceManagementTask() { @@ -173,7 +174,6 @@ namespace Project break; } } - PUB.log.Add("DeviceManagementWorker", "종료"); } diff --git a/Cs_HMI/Project/PUB.cs b/Cs_HMI/Project/PUB.cs index df198a3..d2be189 100644 --- a/Cs_HMI/Project/PUB.cs +++ b/Cs_HMI/Project/PUB.cs @@ -150,6 +150,7 @@ namespace Project public static AR.Log log, logagv, logplc, logbms, logxbee; public static Boolean bPlayMusic = false; + /// /// 사용자 인풋 감지 시간 @@ -630,6 +631,18 @@ namespace Project return false; } + /// + /// 모든 로그를 플러시 합니다. + /// + public static void LogFlush() + { + PUB.log.Flush(); + PUB.logagv.Flush(); + PUB.logplc.Flush(); + PUB.logbms.Flush(); + PUB.logxbee.Flush(); + } + /// /// AGV 방향 업데이트 /// diff --git a/Cs_HMI/Project/StateMachine/Step/_STEP_CLOSE.cs b/Cs_HMI/Project/StateMachine/Step/_STEP_CLOSE.cs index 2740d6e..2f89adc 100644 --- a/Cs_HMI/Project/StateMachine/Step/_STEP_CLOSE.cs +++ b/Cs_HMI/Project/StateMachine/Step/_STEP_CLOSE.cs @@ -11,28 +11,21 @@ namespace Project { /// /// 프로그램을 닫을때 1회 실행되는 함수 + /// File : /Step/_Step_Close.cs /// private void _STEP_CLOSING_START(eSMStep step) { PUB.bShutdown = true; - //if (PUB.PLC != null) PUB.PLC.Dispose(); - + // 장치 관리 태스크 종료 StopDeviceManagementTask(); PUB.AddEEDB("프로그램 종료"); PUB.log.Add("Program Close"); - PUB.log.Flush(); - PUB.logagv.Flush(); - PUB.logplc.Flush(); - PUB.logbms.Flush(); - PUB.logxbee.Flush(); - // PUB.sm.Stop(); - + PUB.LogFlush(); } public StepResult _STEP_CLOSING(eSMStep step, TimeSpan stepTime, TimeSpan seqTime) { - //############################ //#### 사용자 전용 코드 //############################ diff --git a/Cs_HMI/Project/StateMachine/_AGV.cs b/Cs_HMI/Project/StateMachine/_AGV.cs index 3cff66a..7e74ecb 100644 --- a/Cs_HMI/Project/StateMachine/_AGV.cs +++ b/Cs_HMI/Project/StateMachine/_AGV.cs @@ -221,8 +221,8 @@ namespace Project { //모터방향 확인해서 UI와 AGV클래스에 적용한다 var MotDireciton = PUB.AGV.data.Direction == 'B' ? AGVNavigationCore.Models.AgvDirection.Backward : AGVNavigationCore.Models.AgvDirection.Forward; - PUB._virtualAGV.SetPosition(CurrentNode, MotDireciton); PUB._mapCanvas.SetAGVPosition(PUB.setting.MCID, CurrentNode, MotDireciton); + PUB._virtualAGV.SetPosition(CurrentNode, MotDireciton); } //태그를 읽었다면 상태를 바로 전송한다 diff --git a/Cs_HMI/Project/StateMachine/_Xbee.cs b/Cs_HMI/Project/StateMachine/_Xbee.cs index b4601d5..d16eab4 100644 --- a/Cs_HMI/Project/StateMachine/_Xbee.cs +++ b/Cs_HMI/Project/StateMachine/_Xbee.cs @@ -53,9 +53,13 @@ namespace Project PUB.log.AddE($"[{logPrefix}-SetCurrent] 노드정보를 찾을 수 없습니다 RFID:{currTag}"); PUB.XBE.SendError(ENIGProtocol.AGVErrorCode.EmptyNode, $"{currTag}"); return; + }else + { + PUB.log.AddI($"XBEE:현재위치설정:[{node.RfidId}]{node.NodeId}"); } PUB._mapCanvas.SetAGVPosition(PUB.setting.MCID, node, PUB._virtualAGV.CurrentDirection); + PUB._virtualAGV.SetPosition(node, PUB._virtualAGV.CurrentDirection); } else PUB.log.AddE($"[{logPrefix}-SetCurrent] TagString Lenght Errorr:{data.Length}"); break; diff --git a/Cs_HMI/Project/ViewForm/fAuto.cs b/Cs_HMI/Project/ViewForm/fAuto.cs index 07e29bd..78a06d9 100644 --- a/Cs_HMI/Project/ViewForm/fAuto.cs +++ b/Cs_HMI/Project/ViewForm/fAuto.cs @@ -119,7 +119,7 @@ namespace Project.ViewForm var startNode = PUB._mapNodes.FirstOrDefault(n => n.IsNavigationNode()); if (startNode != null) { - PUB._virtualAGV = new VirtualAGV("AGV-01", startNode.Position, AgvDirection.Forward); + PUB._virtualAGV = new VirtualAGV(PUB.setting.MCID, startNode.Position, AgvDirection.Forward); PUB._virtualAGV.SetPosition(startNode, AgvDirection.Forward); // 캔버스에 AGV 리스트 설정