DataArray, DataObject pool 적용. 버그 수정. AGV 움직임 튀는 거 수정 필요

This commit is contained in:
logonkhi
2025-06-26 19:46:13 +09:00
parent aa9caab761
commit ad034d8246
19 changed files with 1420 additions and 497 deletions

View File

@@ -100,6 +100,8 @@ namespace UVC.Factory.Component
await InitializePoolAsync();
//데이터를 어떤 형식으로 받을지 정의합니다.
var dataMask = new DataMask();
dataMask.ObjectName = "AGV"; // AGV 객체의 이름을 설정합니다.
dataMask.ObjectIdKey = "VHL_NAME"; // AGV의 고유 식별자로 사용할 키를 설정합니다.
dataMask["VHL_NAME"] = "";
dataMask["AGV_IDX"] = "";
dataMask["B_INSTALL"] = "";
@@ -123,11 +125,12 @@ namespace UVC.Factory.Component
// 데이터가 업데이트되면 OnUpdateData 메서드를 호출하여 처리합니다.
DataValidator validator = new DataValidator();
validator.AddValidator("JOB_ID", value => value != null);
//validator.AddValidator("JOB_ID", value => value != null);
validator.AddValidator("VHL_NAME", value => value != null && value!.ToString() == "HFF09CNA8016");
var pipelineInfo = new MQTTPipeLineInfo("AGV")
.setDataMapper(new DataMapper(dataMask))
.setValidator(validator)
//.setValidator(validator)
.setHandler(OnUpdateData);
// 생성한 파이프라인 정보를 전역 MQTT 파이프라인에 추가합니다.
@@ -157,18 +160,23 @@ namespace UVC.Factory.Component
/// </summary>
/// <param name="data">수신된 데이터 객체 (DataArray 형태)</param>
public void OnUpdateData(IDataObject? data)
{
{
if (data == null || agvPool == null) return;
DataArray? arr = data as DataArray;
if (arr == null || arr.Count == 0) return;
if (arr == null) return;
if (arr.Count == 0)
{
arr.ReturnToPool();
return;
}
// 데이터 배열에서 추가, 제거, 수정된 항목 리스트를 가져옵니다.
var AddedItems = arr.AddedItems;
var RemovedItems = arr.RemovedItems;
var ModifiedList = arr.ModifiedList;
//Debug.Log($"AGVManager received data: Added={AddedItems.Count}, Removed={RemovedItems.Count}, Modified={ModifiedList.Count}");
Debug.Log($"AGVManager received data: Added={AddedItems.Count}, Removed={RemovedItems.Count}, Modified={ModifiedList.Count}");
// 새로 추가된 AGV 처리
foreach (var item in AddedItems.ToList())
@@ -186,7 +194,7 @@ namespace UVC.Factory.Component
"",
item.GetString("MODE")
);
agv.UpdateData(item);
agv.UpdateData(item.Clone());
}
// 제거된 AGV 처리
@@ -208,10 +216,11 @@ namespace UVC.Factory.Component
AGV? agv = agvPool.FindActiveItem(vhlName);
if (agv != null)
{
agv.UpdateData(item);
agv.UpdateData(item.Clone());
}
}
arr.ReturnToPool();
}
/// <summary>