VTM 맞춤
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#nullable enable
|
||||
|
||||
using SampleProject;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
@@ -96,9 +97,41 @@ namespace UVC.Factory.Alarm
|
||||
// - 유효한 데이터가 수신되면 OnUpdateData 메서드를 호출하여 처리합니다.
|
||||
var pipelineInfo = new MqttSubscriptionConfig("ALARM");
|
||||
|
||||
// 데이터 마스크(DataMask) 정의:
|
||||
// 수신할 데이터의 구조를 미리 정의합니다. 여기서 정의된 키(Key)들을 기준으로 데이터를 파싱합니다.
|
||||
var alarmDataMask = new DataMask();
|
||||
alarmDataMask.ObjectName = "ALARM"; // Alarm 객체의 이름을 설정합니다.
|
||||
alarmDataMask.ObjectIdKey = "ID"; // Alarm의 고유 식별자로 사용할 키를 설정합니다.
|
||||
//alarmDataMask["ID"] = "";
|
||||
//alarmDataMask["ALARM_TYPE"] = "";
|
||||
//alarmDataMask["LEVEL"] = "";
|
||||
//alarmDataMask["LOGISTIC"] = "";
|
||||
//alarmDataMask["STATE"] = "";
|
||||
//alarmDataMask["MESSAGE"] = "";
|
||||
//alarmDataMask["CODE"] = "";
|
||||
//alarmDataMask["ICON"] = "";
|
||||
//alarmDataMask["MACHINENAME"] = "";
|
||||
//alarmDataMask["SHOPNAME"] = "";
|
||||
//alarmDataMask["TRANSPORT_EQP_NAME"] = "";
|
||||
//alarmDataMask["TRANSPORT_UNIT_NAME"] = "";
|
||||
//alarmDataMask["TRANSPORT_EQP_ID"] = "";
|
||||
//alarmDataMask["TRANSPORT_UNIT_ID"] = "";
|
||||
//alarmDataMask["CLEAR_TIME"] = DateTime.Now;
|
||||
//alarmDataMask["SET_TIME"] = DateTime.Now;
|
||||
//alarmDataMask["UPDATE_TIME"] = DateTime.Now;
|
||||
//alarmDataMask["TIMESTAMP"] = DateTime.Now;
|
||||
|
||||
// 데이터 유효성 검사기(DataValidator) 설정:
|
||||
// 수신된 데이터가 유효한지 검사하는 규칙을 추가합니다.
|
||||
// 여기서는 "MACHINENAME" 필드가 null이 아닌지 확인합니다.
|
||||
DataValidator alarmValidator = new DataValidator();
|
||||
alarmValidator.AddValidator("MACHINENAME", value => value != null);
|
||||
|
||||
DataMapper mapper = new DataMapper(alarmDataMask);
|
||||
|
||||
var dataMapperValidator = DataMapperValidator.Get("ALARM");
|
||||
if (dataMapperValidator?.DataMapper != null) pipelineInfo.setDataMapper(dataMapperValidator.DataMapper);
|
||||
if (dataMapperValidator?.Validator != null) pipelineInfo.setValidator(dataMapperValidator.Validator);
|
||||
pipelineInfo.SetDataMapper(mapper);
|
||||
pipelineInfo.SetValidator(alarmValidator);
|
||||
|
||||
// 4. 생성한 파이프라인을 전역 MQTT 파이프라인에 추가하여 데이터 수신을 시작합니다.
|
||||
DataRepository.Instance.MqttReceiver.Add(pipelineInfo);
|
||||
|
||||
@@ -112,10 +112,32 @@ namespace UVC.Factory.Component
|
||||
//playback에서도 데이터를 업데이트 하기에 DataRepository에 핸들러를 추가합니다.
|
||||
DataRepository.Instance.AddDataUpdateHandler("AGV", OnUpdateData);
|
||||
|
||||
var agvDataMask = new DataMask();
|
||||
agvDataMask.ObjectName = "AGV"; // AGV 객체의 이름을 설정합니다.
|
||||
agvDataMask.ObjectIdKey = "VHL_NAME"; // AGV의 고유 식별자로 사용할 키를 설정합니다.
|
||||
//agvDataMask["VHL_NAME"] = "";
|
||||
//agvDataMask["AGV_IDX"] = "";
|
||||
//agvDataMask["B_INSTALL"] = "";
|
||||
//agvDataMask["NODE_ID"] = "";
|
||||
//agvDataMask["REAL_ID"] = "";
|
||||
//agvDataMask["VHL_STATE"] = "";
|
||||
//agvDataMask["BAY_LIST"] = "";
|
||||
//agvDataMask["X"] = 0;
|
||||
//agvDataMask["Y"] = 0;
|
||||
//agvDataMask["DEGREE"] = 0.0;
|
||||
//agvDataMask["MODE"] = "";
|
||||
//agvDataMask["BATT"] = "";
|
||||
//agvDataMask["SUB_GOAL"] = "";
|
||||
//agvDataMask["FINAL_GOAL"] = "";
|
||||
//agvDataMask["JOB_ID"] = "";
|
||||
//agvDataMask["CARRIER_ID"] = "";
|
||||
//agvDataMask["TIMESTAMP"] = DateTime.Now;
|
||||
|
||||
DataMapper mapper = new DataMapper(agvDataMask);
|
||||
|
||||
var mqttConfig = new MqttSubscriptionConfig("AGV");
|
||||
var dataMapperValidator = DataMapperValidator.Get("AGV");
|
||||
if (dataMapperValidator?.DataMapper != null) mqttConfig.setDataMapper(dataMapperValidator.DataMapper);
|
||||
if (dataMapperValidator?.Validator != null) mqttConfig.setValidator(dataMapperValidator.Validator);
|
||||
mqttConfig.SetDataMapper(mapper);
|
||||
|
||||
|
||||
// 생성한 파이프라인 정보를 전역 MQTT 파이프라인에 추가합니다.
|
||||
DataRepository.Instance.MqttReceiver.Add(mqttConfig);
|
||||
|
||||
@@ -244,9 +244,9 @@ namespace UVC.Factory.Component
|
||||
/// category 이름을 key, FactoryObjectInfo 리스트가 value인 딕셔너리를 반환합니다.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public Dictionary<string, List<FactoryObjectInfo>> GetFactoryObjectInfosByCategory()
|
||||
public SortedDictionary<string, List<FactoryObjectInfo>> GetFactoryObjectInfosByCategory()
|
||||
{
|
||||
Dictionary<string, List<FactoryObjectInfo>> categoryDict = new Dictionary<string, List<FactoryObjectInfo>>();
|
||||
SortedDictionary<string, List<FactoryObjectInfo>> categoryDict = new SortedDictionary<string, List<FactoryObjectInfo>>();
|
||||
foreach (var kvp in FactoryObjects)
|
||||
{
|
||||
var info = kvp.Key;
|
||||
@@ -256,6 +256,14 @@ namespace UVC.Factory.Component
|
||||
}
|
||||
categoryDict[info.Category].Add(info);
|
||||
}
|
||||
|
||||
//key 순 정렬
|
||||
|
||||
//name 순 정렬
|
||||
foreach (var key in categoryDict.Keys)
|
||||
{
|
||||
categoryDict[key].Sort((a, b) => a.Name.CompareTo(b.Name));
|
||||
}
|
||||
return categoryDict;
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace UVC.Factory.Component
|
||||
DataRepository.Instance.AddDataUpdateHandler("PORT", OnUpdateData);
|
||||
|
||||
var mqttConfig = new MqttSubscriptionConfig("PORT");
|
||||
mqttConfig.setDataMapper(new DataMapper(new DataMask
|
||||
mqttConfig.SetDataMapper(new DataMapper(new DataMask
|
||||
{
|
||||
ObjectIdKey = "PORT_ID",
|
||||
ObjectName = "PORTNAME"
|
||||
@@ -63,7 +63,7 @@ namespace UVC.Factory.Component
|
||||
return;
|
||||
}
|
||||
ports[name] = port;
|
||||
Debug.Log($"포트 {name}가 추가되었습니다.");
|
||||
//Debug.Log($"포트 {name}가 추가되었습니다.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -85,7 +85,9 @@ namespace UVC.Factory.Component
|
||||
var RemovedItems = arr.RemovedItems;
|
||||
var ModifiedList = arr.ModifiedList;
|
||||
|
||||
Debug.Log($"PORTManager received data: count:{arr.Count}, Added={AddedItems.Count}, Removed={RemovedItems.Count}, Modified={ModifiedList.Count}");
|
||||
var portsIds = new HashSet<string>(ports.Keys);
|
||||
|
||||
Debug.Log($"PORTManager received data: ports:{ports.Count} portsIds:{portsIds.Count} count:{arr.Count}, Added={AddedItems.Count}, Removed={RemovedItems.Count}, Modified={ModifiedList.Count}");
|
||||
|
||||
// 추가된 항목 처리
|
||||
foreach (var item in AddedItems)
|
||||
@@ -98,7 +100,8 @@ namespace UVC.Factory.Component
|
||||
{
|
||||
Port port = ports[portId];
|
||||
port.Info = new FactoryObjectInfo(
|
||||
item.GetString("PORTNAME"),
|
||||
//item.GetString("PORTNAME"),
|
||||
item.GetString("PORT_ID"),
|
||||
item.GetString("PORT_ID"),
|
||||
port.areaType.ToString(),
|
||||
port.areaType.ToString(),
|
||||
|
||||
74
Assets/Scripts/UVC/Factory/Component/TestObject.cs
Normal file
74
Assets/Scripts/UVC/Factory/Component/TestObject.cs
Normal file
@@ -0,0 +1,74 @@
|
||||
using SampleProject;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UVC.Core;
|
||||
using UVC.Data;
|
||||
using UVC.Data.Core;
|
||||
using UVC.Data.Mqtt;
|
||||
|
||||
namespace UVC.Factory.Component
|
||||
{
|
||||
public class TestObject: MonoBehaviour
|
||||
{
|
||||
void Start()
|
||||
{
|
||||
var agvDataMask = new DataMask();
|
||||
agvDataMask.ObjectName = "AGV_RECIPE"; // AGV 객체의 이름을 설정합니다.
|
||||
agvDataMask.ObjectIdKey = "VHL_NAME"; // AGV의 고유 식별자로 사용할 키를 설정합니다.
|
||||
//agvDataMask["VHL_NAME"] = "";
|
||||
//agvDataMask["AGV_IDX"] = "";
|
||||
//agvDataMask["B_INSTALL"] = "";
|
||||
//agvDataMask["NODE_ID"] = "";
|
||||
//agvDataMask["REAL_ID"] = "";
|
||||
//agvDataMask["VHL_STATE"] = "";
|
||||
//agvDataMask["BAY_LIST"] = "";
|
||||
//agvDataMask["X"] = 0;
|
||||
//agvDataMask["Y"] = 0;
|
||||
//agvDataMask["DEGREE"] = 0.0;
|
||||
//agvDataMask["MODE"] = "";
|
||||
//agvDataMask["BATT"] = "";
|
||||
//agvDataMask["SUB_GOAL"] = "";
|
||||
//agvDataMask["FINAL_GOAL"] = "";
|
||||
//agvDataMask["JOB_ID"] = "";
|
||||
//agvDataMask["CARRIER_ID"] = "";
|
||||
//agvDataMask["TIMESTAMP"] = DateTime.Now;
|
||||
|
||||
DataMapper mapper = new DataMapper(agvDataMask);
|
||||
|
||||
var mqttConfig = new MqttSubscriptionConfig("AGV_RECIPE");
|
||||
mqttConfig.SetDataMapper(mapper);
|
||||
|
||||
// 생성한 파이프라인 정보를 전역 MQTT 파이프라인에 추가합니다.
|
||||
DataRepository.Instance.MqttReceiver.Add(mqttConfig);
|
||||
|
||||
SceneMain.Instance.Initialized += OnSceneInitialized;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 씬이 완전히 초기화된 후 호출됩니다.
|
||||
/// AGV 데이터를 수신하기 위한 MQTT 파이프라인을 설정합니다.
|
||||
/// </summary>
|
||||
private void OnSceneInitialized()
|
||||
{
|
||||
//playback에서도 데이터를 업데이트 하기에 DataRepository에 핸들러를 추가합니다.
|
||||
DataRepository.Instance.AddDataUpdateHandler("AGV_RECIPE", OnUpdateData);
|
||||
}
|
||||
|
||||
public void OnUpdateData(IDataObject data)
|
||||
{
|
||||
if (data == null) return;
|
||||
|
||||
DataArray? arr = data as DataArray;
|
||||
if (arr == null || arr.Count == 0) return;
|
||||
|
||||
|
||||
// 데이터 배열에서 추가, 제거, 수정된 항목 리스트를 가져옵니다.
|
||||
var AddedItems = arr.AddedItems;
|
||||
var RemovedItems = arr.RemovedItems;
|
||||
var ModifiedList = arr.ModifiedList;
|
||||
|
||||
Debug.Log($"TestObject received data: count:{arr.Count}, Added={AddedItems.Count}, Removed={RemovedItems.Count}, Modified={ModifiedList.Count}");
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/UVC/Factory/Component/TestObject.cs.meta
Normal file
2
Assets/Scripts/UVC/Factory/Component/TestObject.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 82997ed418c58a24a84cc69b11142bc0
|
||||
Reference in New Issue
Block a user