diff --git a/Cs_HMI/AGVLogic/AGVMapEditor/AGVMapEditor.csproj b/Cs_HMI/AGVLogic/AGVMapEditor/AGVMapEditor.csproj
index 928fd1c..48dbb09 100644
--- a/Cs_HMI/AGVLogic/AGVMapEditor/AGVMapEditor.csproj
+++ b/Cs_HMI/AGVLogic/AGVMapEditor/AGVMapEditor.csproj
@@ -62,7 +62,6 @@
-
Form
diff --git a/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.Designer.cs b/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.Designer.cs
index 9dddbeb..b1d854f 100644
--- a/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.Designer.cs
+++ b/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.Designer.cs
@@ -64,6 +64,9 @@ namespace AGVMapEditor.Forms
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.btnSave = new System.Windows.Forms.ToolStripButton();
this.btnSaveAs = new System.Windows.Forms.ToolStripButton();
+ this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
+ this.toolStripButton1 = new System.Windows.Forms.ToolStripDropDownButton();
+ this.allTurnLeftRightCrossOnToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.statusStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
@@ -351,7 +354,9 @@ namespace AGVMapEditor.Forms
this.btnClose,
this.toolStripSeparator3,
this.btnSave,
- this.btnSaveAs});
+ this.btnSaveAs,
+ this.toolStripSeparator2,
+ this.toolStripButton1});
this.toolStrip2.Location = new System.Drawing.Point(0, 0);
this.toolStrip2.Name = "toolStrip2";
this.toolStrip2.Size = new System.Drawing.Size(1200, 25);
@@ -417,6 +422,28 @@ namespace AGVMapEditor.Forms
this.btnSaveAs.ToolTipText = "다른 이름으로 저장";
this.btnSaveAs.Click += new System.EventHandler(this.btnSaveAs_Click);
//
+ // toolStripSeparator2
+ //
+ this.toolStripSeparator2.Name = "toolStripSeparator2";
+ this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25);
+ //
+ // toolStripButton1
+ //
+ this.toolStripButton1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.allTurnLeftRightCrossOnToolStripMenuItem});
+ this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));
+ this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton1.Name = "toolStripButton1";
+ this.toolStripButton1.Size = new System.Drawing.Size(68, 22);
+ this.toolStripButton1.Text = "Debig";
+ //
+ // allTurnLeftRightCrossOnToolStripMenuItem
+ //
+ this.allTurnLeftRightCrossOnToolStripMenuItem.Name = "allTurnLeftRightCrossOnToolStripMenuItem";
+ this.allTurnLeftRightCrossOnToolStripMenuItem.Size = new System.Drawing.Size(223, 22);
+ this.allTurnLeftRightCrossOnToolStripMenuItem.Text = "All TurnLeft/Right/Cross On";
+ this.allTurnLeftRightCrossOnToolStripMenuItem.Click += new System.EventHandler(this.allTurnLeftRightCrossOnToolStripMenuItem_Click);
+ //
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
@@ -490,5 +517,8 @@ namespace AGVMapEditor.Forms
private System.Windows.Forms.ToolStripButton btnAddImage;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.Panel panel1;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
+ private System.Windows.Forms.ToolStripDropDownButton toolStripButton1;
+ private System.Windows.Forms.ToolStripMenuItem allTurnLeftRightCrossOnToolStripMenuItem;
}
}
\ No newline at end of file
diff --git a/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.cs b/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.cs
index 9ff2d75..49210b1 100644
--- a/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.cs
+++ b/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.cs
@@ -221,8 +221,8 @@ namespace AGVMapEditor.Forms
toolStripStatusLabel1.Text = $"{nodes.Count}개 노드 선택됨 - PropertyGrid에서 공통 속성 일괄 변경 가능";
// 다중 선택 PropertyWrapper 표시
- var multiWrapper = new MultiNodePropertyWrapper(nodes);
- _propertyGrid.SelectedObject = multiWrapper;
+ //var multiWrapper = new MultiNodePropertyWrapper(nodes);
+ _propertyGrid.SelectedObjects = nodes.ToArray();// multiWrapper;
_propertyGrid.Focus();
}
}
@@ -833,11 +833,10 @@ namespace AGVMapEditor.Forms
foreColor = Color.Black;
backColor = Color.White;
break;
- case NodeType.Rotation:
- foreColor = Color.DarkOrange;
- backColor = Color.LightYellow;
- break;
- case NodeType.Docking:
+ case NodeType.Loader:
+ case NodeType.UnLoader:
+ case NodeType.Clearner:
+ case NodeType.Buffer:
foreColor = Color.DarkGreen;
backColor = Color.LightGreen;
break;
@@ -975,9 +974,7 @@ namespace AGVMapEditor.Forms
return;
}
- // 노드 래퍼 객체 생성 (타입에 따라 다른 래퍼 사용)
- var nodeWrapper = NodePropertyWrapperFactory.CreateWrapper(_selectedNode, _mapNodes);
- _propertyGrid.SelectedObject = nodeWrapper;
+ _propertyGrid.SelectedObject = _selectedNode;
_propertyGrid.Focus();
// 이미지 노드인 경우 편집 버튼 활성화
@@ -989,8 +986,7 @@ namespace AGVMapEditor.Forms
///
private void ShowCanvasProperties()
{
- var canvasWrapper = new CanvasPropertyWrapper(_mapCanvas);
- _propertyGrid.SelectedObject = canvasWrapper;
+ _propertyGrid.SelectedObject = _mapCanvas;
DisableImageEditButton();
}
@@ -1124,7 +1120,9 @@ namespace AGVMapEditor.Forms
UpdateTitle();
// 🔥 다중 선택 여부 확인 및 선택된 노드들 저장
- bool isMultiSelect = _propertyGrid.SelectedObject is MultiNodePropertyWrapper;
+ bool isMultiSelect = _propertyGrid.SelectedObjects is MapNode[]; // _propertyGrid.SelectedObject is MapNode[];
+
+ //var a = _propertyGrid.SelectedObject;
List selectedNodes = null;
if (isMultiSelect)
{
@@ -1146,9 +1144,9 @@ namespace AGVMapEditor.Forms
// 🔥 다중 선택인 경우 MultiNodePropertyWrapper를 다시 생성하여 바인딩
if (isMultiSelect && selectedNodes != null && selectedNodes.Count > 0)
{
- System.Diagnostics.Debug.WriteLine($"[PropertyGrid] MultiNodePropertyWrapper 재생성: {selectedNodes.Count}개");
- var multiWrapper = new MultiNodePropertyWrapper(selectedNodes);
- _propertyGrid.SelectedObject = multiWrapper;
+ // System.Diagnostics.Debug.WriteLine($"[PropertyGrid] MultiNodePropertyWrapper 재생성: {selectedNodes.Count}개");
+ //var multiWrapper = new MultiNodePropertyWrapper(selectedNodes);
+ _propertyGrid.SelectedObjects = selectedNodes.ToArray();// multiWrapper;
}
// PropertyGrid 새로고침
@@ -1180,18 +1178,18 @@ namespace AGVMapEditor.Forms
var selectedObject = _propertyGrid.SelectedObject;
// 다양한 PropertyWrapper 타입 처리
- if (selectedObject is NodePropertyWrapper nodeWrapper)
- {
- currentNodeId = nodeWrapper.WrappedNode?.NodeId;
- }
- else if (selectedObject is LabelNodePropertyWrapper labelWrapper)
- {
- currentNodeId = labelWrapper.WrappedNode?.NodeId;
- }
- else if (selectedObject is ImageNodePropertyWrapper imageWrapper)
- {
- currentNodeId = imageWrapper.WrappedNode?.NodeId;
- }
+ //if (selectedObject is NodePropertyWrapper nodeWrapper)
+ //{
+ // currentNodeId = nodeWrapper.WrappedNode?.NodeId;
+ //}
+ //else if (selectedObject is LabelNodePropertyWrapper labelWrapper)
+ //{
+ // currentNodeId = labelWrapper.WrappedNode?.NodeId;
+ //}
+ //else if (selectedObject is ImageNodePropertyWrapper imageWrapper)
+ //{
+ // currentNodeId = imageWrapper.WrappedNode?.NodeId;
+ //}
int duplicateCount = 0;
foreach (var node in _mapNodes)
@@ -1370,5 +1368,46 @@ namespace AGVMapEditor.Forms
#endregion
+ private void allTurnLeftRightCrossOnToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ //모든노드의 trun left/right/ cross 속성을 true로 변경합니다
+ if (_mapNodes == null || _mapNodes.Count == 0)
+ {
+ MessageBox.Show("맵에 노드가 없습니다.", "알림", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ return;
+ }
+
+ var result = MessageBox.Show(
+ $"모든 노드({_mapNodes.Count}개)의 회전/교차 속성을 활성화하시겠습니까?\n\n" +
+ "• CanTurnLeft = true\n" +
+ "• CanTurnRight = true\n" +
+ "• DisableCross = false",
+ "일괄 속성 변경",
+ MessageBoxButtons.YesNo,
+ MessageBoxIcon.Question);
+
+ if (result == DialogResult.Yes)
+ {
+ foreach (var node in _mapNodes)
+ {
+ node.CanTurnLeft = true;
+ node.CanTurnRight = true;
+ node.DisableCross =false;
+ node.ModifiedDate = DateTime.Now;
+ }
+
+ _hasChanges = true;
+ UpdateTitle();
+ RefreshMapCanvas();
+
+ MessageBox.Show(
+ $"{_mapNodes.Count}개 노드의 회전/교차 속성이 모두 활성화되었습니다.",
+ "완료",
+ MessageBoxButtons.OK,
+ MessageBoxIcon.Information);
+
+ UpdateStatusBar($"모든 노드의 회전/교차 속성 활성화 완료");
+ }
+ }
}
}
\ No newline at end of file
diff --git a/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.resx b/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.resx
index 5346a8d..ab2891a 100644
--- a/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.resx
+++ b/Cs_HMI/AGVLogic/AGVMapEditor/Forms/MainForm.resx
@@ -120,22 +120,40 @@
132, 17
+
+ 249, 17
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK
+ YKyG2WBogqMYJQOtCEVRFBGdTBCJfRnkS4VaaWNT5sqx1BUxRXxDHYxAJLvkusEeBaPAB+5z4Jzn+t3X
+ /aLhnEfjo8m+dCoa+7/C3O2Hqe0zDC+8KG+cRZHZhdzaaWTVTCLDMIY0vfM04Nfh77/G/sEhwpEDbO3t
+ I7TxE8urEVy99fT/AL5gWDLrTB/hnF4XsW0khCu5ln8DmJliT2AXrcNBsU1gj/MH4nMeKwBrPktM28xM
+ cX79DFKrHHD5d9D26hvicx4pABt2lpg10zYzU0zr7+e3xXGcrkEB2O2TNec9nJFwB3alZn5jZorfeDZh
+ 6Q3g8s06BeCoKF4MRURoH1+BY2oNCbeb0TIclIYxOhzf8frTOuo7FxCbbVIAzpni0iceEc8vhzEwGkJD
+ lx83ymxifejdKjRNk/8PWnyIyTQqAJek0jqHwfEVscu31baIu8+90sTE4nY025dQ2/5FIPpnXlzKuK8A
+ HBUzHot52djqQ6HZhfR7IwK4mKpHtvEDMqvfCiQ6zaAAXM8x94aIWTNrLLG4kVUzgaTSPlzLtyJOZxbb
+ 1wtfyg4Q+AfA3aZlButjSfxGcUJBk4g5tuP3haQKRKXcUQDOmbvNTpPOJeFFjordZmbWTNvMTHFUcpUC
+ nOccAdABIDXXE1nzAAAAAElFTkSuQmCC
+
+
462, 17
-
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHrSURBVDhPldBNiBJhHMfx/ykKiohQ18tEhygyWGQRJwh1
- fcHAt7qJ3TOj6FJ0akP06G2RPQd1MNhKcxvCxDc2UHbXSCoWNu8dWp3ReTks/moGVnafjW33c/rPM8/3
- 4eEhOoLJZ/6UvDp7l10/lNKa4+TW3AN9Hq9eC8kNW1ef1QZ3UapzRztMbs1+lVs2Qa5fLqsbtzBucE9G
- NetwVD2fYPf+07h5ZUH9koD24yG0rWdQ1kMQK2eVXzXTaXbv1Lh9dUZu2apy4xLUjSi0nxk0X0bRLd7B
- Vu0elM48xE8nIX6kJbbdZ1znFpTubTRfxaBpGiaTCdbfJaB+v4+BQN+2y3SBbaak5oxJqlqEcDiMTqcD
- VVXR6/VQexGCtvkYYplG4gfi2c6gVKzcqHKuGIvFkEwmkcvlUCgUUF6ah7b5FIMV2hFXaG1YoudsOxWN
- Ro2Y53l4vV5EIhHIayFIVSsk4Qy2S8SxzdRu7HQ64fF4YDab9SsvDt7Tjlii62KRusM3lGI7QzweRzab
- NWK32w2TyQR9XSrRDfEtCfqM13Ti9zLdZFsKBoPIZDIH4l3DZQrs/d7H5/MhnU7D4XDA5XIdiA+VSqXQ
- 7/dht9sRCASOF+v0A9rtNvL5vPFg7P//8vv9j/RrWyyW48d//QFpDAsmbMS+zgAAAABJRU5ErkJggg==
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHrSURBVDhPldBNiBJhHMfx/ykKKohQ18tEhygyWGQRJwh1
+ fcHAt7qJ3TOj6FJ0akP06C1kz0EdDLbS3IbaxJdhA2V3jaRiYfPeIXPGeTss/mqElfbZ2HY/p/8883wf
+ Hh6iAxh/5I+pq7M32fV9aeIcp4pzd8xZWb0UUZuOrjnrTe6s3OAOdpgqzn5WRYegNs5X9Y1rUJrcg1Hd
+ PhzVTqfYvf+ktC4s6J9SML7dhbH1CNp6BMP3J7Ufdctxdu+U0r44o4qOmto8B30jDuN7Dq1ncXTLN7BV
+ vwWtMw/pw1FI72iRbXdRGtyC1r2O1vMEDMPAeDzG+usU9K+38UugL4MqnWGbKbk1Y5FrNiEajaLT6UDX
+ dfR6PdSfRmBs3odUpZH0lni2m9BW7Nxo5VQ5kUggnU6jUCigVCqhujgPY/MhBsu0LS3T2rBCj9l2Kh6P
+ T2Ke5+H3+xGLxaCuRSDX7JCFExhUiGObqZ3Y7XbD5/PBarWaV34yeEPbUoUuS2XqDl9Shu0mkskk8vn8
+ JPZ6vbBYLDDX5QpdkV6RYM54QUd+LtFVtqVwOIxcLrcn3jFcotDf37sEAgFks1m4XC54PJ498b4ymQz6
+ /T6cTidCodDhYpN5QLvdRrFYnDwY+/+/gsHgPfPaNpvt8PEfvwFcBQshDC9YfwAAAABJRU5ErkJggg==
@@ -156,75 +174,75 @@
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHMSURBVDhPnZJfa9pQGMb7JXa7sW9RCP1ku1lXRi+3luJa
- dteOjYi5CJhoBIPGLYkExb8zic5molPnoAO3k80ozzhHTopzq2wPhHDe8z6/5yV599rtNlqtFhqNBur1
- Omq1GqrVKiqVCn3f29ulZrOJ1Wq19QyHQwYxDONuCE2mhsFgwJKDIIghtOY4zt0QOjJtpmn0XC6XK/P5
- HFEUsToFWpb1dwhN5Y22bf80TXMQhiE+f/qOd9qU3fX7fZRKpT9DaDIfeblcgpq/TEO8OPJx8sjD2+wa
- 0uv1UCgUoKrqJsRxHDKbzVjTYrFgyYknPi6f9fH6LMD5UTeG+L6PfD6/CbFt+8CyLDKdrpvc+g1Lvjq5
- hnj+cQvieR40TduEmKYpFItFMplMWFO39RWJQw+vTm8hiUMfhrq+73Q6UBQFoijeQgzDEHRdJ+PxeAvy
- JhHg5XEPF8fvEUVLNkUmk0EqlXoQA6h0XRdyuRwZjUYx5Oyxi4unXVyddvFtHsZmURQfbpi5NE0Tstks
- oZvIPlzzBpfPP+BHGO02cymKIqTTaUI3kf9ialZVdbeZS5blfVmWCV0w13X/zcwlSdK+JEnkv8xcFJJM
- Ju//Xuf6Be3RFseUK14pAAAAAElFTkSuQmCC
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHISURBVDhPnZJfb9JgFMb3JbzV+C2WNPtk3jgXs0vdsuAW
+ 7zajKaEXTWjhvShpilBIA+GvtAWxIyAgJjNBW6WQx5yXtBPREX2SpnnPe57fc9KevXa7jVarhUajgXq9
+ jlqthmq1ikqlQu97e7vUbDaxWq22nuFwyCGGYdwNoWQyDAYDnux5XgyhmmVZd0NoZGqmNDqXy+XKfD5H
+ GIa8TkDTNP8OodRfGn8UCoVBEAT49PEbCmzK7/r9PvL5/J8hlByNvFwuQebP0wAvjlycPHLwNruG9Ho9
+ 6LoOVVU3IZZl+bPZjDctFguenHji4vJZH6/PPJwfdWOI67rQNG0TUiqVDkzT9KfTdZNdv+HJVycfIJ5f
+ b0EcxwFjbBNSLBYFXdf9yWTCm7qtL0gcOnh1egtJHLow1PV9p9OBoigQRfEWYhiGoGmaPx6PtyBvEh5e
+ HvdwcfwOYbjkU2QyGaRSqQcxgJTL5QTGmD8ajWLI2WMbF0+7uDrt4us8iM2iKD7cMEdijAnZbNanTeQf
+ rnmDy+fv8T0Id5sjKYoipNNpnzYx+sVkVlV1tzmSLMv7siz7tGC2bf+bOZIkSfuSJPn/ZY5EkGQyef/3
+ eqSfzGgWuCCdbTAAAAAASUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAG8SURBVDhPnZLditpQFIXnJXrb0rcYCH2wXhSZwly2U0rp
- O0TMRUp+BTMaIYkERY3BH0TEalW8KEV6gp4cVjlnOBms7Ui7IITsvde3NmRfpWmKwWCAfr+PXq+HbreL
- TqeDdrvN38+uLilJEjDGzp7lcikgvu8/DeHJ3LBYLETyfD4vILwWx/HTEL4yH+Zp/LvVarX3+z0opaLO
- gWEY/h3CU+VgFEWHIAgWWZaBfv8GmjqiN5vN0Gw2/wzhyXLlPM/BzezHFrl9g/zLa9DUFr3pdIp6vQ7L
- sk4hcRyT3W4nho7Ho0jOrRKY9w6s8RHMvikgk8kEtVrtFBJF0aswDMl2u32AfO2KZHZ/B9b8fAYZj8dw
- XfcUEgSB0mg0yGazeYCsElCzBHb/4RFilUATQ/SHwyFM04Sqqo8Q3/cVz/PIer0+h/ifwNxb/DRvwXIq
- trBtG5VK5UUB4PI8T6lWq2S1WhWQo/EGzHmLrHaHA9kXZlVVX56YpVzXVRzHIfwSBWTZB/Xegx2yy2Yp
- 0zQVwzAIv0T5i7nZsqzLZild1691XSf8wEaj0b+ZpTRNu9Y0jfyXWYpDyuXy89/rUr8A4v0dufOO1X4A
- AAAASUVORK5CYII=
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAG6SURBVDhPnZLditpQFIXnJXrb0rcYCH2wXhSZwly2U0rp
+ O0TMRUr+zkUyaUSjBEWNwR9ExGpVvCiDzAl6cljlnCGZWtuRdkEI2Xuvb23IvkiSBP1+H71eD91uF51O
+ B+12G61WS7yfXZxTHMfgnJ88i8VCQoIgeBoikoVhPp/L5NlsVkBELYqipyFiZTEs0sR3s9ls7XY7MMZk
+ XQDDMPw7RKT+Mriv1WrzNE3BfnwHSxzZm06nqFarf4aI5HzlLMsgzPxug8y+QvblNVhiy95kMoHv+7As
+ 6xgSRRHdbrdy6HA4yOTMKoF778C/fgS3rwrIeDyG67rHkEaj8SoMQ7rZbB4g3zoymd/egFc/n0BGoxEI
+ IceQer2u+L5P1+v1A2QZg5kl8NsPjxCrBBYbsj8YDGCaJlRVfYQEQaC4rktXq9UpJPgETq5xb16DZ0xu
+ Yds2KpXKiwIg5HmeQgihy+WygByMN+DOW6TuDfZ0V5hVVX15ZM5FCFEcx6HiEiVk0QPz3oPv0/PmXKZp
+ KoZhUHGJ+S8WZsuyzptz6bp+qes6FQc2HA7/zZxL07RLTdPof5lzCUi5XH7+ez3XT8GUHaqSv5fjAAAA
+ AElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHeSURBVDhPnZLda9NgFMb3T3ir+F8Mwv6e3cgcorfToYgK
- Or/unF94ldJsZm3SJq4xTSFJDSlt09oPSilpa1sKilbfsn7wyPtCInG6og+EkHPO83sO5KxVq1VUKhWU
- y2WUSiUUi0UUCgW4rkvf59ZWyfM8LJfLU0+v12MQwzDOhtBkavB9nyV3Op0QQmuO45wNoSvTYZpGv/P5
- vDuZTDCfz1mdAi3L+juEpgaDtm2fmKbpT6dTjL50kfUOWa/dbiOXy/0ZQpODlReLBah5/PUTHia2cfdg
- E7p3wHqtVgu6rkOW5SjEcRwyHo/Z0Gw2w/BzF3uJy3j2bgcvtZt4lNgOIc1mE5lMJgqxbXvDsiwyGo3Y
- 0Ef/A+4dbuL58Q280e/glXYrAmk0GlAUJQoxTZPLZrNkOByyoXq3gAfiFl4c74aQvaMtZEox1q/VapAk
- CTzP/4IYhsFpmkYGg8EpyOv3t/FUvoonR9cwX8zYFqlUCvF4/EIIoNI0jVNVlfT7/RBy/+0lPE5ewb66
- i+8/voVmnucvRsyBFEXh0uk0oZfI1vVd7KvXMT0hq82BJEnikskkoZcY/GJqlmV5tTmQKIrroigSemD1
- ev3fzIEEQVgXBIH8lzkQhcRisfO/1wP9BF1iD3Q2XAPzAAAAAElFTkSuQmCC
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHdSURBVDhPnZLda9NgFMb3T3ir+F8Mgn/PbmQO0Vt1KKKC
+ zo/dbX7hVUqzmbVJ+84lxpQ2rSGlbVr7QSklbW1LQdHqW9YPHnlfSDROV/SBEHLOeX7PgZyVSqWCcrmM
+ UqmEYrGIQqGAfD4Px3HY+8zKMrmui8ViceLpdrscYprm6RCWzAye5/HkdrsdQFjNtu3TIWxlNszS2Hcu
+ l3PG4zFmsxmvM6BlWX+HsNRfBo/T6bQ3mUww/NzBO3ef91qtFlKp1J8hLNlfeT6fg5lHXz7iYWwDd/fW
+ YLh7vNdsNmEYBlRVDUNs26aj0YgPTadTDD51sBW7hJ031/Bcv4lHsY0A0mg0oGlaGJLNZi9YlkWHwyEf
+ +uC9x739NTw9uoFXxh280G+FIPV6HYSQMCSTyQiGYdDBYMCHap08HsjreHa0GUC2DtahFSO8X61WoSgK
+ RFH8CTFNU9A0jfb7/ROQl29vY1u9gicHVzGbT/kWiUQC0Wj0XABg0nVdIITQXq8XQO6/vojH8cvYPdzE
+ t+9fA7MoiudDZl+EECGZTFJ2iXxdz8Hu4XVMjulysy9FUYR4PE7ZJfq/mJlVVV1u9iXL8qosy5QdWK1W
+ +zezL0mSViVJov9l9sUgkUjk7O91Xz8AO/kPZbC5CrgAAAAASUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGpSURBVDhP7Y87TyJRGIZR9AdYiYWFMdb+AYvNopXRWJho
- oY1aWGyzW8DuFmplobGxMxkPrVrY4f0SHJhhmBmGAYMxiIjcxkGh8ZZoeM05UWPG6w/wTZ7m5Hve8302
- 23dYPB6PkxASJITgiyQ5jut+LiCExFVVRDabYORylCNGPp9kFArHMIwUDOMEsZhKSzIvC8xUKg5B8MPn
- 8zF4noff70cgEIAgCAgGg5AkCaqqshKO424sBQeQJJGJVikUCkFRFCbregSmmXldkE4fQlFkiKLIRCrJ
- ssykcDiMSCQCXdexvx9DsZh7XXB6moCmqUyiv1FJ0zQmRqNRKHNj2BtswZazFrv9jVj83Xv3JGNnZxPn
- 53lcXFAKKJUMlMtnj5hILE4j6mrDjXcGlfgarhb+QP7ViiX3AFjBZ3h7HLj2zgCzXYC7DphsQnHqB1Z6
- 6vF8xkfZ+FlTqajLeJnyuAP03Tr7Ztbb7ZnL+WFg3IFblw0llw3pUTvWOuxZ6+yb4fsaJqSh5ru8uwnm
- v1okR6qw3Vlzv9pe/d86+274vsa/6057iq5NN3qSHwBTm6pq5+CDSAAAAABJRU5ErkJggg==
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGvSURBVDhP7Y+/TxphGMdR4A9wKh0cNHHuP9ChKXQxsWEw
+ oYMOjR06dGg6QNuhdHLQsLgZ8GVFBzcqRGtDD+447o7jwGAMIkV+ncevpa0mGr7N+0YNOX+0f0C/yWd5
+ 83y+7/NYLP/DEg6HnYSQNCEE/0g5FAo9vy4ghBQVRUC9XmI0GpRDRrNZZrRaR9D1CnT9BwoFhZbUhguM
+ SqUInk8ikUgwOI5DMplEKpUCz/NIp9MQRRGKorCSYDB4airYhygKTDRLmUwGsiwzWdNyMIzazYJq9QCy
+ LEEQBCZSSZIkJmWzWeRyOWiahr29Atrtxs2C4+MSVFVhEv2NSqqqMjGfz0Ne/YTv81PYcdrx7cU4Im9n
+ z69k7O5uo9NpotultNDr6ej3Ty4xUFpfRt77GKfRAAbFGH5F3kF68wgbvjmwgr8RdTvwOxoAVmYA3xiw
+ OIH20hN8cT/A9Rn3Jf7UNhgomxhO3+8AfTfP3pq4y1r7ubYA+B0481rQ81pQfW1F7Jm1bp69NZzn4Wfx
+ 5eR50zcB44Md5Vcj+Dptu9hyjX40z94ZzjP+Pu60VujadKMr+Q87TKpZvTdvaAAAAABJRU5ErkJggg==
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAL4SURBVDhPfdLfT9NXGMdx/oPdL17twmQxi97sajfTzV+b
- 2Q91CxuxZGt0mWMxy3TFMhRx+hUqBVoI0FoqvxxrVSZFwHWtWuy0gy8UykAdiggMEGq/7bftkTB8L222
- TojbJ3muznNeJznPk2V39ZfZ2+RZs1NWjC3PqeaVVemQFetFuTzrn9ja5bm5R4+eqvE48YT431pQBXOR
- GDXOvkgGSL0cU+NUd0xS1hGk6PIPNPSZcQx+x7lgMVU+A5/XW/ja1oPONsJ8TGByDigZoLxFVlJ6zeVJ
- pK5uGnrNtA4dxNr7GTW3tNQG9mNwH2d/XQt6+yhzynOAWEJQ1zVFUWcT3weLqQ3spfKXPRh8HyFdz8bo
- +4pc02kKG+8wqyQxOftXAkpCYO2e5qirgbNyIRV+DdK1Dznm3cmRn3ciefLQVJRgb23idks2v186QdC2
- hWD1Ok0aiMQFtit/ILk6MftOUe7XUuTdhf6ndznqyebbH/OpbjzEjFeHMtQB6jSRofP4S7fNpoHHqsDu
- nsHcOUi+w47UfoBSz14k9ycUOL/AWJ/H/HARi5PtzFwzkAxd5M8HNxi07RNZqVmHY4IGz2waMbmCfFOs
- 4aTxTSTDRs6YthEeLmQ5eYPkvTzCv37JaJOWoCVnIWB+b20aWIgK9I530LXu4OC5t7AUvErIvpvh5s08
- Dh1mWdwkMZaLeJhDbETPaN2OpwPlmzekP7GsuU8JRwW+sauZ8ofa6Ll0gJle3d+XNYiJj4kOF3Cv7m3O
- Nl5QM1MwpoHkCsB7tYSRK4dYTvoQ41qePNyDEjrM3dqtTE2MU+l4ZoxVTnkiHIkSVQXR+BMGvE381qln
- sKuCqcAHJMZzCAfzGTvzPgvT95lPr7L87ypb2+RSy/n+ntRypGRHyRsQe8Bty268+hfx127Hc/L15fpG
- l5o6r77Qr1jb5IoMsDrHtS8vLd6sYjFQSeDERlo/XaN269atX933n9n12gtCyl275D61fcldtul6R/4r
- L63ueTZ/AZ9Hi93BxLexAAAAAElFTkSuQmCC
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAL5SURBVDhPfdLfT5tVHMdx/gPvjVcmGpPF6I033pip000X
+ f+A0uGUlk0zjxCzGzbIiDpnbM6iUQiGUFqhd2YbtBo4yYMN2W4FtFR54oMimMhkDpA10fdqn7RlB9jZt
+ tA4y/STfq/M9r5Oc7zfP4R2tdnTI4TqPrJraHlKu9WV2y6q9Q67J+yfNXSORcCRyX0smSabE/9ayJojE
+ EjS6h2M5IPNyQkvS0D1HdbdC+fnvcY5YcI9/wymlgvqAkY9bbXzeMoC+ZYqlhKDWM6bmgJo2Wc3ojefn
+ kHr7cA5baJ84gH34IxqvF2EN7sPYf4R9TScxOG4QUR8CJFKCpt55yntcnFYqsAb3Unt1N8bA+0hXCjAF
+ PqOw7lvKTvxCWE1T6xldD6gpgb1vgcNeJ9/JZZiHdEiX3+Nrfz5f/ZiP5CtGZ67E0e7i5skCfjt3FKXl
+ FZSGTbosEEsKWi78geTtwRI4Ts1QEeX+dzBcfJPDvgK+/KGEhhMHWfTrUSe6QVsgNnGGwaqt4SxwVxM4
+ +hex9IxT4nYgde2nyrcXqX8PpZ5PMLUWszRZzspcF4uXjaRDHfx5exCl+UORl5l1NCFw+sJZpM6r8EWF
+ jmOml5GMm2mu20p0soy19CDpW8VEf/qUG64iFNvO5aDlrSezwHJcYHC/gb59OwdOvYat9DlCjh1Mtm3h
+ bugQa+IaqelCxJ1dJKYMTFm33x+r2fJs9hOrXSNqNC4ITF/K1VCok4Fz+1kc1v99WYeY3Ul8spRbTa/j
+ cJ7VclMwZYH0OsB/qZKpCwdZSwcQM0Xcu7MbNXSIX62vMj87g9n9wBjrPfJsNBYnrgniyXuM+V383GNg
+ vNfMfPBdUjO7iColTDe/zfLC7yxlV3nk31W2d8pVtjOjA5nlyMjuypcgcZubth34DY8yZN2G79gLa61O
+ r5Y5rz87qto7ZXMO2JgjHzy1unKtnpVgLcGjmzm95zGtT7/pmY19/5n85x8RUuETqxePb1vtr37xSnfJ
+ 049v7HkwfwEdnYukisiEOQAAAABJRU5ErkJggg==
@@ -245,16 +263,16 @@
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHwSURBVDhP7Y7Ni1JhGMVvXadgWrWzRcTQKgXJVbQQx0/w
- K7iL1FVBKdYrLW4fM9pdGCPMQpnAC+YqoY240VaTWhnouInIVubqziBFSJEGzaRN5olnIDFx/oMOvPBw
- zu8cXo77r4lsNtsJxti9eDzey2azkCSpwxi7wBhTS5KkkEcZMcT+U9ZoNMdcLlcilUqh2+1CURTUajXE
- YrFtSZLq7XZ7SF6j0QAxxFJnMqDX6y+Jovit1Wr1/H7/M4fDMQoGg5BlGdFoFHSTR1kul+sQS53pgcTa
- 2tpAluWQ2+1eNBgM36vVKprNJur1OgqFAsijjBhiqTMZ0Ol0N0OhUD+dTt8VBKFiMpn27XY7BEE4eHST
- RxkxxFJnMqDVas95PJ52Mpns5/P5r8ViEZlMBqIoIhKJHNzldYZXl8/8fmlewFP74v6T5eMPJwMcx/FG
- o/G80+ncCQQCu+FweMAY++n1eq/4fD7Lo6vW4bs7FzHY3MD4fRl7+dt4E9aOXlhUt6ZHDlXJyis/NjcA
- 2QOsngTWl/AlsYySmd+eZefquVk1Hr8tYlr9mBrkz7JzVbHyH3YfXwdiagxXOPRWOHRu8Cjb+I+z7Fxt
- +U49eH3t7K9Pq0v4HF2AEjiCqks1KlmP3p9lD9WW73SkYuF36Nv0o7/lP1AsGrGjxCTVAAAAAElFTkSu
- QmCC
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHxSURBVDhP7Y7Ni1JhGMVvXadgWrWzRcS0S0FyFYHgOH4g
+ fgQXQl0NRIr1SqB9zGh34XAXs7gwgRfMVUILsY22mhmlDHTcRGQrbXVnkCKkSIOmtMk88QyMmDj/QQde
+ eDjndw4vx/3XWHa7/Qxj7IEkSd1sNgtRFNuMsSuMMa0oiip5lBFD7D9lnU53yu12y6lUCp1OB6qqolqt
+ IplM7oqiWGu1WgPy6vU6iCGWOuMBo9F4LRqNfms2m91AILDldDqHoVAIiqIgkUiAbvIoy+VybWKpMzkg
+ S5LUVxQl7PF45k0m0/dKpYJGo4FarYZCoQDyKCOGWOqMBwwGw+1wONxLp9P3BUEoWyyWA4fDAUEQDh/d
+ 5FFGDLHUGQ/o9fpLXq/3vSzLvXw+/7VYLCKTySAWiyEejx/epXWGV9cv/Hm5NIfnjvmDp4unH40HOI7j
+ zWbzZZfLtRcMBvcjkUifMfbL5/Mt+/1+6+Nl6+Ddvavob25g1Crhx7O7eBPRDV9YNXcmR47Vto1Xf25u
+ AIoXWD0LrC/gi7yILQu/O83OVHlJMxq9LWJSvaQW5E+zM1W28R/2n9wEkloMVjh0Vzi0b/Eo2fmP0+xM
+ 7fjPrb2+cfH3p9UFfE7MQQ2eQMWlGW7bTj6cZo/Vjv98vGzl9+jb9KOj8l/xBxqBzigbjwAAAABJRU5E
+ rkJggg==
@@ -269,39 +287,18 @@
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKbSURBVDhPhZBdSFNhHMbPZURXEXQTFF2trgKpdWFZWH6c
- 0vmxqUu3+bUskyyMUDqm4pxk5YwsmV1MsM3M6FA0NN1mzo+Dbec9y0ihwvmeQStGpO+xguDwxjvdzXHR
- A+/Ny/N7/s//T1GbCrjK1PyQkQVDphj/pFIOusrltw5DjOsvZrneQnXCl1SCy2AWXBVR/rERBAbOMUGH
- XjVrL1Bx/VqGs+vAbF9x1G/LMyu5uMjkODxYauXD6ABYQVoApXpBlOpCcC1nAa7u9/dorNO2/KjvNr21
- Ce8ysvygEQTDSAUgugggahJEdB2I69cEKF0VRKlUCP/YN9WtAd5OmlXyFHCZYoGBEiYUQQUAosYNWGrY
- hOuAiGoBlE55O2jG05kTU/IUP1QuB+16lSBKlxJTEyuQRgJENaTFWEuGyteVIyt5KuA0yeRgxEhAsCJd
- JmE8RBfifyKqDkGpmAR4rfTWAM5RGuMeahleXM/aaIFq43AEmYGIqgS4Vs6L6PjojdPMWHPG1hXm+rTs
- XK8OkEMJUCraBKsFca2CwAAizbvIzz2jbdm/3Y3p80qe8tty1TMPCqNvujVWfvnXXiEinSSVBSjpQhCl
- Eniqp/DPwkg99jWcwM/rU/XKDGqyK9fst2mi3ltnwER7JkP2JW+0KZ2ZvJMnL75qwpGgHS/P3MWedg1+
- UaXercygfFZaPW6h2fEOOkaO5bFky+6bmasTbWfxp8lO/PXDIP625MQfJ1rxSOUx2ZUsJJnYK2mGqe4S
- HJ614ej7AbzC3cfzjyqwNUP1+eX5lO1Kf1I9q001eCz5eMndjBfdLXj6XhEeqTn8/anu4A6l958aNh8x
- OMtS8OvWLDxcqf7i1KfsUnr+q+Gqozv7Sw5ZHKa0bYm/v22YpTjaxhhxAAAAAElFTkSuQmCC
-
-
-
- 249, 17
-
-
- 249, 17
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK
- YKyG2WBogqMYJQOtCEVRFBGdTBCJfRnkS4VaaWNT5sqx1BUxRXxDHYxAJLvkusEeBaPAB+5z4Jzn+t3X
- /aLhnEfjo8m+dCoa+7/C3O2Hqe0zDC+8KG+cRZHZhdzaaWTVTCLDMIY0vfM04Nfh77/G/sEhwpEDbO3t
- I7TxE8urEVy99fT/AL5gWDLrTB/hnF4XsW0khCu5ln8DmJliT2AXrcNBsU1gj/MH4nMeKwBrPktM28xM
- cX79DFKrHHD5d9D26hvicx4pABt2lpg10zYzU0zr7+e3xXGcrkEB2O2TNec9nJFwB3alZn5jZorfeDZh
- 6Q3g8s06BeCoKF4MRURoH1+BY2oNCbeb0TIclIYxOhzf8frTOuo7FxCbbVIAzpni0iceEc8vhzEwGkJD
- lx83ymxifejdKjRNk/8PWnyIyTQqAJek0jqHwfEVscu31baIu8+90sTE4nY025dQ2/5FIPpnXlzKuK8A
- HBUzHot52djqQ6HZhfR7IwK4mKpHtvEDMqvfCiQ6zaAAXM8x94aIWTNrLLG4kVUzgaTSPlzLtyJOZxbb
- 1wtfyg4Q+AfA3aZlButjSfxGcUJBk4g5tuP3haQKRKXcUQDOmbvNTpPOJeFFjordZmbWTNvMTHFUcpUC
- nOccAdABIDXXE1nzAAAAAElFTkSuQmCC
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKYSURBVDhPhZBfSFNRHMfvY0RPEfQSFD2tngKj9WBZmDqX
+ em1t6tJtDV2WSRZGKN1ScV7JyhVZMnuYIJua0aXQ1Oamzj/DtnvuMlKocJ47aMWI9FwrCC4njrqX66Iv
+ nJfD9/P9fX8/itpUyFOm5nvNHOi1JMJ9VjnkschzLlMi2FXMBTvOqpO+lBI8Jpvgtsb5HjMIdZ9jwi6j
+ asapUwW79EzQaQDTncXxgKPQpuTWRSZvwKUsH0UHwDLSAyjVCKJUHYGr+fNwZX/gAc1OOQrj/rvarU14
+ j5kjk8NRpAIQXQIQ1QsiugHEtesClK4JolQqRH/sm2ynga9Vyyl5CngsiVB3CROJIR2AqG4Dlmo34Wog
+ oioApVO+Fi3jZfMTSp4K91rksNOoEkTpcnJqcgXSSICokrQYachW+dvyZCVPvXWbZXIwYiQgWJaukDAe
+ oovrfyKqiECpmAT42NytAbOu0kTwiZ7hxTXNRgtUtQ7HkA2IqFyAq+d5ER0fvpnFjDDZW1eY7dRzsx0G
+ QA4lQKloE6wQxFUrgQFE9LvYzz2vm3J/D9Vlzil5KuAoUE8/1sUn2mmWX/q1V4hJJ0llAUqGCETpBJ5w
+ 6P7MD9Rgf+0J/KIm3ajMoMbbCmwBBx333TkNvM05DNmXvOH6TGb8Hi0vDNbjWNiJl6bv47FmGr8sV+9W
+ ZlB+Vqt+Y9dyoy25CXKsMbtGHryds+JtysOfxlvx1w89+NuiG3/0NuIB6zHZkyoklbirGabJ9hIcnXHg
+ +PtuvBx8hOeeWjGbpfr86kLadqU/pZ5XpZvG7Gfw4tAtvDDUgKceFuGBysPfnxkO7lB6/6l+2xGTuywN
+ jzZqcJ9V/cVtTNul9PxX/eVHd3aVHLK7LBnbkn9/ARsspRTlWFT8AAAAAElFTkSuQmCC
@@ -386,6 +383,21 @@
8maMpXiUaCpB7aVH7Drag7TDOBxajYut0FpaD0XSzP7jfWfG6eiPsZKIYLLto83zJe2eGky2UlaTi9Rd
CvLG4etIrxoHvigqHxh+pXIo+nLlIEWVA6KoYkCUnXUy+Ff+FYK4Nr4lkOwikO7CtWEB5mjqCvLm5zfY
9qme1o7PBh0fmsYxmic4+v08R1pnqTJPU30uwBGzl11VN3jp427+BmRb26lRD0KdAAAAAElFTkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK
+ YKyG2WBogqMYJQOtCEVRFBGdTBCJfRnkS4VaaWNT5sqx1BUxRXxDHYxAJLvkusEeBaPAB+5z4Jzn+t3X
+ /aLhnEfjo8m+dCoa+7/C3O2Hqe0zDC+8KG+cRZHZhdzaaWTVTCLDMIY0vfM04Nfh77/G/sEhwpEDbO3t
+ I7TxE8urEVy99fT/AL5gWDLrTB/hnF4XsW0khCu5ln8DmJliT2AXrcNBsU1gj/MH4nMeKwBrPktM28xM
+ cX79DFKrHHD5d9D26hvicx4pABt2lpg10zYzU0zr7+e3xXGcrkEB2O2TNec9nJFwB3alZn5jZorfeDZh
+ 6Q3g8s06BeCoKF4MRURoH1+BY2oNCbeb0TIclIYxOhzf8frTOuo7FxCbbVIAzpni0iceEc8vhzEwGkJD
+ lx83ymxifejdKjRNk/8PWnyIyTQqAJek0jqHwfEVscu31baIu8+90sTE4nY025dQ2/5FIPpnXlzKuK8A
+ HBUzHot52djqQ6HZhfR7IwK4mKpHtvEDMqvfCiQ6zaAAXM8x94aIWTNrLLG4kVUzgaTSPlzLtyJOZxbb
+ 1wtfyg4Q+AfA3aZlButjSfxGcUJBk4g5tuP3haQKRKXcUQDOmbvNTpPOJeFFjordZmbWTNvMTHFUcpUC
+ nOccAdABIDXXE1nzAAAAAElFTkSuQmCC
\ No newline at end of file
diff --git a/Cs_HMI/AGVLogic/AGVMapEditor/Models/NodePropertyWrapper.cs b/Cs_HMI/AGVLogic/AGVMapEditor/Models/NodePropertyWrapper.cs
deleted file mode 100644
index 04c53f7..0000000
--- a/Cs_HMI/AGVLogic/AGVMapEditor/Models/NodePropertyWrapper.cs
+++ /dev/null
@@ -1,825 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Drawing.Design;
-using AGVNavigationCore.Models;
-using AGVNavigationCore.Controls;
-
-namespace AGVMapEditor.Models
-{
- ///
- /// 노드 타입에 따른 PropertyWrapper 팩토리
- ///
- public static class NodePropertyWrapperFactory
- {
- public static object CreateWrapper(MapNode node, List mapNodes)
- {
- switch (node.Type)
- {
- case NodeType.Label:
- return new LabelNodePropertyWrapper(node, mapNodes);
- case NodeType.Image:
- return new ImageNodePropertyWrapper(node, mapNodes);
- default:
- return new NodePropertyWrapper(node, mapNodes);
- }
- }
- }
-
- ///
- /// 라벨 노드 전용 PropertyWrapper
- ///
- public class LabelNodePropertyWrapper
- {
- private MapNode _node;
- private List _mapNodes;
-
- public LabelNodePropertyWrapper(MapNode node, List mapNodes)
- {
- _node = node;
- _mapNodes = mapNodes;
- }
-
- ///
- /// 래핑된 MapNode 인스턴스 접근
- ///
- public MapNode WrappedNode => _node;
-
- [Category("기본 정보")]
- [DisplayName("노드 ID")]
- [Description("노드의 고유 식별자")]
- [ReadOnly(true)]
- public string NodeId
- {
- get => _node.NodeId;
- }
-
- [Category("기본 정보")]
- [DisplayName("노드 타입")]
- [Description("노드의 타입")]
- [ReadOnly(true)]
- public NodeType Type
- {
- get => _node.Type;
- }
-
- [Category("라벨")]
- [DisplayName("텍스트")]
- [Description("표시할 텍스트")]
- public string LabelText
- {
- get => _node.LabelText;
- set
- {
- _node.LabelText = value ?? "";
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("라벨")]
- [DisplayName("폰트 패밀리")]
- [Description("폰트 패밀리")]
- public string FontFamily
- {
- get => _node.FontFamily;
- set
- {
- _node.FontFamily = value ?? "Arial";
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("라벨")]
- [DisplayName("폰트 크기")]
- [Description("폰트 크기")]
- public float FontSize
- {
- get => _node.FontSize;
- set
- {
- _node.FontSize = Math.Max(6, Math.Min(72, value));
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("라벨")]
- [DisplayName("폰트 스타일")]
- [Description("폰트 스타일")]
- public FontStyle FontStyle
- {
- get => _node.FontStyle;
- set
- {
- _node.FontStyle = value;
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("라벨")]
- [DisplayName("전경색")]
- [Description("텍스트 색상")]
- public Color ForeColor
- {
- get => _node.ForeColor;
- set
- {
- _node.ForeColor = value;
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("라벨")]
- [DisplayName("배경색")]
- [Description("배경 색상")]
- public Color BackColor
- {
- get => _node.BackColor;
- set
- {
- _node.BackColor = value;
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("라벨")]
- [DisplayName("배경 표시")]
- [Description("배경을 표시할지 여부")]
- public bool ShowBackground
- {
- get => _node.ShowBackground;
- set
- {
- _node.ShowBackground = value;
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("라벨")]
- [DisplayName("패딩")]
- [Description("텍스트 주변 여백 (픽셀 단위)")]
- public int Padding
- {
- get => _node.Padding;
- set
- {
- _node.Padding = Math.Max(0, Math.Min(50, value));
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("위치")]
- [DisplayName("X 좌표")]
- [Description("맵에서의 X 좌표")]
- public int PositionX
- {
- get => _node.Position.X;
- set
- {
- _node.Position = new Point(value, _node.Position.Y);
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("위치")]
- [DisplayName("Y 좌표")]
- [Description("맵에서의 Y 좌표")]
- public int PositionY
- {
- get => _node.Position.Y;
- set
- {
- _node.Position = new Point(_node.Position.X, value);
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("정보")]
- [DisplayName("생성 일시")]
- [Description("노드가 생성된 일시")]
- [ReadOnly(true)]
- public DateTime CreatedDate
- {
- get => _node.CreatedDate;
- }
-
- [Category("정보")]
- [DisplayName("수정 일시")]
- [Description("노드가 마지막으로 수정된 일시")]
- [ReadOnly(true)]
- public DateTime ModifiedDate
- {
- get => _node.ModifiedDate;
- }
- }
-
- ///
- /// 이미지 노드 전용 PropertyWrapper
- ///
- public class ImageNodePropertyWrapper
- {
- private MapNode _node;
- private List _mapNodes;
-
- public ImageNodePropertyWrapper(MapNode node, List mapNodes)
- {
- _node = node;
- _mapNodes = mapNodes;
- }
-
- ///
- /// 래핑된 MapNode 인스턴스 접근
- ///
- public MapNode WrappedNode => _node;
-
- [Category("기본 정보")]
- [DisplayName("노드 ID")]
- [Description("노드의 고유 식별자")]
- [ReadOnly(true)]
- public string NodeId
- {
- get => _node.NodeId;
- }
-
- [Category("기본 정보")]
- [DisplayName("노드 타입")]
- [Description("노드의 타입")]
- [ReadOnly(true)]
- public NodeType Type
- {
- get => _node.Type;
- }
-
- [Category("이미지")]
- [DisplayName("이미지 경로")]
- [Description("이미지 파일 경로 (... 버튼으로 파일 선택)")]
- [Editor(typeof(ImagePathEditor), typeof(UITypeEditor))]
- public string ImagePath
- {
- get => _node.ImagePath;
- set
- {
- if (string.IsNullOrEmpty(value))
- {
- _node.ImagePath = "";
- return;
- }
-
- // 파일이 존재하면 Base64로 변환하여 저장
- if (System.IO.File.Exists(value))
- {
- _node.ConvertImageToBase64(value);
- _node.LoadImage(); // 이미지 다시 로드
- }
- else
- {
- _node.ImagePath = value;
- }
-
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("이미지")]
- [DisplayName("가로 배율")]
- [Description("가로 배율 (1.0 = 원본 크기)")]
- public float ScaleWidth
- {
- get => _node.Scale.Width;
- set
- {
- _node.Scale = new SizeF(Math.Max(0.1f, Math.Min(5.0f, value)), _node.Scale.Height);
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("이미지")]
- [DisplayName("세로 배율")]
- [Description("세로 배율 (1.0 = 원본 크기)")]
- public float ScaleHeight
- {
- get => _node.Scale.Height;
- set
- {
- _node.Scale = new SizeF(_node.Scale.Width, Math.Max(0.1f, Math.Min(5.0f, value)));
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("이미지")]
- [DisplayName("투명도")]
- [Description("투명도 (0.0 = 투명, 1.0 = 불투명)")]
- public float Opacity
- {
- get => _node.Opacity;
- set
- {
- _node.Opacity = Math.Max(0.0f, Math.Min(1.0f, value));
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("이미지")]
- [DisplayName("회전각도")]
- [Description("회전 각도 (도 단위)")]
- public float Rotation
- {
- get => _node.Rotation;
- set
- {
- _node.Rotation = value % 360;
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("위치")]
- [DisplayName("X 좌표")]
- [Description("맵에서의 X 좌표")]
- public int PositionX
- {
- get => _node.Position.X;
- set
- {
- _node.Position = new Point(value, _node.Position.Y);
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("위치")]
- [DisplayName("Y 좌표")]
- [Description("맵에서의 Y 좌표")]
- public int PositionY
- {
- get => _node.Position.Y;
- set
- {
- _node.Position = new Point(_node.Position.X, value);
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("정보")]
- [DisplayName("생성 일시")]
- [Description("노드가 생성된 일시")]
- [ReadOnly(true)]
- public DateTime CreatedDate
- {
- get => _node.CreatedDate;
- }
-
- [Category("정보")]
- [DisplayName("수정 일시")]
- [Description("노드가 마지막으로 수정된 일시")]
- [ReadOnly(true)]
- public DateTime ModifiedDate
- {
- get => _node.ModifiedDate;
- }
- }
- ///
- /// PropertyGrid에서 사용할 노드 속성 래퍼 클래스
- ///
- public class NodePropertyWrapper
- {
- private MapNode _node;
- private List _mapNodes;
-
- public NodePropertyWrapper(MapNode node, List mapNodes)
- {
- _node = node;
- _mapNodes = mapNodes;
- }
-
- ///
- /// 래핑된 MapNode 인스턴스 접근
- ///
- public MapNode WrappedNode => _node;
-
- [Category("기본 정보")]
- [DisplayName("노드 ID")]
- [Description("노드의 고유 식별자")]
- [ReadOnly(true)]
- public string NodeId
- {
- get => _node.NodeId;
- set => _node.NodeId = value;
- }
-
- [Category("기본 정보")]
- [DisplayName("노드 이름")]
- [Description("노드의 표시 이름")]
- public string Name
- {
- get => _node.Name;
- set
- {
- _node.Name = value;
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
-
-
- [Category("기본 정보")]
- [DisplayName("노드 타입")]
- [Description("노드의 타입 (Normal, Rotation, Docking, Charging)")]
- public NodeType Type
- {
- get => _node.Type;
- set
- {
- _node.Type = value;
- _node.CanRotate = value == NodeType.Rotation;
- _node.SetDefaultColorByType(value);
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("기본 정보")]
- [DisplayName("도킹 방향")]
- [Description("도킹이 필요한 노드의 경우 AGV 진입 방향 (DontCare: 방향 무관, Forward: 전진 도킹, Backward: 후진 도킹)")]
- public DockingDirection DockDirection
- {
- get => _node.DockDirection;
- set
- {
- _node.DockDirection = value;
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
-
-
-
-
- [Category("위치")]
- [DisplayName("X 좌표")]
- [Description("맵에서의 X 좌표")]
- public int PositionX
- {
- get => _node.Position.X;
- set
- {
- _node.Position = new Point(value, _node.Position.Y);
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("위치")]
- [DisplayName("Y 좌표")]
- [Description("맵에서의 Y 좌표")]
- public int PositionY
- {
- get => _node.Position.Y;
- set
- {
- _node.Position = new Point(_node.Position.X, value);
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
-
-
- [Category("고급")]
- [DisplayName("회전 가능")]
- [Description("이 노드에서 AGV가 회전할 수 있는지 여부")]
- public bool CanRotate
- {
- get => _node.CanRotate;
- set
- {
- _node.CanRotate = value;
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("고급")]
- [DisplayName("RFID")]
- [Description("RFID ID")]
- public string RFID
- {
- get => _node.RfidId;
- set
- {
- _node.RfidId = value;
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
-
-
-
- [Category("고급")]
- [DisplayName("활성화")]
- [Description("노드 활성화 여부")]
- public bool IsActive
- {
- get => _node.IsActive;
- set
- {
- _node.IsActive = value;
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("표시")]
- [DisplayName("노드 배경색")]
- [Description("노드 배경 색상")]
- public Color DisplayColor
- {
- get => _node.DisplayColor;
- set
- {
- _node.DisplayColor = value;
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("표시")]
- [DisplayName("글자 색상")]
- [Description("노드 텍스트 색상 (NodeId, Name 등)")]
- public Color ForeColor
- {
- get => _node.ForeColor;
- set
- {
- _node.ForeColor = value;
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("표시")]
- [DisplayName("글자 크기")]
- [Description("노드 텍스트 크기 (픽셀)")]
- public float TextFontSize
- {
- get => _node.TextFontSize;
- set
- {
- _node.TextFontSize = Math.Max(5.0f, Math.Min(20.0f, value));
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("표시")]
- [DisplayName("글자 굵게")]
- [Description("노드 텍스트 볼드 표시")]
- public bool TextFontBold
- {
- get => _node.TextFontBold;
- set
- {
- _node.TextFontBold = value;
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("표시")]
- [DisplayName("이름 말풍선 배경색")]
- [Description("노드 이름 말풍선(하단 표시) 배경색")]
- public Color NameBubbleBackColor
- {
- get => _node.NameBubbleBackColor;
- set
- {
- _node.NameBubbleBackColor = value;
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("표시")]
- [DisplayName("이름 말풍선 글자색")]
- [Description("노드 이름 말풍선(하단 표시) 글자색")]
- public Color NameBubbleForeColor
- {
- get => _node.NameBubbleForeColor;
- set
- {
- _node.NameBubbleForeColor = value;
- _node.ModifiedDate = DateTime.Now;
- }
- }
-
- [Category("정보")]
- [DisplayName("생성 일시")]
- [Description("노드가 생성된 일시")]
- [ReadOnly(true)]
- public DateTime CreatedDate
- {
- get => _node.CreatedDate;
- }
-
- [Category("정보")]
- [DisplayName("수정 일시")]
- [Description("노드가 마지막으로 수정된 일시")]
- [ReadOnly(true)]
- public DateTime ModifiedDate
- {
- get => _node.ModifiedDate;
- }
- }
-
- ///
- /// 다중 노드 선택 시 공통 속성 편집용 래퍼
- ///
- public class MultiNodePropertyWrapper
- {
- private List _nodes;
-
- public MultiNodePropertyWrapper(List nodes)
- {
- _nodes = nodes ?? new List();
- }
-
- [Category("다중 선택")]
- [DisplayName("선택된 노드 수")]
- [Description("현재 선택된 노드의 개수")]
- [ReadOnly(true)]
- public int SelectedCount => _nodes.Count;
-
- [Category("표시")]
- [DisplayName("노드 배경색")]
- [Description("선택된 모든 노드의 배경색을 일괄 변경")]
- public Color DisplayColor
- {
- get => _nodes.Count > 0 ? _nodes[0].DisplayColor : Color.Blue;
- set
- {
- foreach (var node in _nodes)
- {
- node.DisplayColor = value;
- node.ModifiedDate = DateTime.Now;
- }
- }
- }
-
- [Category("표시")]
- [DisplayName("글자 색상")]
- [Description("선택된 모든 노드의 글자 색상을 일괄 변경")]
- public Color ForeColor
- {
- get => _nodes.Count > 0 ? _nodes[0].ForeColor : Color.Black;
- set
- {
- foreach (var node in _nodes)
- {
- node.ForeColor = value;
- node.ModifiedDate = DateTime.Now;
- }
- }
- }
-
- [Category("표시")]
- [DisplayName("글자 크기")]
- [Description("선택된 모든 노드의 글자 크기를 일괄 변경 (5~20 픽셀)")]
- public float TextFontSize
- {
- get => _nodes.Count > 0 ? _nodes[0].TextFontSize : 7.0f;
- set
- {
- var validValue = Math.Max(5.0f, Math.Min(20.0f, value));
- System.Diagnostics.Debug.WriteLine($"[MultiNode] TextFontSize 변경 시작: {validValue}, 노드 수: {_nodes.Count}");
-
- foreach (var node in _nodes)
- {
- System.Diagnostics.Debug.WriteLine($" - 노드 {node.NodeId}: {node.TextFontSize} → {validValue}");
- node.TextFontSize = validValue;
- node.ModifiedDate = DateTime.Now;
- System.Diagnostics.Debug.WriteLine($" - 변경 후: {node.TextFontSize}");
- }
-
- System.Diagnostics.Debug.WriteLine($"[MultiNode] TextFontSize 변경 완료");
- }
- }
-
- [Category("표시")]
- [DisplayName("글자 굵게")]
- [Description("선택된 모든 노드의 글자 굵기를 일괄 변경")]
- public bool TextFontBold
- {
- get
- {
- var result = _nodes.Count > 0 ? _nodes[0].TextFontBold : true;
- System.Diagnostics.Debug.WriteLine($"[MultiNode] TextFontBold GET: {result}");
- return result;
- }
- set
- {
- System.Diagnostics.Debug.WriteLine($"[MultiNode] TextFontBold 변경 시작: {value}, 노드 수: {_nodes.Count}");
-
- foreach (var node in _nodes)
- {
- System.Diagnostics.Debug.WriteLine($" - 노드 {node.NodeId}: {node.TextFontBold} → {value}");
- node.TextFontBold = value;
- node.ModifiedDate = DateTime.Now;
- System.Diagnostics.Debug.WriteLine($" - 변경 후: {node.TextFontBold}");
- }
-
- System.Diagnostics.Debug.WriteLine($"[MultiNode] TextFontBold 변경 완료");
- }
- }
-
- [Category("표시")]
- [DisplayName("이름 말풍선 배경색")]
- [Description("선택된 모든 노드의 이름 말풍선(하단 표시) 배경색을 일괄 변경")]
- public Color NameBubbleBackColor
- {
- get => _nodes.Count > 0 ? _nodes[0].NameBubbleBackColor : Color.Gold;
- set
- {
- foreach (var node in _nodes)
- {
- node.NameBubbleBackColor = value;
- node.ModifiedDate = DateTime.Now;
- }
- }
- }
-
- [Category("표시")]
- [DisplayName("이름 말풍선 글자색")]
- [Description("선택된 모든 노드의 이름 말풍선(하단 표시) 글자색을 일괄 변경")]
- public Color NameBubbleForeColor
- {
- get => _nodes.Count > 0 ? _nodes[0].NameBubbleForeColor : Color.Black;
- set
- {
- foreach (var node in _nodes)
- {
- node.NameBubbleForeColor = value;
- node.ModifiedDate = DateTime.Now;
- }
- }
- }
-
- [Category("고급")]
- [DisplayName("활성화")]
- [Description("선택된 모든 노드의 활성화 상태를 일괄 변경")]
- public bool IsActive
- {
- get => _nodes.Count > 0 ? _nodes[0].IsActive : true;
- set
- {
- foreach (var node in _nodes)
- {
- node.IsActive = value;
- node.ModifiedDate = DateTime.Now;
- }
- }
- }
-
- [Category("정보")]
- [DisplayName("안내")]
- [Description("다중 선택 시 공통 속성만 변경할 수 있습니다")]
- [ReadOnly(true)]
- public string HelpText => "위 속성을 변경하면 선택된 모든 노드에 일괄 적용됩니다.";
- }
-
- ///
- /// 캔버스 속성 래퍼 (배경색 등 캔버스 전체 속성 편집)
- ///
- public class CanvasPropertyWrapper
- {
- private UnifiedAGVCanvas _canvas;
-
- public CanvasPropertyWrapper(UnifiedAGVCanvas canvas)
- {
- _canvas = canvas;
- }
-
- [Category("배경")]
- [DisplayName("배경색")]
- [Description("맵 캔버스 배경색")]
- public Color BackgroundColor
- {
- get => _canvas.BackColor;
- set
- {
- _canvas.BackColor = value;
- _canvas.Invalidate();
- }
- }
-
- [Category("그리드")]
- [DisplayName("그리드 표시")]
- [Description("그리드 표시 여부")]
- public bool ShowGrid
- {
- get => _canvas.ShowGrid;
- set
- {
- _canvas.ShowGrid = value;
- _canvas.Invalidate();
- }
- }
-
- [Category("정보")]
- [DisplayName("설명")]
- [Description("맵 캔버스 전체 속성")]
- [ReadOnly(true)]
- public string Description
- {
- get => "빈 공간을 클릭하면 캔버스 전체 속성을 편집할 수 있습니다.";
- }
- }
-
-}
\ No newline at end of file
diff --git a/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.Events.cs b/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.Events.cs
index 9263dd7..3962036 100644
--- a/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.Events.cs
+++ b/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.Events.cs
@@ -416,10 +416,10 @@ namespace AGVNavigationCore.Controls
case NodeType.Normal:
ghostBrush = new SolidBrush(Color.FromArgb(120, 100, 149, 237)); // 반투명 파란색
break;
- case NodeType.Rotation:
- ghostBrush = new SolidBrush(Color.FromArgb(120, 255, 165, 0)); // 반투명 주황색
- break;
- case NodeType.Docking:
+ case NodeType.Loader:
+ case NodeType.UnLoader:
+ case NodeType.Clearner:
+ case NodeType.Buffer:
ghostBrush = new SolidBrush(Color.FromArgb(120, 50, 205, 50)); // 반투명 초록색
break;
case NodeType.Charging:
@@ -439,7 +439,10 @@ namespace AGVNavigationCore.Controls
case NodeType.Image:
DrawImageGhost(g);
break;
- case NodeType.Docking:
+ case NodeType.Loader:
+ case NodeType.UnLoader:
+ case NodeType.Clearner:
+ case NodeType.Buffer:
DrawPentagonGhost(g, ghostBrush);
break;
case NodeType.Charging:
@@ -646,7 +649,10 @@ namespace AGVNavigationCore.Controls
switch (node.Type)
{
- case NodeType.Docking:
+ case NodeType.Loader:
+ case NodeType.UnLoader:
+ case NodeType.Clearner:
+ case NodeType.Buffer:
DrawPentagonNodeShape(g, node, brush);
break;
case NodeType.Charging:
@@ -723,6 +729,13 @@ namespace AGVNavigationCore.Controls
{
DrawDuplicateRfidMarker(g, node);
}
+
+ // CanCross 가능 노드 표시 (교차지점으로 사용 가능)
+ if (node.DisableCross==true)
+ {
+ var crossRect = new Rectangle(rect.X - 3, rect.Y - 3, rect.Width + 6, rect.Height + 6);
+ g.DrawEllipse(new Pen(Color.DeepSkyBlue, 3), crossRect);
+ }
}
private void DrawPentagonNodeShape(Graphics g, MapNode node, Brush brush)
@@ -826,6 +839,21 @@ namespace AGVNavigationCore.Controls
{
DrawDuplicateRfidMarker(g, node);
}
+
+ // CanCross 가능 노드 표시 (교차지점으로 사용 가능)
+ if (node.DisableCross==false)
+ {
+ var crossPoints = new Point[5];
+ for (int i = 0; i < 5; i++)
+ {
+ var angle = (Math.PI * 2 * i / 5) - Math.PI / 2;
+ crossPoints[i] = new Point(
+ (int)(center.X + (radius + 4) * Math.Cos(angle)),
+ (int)(center.Y + (radius + 4) * Math.Sin(angle))
+ );
+ }
+ g.DrawPolygon(new Pen(Color.Gold, 3), crossPoints);
+ }
}
private void DrawTriangleNodeShape(Graphics g, MapNode node, Brush brush)
@@ -929,6 +957,21 @@ namespace AGVNavigationCore.Controls
{
DrawDuplicateRfidMarker(g, node);
}
+
+ // CanCross 가능 노드 표시 (교차지점으로 사용 가능)
+ if (node.DisableCross==false)
+ {
+ var crossPoints = new Point[3];
+ for (int i = 0; i < 3; i++)
+ {
+ var angle = (Math.PI * 2 * i / 3) - Math.PI / 2;
+ crossPoints[i] = new Point(
+ (int)(center.X + (radius + 4) * Math.Cos(angle)),
+ (int)(center.Y + (radius + 4) * Math.Sin(angle))
+ );
+ }
+ g.DrawPolygon(new Pen(Color.Gold, 3), crossPoints);
+ }
}
private void DrawNodeLabel(Graphics g, MapNode node)
diff --git a/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.Mouse.cs b/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.Mouse.cs
index 3101c86..15603e3 100644
--- a/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.Mouse.cs
+++ b/Cs_HMI/AGVLogic/AGVNavigationCore/Controls/UnifiedAGVCanvas.Mouse.cs
@@ -108,8 +108,10 @@ namespace AGVNavigationCore.Controls
switch (hitNode.Type)
{
case NodeType.Normal:
- case NodeType.Rotation:
- case NodeType.Docking:
+ case NodeType.Loader:
+ case NodeType.UnLoader:
+ case NodeType.Clearner:
+ case NodeType.Buffer:
case NodeType.Charging:
HandleNormalNodeDoubleClick(hitNode);
break;
@@ -429,7 +431,10 @@ namespace AGVNavigationCore.Controls
{
switch (node.Type)
{
- case NodeType.Docking:
+ case NodeType.Loader:
+ case NodeType.UnLoader:
+ case NodeType.Clearner:
+ case NodeType.Buffer:
return IsPointInPentagon(point, node);
case NodeType.Charging:
return IsPointInTriangle(point, node);
diff --git a/Cs_HMI/AGVLogic/AGVNavigationCore/Models/Enums.cs b/Cs_HMI/AGVLogic/AGVNavigationCore/Models/Enums.cs
index 86aa676..457de0c 100644
--- a/Cs_HMI/AGVLogic/AGVNavigationCore/Models/Enums.cs
+++ b/Cs_HMI/AGVLogic/AGVNavigationCore/Models/Enums.cs
@@ -11,10 +11,20 @@ namespace AGVNavigationCore.Models
{
/// 일반 경로 노드
Normal,
- /// 회전 가능 지점
- Rotation,
- /// 도킹 스테이션
- Docking,
+ /// 로더
+ Loader,
+ ///
+ /// 언로더
+ ///
+ UnLoader,
+ ///
+ /// 클리너
+ ///
+ Clearner,
+ ///
+ /// 버퍼
+ ///
+ Buffer,
/// 충전 스테이션
Charging,
/// 라벨 (UI 요소)
@@ -58,6 +68,10 @@ namespace AGVNavigationCore.Models
///
public enum StationType
{
+ ///
+ /// 일반노드
+ ///
+ Node,
/// 로더
Loader,
/// 클리너
@@ -70,6 +84,24 @@ namespace AGVNavigationCore.Models
Charger
}
+ ///
+ /// AGV턴상태
+ ///
+ public enum AGVTurn
+ {
+ None=0,
+
+ ///
+ /// left turn 90"
+ ///
+ L90,
+ ///
+ /// right turn 90"
+ ///
+ R90
+ }
+
+
///
/// 모터 명령 열거형 (실제 AGV 제어용)
///
diff --git a/Cs_HMI/AGVLogic/AGVNavigationCore/Models/MapLoader.cs b/Cs_HMI/AGVLogic/AGVNavigationCore/Models/MapLoader.cs
index 1857126..7877d09 100644
--- a/Cs_HMI/AGVLogic/AGVNavigationCore/Models/MapLoader.cs
+++ b/Cs_HMI/AGVLogic/AGVNavigationCore/Models/MapLoader.cs
@@ -226,7 +226,10 @@ namespace AGVNavigationCore.Models
case NodeType.Charging:
node.DockDirection = DockingDirection.Forward;
break;
- case NodeType.Docking:
+ case NodeType.Loader:
+ case NodeType.UnLoader:
+ case NodeType.Clearner:
+ case NodeType.Buffer:
node.DockDirection = DockingDirection.Backward;
break;
default:
diff --git a/Cs_HMI/AGVLogic/AGVNavigationCore/Models/MapNode.cs b/Cs_HMI/AGVLogic/AGVNavigationCore/Models/MapNode.cs
index 496a842..818559e 100644
--- a/Cs_HMI/AGVLogic/AGVNavigationCore/Models/MapNode.cs
+++ b/Cs_HMI/AGVLogic/AGVNavigationCore/Models/MapNode.cs
@@ -34,6 +34,19 @@ namespace AGVNavigationCore.Models
///
public NodeType Type { get; set; } = NodeType.Normal;
+ public bool CanDocking
+ {
+ get
+ {
+ if (Type == NodeType.Buffer) return true;
+ if (Type == NodeType.Loader) return true;
+ if (Type == NodeType.UnLoader) return true;
+ if (Type == NodeType.Clearner) return true;
+ if (Type == NodeType.Charging) return true;
+ return false;
+ }
+ }
+
///
/// 도킹 방향 (도킹/충전 노드인 경우에만 Forward/Backward, 일반 노드는 DontCare)
///
@@ -53,18 +66,38 @@ namespace AGVNavigationCore.Models
///
/// 회전 가능 여부 (180도 회전 가능한 지점)
///
- public bool CanRotate { get; set; } = false;
+ public bool CanTurnLeft { get; set; } = true;
+
+ ///
+ /// 회전 가능 여부 (180도 회전 가능한 지점)
+ ///
+ public bool CanTurnRight { get; set; } = true;
+
+ ///
+ /// 교차로로 이용가능한지
+ ///
+ public bool DisableCross
+ {
+ get
+ {
+ if (Type != NodeType.Normal) return true;
+ return _disablecross;
+ }
+ set { _disablecross = value; }
+ }
+
+ private bool _disablecross = false;
///
/// 장비 ID (도킹/충전 스테이션인 경우)
/// 예: "LOADER1", "CLEANER1", "BUFFER1", "CHARGER1"
///
- public string StationId { get; set; } = string.Empty;
+ public string NodeAlias { get; set; } = string.Empty;
///
/// 장비 타입 (도킹/충전 스테이션인 경우)
///
- public StationType? StationType { get; set; } = null;
+ // public StationType? StationType { get; set; } = null;
///
/// 노드 생성 일자
@@ -224,7 +257,7 @@ namespace AGVNavigationCore.Models
Type = type;
CreatedDate = DateTime.Now;
ModifiedDate = DateTime.Now;
-
+
// 타입별 기본 색상 설정
SetDefaultColorByType(type);
}
@@ -240,10 +273,10 @@ namespace AGVNavigationCore.Models
case NodeType.Normal:
DisplayColor = Color.Blue;
break;
- case NodeType.Rotation:
- DisplayColor = Color.Orange;
- break;
- case NodeType.Docking:
+ case NodeType.UnLoader:
+ case NodeType.Clearner:
+ case NodeType.Buffer:
+ case NodeType.Loader:
DisplayColor = Color.Green;
break;
case NodeType.Charging:
@@ -283,21 +316,20 @@ namespace AGVNavigationCore.Models
}
}
- ///
- /// 도킹 스테이션 설정
- ///
- /// 장비 ID
- /// 장비 타입
- /// 도킹 방향
- public void SetDockingStation(string stationId, StationType stationType, DockingDirection dockDirection)
- {
- Type = NodeType.Docking;
- StationId = stationId;
- StationType = stationType;
- DockDirection = dockDirection;
- SetDefaultColorByType(NodeType.Docking);
- ModifiedDate = DateTime.Now;
- }
+ /////
+ ///// 도킹 스테이션 설정
+ /////
+ ///// 장비 ID
+ ///// 장비 타입
+ ///// 도킹 방향
+ //public void SetDockingStation(string stationId, StationType stationType, DockingDirection dockDirection)
+ //{
+ // Type = NodeType.Docking;
+ // NodeAlias = stationId;
+ // DockDirection = dockDirection;
+ // SetDefaultColorByType(NodeType.Docking);
+ // ModifiedDate = DateTime.Now;
+ //}
///
/// 충전 스테이션 설정
@@ -306,8 +338,7 @@ namespace AGVNavigationCore.Models
public void SetChargingStation(string stationId)
{
Type = NodeType.Charging;
- StationId = stationId;
- StationType = Models.StationType.Charger;
+ NodeAlias = stationId;
DockDirection = DockingDirection.Forward; // 충전기는 항상 전진 도킹
SetDefaultColorByType(NodeType.Charging);
ModifiedDate = DateTime.Now;
@@ -329,17 +360,17 @@ namespace AGVNavigationCore.Models
get
{
var displayText = NodeId;
-
+
if (!string.IsNullOrEmpty(Name))
{
displayText += $" - {Name}";
}
-
+
if (!string.IsNullOrEmpty(RfidId))
{
displayText += $" - [{RfidId}]";
}
-
+
return displayText;
}
}
@@ -358,9 +389,12 @@ namespace AGVNavigationCore.Models
Type = Type,
DockDirection = DockDirection,
ConnectedNodes = new List(ConnectedNodes),
- CanRotate = CanRotate,
- StationId = StationId,
- StationType = StationType,
+
+ CanTurnLeft = CanTurnLeft,
+ CanTurnRight = CanTurnRight,
+ DisableCross = DisableCross,
+
+ NodeAlias = NodeAlias,
CreatedDate = CreatedDate,
ModifiedDate = ModifiedDate,
IsActive = IsActive,
@@ -475,7 +509,7 @@ namespace AGVNavigationCore.Models
public Size GetDisplaySize()
{
if (Type != NodeType.Image || LoadedImage == null) return Size.Empty;
-
+
return new Size(
(int)(LoadedImage.Width * Scale.Width),
(int)(LoadedImage.Height * Scale.Height)
diff --git a/Cs_HMI/AGVLogic/AGVNavigationCore/Models/VirtualAGV.cs b/Cs_HMI/AGVLogic/AGVNavigationCore/Models/VirtualAGV.cs
index ec7cc2f..209bce3 100644
--- a/Cs_HMI/AGVLogic/AGVNavigationCore/Models/VirtualAGV.cs
+++ b/Cs_HMI/AGVLogic/AGVNavigationCore/Models/VirtualAGV.cs
@@ -61,12 +61,12 @@ namespace AGVNavigationCore.Models
private int _currentNodeIndex;
private MapNode _currentNode;
private MapNode _prevNode;
+ private AGVTurn _turn;
// 이동 관련
private DateTime _lastUpdateTime;
private Point _moveStartPosition;
private Point _moveTargetPosition;
- private float _moveProgress;
// 도킹 관련
private DockingDirection _dockingDirection;
@@ -89,7 +89,6 @@ namespace AGVNavigationCore.Models
public AgvDirection PrevDirection => _prevDirection;
-
///
/// AGV ID
///
@@ -158,6 +157,11 @@ namespace AGVNavigationCore.Models
///
public MapNode PrevNode => _prevNode;
+ ///
+ /// Turn 상태값
+ ///
+ public AGVTurn Turn { get; set; }
+
///
/// 도킹 방향
///
@@ -527,10 +531,10 @@ namespace AGVNavigationCore.Models
_prevPosition = targetPosition;
_moveStartPosition = _currentPosition;
_moveTargetPosition = targetPosition;
- _moveProgress = 0;
SetState(AGVState.Moving);
_isMoving = true;
+ Turn = AGVTurn.None;
}
///
@@ -620,7 +624,6 @@ namespace AGVNavigationCore.Models
if (item != null)
{
//item.IsPass = true;
-
//이전노드는 모두 지나친걸로 한다
CurrentPath.DetailedPath.Where(t => t.seq < item.seq).ToList().ForEach(t => t.IsPass = true);
}
@@ -865,7 +868,10 @@ namespace AGVNavigationCore.Models
{
case NodeType.Charging:
return DockingDirection.Forward;
- case NodeType.Docking:
+ case NodeType.Loader:
+ case NodeType.UnLoader:
+ case NodeType.Clearner:
+ case NodeType.Buffer:
return DockingDirection.Backward;
default:
return DockingDirection.Forward;
@@ -880,8 +886,6 @@ namespace AGVNavigationCore.Models
#endregion
-
-
#region Cleanup
///
diff --git a/Cs_HMI/AGVLogic/AGVNavigationCore/PathFinding/Core/AStarPathfinder.cs b/Cs_HMI/AGVLogic/AGVNavigationCore/PathFinding/Core/AStarPathfinder.cs
index 1df76c8..19bff1c 100644
--- a/Cs_HMI/AGVLogic/AGVNavigationCore/PathFinding/Core/AStarPathfinder.cs
+++ b/Cs_HMI/AGVLogic/AGVNavigationCore/PathFinding/Core/AStarPathfinder.cs
@@ -101,7 +101,7 @@ namespace AGVNavigationCore.PathFinding.Core
/// 시작 노드 ID
/// 목적지 노드 ID
/// 경로 계산 결과
- public AGVPathResult FindPath(string startNodeId, string endNodeId)
+ public AGVPathResult FindPathAStar(string startNodeId, string endNodeId)
{
var stopwatch = System.Diagnostics.Stopwatch.StartNew();
@@ -126,7 +126,6 @@ namespace AGVNavigationCore.PathFinding.Core
var startNode = _nodeMap[startNodeId];
var endNode = _nodeMap[endNodeId];
-
var openSet = new List();
var closedSet = new HashSet();
var exploredCount = 0;
@@ -199,7 +198,7 @@ namespace AGVNavigationCore.PathFinding.Core
// 경유지가 없으면 기본 FindPath 호출
if (waypointNodeIds == null || waypointNodeIds.Length == 0)
{
- return FindPath(startNodeId, endNodeId);
+ return FindPathAStar(startNodeId, endNodeId);
}
// 경유지 유효성 검증
@@ -220,7 +219,7 @@ namespace AGVNavigationCore.PathFinding.Core
// 경유지가 없으면 기본 경로 계산
if (validWaypoints.Count == 0)
{
- return FindPath(startNodeId, endNodeId);
+ return FindPathAStar(startNodeId, endNodeId);
}
// 첫 번째 경유지가 시작노드와 같은지 검사
@@ -267,7 +266,7 @@ namespace AGVNavigationCore.PathFinding.Core
string waypoint = validWaypoints[i];
// 현재 위치에서 경유지까지의 경로 계산
- var segmentResult = FindPath(currentStart, waypoint);
+ var segmentResult = FindPathAStar(currentStart, waypoint);
if (!segmentResult.Success)
{
@@ -295,7 +294,7 @@ namespace AGVNavigationCore.PathFinding.Core
}
// 2단계: 마지막 경유지에서 최종 목적지까지의 경로 계산
- var finalSegmentResult = FindPath(currentStart, endNodeId);
+ var finalSegmentResult = FindPathAStar(currentStart, endNodeId);
if (!finalSegmentResult.Success)
{
@@ -442,7 +441,7 @@ namespace AGVNavigationCore.PathFinding.Core
AGVPathResult bestResult = null;
foreach (var targetId in targetNodeIds)
{
- var result = FindPath(startNodeId, targetId);
+ var result = FindPathAStar(startNodeId, targetId);
if (result.Success && (bestResult == null || result.TotalDistance < bestResult.TotalDistance))
{
bestResult = result;
diff --git a/Cs_HMI/AGVLogic/AGVNavigationCore/PathFinding/Planning/AGVPathfinder.cs b/Cs_HMI/AGVLogic/AGVNavigationCore/PathFinding/Planning/AGVPathfinder.cs
index 76b37e2..a08392e 100644
--- a/Cs_HMI/AGVLogic/AGVNavigationCore/PathFinding/Planning/AGVPathfinder.cs
+++ b/Cs_HMI/AGVLogic/AGVNavigationCore/PathFinding/Planning/AGVPathfinder.cs
@@ -22,8 +22,6 @@ namespace AGVNavigationCore.PathFinding.Planning
private readonly JunctionAnalyzer _junctionAnalyzer;
private readonly DirectionChangePlanner _directionChangePlanner;
-
-
public AGVPathfinder(List mapNodes)
{
_mapNodes = mapNodes ?? new List();
@@ -49,8 +47,9 @@ namespace AGVNavigationCore.PathFinding.Planning
n.IsActive &&
n.IsNavigationNode() &&
n.ConnectedNodes != null &&
+ n.DisableCross == false &&
n.ConnectedNodes.Count >= 3 &&
- n.ConnectedMapNodes.Where(t => t.Type == NodeType.Docking || t.Type == NodeType.Charging).Any() == false &&
+ n.ConnectedMapNodes.Where(t => t.CanDocking).Any() == false &&
n.NodeId != startNode.NodeId
).ToList();
@@ -99,9 +98,10 @@ namespace AGVNavigationCore.PathFinding.Planning
if (pathNode != null &&
pathNode.IsActive &&
pathNode.IsNavigationNode() &&
+ pathNode.DisableCross == false &&
pathNode.ConnectedNodes != null &&
pathNode.ConnectedNodes.Count >= 3 &&
- pathNode.ConnectedMapNodes.Where(t => t.Type == NodeType.Docking || t.Type == NodeType.Charging).Any() == false)
+ pathNode.ConnectedMapNodes.Where(t => t.CanDocking).Any() == false)
{
if (pathNode.NodeId.Equals(StartNode.NodeId) == false)
return pathNode;
@@ -122,12 +122,12 @@ namespace AGVNavigationCore.PathFinding.Planning
if (prevNode == null)
return AGVPathResult.CreateFailure("이전위치 노드가 null입니다.", 0, 0);
if (startNode.NodeId == targetNode.NodeId && targetNode.DockDirection.MatchAGVDirection(prevDirection))
- return AGVPathResult.CreateSuccess(new List { startNode,startNode }, new List(), 0, 0);
+ return AGVPathResult.CreateSuccess(new List { startNode, startNode }, new List(), 0, 0);
var ReverseDirection = (currentDirection == AgvDirection.Forward ? AgvDirection.Backward : AgvDirection.Forward);
//1.목적지까지의 최단거리 경로를 찾는다.
- var pathResult = _basicPathfinder.FindPath(startNode.NodeId, targetNode.NodeId);
+ var pathResult = _basicPathfinder.FindPathAStar(startNode.NodeId, targetNode.NodeId);
pathResult.PrevNode = prevNode;
pathResult.PrevDirection = prevDirection;
if (!pathResult.Success || pathResult.Path == null || pathResult.Path.Count == 0)
@@ -221,7 +221,7 @@ namespace AGVNavigationCore.PathFinding.Planning
//진행방향으로 이동했을때 나오는 노드를 사용한다.
if (nextNodeForward != null)
{
- var Path0 = _basicPathfinder.FindPath(startNode.NodeId, nextNodeForward.NodeId);
+ var Path0 = _basicPathfinder.FindPathAStar(startNode.NodeId, nextNodeForward.NodeId);
Path0.PrevNode = prevNode;
Path0.PrevDirection = prevDirection;
MakeDetailData(Path0, prevDirection);
@@ -267,7 +267,7 @@ namespace AGVNavigationCore.PathFinding.Planning
//경유지를 포함하여 경로를 다시 계산한다.
//1.시작위치 - 교차로(여기까지는 현재 방향으로 그대로 이동을 한다)
- var path1 = _basicPathfinder.FindPath(startNode.NodeId, JunctionInPath.NodeId);
+ var path1 = _basicPathfinder.FindPathAStar(startNode.NodeId, JunctionInPath.NodeId);
path1.PrevNode = prevNode;
path1.PrevDirection = prevDirection;
@@ -295,7 +295,7 @@ namespace AGVNavigationCore.PathFinding.Planning
//2.교차로 - 종료위치
- var path2 = _basicPathfinder.FindPath(JunctionInPath.NodeId, targetNode.NodeId);
+ var path2 = _basicPathfinder.FindPathAStar(JunctionInPath.NodeId, targetNode.NodeId);
path2.PrevNode = prevNode;
path2.PrevDirection = prevDirection;
@@ -332,7 +332,7 @@ namespace AGVNavigationCore.PathFinding.Planning
//if (tempNode != null)
{
// 교차로 → 대체노드 경로 계산
- var pathToTemp = _basicPathfinder.FindPath(JunctionInPath.NodeId, tempNode.NodeId);
+ var pathToTemp = _basicPathfinder.FindPathAStar(JunctionInPath.NodeId, tempNode.NodeId);
pathToTemp.PrevNode = JunctionInPath;
pathToTemp.PrevDirection = (ReverseCheck ? ReverseDirection : currentDirection);
if (!pathToTemp.Success)
@@ -348,7 +348,7 @@ namespace AGVNavigationCore.PathFinding.Planning
combinedResult = _basicPathfinder.CombineResults(combinedResult, pathToTemp);
// 대체노드 → 교차로 경로 계산 (역방향)
- var pathFromTemp = _basicPathfinder.FindPath(tempNode.NodeId, JunctionInPath.NodeId);
+ var pathFromTemp = _basicPathfinder.FindPathAStar(tempNode.NodeId, JunctionInPath.NodeId);
pathFromTemp.PrevNode = JunctionInPath;
pathFromTemp.PrevDirection = (ReverseCheck ? ReverseDirection : currentDirection);
if (!pathFromTemp.Success)
@@ -362,7 +362,7 @@ namespace AGVNavigationCore.PathFinding.Planning
//현재까지 노드에서 목적지까지의 방향이 일치하면 그대로 사용한다.
bool temp3ok = false;
- var TempCheck3 = _basicPathfinder.FindPath(combinedResult.Path.Last().NodeId, targetNode.NodeId);
+ var TempCheck3 = _basicPathfinder.FindPathAStar(combinedResult.Path.Last().NodeId, targetNode.NodeId);
if (TempCheck3.Path.First().NodeId.Equals(combinedResult.Path.Last().NodeId))
{
if (targetNode.DockDirection == DockingDirection.Forward && combinedResult.DetailedPath.Last().MotorDirection == AgvDirection.Forward)
@@ -385,7 +385,7 @@ namespace AGVNavigationCore.PathFinding.Planning
combinedResult.Path[combinedResult.Path.Count - 2].NodeId,
path2.Path[1].NodeId);
- var pathToTemp2 = _basicPathfinder.FindPath(JunctionInPath.NodeId, tempNode2.NodeId);
+ var pathToTemp2 = _basicPathfinder.FindPathAStar(JunctionInPath.NodeId, tempNode2.NodeId);
if (ReverseCheck) MakeDetailData(pathToTemp2, currentDirection);
else MakeDetailData(pathToTemp2, ReverseDirection);
@@ -400,7 +400,7 @@ namespace AGVNavigationCore.PathFinding.Planning
combinedResult.DetailedPath[combinedResult.DetailedPath.Count - 1].MotorDirection = currentDirection;
}
- var pathToTemp3 = _basicPathfinder.FindPath(tempNode2.NodeId, JunctionInPath.NodeId);
+ var pathToTemp3 = _basicPathfinder.FindPathAStar(tempNode2.NodeId, JunctionInPath.NodeId);
if (ReverseCheck) MakeDetailData(pathToTemp3, ReverseDirection);
else MakeDetailData(pathToTemp3, currentDirection);
@@ -438,7 +438,7 @@ namespace AGVNavigationCore.PathFinding.Planning
string nextNodeId = (i + 1 < path1.Path.Count) ? path1.Path[i + 1].NodeId : null;
// 노드 정보 생성 (현재 방향 유지)
- var nodeInfo = new NodeMotorInfo(i+1,
+ var nodeInfo = new NodeMotorInfo(i + 1,
nodeId, RfidId,
currentDirection,
nextNodeId,
diff --git a/Cs_HMI/AGVLogic/AGVNavigationCore/PathFinding/Planning/DirectionChangePlanner.cs b/Cs_HMI/AGVLogic/AGVNavigationCore/PathFinding/Planning/DirectionChangePlanner.cs
index 73c5167..fad50ee 100644
--- a/Cs_HMI/AGVLogic/AGVNavigationCore/PathFinding/Planning/DirectionChangePlanner.cs
+++ b/Cs_HMI/AGVLogic/AGVNavigationCore/PathFinding/Planning/DirectionChangePlanner.cs
@@ -73,7 +73,7 @@ namespace AGVNavigationCore.PathFinding.Planning
// 방향이 같으면 직접 경로 계산
if (currentDirection == requiredDirection)
{
- var directPath = _pathfinder.FindPath(startNodeId, targetNodeId);
+ var directPath = _pathfinder.FindPathAStar(startNodeId, targetNodeId);
if (directPath.Success)
{
return DirectionChangePlan.CreateSuccess(
@@ -85,7 +85,7 @@ namespace AGVNavigationCore.PathFinding.Planning
}
// 방향 전환이 필요한 경우 - 먼저 간단한 직접 경로 확인
- var directPath2 = _pathfinder.FindPath(startNodeId, targetNodeId);
+ var directPath2 = _pathfinder.FindPathAStar(startNodeId, targetNodeId);
if (directPath2.Success)
{
// 직접 경로에 갈림길이 포함된 경우 그 갈림길에서 방향 전환
@@ -160,7 +160,7 @@ namespace AGVNavigationCore.PathFinding.Planning
}
// 2. 직진 경로상의 갈림길들도 검색 (단, 되돌아가기 방지)
- var directPath = _pathfinder.FindPath(startNodeId, targetNodeId);
+ var directPath = _pathfinder.FindPathAStar(startNodeId, targetNodeId);
if (directPath.Success)
{
foreach (var node in directPath.Path.Skip(2)) // 시작점과 다음 노드는 제외
@@ -261,7 +261,7 @@ namespace AGVNavigationCore.PathFinding.Planning
foreach (var junction in junctions)
{
- var path = _pathfinder.FindPath(startNodeId, junction);
+ var path = _pathfinder.FindPathAStar(startNodeId, junction);
double distance = path.Success ? path.TotalDistance : double.MaxValue;
distances.Add((junction, distance));
}
@@ -313,12 +313,12 @@ namespace AGVNavigationCore.PathFinding.Planning
var fullPath = new List();
// 1. 시작점에서 갈림길까지의 경로
- var toJunctionPath = _pathfinder.FindPath(startNodeId, junctionNodeId);
+ var toJunctionPath = _pathfinder.FindPathAStar(startNodeId, junctionNodeId);
if (!toJunctionPath.Success)
return fullPath;
// 2. 인근 갈림길을 통한 우회인지, 직진 경로상 갈림길인지 판단
- var directPath = _pathfinder.FindPath(startNodeId, targetNodeId);
+ var directPath = _pathfinder.FindPathAStar(startNodeId, targetNodeId);
bool isNearbyDetour = !directPath.Success || !directPath.Path.Any(n => n.NodeId == junctionNodeId);
if (isNearbyDetour)
@@ -341,7 +341,7 @@ namespace AGVNavigationCore.PathFinding.Planning
var fullPath = new List();
// 1. 시작점에서 갈림길까지 직진 (현재 방향 유지)
- var toJunctionPath = _pathfinder.FindPath(startNodeId, junctionNodeId);
+ var toJunctionPath = _pathfinder.FindPathAStar(startNodeId, junctionNodeId);
if (!toJunctionPath.Success)
return fullPath;
@@ -349,7 +349,7 @@ namespace AGVNavigationCore.PathFinding.Planning
// 2. 갈림길에서 방향 전환 후 목적지로
// 이때 마그넷 센서를 이용해 목적지 방향으로 진입
- var fromJunctionPath = _pathfinder.FindPath(junctionNodeId, targetNodeId);
+ var fromJunctionPath = _pathfinder.FindPathAStar(junctionNodeId, targetNodeId);
if (fromJunctionPath.Success && fromJunctionPath.Path.Count > 1)
{
fullPath.AddRange(fromJunctionPath.Path.Skip(1)); // 중복 노드 제거
@@ -366,7 +366,7 @@ namespace AGVNavigationCore.PathFinding.Planning
var fullPath = new List();
// 1. 시작점에서 갈림길까지의 경로
- var toJunctionPath = _pathfinder.FindPath(startNodeId, junctionNodeId);
+ var toJunctionPath = _pathfinder.FindPathAStar(startNodeId, junctionNodeId);
if (!toJunctionPath.Success)
return fullPath;
@@ -387,7 +387,7 @@ namespace AGVNavigationCore.PathFinding.Planning
// 3. 갈림길에서 목표점까지의 경로
string lastNode = fullPath.LastOrDefault()?.NodeId ?? junctionNodeId;
- var fromJunctionPath = _pathfinder.FindPath(lastNode, targetNodeId);
+ var fromJunctionPath = _pathfinder.FindPathAStar(lastNode, targetNodeId);
if (fromJunctionPath.Success && fromJunctionPath.Path.Count > 1)
{
fullPath.AddRange(fromJunctionPath.Path.Skip(1));
@@ -609,7 +609,7 @@ namespace AGVNavigationCore.PathFinding.Planning
private bool CanReachTargetViaJunction(string junctionNodeId, string targetNodeId)
{
// 갈림길에서 목적지까지의 경로가 존재하는지 확인
- var pathToTarget = _pathfinder.FindPath(junctionNodeId, targetNodeId);
+ var pathToTarget = _pathfinder.FindPathAStar(junctionNodeId, targetNodeId);
return pathToTarget.Success;
}
diff --git a/Cs_HMI/AGVLogic/AGVNavigationCore/Utils/DirectionalPathfinderTest.cs b/Cs_HMI/AGVLogic/AGVNavigationCore/Utils/DirectionalPathfinderTest.cs
index 52e32ca..3eb2e5f 100644
--- a/Cs_HMI/AGVLogic/AGVNavigationCore/Utils/DirectionalPathfinderTest.cs
+++ b/Cs_HMI/AGVLogic/AGVNavigationCore/Utils/DirectionalPathfinderTest.cs
@@ -153,7 +153,7 @@ namespace AGVNavigationCore.Utils
Console.WriteLine($"이름: {node.Name}");
Console.WriteLine($"위치: {node.Position}");
Console.WriteLine($"타입: {GetNodeTypeName(node.Type)}");
- Console.WriteLine($"회전 가능: {node.CanRotate}");
+ Console.WriteLine($"TurnLeft/Right/교차로 : {(node.CanTurnLeft ? "O":"X")}/{(node.CanTurnRight ? "O" : "X")}/{(node.DisableCross ? "X" : "O")}");
Console.WriteLine($"활성: {node.IsActive}");
Console.WriteLine($"연결된 노드:");
diff --git a/Cs_HMI/AGVLogic/AGVSimulator/Forms/SimulatorForm.cs b/Cs_HMI/AGVLogic/AGVSimulator/Forms/SimulatorForm.cs
index 39c20dd..cec4ccc 100644
--- a/Cs_HMI/AGVLogic/AGVSimulator/Forms/SimulatorForm.cs
+++ b/Cs_HMI/AGVLogic/AGVSimulator/Forms/SimulatorForm.cs
@@ -338,6 +338,17 @@ namespace AGVSimulator.Forms
advancedResult.DockingValidation = DockingValidator.ValidateDockingDirection(advancedResult, _mapNodes);
}
+ //마지막대상이 버퍼라면 시퀀스처리를 해야한다
+ if(targetNode.Type == NodeType.Buffer)
+ {
+ var lastDetailPath = advancedResult.DetailedPath.Last();
+ if(lastDetailPath.NodeId == targetNode.NodeId)
+ {
+
+ }
+ }
+
+
_simulatorCanvas.CurrentPath = advancedResult;
_pathLengthLabel.Text = $"경로 길이: {advancedResult.TotalDistance:F1}";
_statusLabel.Text = $"경로 계산 완료 ({advancedResult.CalculationTimeMs}ms)";
@@ -1443,7 +1454,7 @@ namespace AGVSimulator.Forms
// 도킹 타겟 노드 찾기
var dockingTargets = _mapNodes.Where(n =>
- n.Type == NodeType.Charging || n.Type == NodeType.Docking).ToList();
+ n.Type == NodeType.Charging || n.Type == NodeType.Loader || n.Type == NodeType.UnLoader || n.Type == NodeType.Clearner || n.Type == NodeType.Buffer).ToList();
if (dockingTargets.Count == 0)
{
diff --git a/Cs_HMI/Data/NewMap.agvmap b/Cs_HMI/Data/NewMap.agvmap
index f2c9084..48daf5c 100644
--- a/Cs_HMI/Data/NewMap.agvmap
+++ b/Cs_HMI/Data/NewMap.agvmap
@@ -9,11 +9,13 @@
"ConnectedNodes": [
"N002"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": true,
"StationId": "",
- "StationType": null,
+ "StationType": 3,
"CreatedDate": "2025-09-11T08:34:44.9548285+09:00",
- "ModifiedDate": "2025-12-08T11:54:03.1730939+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Red",
"RfidId": "0001",
@@ -47,11 +49,13 @@
"N003",
"N001"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": false,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-11T08:34:48.2957516+09:00",
- "ModifiedDate": "2025-12-08T11:54:05.9083675+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0002",
@@ -85,11 +89,13 @@
"N004",
"N002"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": false,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-11T08:34:49.2226656+09:00",
- "ModifiedDate": "2025-12-08T11:54:07.7966472+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0003",
@@ -125,11 +131,13 @@
"N011",
"N003"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": false,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-11T08:34:50.1681027+09:00",
- "ModifiedDate": "2025-12-08T11:54:09.4014966+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0004",
@@ -163,11 +171,13 @@
"N007",
"N022"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": false,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-11T08:34:51.1111368+09:00",
- "ModifiedDate": "2025-12-08T11:54:49.3718611+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0013",
@@ -201,11 +211,13 @@
"N019",
"N006"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": false,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-11T08:34:51.9266982+09:00",
- "ModifiedDate": "2025-12-08T11:54:51.4185821+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0014",
@@ -239,11 +251,13 @@
"N009",
"N031"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": false,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-11T08:34:53.9595825+09:00",
- "ModifiedDate": "2025-12-08T11:54:13.626916+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0009",
@@ -277,11 +291,13 @@
"N010",
"N008"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": false,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-11T08:34:54.5035702+09:00",
- "ModifiedDate": "2025-12-08T11:54:15.2395639+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0010",
@@ -314,11 +330,13 @@
"ConnectedNodes": [
"N009"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": true,
"StationId": "",
- "StationType": null,
+ "StationType": 2,
"CreatedDate": "2025-09-11T08:34:55.0563237+09:00",
- "ModifiedDate": "2025-12-08T11:54:17.075895+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Red",
"RfidId": "0011",
@@ -353,11 +371,13 @@
"N015",
"N004"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": false,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-11T08:34:55.8875335+09:00",
- "ModifiedDate": "2025-12-08T11:54:30.5451017+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0005",
@@ -391,11 +411,13 @@
"N013",
"N011"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": false,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-11T08:34:56.3678144+09:00",
- "ModifiedDate": "2025-12-08T11:54:32.3566504+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0006",
@@ -429,11 +451,13 @@
"N014",
"N012"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": false,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-11T08:34:56.8390845+09:00",
- "ModifiedDate": "2025-12-08T11:54:34.1608589+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0007",
@@ -466,11 +490,13 @@
"ConnectedNodes": [
"N013"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": true,
"StationId": "",
- "StationType": null,
+ "StationType": 1,
"CreatedDate": "2025-09-11T08:34:57.2549726+09:00",
- "ModifiedDate": "2025-12-08T11:54:36.2103863+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Red",
"RfidId": "0008",
@@ -503,11 +529,13 @@
"ConnectedNodes": [
"N007"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": true,
"StationId": "",
- "StationType": null,
+ "StationType": 5,
"CreatedDate": "2025-09-11T08:35:56.5359098+09:00",
- "ModifiedDate": "2025-12-08T11:54:53.4706808+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Magenta",
"RfidId": "0015",
@@ -542,11 +570,13 @@
"N004",
"N006"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": false,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-11T08:36:48.0311551+09:00",
- "ModifiedDate": "2025-12-08T11:54:47.1279261+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0012",
@@ -580,11 +610,13 @@
"N024",
"N022"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": false,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-11T09:41:36.8738794+09:00",
- "ModifiedDate": "2025-12-08T11:55:02.2993636+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0016",
@@ -618,11 +650,13 @@
"N025",
"N023"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": false,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-11T09:41:37.4551853+09:00",
- "ModifiedDate": "2025-12-08T11:55:00.0899323+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0017",
@@ -656,11 +690,13 @@
"N026",
"N024"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": false,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-11T09:41:38.0142374+09:00",
- "ModifiedDate": "2025-12-08T11:54:57.8459375+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0018",
@@ -693,11 +729,13 @@
"ConnectedNodes": [
"N025"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": true,
"StationId": "",
- "StationType": null,
+ "StationType": 5,
"CreatedDate": "2025-09-11T09:41:38.5834487+09:00",
- "ModifiedDate": "2025-12-08T11:54:55.6038784+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Magenta",
"RfidId": "0019",
@@ -728,11 +766,13 @@
"Type": 4,
"DockDirection": 0,
"ConnectedNodes": [],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": true,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-11T11:08:22.4048927+09:00",
- "ModifiedDate": "2025-10-30T17:14:35.0184087+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Purple",
"RfidId": "",
@@ -763,11 +803,13 @@
"Type": 5,
"DockDirection": 0,
"ConnectedNodes": [],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": true,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-11T11:08:44.7897541+09:00",
- "ModifiedDate": "2025-10-23T12:21:16.7786615+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Brown",
"RfidId": "",
@@ -801,11 +843,13 @@
"N016",
"N011"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": false,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-12T17:22:47.8065756+09:00",
- "ModifiedDate": "2025-12-08T11:54:28.0157957+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0037",
@@ -839,11 +883,13 @@
"N017",
"N015"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": false,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-12T17:22:48.6628848+09:00",
- "ModifiedDate": "2025-12-08T11:54:26.4584771+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0036",
@@ -877,11 +923,13 @@
"N018",
"N016"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": false,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-12T17:22:49.8138877+09:00",
- "ModifiedDate": "2025-12-08T11:54:24.9652264+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0035",
@@ -916,11 +964,13 @@
"N017",
"N005"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": true,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-12T17:22:50.6790623+09:00",
- "ModifiedDate": "2025-12-08T11:54:23.246666+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0034",
@@ -955,11 +1005,13 @@
"N029",
"N018"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": true,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-12T17:22:51.5267199+09:00",
- "ModifiedDate": "2025-12-08T11:54:21.6078399+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0033",
@@ -994,11 +1046,13 @@
"N028",
"N005"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": true,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-12T17:22:52.3666114+09:00",
- "ModifiedDate": "2025-12-08T11:54:20.2707567+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0032",
@@ -1032,11 +1086,13 @@
"N027",
"N020"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": true,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-12T17:22:53.0958619+09:00",
- "ModifiedDate": "2025-12-08T11:54:18.362104+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0031",
@@ -1069,11 +1125,13 @@
"ConnectedNodes": [
"N021"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": true,
"StationId": "",
- "StationType": null,
+ "StationType": 4,
"CreatedDate": "2025-09-12T17:22:54.7345704+09:00",
- "ModifiedDate": "2025-12-08T11:54:43.1573737+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Green",
"RfidId": "0041",
@@ -1106,11 +1164,13 @@
"ConnectedNodes": [
"N020"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": true,
"StationId": "",
- "StationType": null,
+ "StationType": 4,
"CreatedDate": "2025-09-12T17:22:55.5263512+09:00",
- "ModifiedDate": "2025-12-08T11:54:41.5219283+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Green",
"RfidId": "0040",
@@ -1143,11 +1203,13 @@
"ConnectedNodes": [
"N005"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": true,
"StationId": "",
- "StationType": null,
+ "StationType": 4,
"CreatedDate": "2025-09-12T17:22:56.6623294+09:00",
- "ModifiedDate": "2025-12-08T11:54:39.9945926+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Green",
"RfidId": "0039",
@@ -1180,11 +1242,13 @@
"ConnectedNodes": [
"N018"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": true,
"StationId": "",
- "StationType": null,
+ "StationType": 4,
"CreatedDate": "2025-09-12T17:22:57.5510908+09:00",
- "ModifiedDate": "2025-12-08T11:54:38.3326835+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Green",
"RfidId": "0038",
@@ -1218,11 +1282,13 @@
"N004",
"N008"
],
- "CanRotate": false,
+ "CanTurnLeft": true,
+ "CanTurnRight": true,
+ "DisableCross": false,
"StationId": "",
"StationType": null,
"CreatedDate": "2025-09-15T11:18:40.5366059+09:00",
- "ModifiedDate": "2025-12-08T11:54:12.0214781+09:00",
+ "ModifiedDate": "2025-12-09T08:41:57.1293017+09:00",
"IsActive": true,
"DisplayColor": "Cyan",
"RfidId": "0030",
@@ -1251,6 +1317,6 @@
"BackgroundColorArgb": -14671840,
"ShowGrid": false
},
- "CreatedDate": "2025-12-08T11:55:04.9060276+09:00",
+ "CreatedDate": "2025-12-09T11:45:02.0324252+09:00",
"Version": "1.1"
}
\ No newline at end of file
diff --git a/Cs_HMI/Project/CSetting.cs b/Cs_HMI/Project/CSetting.cs
index 367c99c..ec3bb6b 100644
--- a/Cs_HMI/Project/CSetting.cs
+++ b/Cs_HMI/Project/CSetting.cs
@@ -246,6 +246,11 @@ namespace Project
public bool AutoModeOffAndClearPosition { get; set; }
+
+ [Browsable(false)]
+ public UInt16 GDSValue { get; set; }
+
+
[Browsable(false)]
public string musicfile { get; set; }
@@ -366,6 +371,7 @@ namespace Project
if (StatusInterval < 10) StatusInterval = 300; //5분간격
if (XBE_ID < 1) XBE_ID = 0xFF; //0은 acs 이므로 쓰지못하게한다.
if (SAD == 0) SAD = 999;
+ if (GDSValue == 0) GDSValue = 1000;
if (TAGF1A == 0)
{
TAGNOT = 9000;
diff --git a/Cs_HMI/Project/StateMachine/Step/_SM_RUN_SYNC.cs b/Cs_HMI/Project/StateMachine/Step/_SM_RUN_SYNC.cs
index 5d083a1..109c00d 100644
--- a/Cs_HMI/Project/StateMachine/Step/_SM_RUN_SYNC.cs
+++ b/Cs_HMI/Project/StateMachine/Step/_SM_RUN_SYNC.cs
@@ -79,6 +79,10 @@ namespace Project
synlist.Add("STT", PUB.setting.STT.ToString("0000"));
//synlist.Add("SBN", PUB.setting.ChargerID.ToString("0000"));
+ synlist.Add("SGS", PUB.setting.GDSValue.ToString("0000"));
+
+
+
PUB.AddEEDB($"SYNC시작({PUB.Result.TargetPos})");
synidx = 0;
diff --git a/Cs_HMI/Project/StateMachine/_AGV.cs b/Cs_HMI/Project/StateMachine/_AGV.cs
index 7e74ecb..526b332 100644
--- a/Cs_HMI/Project/StateMachine/_AGV.cs
+++ b/Cs_HMI/Project/StateMachine/_AGV.cs
@@ -197,7 +197,7 @@ namespace Project
NodeId = newNodeId,
RfidId = PUB.Result.LastTAG,
Name = $"자동추가_{PUB.Result.LastTAG}",
- Type = NodeType.Normal,
+ Type = NodeType.Normal,
Position = new Point(100, 100), // 기본 위치
IsActive = true,
DisplayColor = Color.Orange, // 자동 추가된 노드는 오렌지색으로 표시
diff --git a/Cs_HMI/Project/ViewForm/fAgv.cs b/Cs_HMI/Project/ViewForm/fAgv.cs
index b262f01..2ee59b6 100644
--- a/Cs_HMI/Project/ViewForm/fAgv.cs
+++ b/Cs_HMI/Project/ViewForm/fAgv.cs
@@ -138,7 +138,10 @@ namespace Project.ViewForm
private void button9_Click(object sender, EventArgs e)
{
- PUB.AGV.TurnGDSCenterScope();
+ var inputbox = AR.UTIL.InputBox("input value", "1000");
+ if (inputbox.Item1 == false) return;
+ if (UInt16.TryParse(inputbox.Item2, out UInt16 value) == false) return;
+ PUB.AGV.TurnGDSCenterScope(value);
if (PUB.sm.Step == StateMachine.eSMStep.RUN)
PUB.sm.SetNewStep(StateMachine.eSMStep.IDLE);
}
diff --git a/Cs_HMI/Project/ViewForm/fManual.Designer.cs b/Cs_HMI/Project/ViewForm/fManual.Designer.cs
index 78998e8..eb46ea4 100644
--- a/Cs_HMI/Project/ViewForm/fManual.Designer.cs
+++ b/Cs_HMI/Project/ViewForm/fManual.Designer.cs
@@ -41,46 +41,45 @@
this.btErrReset = new System.Windows.Forms.Button();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.panel2 = new System.Windows.Forms.Panel();
- this.groupBox3 = new System.Windows.Forms.GroupBox();
- this.btBack180 = new System.Windows.Forms.Button();
- this.panel1 = new System.Windows.Forms.Panel();
this.btRight180 = new System.Windows.Forms.Button();
- this.panel10 = new System.Windows.Forms.Panel();
this.btLeft180 = new System.Windows.Forms.Button();
this.button1 = new System.Windows.Forms.Button();
this.groupBox1 = new System.Windows.Forms.GroupBox();
- this.radpbs2 = new AGVControl.MyRadioButton();
this.panel9 = new System.Windows.Forms.Panel();
- this.radpbs1 = new AGVControl.MyRadioButton();
this.panel3 = new System.Windows.Forms.Panel();
- this.radpbs0 = new AGVControl.MyRadioButton();
this.grpSpeed = new System.Windows.Forms.GroupBox();
- this.radspdh = new AGVControl.MyRadioButton();
this.panel8 = new System.Windows.Forms.Panel();
- this.radspdm = new AGVControl.MyRadioButton();
this.panel4 = new System.Windows.Forms.Panel();
- this.radspdl = new AGVControl.MyRadioButton();
this.grpBunki = new System.Windows.Forms.GroupBox();
- this.radright = new AGVControl.MyRadioButton();
this.panel7 = new System.Windows.Forms.Panel();
- this.radstrai = new AGVControl.MyRadioButton();
this.panel5 = new System.Windows.Forms.Panel();
- this.radleft = new AGVControl.MyRadioButton();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.arLabel1 = new arCtl.arLabel();
this.panel12 = new System.Windows.Forms.Panel();
- this.radbackward = new AGVControl.MyRadioButton();
this.panel6 = new System.Windows.Forms.Panel();
- this.radforward = new AGVControl.MyRadioButton();
this.label1 = new System.Windows.Forms.Label();
+ this.radpbs2 = new AGVControl.MyRadioButton();
+ this.radpbs1 = new AGVControl.MyRadioButton();
+ this.radpbs0 = new AGVControl.MyRadioButton();
+ this.radspdh = new AGVControl.MyRadioButton();
+ this.radspdm = new AGVControl.MyRadioButton();
+ this.radspdl = new AGVControl.MyRadioButton();
+ this.radright = new AGVControl.MyRadioButton();
+ this.radstrai = new AGVControl.MyRadioButton();
+ this.radleft = new AGVControl.MyRadioButton();
+ this.radbackward = new AGVControl.MyRadioButton();
+ this.radforward = new AGVControl.MyRadioButton();
this.guideSensor1 = new Narumi.UC.GuideSensor();
+ this.btBack180 = new System.Windows.Forms.Button();
+ this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
+ this.button2 = new System.Windows.Forms.Button();
this.tableLayoutPanel1.SuspendLayout();
this.panel2.SuspendLayout();
- this.groupBox3.SuspendLayout();
this.groupBox1.SuspendLayout();
this.grpSpeed.SuspendLayout();
this.grpBunki.SuspendLayout();
this.groupBox2.SuspendLayout();
+ this.tableLayoutPanel2.SuspendLayout();
this.SuspendLayout();
//
// tableLayoutPanel1
@@ -105,7 +104,7 @@
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
- this.tableLayoutPanel1.Size = new System.Drawing.Size(604, 555);
+ this.tableLayoutPanel1.Size = new System.Drawing.Size(604, 594);
this.tableLayoutPanel1.TabIndex = 7;
//
// btStart
@@ -125,7 +124,7 @@
this.btStart.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.btStart.GradientRepeatBG = false;
this.btStart.isButton = true;
- this.btStart.Location = new System.Drawing.Point(204, 188);
+ this.btStart.Location = new System.Drawing.Point(204, 201);
this.btStart.MouseDownColor = System.Drawing.Color.Yellow;
this.btStart.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.btStart.msg = new string[] {
@@ -147,7 +146,7 @@
this.btStart.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btStart.SignColor = System.Drawing.Color.Yellow;
this.btStart.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
- this.btStart.Size = new System.Drawing.Size(195, 179);
+ this.btStart.Size = new System.Drawing.Size(195, 192);
this.btStart.TabIndex = 6;
this.btStart.Text = "RUN";
this.btStart.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -172,7 +171,7 @@
this.btRight.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.btRight.GradientRepeatBG = false;
this.btRight.isButton = true;
- this.btRight.Location = new System.Drawing.Point(405, 188);
+ this.btRight.Location = new System.Drawing.Point(405, 201);
this.btRight.MouseDownColor = System.Drawing.Color.Yellow;
this.btRight.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.btRight.msg = null;
@@ -192,7 +191,7 @@
this.btRight.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btRight.SignColor = System.Drawing.Color.Yellow;
this.btRight.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
- this.btRight.Size = new System.Drawing.Size(196, 179);
+ this.btRight.Size = new System.Drawing.Size(196, 192);
this.btRight.TabIndex = 0;
this.btRight.Text = "좌회전";
this.btRight.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -238,7 +237,7 @@
this.btBack.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btBack.SignColor = System.Drawing.Color.Yellow;
this.btBack.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
- this.btBack.Size = new System.Drawing.Size(195, 179);
+ this.btBack.Size = new System.Drawing.Size(195, 192);
this.btBack.TabIndex = 0;
this.btBack.Text = "후진";
this.btBack.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -263,7 +262,7 @@
this.btForward.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.btForward.GradientRepeatBG = false;
this.btForward.isButton = true;
- this.btForward.Location = new System.Drawing.Point(204, 373);
+ this.btForward.Location = new System.Drawing.Point(204, 399);
this.btForward.MouseDownColor = System.Drawing.Color.Yellow;
this.btForward.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.btForward.msg = null;
@@ -283,7 +282,7 @@
this.btForward.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btForward.SignColor = System.Drawing.Color.Yellow;
this.btForward.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
- this.btForward.Size = new System.Drawing.Size(195, 179);
+ this.btForward.Size = new System.Drawing.Size(195, 192);
this.btForward.TabIndex = 0;
this.btForward.Text = "전진";
this.btForward.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -308,7 +307,7 @@
this.btLeft.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.btLeft.GradientRepeatBG = false;
this.btLeft.isButton = true;
- this.btLeft.Location = new System.Drawing.Point(3, 188);
+ this.btLeft.Location = new System.Drawing.Point(3, 201);
this.btLeft.MouseDownColor = System.Drawing.Color.Yellow;
this.btLeft.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.btLeft.msg = null;
@@ -328,7 +327,7 @@
this.btLeft.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btLeft.SignColor = System.Drawing.Color.Yellow;
this.btLeft.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
- this.btLeft.Size = new System.Drawing.Size(195, 179);
+ this.btLeft.Size = new System.Drawing.Size(195, 192);
this.btLeft.TabIndex = 0;
this.btLeft.Text = "우회전";
this.btLeft.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -342,7 +341,7 @@
this.btMarkStop.Font = new System.Drawing.Font("맑은 고딕", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.btMarkStop.Location = new System.Drawing.Point(3, 3);
this.btMarkStop.Name = "btMarkStop";
- this.btMarkStop.Size = new System.Drawing.Size(195, 179);
+ this.btMarkStop.Size = new System.Drawing.Size(195, 192);
this.btMarkStop.TabIndex = 7;
this.btMarkStop.Text = "마크정지";
this.btMarkStop.UseVisualStyleBackColor = true;
@@ -352,9 +351,9 @@
//
this.btchargeOff.Dock = System.Windows.Forms.DockStyle.Fill;
this.btchargeOff.Font = new System.Drawing.Font("맑은 고딕", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
- this.btchargeOff.Location = new System.Drawing.Point(405, 373);
+ this.btchargeOff.Location = new System.Drawing.Point(405, 399);
this.btchargeOff.Name = "btchargeOff";
- this.btchargeOff.Size = new System.Drawing.Size(196, 179);
+ this.btchargeOff.Size = new System.Drawing.Size(196, 192);
this.btchargeOff.TabIndex = 8;
this.btchargeOff.Text = "충전해제";
this.btchargeOff.UseVisualStyleBackColor = true;
@@ -364,9 +363,9 @@
//
this.btChargeOn.Dock = System.Windows.Forms.DockStyle.Fill;
this.btChargeOn.Font = new System.Drawing.Font("맑은 고딕", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
- this.btChargeOn.Location = new System.Drawing.Point(3, 373);
+ this.btChargeOn.Location = new System.Drawing.Point(3, 399);
this.btChargeOn.Name = "btChargeOn";
- this.btChargeOn.Size = new System.Drawing.Size(195, 179);
+ this.btChargeOn.Size = new System.Drawing.Size(195, 192);
this.btChargeOn.TabIndex = 9;
this.btChargeOn.Text = "충전";
this.btChargeOn.UseVisualStyleBackColor = true;
@@ -378,7 +377,7 @@
this.btErrReset.Font = new System.Drawing.Font("맑은 고딕", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.btErrReset.Location = new System.Drawing.Point(405, 3);
this.btErrReset.Name = "btErrReset";
- this.btErrReset.Size = new System.Drawing.Size(196, 179);
+ this.btErrReset.Size = new System.Drawing.Size(196, 192);
this.btErrReset.TabIndex = 10;
this.btErrReset.Text = "오류소거";
this.btErrReset.UseVisualStyleBackColor = true;
@@ -391,7 +390,7 @@
//
// panel2
//
- this.panel2.Controls.Add(this.groupBox3);
+ this.panel2.Controls.Add(this.tableLayoutPanel2);
this.panel2.Controls.Add(this.button1);
this.panel2.Controls.Add(this.groupBox1);
this.panel2.Controls.Add(this.grpSpeed);
@@ -400,79 +399,33 @@
this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel2.Location = new System.Drawing.Point(607, 21);
this.panel2.Name = "panel2";
- this.panel2.Size = new System.Drawing.Size(404, 517);
+ this.panel2.Size = new System.Drawing.Size(404, 556);
this.panel2.TabIndex = 9;
this.panel2.Paint += new System.Windows.Forms.PaintEventHandler(this.panel2_Paint);
//
- // groupBox3
- //
- this.groupBox3.Controls.Add(this.btBack180);
- this.groupBox3.Controls.Add(this.panel1);
- this.groupBox3.Controls.Add(this.btRight180);
- this.groupBox3.Controls.Add(this.panel10);
- this.groupBox3.Controls.Add(this.btLeft180);
- this.groupBox3.Dock = System.Windows.Forms.DockStyle.Fill;
- this.groupBox3.Location = new System.Drawing.Point(0, 450);
- this.groupBox3.Name = "groupBox3";
- this.groupBox3.Padding = new System.Windows.Forms.Padding(10, 5, 5, 10);
- this.groupBox3.Size = new System.Drawing.Size(404, 67);
- this.groupBox3.TabIndex = 11;
- this.groupBox3.TabStop = false;
- //
- // btBack180
- //
- this.btBack180.BackColor = System.Drawing.Color.WhiteSmoke;
- this.btBack180.Cursor = System.Windows.Forms.Cursors.Hand;
- this.btBack180.Dock = System.Windows.Forms.DockStyle.Fill;
- this.btBack180.Font = new System.Drawing.Font("맑은 고딕", 10F, System.Drawing.FontStyle.Bold);
- this.btBack180.ForeColor = System.Drawing.Color.Black;
- this.btBack180.Location = new System.Drawing.Point(270, 19);
- this.btBack180.Name = "btBack180";
- this.btBack180.Size = new System.Drawing.Size(129, 38);
- this.btBack180.TabIndex = 15;
- this.btBack180.Text = "백후 180도 회전";
- this.btBack180.UseVisualStyleBackColor = false;
- this.btBack180.Click += new System.EventHandler(this.btBack180_Click);
- //
- // panel1
- //
- this.panel1.Dock = System.Windows.Forms.DockStyle.Left;
- this.panel1.Location = new System.Drawing.Point(261, 19);
- this.panel1.Name = "panel1";
- this.panel1.Size = new System.Drawing.Size(9, 38);
- this.panel1.TabIndex = 14;
- //
// btRight180
//
this.btRight180.BackColor = System.Drawing.Color.WhiteSmoke;
- this.btRight180.Dock = System.Windows.Forms.DockStyle.Left;
+ this.btRight180.Dock = System.Windows.Forms.DockStyle.Fill;
this.btRight180.Font = new System.Drawing.Font("맑은 고딕", 10F, System.Drawing.FontStyle.Bold);
this.btRight180.ForeColor = System.Drawing.Color.Black;
- this.btRight180.Location = new System.Drawing.Point(140, 19);
+ this.btRight180.Location = new System.Drawing.Point(3, 62);
this.btRight180.Name = "btRight180";
- this.btRight180.Size = new System.Drawing.Size(121, 38);
+ this.btRight180.Size = new System.Drawing.Size(196, 53);
this.btRight180.TabIndex = 6;
this.btRight180.Text = "180도 우회전";
this.btRight180.UseVisualStyleBackColor = false;
this.btRight180.Click += new System.EventHandler(this.btRight180_Click);
//
- // panel10
- //
- this.panel10.Dock = System.Windows.Forms.DockStyle.Left;
- this.panel10.Location = new System.Drawing.Point(131, 19);
- this.panel10.Name = "panel10";
- this.panel10.Size = new System.Drawing.Size(9, 38);
- this.panel10.TabIndex = 12;
- //
// btLeft180
//
this.btLeft180.BackColor = System.Drawing.Color.WhiteSmoke;
- this.btLeft180.Dock = System.Windows.Forms.DockStyle.Left;
+ this.btLeft180.Dock = System.Windows.Forms.DockStyle.Fill;
this.btLeft180.Font = new System.Drawing.Font("맑은 고딕", 10F, System.Drawing.FontStyle.Bold);
this.btLeft180.ForeColor = System.Drawing.Color.Black;
- this.btLeft180.Location = new System.Drawing.Point(10, 19);
+ this.btLeft180.Location = new System.Drawing.Point(3, 3);
this.btLeft180.Name = "btLeft180";
- this.btLeft180.Size = new System.Drawing.Size(121, 38);
+ this.btLeft180.Size = new System.Drawing.Size(196, 53);
this.btLeft180.TabIndex = 7;
this.btLeft180.Text = "180도 좌회전";
this.btLeft180.UseVisualStyleBackColor = false;
@@ -484,7 +437,7 @@
this.button1.Font = new System.Drawing.Font("맑은 고딕", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.button1.Location = new System.Drawing.Point(0, 380);
this.button1.Name = "button1";
- this.button1.Size = new System.Drawing.Size(404, 70);
+ this.button1.Size = new System.Drawing.Size(404, 58);
this.button1.TabIndex = 10;
this.button1.Text = "설정 적용";
this.button1.UseVisualStyleBackColor = true;
@@ -506,25 +459,6 @@
this.groupBox1.TabStop = false;
this.groupBox1.Text = "근접센서(PBS)";
//
- // radpbs2
- //
- this.radpbs2.BackColor = System.Drawing.Color.WhiteSmoke;
- this.radpbs2.Bordercolor = System.Drawing.Color.DimGray;
- this.radpbs2.BorderRadius = 7;
- this.radpbs2.BorderSize = 2;
- this.radpbs2.CheckOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radpbs2.CheckOnColor = System.Drawing.Color.LimeGreen;
- this.radpbs2.CheckWidth = 30;
- this.radpbs2.Dock = System.Windows.Forms.DockStyle.Left;
- this.radpbs2.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
- this.radpbs2.Location = new System.Drawing.Point(278, 19);
- this.radpbs2.Name = "radpbs2";
- this.radpbs2.Size = new System.Drawing.Size(119, 66);
- this.radpbs2.TabIndex = 10;
- this.radpbs2.Text = "On(2)";
- this.radpbs2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.radpbs2.UseVisualStyleBackColor = false;
- //
// panel9
//
this.panel9.Dock = System.Windows.Forms.DockStyle.Left;
@@ -533,28 +467,6 @@
this.panel9.Size = new System.Drawing.Size(15, 66);
this.panel9.TabIndex = 12;
//
- // radpbs1
- //
- this.radpbs1.BackColor = System.Drawing.Color.WhiteSmoke;
- this.radpbs1.Bordercolor = System.Drawing.Color.DimGray;
- this.radpbs1.BorderRadius = 7;
- this.radpbs1.BorderSize = 2;
- this.radpbs1.Checked = true;
- this.radpbs1.CheckOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radpbs1.CheckOnColor = System.Drawing.Color.LimeGreen;
- this.radpbs1.CheckWidth = 30;
- this.radpbs1.Dock = System.Windows.Forms.DockStyle.Left;
- this.radpbs1.Font = new System.Drawing.Font("맑은 고딕", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
- this.radpbs1.ForeColor = System.Drawing.Color.Blue;
- this.radpbs1.Location = new System.Drawing.Point(144, 19);
- this.radpbs1.Name = "radpbs1";
- this.radpbs1.Size = new System.Drawing.Size(119, 66);
- this.radpbs1.TabIndex = 9;
- this.radpbs1.TabStop = true;
- this.radpbs1.Text = "On(1)";
- this.radpbs1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.radpbs1.UseVisualStyleBackColor = false;
- //
// panel3
//
this.panel3.Dock = System.Windows.Forms.DockStyle.Left;
@@ -563,25 +475,6 @@
this.panel3.Size = new System.Drawing.Size(15, 66);
this.panel3.TabIndex = 11;
//
- // radpbs0
- //
- this.radpbs0.BackColor = System.Drawing.Color.WhiteSmoke;
- this.radpbs0.Bordercolor = System.Drawing.Color.DimGray;
- this.radpbs0.BorderRadius = 7;
- this.radpbs0.BorderSize = 2;
- this.radpbs0.CheckOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radpbs0.CheckOnColor = System.Drawing.Color.LimeGreen;
- this.radpbs0.CheckWidth = 30;
- this.radpbs0.Dock = System.Windows.Forms.DockStyle.Left;
- this.radpbs0.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
- this.radpbs0.Location = new System.Drawing.Point(10, 19);
- this.radpbs0.Name = "radpbs0";
- this.radpbs0.Size = new System.Drawing.Size(119, 66);
- this.radpbs0.TabIndex = 8;
- this.radpbs0.Text = "Off(0)";
- this.radpbs0.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.radpbs0.UseVisualStyleBackColor = false;
- //
// grpSpeed
//
this.grpSpeed.Controls.Add(this.radspdh);
@@ -598,25 +491,6 @@
this.grpSpeed.TabStop = false;
this.grpSpeed.Text = "속도";
//
- // radspdh
- //
- this.radspdh.BackColor = System.Drawing.Color.WhiteSmoke;
- this.radspdh.Bordercolor = System.Drawing.Color.DimGray;
- this.radspdh.BorderRadius = 7;
- this.radspdh.BorderSize = 2;
- this.radspdh.CheckOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radspdh.CheckOnColor = System.Drawing.Color.LimeGreen;
- this.radspdh.CheckWidth = 30;
- this.radspdh.Dock = System.Windows.Forms.DockStyle.Left;
- this.radspdh.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
- this.radspdh.Location = new System.Drawing.Point(278, 19);
- this.radspdh.Name = "radspdh";
- this.radspdh.Size = new System.Drawing.Size(119, 66);
- this.radspdh.TabIndex = 2;
- this.radspdh.Text = "고속";
- this.radspdh.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.radspdh.UseVisualStyleBackColor = false;
- //
// panel8
//
this.panel8.Dock = System.Windows.Forms.DockStyle.Left;
@@ -625,28 +499,6 @@
this.panel8.Size = new System.Drawing.Size(15, 66);
this.panel8.TabIndex = 13;
//
- // radspdm
- //
- this.radspdm.BackColor = System.Drawing.Color.WhiteSmoke;
- this.radspdm.Bordercolor = System.Drawing.Color.DimGray;
- this.radspdm.BorderRadius = 7;
- this.radspdm.BorderSize = 2;
- this.radspdm.Checked = true;
- this.radspdm.CheckOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radspdm.CheckOnColor = System.Drawing.Color.LimeGreen;
- this.radspdm.CheckWidth = 30;
- this.radspdm.Dock = System.Windows.Forms.DockStyle.Left;
- this.radspdm.Font = new System.Drawing.Font("맑은 고딕", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
- this.radspdm.ForeColor = System.Drawing.Color.Blue;
- this.radspdm.Location = new System.Drawing.Point(144, 19);
- this.radspdm.Name = "radspdm";
- this.radspdm.Size = new System.Drawing.Size(119, 66);
- this.radspdm.TabIndex = 1;
- this.radspdm.TabStop = true;
- this.radspdm.Text = "중속";
- this.radspdm.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.radspdm.UseVisualStyleBackColor = false;
- //
// panel4
//
this.panel4.Dock = System.Windows.Forms.DockStyle.Left;
@@ -655,25 +507,6 @@
this.panel4.Size = new System.Drawing.Size(15, 66);
this.panel4.TabIndex = 12;
//
- // radspdl
- //
- this.radspdl.BackColor = System.Drawing.Color.WhiteSmoke;
- this.radspdl.Bordercolor = System.Drawing.Color.DimGray;
- this.radspdl.BorderRadius = 7;
- this.radspdl.BorderSize = 2;
- this.radspdl.CheckOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radspdl.CheckOnColor = System.Drawing.Color.LimeGreen;
- this.radspdl.CheckWidth = 30;
- this.radspdl.Dock = System.Windows.Forms.DockStyle.Left;
- this.radspdl.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
- this.radspdl.Location = new System.Drawing.Point(10, 19);
- this.radspdl.Name = "radspdl";
- this.radspdl.Size = new System.Drawing.Size(119, 66);
- this.radspdl.TabIndex = 0;
- this.radspdl.Text = "저속";
- this.radspdl.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.radspdl.UseVisualStyleBackColor = false;
- //
// grpBunki
//
this.grpBunki.Controls.Add(this.radright);
@@ -690,25 +523,6 @@
this.grpBunki.TabStop = false;
this.grpBunki.Text = "분기";
//
- // radright
- //
- this.radright.BackColor = System.Drawing.Color.WhiteSmoke;
- this.radright.Bordercolor = System.Drawing.Color.DimGray;
- this.radright.BorderRadius = 7;
- this.radright.BorderSize = 2;
- this.radright.CheckOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radright.CheckOnColor = System.Drawing.Color.LimeGreen;
- this.radright.CheckWidth = 30;
- this.radright.Dock = System.Windows.Forms.DockStyle.Left;
- this.radright.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
- this.radright.Location = new System.Drawing.Point(278, 19);
- this.radright.Name = "radright";
- this.radright.Size = new System.Drawing.Size(119, 66);
- this.radright.TabIndex = 4;
- this.radright.Text = "우측";
- this.radright.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.radright.UseVisualStyleBackColor = false;
- //
// panel7
//
this.panel7.Dock = System.Windows.Forms.DockStyle.Left;
@@ -717,28 +531,6 @@
this.panel7.Size = new System.Drawing.Size(15, 66);
this.panel7.TabIndex = 13;
//
- // radstrai
- //
- this.radstrai.BackColor = System.Drawing.Color.WhiteSmoke;
- this.radstrai.Bordercolor = System.Drawing.Color.DimGray;
- this.radstrai.BorderRadius = 7;
- this.radstrai.BorderSize = 2;
- this.radstrai.Checked = true;
- this.radstrai.CheckOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radstrai.CheckOnColor = System.Drawing.Color.LimeGreen;
- this.radstrai.CheckWidth = 30;
- this.radstrai.Dock = System.Windows.Forms.DockStyle.Left;
- this.radstrai.Font = new System.Drawing.Font("맑은 고딕", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
- this.radstrai.ForeColor = System.Drawing.Color.Blue;
- this.radstrai.Location = new System.Drawing.Point(144, 19);
- this.radstrai.Name = "radstrai";
- this.radstrai.Size = new System.Drawing.Size(119, 66);
- this.radstrai.TabIndex = 3;
- this.radstrai.TabStop = true;
- this.radstrai.Text = "직진";
- this.radstrai.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.radstrai.UseVisualStyleBackColor = false;
- //
// panel5
//
this.panel5.Dock = System.Windows.Forms.DockStyle.Left;
@@ -747,25 +539,6 @@
this.panel5.Size = new System.Drawing.Size(15, 66);
this.panel5.TabIndex = 12;
//
- // radleft
- //
- this.radleft.BackColor = System.Drawing.Color.WhiteSmoke;
- this.radleft.Bordercolor = System.Drawing.Color.DimGray;
- this.radleft.BorderRadius = 7;
- this.radleft.BorderSize = 2;
- this.radleft.CheckOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- this.radleft.CheckOnColor = System.Drawing.Color.LimeGreen;
- this.radleft.CheckWidth = 30;
- this.radleft.Dock = System.Windows.Forms.DockStyle.Left;
- this.radleft.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
- this.radleft.Location = new System.Drawing.Point(10, 19);
- this.radleft.Name = "radleft";
- this.radleft.Size = new System.Drawing.Size(119, 66);
- this.radleft.TabIndex = 5;
- this.radleft.Text = "좌측";
- this.radleft.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.radleft.UseVisualStyleBackColor = false;
- //
// groupBox2
//
this.groupBox2.Controls.Add(this.arLabel1);
@@ -837,6 +610,208 @@
this.panel12.Size = new System.Drawing.Size(15, 66);
this.panel12.TabIndex = 14;
//
+ // panel6
+ //
+ this.panel6.Dock = System.Windows.Forms.DockStyle.Left;
+ this.panel6.Location = new System.Drawing.Point(129, 19);
+ this.panel6.Name = "panel6";
+ this.panel6.Size = new System.Drawing.Size(15, 66);
+ this.panel6.TabIndex = 12;
+ //
+ // label1
+ //
+ this.label1.BackColor = System.Drawing.Color.Blue;
+ this.label1.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.label1.Font = new System.Drawing.Font("맑은 고딕", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.label1.ForeColor = System.Drawing.Color.White;
+ this.label1.Location = new System.Drawing.Point(607, 577);
+ this.label1.Name = "label1";
+ this.label1.Padding = new System.Windows.Forms.Padding(0, 3, 0, 3);
+ this.label1.Size = new System.Drawing.Size(404, 38);
+ this.label1.TabIndex = 9;
+ this.label1.Text = "----------";
+ this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // radpbs2
+ //
+ this.radpbs2.BackColor = System.Drawing.Color.WhiteSmoke;
+ this.radpbs2.Bordercolor = System.Drawing.Color.DimGray;
+ this.radpbs2.BorderRadius = 7;
+ this.radpbs2.BorderSize = 2;
+ this.radpbs2.CheckOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.radpbs2.CheckOnColor = System.Drawing.Color.LimeGreen;
+ this.radpbs2.CheckWidth = 30;
+ this.radpbs2.Dock = System.Windows.Forms.DockStyle.Left;
+ this.radpbs2.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.radpbs2.Location = new System.Drawing.Point(278, 19);
+ this.radpbs2.Name = "radpbs2";
+ this.radpbs2.Size = new System.Drawing.Size(119, 66);
+ this.radpbs2.TabIndex = 10;
+ this.radpbs2.Text = "On(2)";
+ this.radpbs2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.radpbs2.UseVisualStyleBackColor = false;
+ //
+ // radpbs1
+ //
+ this.radpbs1.BackColor = System.Drawing.Color.WhiteSmoke;
+ this.radpbs1.Bordercolor = System.Drawing.Color.DimGray;
+ this.radpbs1.BorderRadius = 7;
+ this.radpbs1.BorderSize = 2;
+ this.radpbs1.Checked = true;
+ this.radpbs1.CheckOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.radpbs1.CheckOnColor = System.Drawing.Color.LimeGreen;
+ this.radpbs1.CheckWidth = 30;
+ this.radpbs1.Dock = System.Windows.Forms.DockStyle.Left;
+ this.radpbs1.Font = new System.Drawing.Font("맑은 고딕", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.radpbs1.ForeColor = System.Drawing.Color.Blue;
+ this.radpbs1.Location = new System.Drawing.Point(144, 19);
+ this.radpbs1.Name = "radpbs1";
+ this.radpbs1.Size = new System.Drawing.Size(119, 66);
+ this.radpbs1.TabIndex = 9;
+ this.radpbs1.TabStop = true;
+ this.radpbs1.Text = "On(1)";
+ this.radpbs1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.radpbs1.UseVisualStyleBackColor = false;
+ //
+ // radpbs0
+ //
+ this.radpbs0.BackColor = System.Drawing.Color.WhiteSmoke;
+ this.radpbs0.Bordercolor = System.Drawing.Color.DimGray;
+ this.radpbs0.BorderRadius = 7;
+ this.radpbs0.BorderSize = 2;
+ this.radpbs0.CheckOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.radpbs0.CheckOnColor = System.Drawing.Color.LimeGreen;
+ this.radpbs0.CheckWidth = 30;
+ this.radpbs0.Dock = System.Windows.Forms.DockStyle.Left;
+ this.radpbs0.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.radpbs0.Location = new System.Drawing.Point(10, 19);
+ this.radpbs0.Name = "radpbs0";
+ this.radpbs0.Size = new System.Drawing.Size(119, 66);
+ this.radpbs0.TabIndex = 8;
+ this.radpbs0.Text = "Off(0)";
+ this.radpbs0.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.radpbs0.UseVisualStyleBackColor = false;
+ //
+ // radspdh
+ //
+ this.radspdh.BackColor = System.Drawing.Color.WhiteSmoke;
+ this.radspdh.Bordercolor = System.Drawing.Color.DimGray;
+ this.radspdh.BorderRadius = 7;
+ this.radspdh.BorderSize = 2;
+ this.radspdh.CheckOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.radspdh.CheckOnColor = System.Drawing.Color.LimeGreen;
+ this.radspdh.CheckWidth = 30;
+ this.radspdh.Dock = System.Windows.Forms.DockStyle.Left;
+ this.radspdh.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.radspdh.Location = new System.Drawing.Point(278, 19);
+ this.radspdh.Name = "radspdh";
+ this.radspdh.Size = new System.Drawing.Size(119, 66);
+ this.radspdh.TabIndex = 2;
+ this.radspdh.Text = "고속";
+ this.radspdh.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.radspdh.UseVisualStyleBackColor = false;
+ //
+ // radspdm
+ //
+ this.radspdm.BackColor = System.Drawing.Color.WhiteSmoke;
+ this.radspdm.Bordercolor = System.Drawing.Color.DimGray;
+ this.radspdm.BorderRadius = 7;
+ this.radspdm.BorderSize = 2;
+ this.radspdm.Checked = true;
+ this.radspdm.CheckOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.radspdm.CheckOnColor = System.Drawing.Color.LimeGreen;
+ this.radspdm.CheckWidth = 30;
+ this.radspdm.Dock = System.Windows.Forms.DockStyle.Left;
+ this.radspdm.Font = new System.Drawing.Font("맑은 고딕", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.radspdm.ForeColor = System.Drawing.Color.Blue;
+ this.radspdm.Location = new System.Drawing.Point(144, 19);
+ this.radspdm.Name = "radspdm";
+ this.radspdm.Size = new System.Drawing.Size(119, 66);
+ this.radspdm.TabIndex = 1;
+ this.radspdm.TabStop = true;
+ this.radspdm.Text = "중속";
+ this.radspdm.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.radspdm.UseVisualStyleBackColor = false;
+ //
+ // radspdl
+ //
+ this.radspdl.BackColor = System.Drawing.Color.WhiteSmoke;
+ this.radspdl.Bordercolor = System.Drawing.Color.DimGray;
+ this.radspdl.BorderRadius = 7;
+ this.radspdl.BorderSize = 2;
+ this.radspdl.CheckOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.radspdl.CheckOnColor = System.Drawing.Color.LimeGreen;
+ this.radspdl.CheckWidth = 30;
+ this.radspdl.Dock = System.Windows.Forms.DockStyle.Left;
+ this.radspdl.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.radspdl.Location = new System.Drawing.Point(10, 19);
+ this.radspdl.Name = "radspdl";
+ this.radspdl.Size = new System.Drawing.Size(119, 66);
+ this.radspdl.TabIndex = 0;
+ this.radspdl.Text = "저속";
+ this.radspdl.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.radspdl.UseVisualStyleBackColor = false;
+ //
+ // radright
+ //
+ this.radright.BackColor = System.Drawing.Color.WhiteSmoke;
+ this.radright.Bordercolor = System.Drawing.Color.DimGray;
+ this.radright.BorderRadius = 7;
+ this.radright.BorderSize = 2;
+ this.radright.CheckOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.radright.CheckOnColor = System.Drawing.Color.LimeGreen;
+ this.radright.CheckWidth = 30;
+ this.radright.Dock = System.Windows.Forms.DockStyle.Left;
+ this.radright.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.radright.Location = new System.Drawing.Point(278, 19);
+ this.radright.Name = "radright";
+ this.radright.Size = new System.Drawing.Size(119, 66);
+ this.radright.TabIndex = 4;
+ this.radright.Text = "우측";
+ this.radright.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.radright.UseVisualStyleBackColor = false;
+ //
+ // radstrai
+ //
+ this.radstrai.BackColor = System.Drawing.Color.WhiteSmoke;
+ this.radstrai.Bordercolor = System.Drawing.Color.DimGray;
+ this.radstrai.BorderRadius = 7;
+ this.radstrai.BorderSize = 2;
+ this.radstrai.Checked = true;
+ this.radstrai.CheckOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.radstrai.CheckOnColor = System.Drawing.Color.LimeGreen;
+ this.radstrai.CheckWidth = 30;
+ this.radstrai.Dock = System.Windows.Forms.DockStyle.Left;
+ this.radstrai.Font = new System.Drawing.Font("맑은 고딕", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.radstrai.ForeColor = System.Drawing.Color.Blue;
+ this.radstrai.Location = new System.Drawing.Point(144, 19);
+ this.radstrai.Name = "radstrai";
+ this.radstrai.Size = new System.Drawing.Size(119, 66);
+ this.radstrai.TabIndex = 3;
+ this.radstrai.TabStop = true;
+ this.radstrai.Text = "직진";
+ this.radstrai.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.radstrai.UseVisualStyleBackColor = false;
+ //
+ // radleft
+ //
+ this.radleft.BackColor = System.Drawing.Color.WhiteSmoke;
+ this.radleft.Bordercolor = System.Drawing.Color.DimGray;
+ this.radleft.BorderRadius = 7;
+ this.radleft.BorderSize = 2;
+ this.radleft.CheckOffColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.radleft.CheckOnColor = System.Drawing.Color.LimeGreen;
+ this.radleft.CheckWidth = 30;
+ this.radleft.Dock = System.Windows.Forms.DockStyle.Left;
+ this.radleft.Font = new System.Drawing.Font("맑은 고딕", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.radleft.Location = new System.Drawing.Point(10, 19);
+ this.radleft.Name = "radleft";
+ this.radleft.Size = new System.Drawing.Size(119, 66);
+ this.radleft.TabIndex = 5;
+ this.radleft.Text = "좌측";
+ this.radleft.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.radleft.UseVisualStyleBackColor = false;
+ //
// radbackward
//
this.radbackward.BackColor = System.Drawing.Color.WhiteSmoke;
@@ -856,14 +831,6 @@
this.radbackward.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.radbackward.UseVisualStyleBackColor = false;
//
- // panel6
- //
- this.panel6.Dock = System.Windows.Forms.DockStyle.Left;
- this.panel6.Location = new System.Drawing.Point(129, 19);
- this.panel6.Name = "panel6";
- this.panel6.Size = new System.Drawing.Size(15, 66);
- this.panel6.TabIndex = 12;
- //
// radforward
//
this.radforward.BackColor = System.Drawing.Color.WhiteSmoke;
@@ -886,20 +853,6 @@
this.radforward.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.radforward.UseVisualStyleBackColor = false;
//
- // label1
- //
- this.label1.BackColor = System.Drawing.Color.Blue;
- this.label1.Dock = System.Windows.Forms.DockStyle.Bottom;
- this.label1.Font = new System.Drawing.Font("맑은 고딕", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
- this.label1.ForeColor = System.Drawing.Color.White;
- this.label1.Location = new System.Drawing.Point(607, 538);
- this.label1.Name = "label1";
- this.label1.Padding = new System.Windows.Forms.Padding(0, 3, 0, 3);
- this.label1.Size = new System.Drawing.Size(404, 38);
- this.label1.TabIndex = 9;
- this.label1.Text = "----------";
- this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- //
// guideSensor1
//
this.guideSensor1.Dock = System.Windows.Forms.DockStyle.Top;
@@ -912,11 +865,59 @@
this.guideSensor1.TabIndex = 8;
this.guideSensor1.Text = "guideSensor1";
//
+ // btBack180
+ //
+ this.btBack180.BackColor = System.Drawing.Color.WhiteSmoke;
+ this.btBack180.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btBack180.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.btBack180.Font = new System.Drawing.Font("맑은 고딕", 10F, System.Drawing.FontStyle.Bold);
+ this.btBack180.ForeColor = System.Drawing.Color.Black;
+ this.btBack180.Location = new System.Drawing.Point(205, 3);
+ this.btBack180.Name = "btBack180";
+ this.btBack180.Size = new System.Drawing.Size(196, 53);
+ this.btBack180.TabIndex = 15;
+ this.btBack180.Text = "백후 180도 회전 (Left)";
+ this.btBack180.UseVisualStyleBackColor = false;
+ this.btBack180.Click += new System.EventHandler(this.btBack180_Click);
+ //
+ // tableLayoutPanel2
+ //
+ this.tableLayoutPanel2.ColumnCount = 2;
+ this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel2.Controls.Add(this.btBack180, 1, 0);
+ this.tableLayoutPanel2.Controls.Add(this.btLeft180, 0, 0);
+ this.tableLayoutPanel2.Controls.Add(this.btRight180, 0, 1);
+ this.tableLayoutPanel2.Controls.Add(this.button2, 1, 1);
+ this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 438);
+ this.tableLayoutPanel2.Name = "tableLayoutPanel2";
+ this.tableLayoutPanel2.RowCount = 2;
+ this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel2.Size = new System.Drawing.Size(404, 118);
+ this.tableLayoutPanel2.TabIndex = 12;
+ //
+ // button2
+ //
+ this.button2.BackColor = System.Drawing.Color.WhiteSmoke;
+ this.button2.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.button2.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.button2.Font = new System.Drawing.Font("맑은 고딕", 10F, System.Drawing.FontStyle.Bold);
+ this.button2.ForeColor = System.Drawing.Color.Black;
+ this.button2.Location = new System.Drawing.Point(205, 62);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(196, 53);
+ this.button2.TabIndex = 15;
+ this.button2.Text = "백후 180도 회전(Right)";
+ this.button2.UseVisualStyleBackColor = false;
+ this.button2.Click += new System.EventHandler(this.button2_Click);
+ //
// fManual
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.Color.SlateGray;
- this.ClientSize = new System.Drawing.Size(1014, 579);
+ this.ClientSize = new System.Drawing.Size(1014, 618);
this.Controls.Add(this.panel2);
this.Controls.Add(this.label1);
this.Controls.Add(this.tableLayoutPanel1);
@@ -929,11 +930,11 @@
this.VisibleChanged += new System.EventHandler(this.fManual_VisibleChanged);
this.tableLayoutPanel1.ResumeLayout(false);
this.panel2.ResumeLayout(false);
- this.groupBox3.ResumeLayout(false);
this.groupBox1.ResumeLayout(false);
this.grpSpeed.ResumeLayout(false);
this.grpBunki.ResumeLayout(false);
this.groupBox2.ResumeLayout(false);
+ this.tableLayoutPanel2.ResumeLayout(false);
this.ResumeLayout(false);
}
@@ -979,11 +980,10 @@
private System.Windows.Forms.Button button1;
private arCtl.arLabel arLabel1;
private System.Windows.Forms.Panel panel12;
- private System.Windows.Forms.GroupBox groupBox3;
- private System.Windows.Forms.Button btBack180;
- private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Button btRight180;
- private System.Windows.Forms.Panel panel10;
private System.Windows.Forms.Button btLeft180;
+ private System.Windows.Forms.Button btBack180;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
+ private System.Windows.Forms.Button button2;
}
}
\ No newline at end of file
diff --git a/Cs_HMI/Project/ViewForm/fManual.cs b/Cs_HMI/Project/ViewForm/fManual.cs
index 8cac475..f1b55d0 100644
--- a/Cs_HMI/Project/ViewForm/fManual.cs
+++ b/Cs_HMI/Project/ViewForm/fManual.cs
@@ -331,7 +331,7 @@ namespace Project.ViewForm
}
-
+
private void arLabel1_Click_1(object sender, EventArgs e)
{
@@ -368,7 +368,12 @@ namespace Project.ViewForm
private void btBack180_Click(object sender, EventArgs e)
{
//[STX] C T B 0 0 0 0 9 9 [ETX]
- PUB.AGV.AGVMoveBack180Turn();
+ PUB.AGV.AGVMoveBack180Turn(true);
+ }
+
+ private void button2_Click(object sender, EventArgs e)
+ {
+ PUB.AGV.AGVMoveBack180Turn(false);
}
}
}
diff --git a/Cs_HMI/Project/fMain.Designer.cs b/Cs_HMI/Project/fMain.Designer.cs
index 8253637..d14d87c 100644
--- a/Cs_HMI/Project/fMain.Designer.cs
+++ b/Cs_HMI/Project/fMain.Designer.cs
@@ -299,7 +299,7 @@ namespace Project
this.btAutoRun.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.btAutoRun.GradientRepeatBG = false;
this.btAutoRun.isButton = true;
- this.btAutoRun.Location = new System.Drawing.Point(0, 288);
+ this.btAutoRun.Location = new System.Drawing.Point(0, 300);
this.btAutoRun.Margin = new System.Windows.Forms.Padding(0);
this.btAutoRun.MouseDownColor = System.Drawing.Color.Empty;
this.btAutoRun.MouseOverColor = System.Drawing.Color.Empty;
@@ -320,7 +320,7 @@ namespace Project
this.btAutoRun.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btAutoRun.SignColor = System.Drawing.Color.Yellow;
this.btAutoRun.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
- this.btAutoRun.Size = new System.Drawing.Size(259, 145);
+ this.btAutoRun.Size = new System.Drawing.Size(259, 152);
this.btAutoRun.TabIndex = 22;
this.btAutoRun.Text = "수동";
this.btAutoRun.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -367,7 +367,7 @@ namespace Project
this.btChargeA.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btChargeA.SignColor = System.Drawing.Color.Yellow;
this.btChargeA.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
- this.btChargeA.Size = new System.Drawing.Size(143, 144);
+ this.btChargeA.Size = new System.Drawing.Size(143, 150);
this.btChargeA.TabIndex = 141;
this.btChargeA.Text = "자동충전";
this.btChargeA.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -393,7 +393,7 @@ namespace Project
this.lbTime.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.lbTime.GradientRepeatBG = false;
this.lbTime.isButton = false;
- this.lbTime.Location = new System.Drawing.Point(5, 574);
+ this.lbTime.Location = new System.Drawing.Point(5, 593);
this.lbTime.Margin = new System.Windows.Forms.Padding(0);
this.lbTime.MouseDownColor = System.Drawing.Color.Yellow;
this.lbTime.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
@@ -982,7 +982,7 @@ namespace Project
this.panRight.Location = new System.Drawing.Point(1015, 146);
this.panRight.Name = "panRight";
this.panRight.Padding = new System.Windows.Forms.Padding(5, 0, 0, 0);
- this.panRight.Size = new System.Drawing.Size(264, 599);
+ this.panRight.Size = new System.Drawing.Size(264, 618);
this.panRight.TabIndex = 131;
//
// tableLayoutPanel1
@@ -1001,7 +1001,7 @@ namespace Project
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
- this.tableLayoutPanel1.Size = new System.Drawing.Size(259, 433);
+ this.tableLayoutPanel1.Size = new System.Drawing.Size(259, 452);
this.tableLayoutPanel1.TabIndex = 0;
//
// btHome
@@ -1043,7 +1043,7 @@ namespace Project
this.btHome.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btHome.SignColor = System.Drawing.Color.Yellow;
this.btHome.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
- this.btHome.Size = new System.Drawing.Size(116, 288);
+ this.btHome.Size = new System.Drawing.Size(116, 300);
this.btHome.TabIndex = 141;
this.btHome.Text = "홈";
this.btHome.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -1068,7 +1068,7 @@ namespace Project
this.btChargeM.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.btChargeM.GradientRepeatBG = false;
this.btChargeM.isButton = true;
- this.btChargeM.Location = new System.Drawing.Point(116, 144);
+ this.btChargeM.Location = new System.Drawing.Point(116, 150);
this.btChargeM.Margin = new System.Windows.Forms.Padding(0);
this.btChargeM.MouseDownColor = System.Drawing.Color.Yellow;
this.btChargeM.MouseOverColor = System.Drawing.Color.Lime;
@@ -1089,7 +1089,7 @@ namespace Project
this.btChargeM.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btChargeM.SignColor = System.Drawing.Color.Yellow;
this.btChargeM.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
- this.btChargeM.Size = new System.Drawing.Size(143, 144);
+ this.btChargeM.Size = new System.Drawing.Size(143, 150);
this.btChargeM.TabIndex = 141;
this.btChargeM.Text = "수동충전";
this.btChargeM.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -1498,7 +1498,7 @@ namespace Project
//
this.panel5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(18)))), ((int)(((byte)(18)))));
this.panel5.Dock = System.Windows.Forms.DockStyle.Bottom;
- this.panel5.Location = new System.Drawing.Point(5, 569);
+ this.panel5.Location = new System.Drawing.Point(5, 588);
this.panel5.Name = "panel5";
this.panel5.Size = new System.Drawing.Size(259, 5);
this.panel5.TabIndex = 142;
@@ -1752,7 +1752,7 @@ namespace Project
//
this.pandBottomDIO.Controls.Add(this.panel9);
this.pandBottomDIO.Dock = System.Windows.Forms.DockStyle.Bottom;
- this.pandBottomDIO.Location = new System.Drawing.Point(1, 745);
+ this.pandBottomDIO.Location = new System.Drawing.Point(1, 764);
this.pandBottomDIO.Margin = new System.Windows.Forms.Padding(0);
this.pandBottomDIO.Name = "pandBottomDIO";
this.pandBottomDIO.Size = new System.Drawing.Size(1278, 35);
@@ -1928,7 +1928,7 @@ namespace Project
this.panDlg.Location = new System.Drawing.Point(1, 146);
this.panDlg.Margin = new System.Windows.Forms.Padding(0);
this.panDlg.Name = "panDlg";
- this.panDlg.Size = new System.Drawing.Size(1014, 599);
+ this.panDlg.Size = new System.Drawing.Size(1014, 618);
this.panDlg.TabIndex = 146;
//
// arPanel2
@@ -2200,7 +2200,7 @@ namespace Project
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(15)))), ((int)(((byte)(15)))), ((int)(((byte)(15)))));
- this.ClientSize = new System.Drawing.Size(1280, 781);
+ this.ClientSize = new System.Drawing.Size(1280, 800);
this.Controls.Add(this.panDlg);
this.Controls.Add(this.panRight);
this.Controls.Add(this.arPanel2);
diff --git a/Cs_HMI/Project/fSetup.Designer.cs b/Cs_HMI/Project/fSetup.Designer.cs
index d148467..47f262e 100644
--- a/Cs_HMI/Project/fSetup.Designer.cs
+++ b/Cs_HMI/Project/fSetup.Designer.cs
@@ -39,6 +39,8 @@
this.btAutoCharge = new arCtl.arLabel();
this.btSpeaker = new arCtl.arLabel();
this.tabPage1 = new System.Windows.Forms.TabPage();
+ this.label7 = new System.Windows.Forms.Label();
+ this.vcXBID = new AGVControl.ValueSelect();
this.tbagvchannel = new System.Windows.Forms.TextBox();
this.tbagvpanid = new System.Windows.Forms.TextBox();
this.tbagvaddr = new System.Windows.Forms.TextBox();
@@ -202,8 +204,8 @@
this.bt1 = new arCtl.arLabel();
this.bt0 = new arCtl.arLabel();
this.btSave = new arCtl.arLabel();
- this.label7 = new System.Windows.Forms.Label();
- this.vcXBID = new AGVControl.ValueSelect();
+ this.label13 = new System.Windows.Forms.Label();
+ this.vcGDS = new AGVControl.ValueSelect();
this.tabControl1.SuspendLayout();
this.tabPage6.SuspendLayout();
this.panel1.SuspendLayout();
@@ -430,6 +432,8 @@
// tabPage1
//
this.tabPage1.BackColor = System.Drawing.Color.Navy;
+ this.tabPage1.Controls.Add(this.label13);
+ this.tabPage1.Controls.Add(this.vcGDS);
this.tabPage1.Controls.Add(this.label7);
this.tabPage1.Controls.Add(this.vcXBID);
this.tabPage1.Controls.Add(this.tbagvchannel);
@@ -481,6 +485,41 @@
this.tabPage1.TabIndex = 0;
this.tabPage1.Text = "AGV";
//
+ // label7
+ //
+ this.label7.AutoSize = true;
+ this.label7.Font = new System.Drawing.Font("궁서체", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.label7.ForeColor = System.Drawing.Color.WhiteSmoke;
+ this.label7.Location = new System.Drawing.Point(162, 524);
+ this.label7.Name = "label7";
+ this.label7.Size = new System.Drawing.Size(101, 24);
+ this.label7.TabIndex = 79;
+ this.label7.Text = "Xbee ID";
+ this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ //
+ // vcXBID
+ //
+ this.vcXBID.BackColorButton = System.Drawing.Color.White;
+ this.vcXBID.ButtonWidth = "30";
+ this.vcXBID.ColorBorder = System.Drawing.Color.White;
+ this.vcXBID.DecimalPosition = ((ushort)(0));
+ this.vcXBID.Font = new System.Drawing.Font("맑은 고딕", 26.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.vcXBID.FontSideButton = new System.Drawing.Font("Consolas", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.vcXBID.ForeColor = System.Drawing.Color.White;
+ this.vcXBID.ForeColorButton = System.Drawing.Color.Black;
+ this.vcXBID.Location = new System.Drawing.Point(269, 509);
+ this.vcXBID.MaxValue = 9999D;
+ this.vcXBID.MinValue = 0D;
+ this.vcXBID.Name = "vcXBID";
+ this.vcXBID.NullDisplay = "--";
+ this.vcXBID.SideButtonClickValue = 1D;
+ this.vcXBID.Size = new System.Drawing.Size(164, 54);
+ this.vcXBID.TabIndex = 78;
+ this.vcXBID.Tag = "SDH";
+ this.vcXBID.Text = "30";
+ this.vcXBID.Value = 30D;
+ this.vcXBID.ButtonClick += new System.EventHandler(this.vcChargeLow_ButtonClick);
+ //
// tbagvchannel
//
this.tbagvchannel.Font = new System.Drawing.Font("맑은 고딕", 26.25F, System.Drawing.FontStyle.Bold);
@@ -3333,40 +3372,39 @@
this.btSave.TextVisible = true;
this.btSave.Click += new System.EventHandler(this.btSave_Click);
//
- // label7
+ // label13
//
- this.label7.AutoSize = true;
- this.label7.Font = new System.Drawing.Font("궁서체", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
- this.label7.ForeColor = System.Drawing.Color.WhiteSmoke;
- this.label7.Location = new System.Drawing.Point(162, 524);
- this.label7.Name = "label7";
- this.label7.Size = new System.Drawing.Size(101, 24);
- this.label7.TabIndex = 79;
- this.label7.Text = "Xbee ID";
- this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.label13.AutoSize = true;
+ this.label13.Font = new System.Drawing.Font("궁서체", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.label13.ForeColor = System.Drawing.Color.WhiteSmoke;
+ this.label13.Location = new System.Drawing.Point(526, 524);
+ this.label13.Name = "label13";
+ this.label13.Size = new System.Drawing.Size(101, 24);
+ this.label13.TabIndex = 81;
+ this.label13.Text = "TurnGDS";
+ this.label13.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//
- // vcXBID
+ // vcTurnGDS
//
- this.vcXBID.BackColorButton = System.Drawing.Color.White;
- this.vcXBID.ButtonWidth = "30";
- this.vcXBID.ColorBorder = System.Drawing.Color.White;
- this.vcXBID.DecimalPosition = ((ushort)(0));
- this.vcXBID.Font = new System.Drawing.Font("맑은 고딕", 26.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
- this.vcXBID.FontSideButton = new System.Drawing.Font("Consolas", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.vcXBID.ForeColor = System.Drawing.Color.White;
- this.vcXBID.ForeColorButton = System.Drawing.Color.Black;
- this.vcXBID.Location = new System.Drawing.Point(269, 509);
- this.vcXBID.MaxValue = 9999D;
- this.vcXBID.MinValue = 0D;
- this.vcXBID.Name = "vcXBID";
- this.vcXBID.NullDisplay = "--";
- this.vcXBID.SideButtonClickValue = 1D;
- this.vcXBID.Size = new System.Drawing.Size(164, 54);
- this.vcXBID.TabIndex = 78;
- this.vcXBID.Tag = "SDH";
- this.vcXBID.Text = "30";
- this.vcXBID.Value = 30D;
- this.vcXBID.ButtonClick += new System.EventHandler(this.vcChargeLow_ButtonClick);
+ this.vcGDS.BackColorButton = System.Drawing.Color.White;
+ this.vcGDS.ButtonWidth = "30";
+ this.vcGDS.ColorBorder = System.Drawing.Color.White;
+ this.vcGDS.DecimalPosition = ((ushort)(0));
+ this.vcGDS.Font = new System.Drawing.Font("맑은 고딕", 26.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+ this.vcGDS.FontSideButton = new System.Drawing.Font("Consolas", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.vcGDS.ForeColor = System.Drawing.Color.White;
+ this.vcGDS.ForeColorButton = System.Drawing.Color.Black;
+ this.vcGDS.Location = new System.Drawing.Point(633, 509);
+ this.vcGDS.MaxValue = 9999D;
+ this.vcGDS.MinValue = 0D;
+ this.vcGDS.Name = "vcTurnGDS";
+ this.vcGDS.NullDisplay = "--";
+ this.vcGDS.SideButtonClickValue = 1D;
+ this.vcGDS.Size = new System.Drawing.Size(164, 54);
+ this.vcGDS.TabIndex = 80;
+ this.vcGDS.Tag = "SDH";
+ this.vcGDS.Text = "1000";
+ this.vcGDS.Value = 1000D;
//
// fSetup
//
@@ -3588,5 +3626,7 @@
private System.Windows.Forms.CheckBox chkClearPos;
private System.Windows.Forms.Label label7;
private AGVControl.ValueSelect vcXBID;
+ private System.Windows.Forms.Label label13;
+ private AGVControl.ValueSelect vcGDS;
}
}
\ No newline at end of file
diff --git a/Cs_HMI/Project/fSetup.cs b/Cs_HMI/Project/fSetup.cs
index ac1b00b..29bc233 100644
--- a/Cs_HMI/Project/fSetup.cs
+++ b/Cs_HMI/Project/fSetup.cs
@@ -77,6 +77,7 @@ namespace Project
vcSTT.Value = PUB.setting.STT;
vcSAD.Value = PUB.setting.SAD;
vcXBID.Value = PUB.setting.XBE_ID;
+ vcGDS.Value = PUB.setting.GDSValue;
tbagvaddr.Text = PUB.setting.AGV_ADDRESS;
tbagvpanid.Text = PUB.setting.AGV_PANID;
@@ -262,6 +263,7 @@ namespace Project
PUB.setting.STT = (int)vcSTT.Value;
PUB.setting.SAD = (int)vcSAD.Value;
PUB.setting.XBE_ID = (byte)vcXBID.Value;
+ PUB.setting.GDSValue = (UInt16)vcGDS.Value;
//속도 저/중/고
PUB.setting.SPD_L = (int)vcSpeedL.Value;
diff --git a/Cs_HMI/SubProject/AGV/Command.cs b/Cs_HMI/SubProject/AGV/Command.cs
index eab8dee..2307e44 100644
--- a/Cs_HMI/SubProject/AGV/Command.cs
+++ b/Cs_HMI/SubProject/AGV/Command.cs
@@ -65,7 +65,7 @@ namespace arDev
{
return AddCommand(cmd + data);
}
-
+
public bool LiftControl(LiftCommand cmd)
{
return AddCommand(eAgvCmd.LiftControl, cmd.ToString());
@@ -86,9 +86,10 @@ namespace arDev
return AddCommand(eAgvCmd.GateoutTime, time.ToString("0000"));
}
- public bool TurnGDSCenterScope()
+ public bool TurnGDSCenterScope(UInt16 time)
{
- return AddCommand(eAgvCmd.TurnGDSCenterScope);
+ if (time > 2000) time = 2000;
+ return AddCommand(eAgvCmd.TurnGDSCenterScope, time.ToString("0000"));
}
public bool AGVMoveLeft180Turn()
{
@@ -98,9 +99,10 @@ namespace arDev
{
return AddCommand(eAgvCmd.TurnRight);
}
- public bool AGVMoveBack180Turn()
+ public bool AGVMoveBack180Turn(bool leftTurn)
{
- return AddCommand(eAgvCmd.TurnBack);
+ var dir = leftTurn ? "L" : "R";
+ return AddCommand(eAgvCmd.BackAndTurn, dir);
}
@@ -165,7 +167,7 @@ namespace arDev
return AddCommand(cmds);
}
-
+
protected bool AddCommand(params string[] cmds)
{
bool ret = true;
@@ -240,8 +242,9 @@ namespace arDev
cmdString = $"CTR0000";
retval = AddCommand(cmdString);
break;
- case eAgvCmd.TurnBack:
- cmdString = $"CTB0000";
+ case eAgvCmd.BackAndTurn:
+ if (param.isEmpty()) param = "L";
+ cmdString = $"CTB000{param}";
retval = AddCommand(cmdString);
break;
case eAgvCmd.CallCancle:
@@ -270,7 +273,8 @@ namespace arDev
retval = AddCommand(cmdString);
break;
case eAgvCmd.TurnGDSCenterScope:
- cmdString = "SGS1000";
+ if (param.isEmpty()) param = "1000";
+ cmdString = "SGS{param}";
retval = AddCommand(cmdString);
break;
case eAgvCmd.BackTrunResumeTime:
diff --git a/Cs_HMI/SubProject/AGV/EnumData.cs b/Cs_HMI/SubProject/AGV/EnumData.cs
index 0c4a93f..1e57b04 100644
--- a/Cs_HMI/SubProject/AGV/EnumData.cs
+++ b/Cs_HMI/SubProject/AGV/EnumData.cs
@@ -151,7 +151,7 @@ namespace arDev
///
/// CMD : CTB0000
///
- TurnBack,
+ BackAndTurn,
///
/// CMD : CBZ