This commit is contained in:
backuppc
2025-12-15 17:34:43 +09:00
parent 9db88e5d6b
commit a7f938ff19
29 changed files with 535 additions and 1556 deletions

View File

@@ -635,7 +635,7 @@ namespace AGVSimulator.Forms
/// <summary>
/// 맵 스캔 모드에서 RFID로부터 노드 생성
/// </summary>
private void CreateNodeFromRfidScan(string rfidId, VirtualAGV selectedAGV)
private void CreateNodeFromRfidScan(ushort rfidId, VirtualAGV selectedAGV)
{
try
{
@@ -644,7 +644,7 @@ namespace AGVSimulator.Forms
var currentDirection = directionItem?.Direction ?? AgvDirection.Forward;
// 중복 RFID 확인
var existingNode = _simulatorCanvas.Nodes?.FirstOrDefault(n => n.RfidId.Equals(rfidId, StringComparison.OrdinalIgnoreCase));
var existingNode = _simulatorCanvas.Nodes?.FirstOrDefault(n => n.RfidId == rfidId);
if (existingNode != null)
{
// 이미 존재하는 노드로 이동
@@ -805,7 +805,7 @@ namespace AGVSimulator.Forms
if (agv.CurrentNodeId != null && agv.CurrentNodeId != _lastSentNodeId)
{
var rfid = GetRfidByNodeId(agv.CurrentNodeId);
if (!string.IsNullOrEmpty(rfid))
if (rfid > 0)
{
SendTag(rfid);
_lastSentNodeId = agv.CurrentNodeId;
@@ -842,7 +842,7 @@ namespace AGVSimulator.Forms
// RFID 값 확인
var rfidId = _rfidTextBox.Text.Trim();
if (string.IsNullOrEmpty(rfidId))
if (ushort.TryParse(rfidId,out ushort rfidvalue)==false)
{
MessageBox.Show("RFID 값을 입력해주세요.", "알림", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
@@ -856,13 +856,13 @@ namespace AGVSimulator.Forms
// 맵 스캔 모드일 때: 노드 자동 생성
if (_isMapScanMode)
{
CreateNodeFromRfidScan(rfidId, selectedAGV);
CreateNodeFromRfidScan(rfidvalue, selectedAGV);
this._simulatorCanvas.FitToNodes();
return;
}
// RFID에 해당하는 노드 직접 찾기
var targetNode = _simulatorCanvas.Nodes?.FirstOrDefault(n => n.RfidId.Equals(rfidId, StringComparison.OrdinalIgnoreCase));
var targetNode = _simulatorCanvas.Nodes?.FirstOrDefault(n => n.RfidId == rfidvalue);
if (targetNode == null)
{
MessageBox.Show($"RFID '{rfidId}'에 해당하는 노드를 찾을 수 없습니다.\n\n사용 가능한 RFID 목록:\n{GetAvailableRfidList()}",
@@ -1255,10 +1255,12 @@ namespace AGVSimulator.Forms
/// <summary>
/// 노드 ID를 RFID 값으로 변환 (NodeResolver 사용)
/// </summary>
private string GetRfidByNodeId(string nodeId)
private ushort GetRfidByNodeId(string nodeId)
{
var node = _simulatorCanvas.Nodes?.FirstOrDefault(n => n.Id == nodeId);
return node?.HasRfid() == true ? node.RfidId : nodeId;
if (node == null) return 0;
if (node.HasRfid()) return node.RfidId;
else return 0;
}
/// <summary>
@@ -1267,9 +1269,9 @@ namespace AGVSimulator.Forms
private string GetDisplayName(string nodeId)
{
var node = _simulatorCanvas.Nodes?.FirstOrDefault(n => n.Id == nodeId);
if (node != null && !string.IsNullOrEmpty(node.RfidId))
if (node != null && node.HasRfid())
{
return node.RfidId;
return node.RfidId.ToString("0000");
}
return $"({nodeId})";
}
@@ -1366,7 +1368,7 @@ namespace AGVSimulator.Forms
{
var info = advancedResult.DetailedPath[i];
var rfidId = GetRfidByNodeId(info.NodeId);
var nextRfidId = info.NextNodeId != null ? GetRfidByNodeId(info.NextNodeId) : "END";
var nextRfidId = info.NextNodeId != null ? GetRfidByNodeId(info.NextNodeId).ToString("0000") : "-END-";
var flags = new List<string>();
if (info.CanRotate) flags.Add("회전가능");
@@ -1616,12 +1618,8 @@ namespace AGVSimulator.Forms
/// </summary>
private string GetNodeDisplayName(MapNode node)
{
if (node == null)
return "-";
if (!string.IsNullOrEmpty(node.RfidId))
return node.RfidId;
if (node == null) return "-";
if (node.HasRfid()) return node.RfidId.ToString("0000");
return $"({node.Id})";
}
@@ -1792,7 +1790,7 @@ namespace AGVSimulator.Forms
this.Invoke((MethodInvoker)delegate
{
// RFID 텍스트박스에 값 입력
_rfidTextBox.Text = nodeA.RfidId;
_rfidTextBox.Text = nodeA.RfidId.ToString();
// 방향 콤보박스 선택
SetDirectionComboBox(direction);
@@ -1808,7 +1806,7 @@ namespace AGVSimulator.Forms
this.Invoke((MethodInvoker)delegate
{
// RFID 텍스트박스에 값 입력
_rfidTextBox.Text = nodeB.RfidId;
_rfidTextBox.Text = nodeB.RfidId.ToString();
// 방향 콤보박스 선택
SetDirectionComboBox(direction);
@@ -2415,19 +2413,18 @@ namespace AGVSimulator.Forms
catch { }
}
public void SendTag(string tagno)
public void SendTag(ushort tagno)
{
if (_emulatorPort == null || !_emulatorPort.IsOpen) return;
tagno = tagno.PadLeft(6, '0');
if (tagno.Length > 6) tagno = tagno.Substring(0, 6);
var tagnostr = tagno.ToString("000000");
var barr = new List<byte>();
barr.Add(0x02);
barr.Add((byte)'T');
barr.Add((byte)'A');
barr.Add((byte)'G');
barr.AddRange(System.Text.Encoding.Default.GetBytes(tagno));
barr.AddRange(System.Text.Encoding.Default.GetBytes(tagnostr));
barr.Add((byte)'*');
barr.Add((byte)'*');
barr.Add(0x03);