Files
XRLib/Assets/Resources/DataSample.json
2025-09-30 11:20:24 +09:00

632 lines
12 KiB
JSON

{
"name": "Manual Node Network Example",
"description": "Simple factory simulation with manually configured node network",
"physical_layout": {
"world_bounds": {
"x": {
"min": 0,
"max": 100
},
"y": {
"min": 0,
"max": 50
},
"z": {
"min": 0,
"max": 10
}
},
"unit": "meter",
"collision_margin": 0.2
},
"prefabs": [ // 시뮬레이션에서 사용될 개체들 설정값
{
"name": "raw_material_box", // 프리팹 이름
"label": "Raw Material Box", // 화면에 보여질 프리팹 이름
"width": 4, // 개체 길이
"length": 3, // 개체 넓이
"height": 2, // 개체 높이
"weight": 10, // 개체 무게
"priority_order": 1, // 개체 우선순위
"tags": [ // 개체의 태그 값
{
"key": "address", // 태그 키
"value": "anyang", // 태그 값(무조건 string, 서버에서 type을 보고 처리예정)
"type": "string" // 태그 값의 타입들 (string, number 한정)
}
]
}
],
"resources": [
{
"name": "agv_fleet",
"type": "agv",
"capacity": 2,
"speed": 2.0,
"failure_rate": 0.001,
"repair_time": 300
}
],
"queues": [ // 팔레트(queue)
{
"name": "buffer_A",
"label": "Buffer A",
"capacity": 20, // 최대용량
"is_unlimited": false, // 용량무제한
"policy": "fifo", // 대기열처리 방식
"wait_cost": 2.5, // 대기 비용
"cost_time": 60, // 대기비용 시간설정값
"physical": {
"position": {
"x": 30,
"y": 20,
"z": 0
},
"dimensions": {
"width": 3,
"depth": 2,
"height": 1.5
},
"orientation": 0,
"access_points": {
"input": {
"local_position": {
"x": -1.5,
"y": 0,
"z": 0
}
},
"output": {
"local_position": {
"x": 1.5,
"y": 0,
"z": 0
}
}
}
}
}
],
"rack": [ // 랙(rack)
{
"name": "raw_materials",
"label": "Raw Materials",
"is_unlimited": false, // 용량무제한
"rack_layout": { // 랙구조
"bay": 10,
"level": 5,
"depth": 2,
"bay_length": 10,
"level_length": 10,
"depth_length": 10
},
"entity_count_per_block": 4, // 칸당 개체 개수
"receiving_time_policy": { // 입고소요정책
"type": "exponential",
"mean": 10.0
},
"shipping_time_policy": { // 출고소요정책
"type": "exponential",
"mean": 10.0
},
"storage_cost_policy": { // 보관유지비용 정책
"type": "exponential",
"mean": 10.0
},
"required_resource": [ "forklift" ], // 자원 선택
"resource_usage": 1, // 자원 사용량
"physical": {
"position": {
"x": 10,
"y": 25,
"z": 0
},
"dimensions": {
"width": 6,
"depth": 4,
"height": 3
},
"orientation": 0,
"access_points": {
"pickup": {
"local_position": {
"x": 3,
"y": 0,
"z": 0
}
}
}
}
}
],
"asrs": [ // 자동창고(asrs)
{
"name": "automated_storage_A",
"label": "ASRS A",
"capacity": 1000, // 최대용량
"is_unlimited": false, // 용량무제한
"policy": "lifo", // 대기열처리 방식
"receive_policy": "closest_available_cell", // 입고정책
"shipping_policy": "batch_retrieval", // 출고정책
"rack_layout": { // 랙구조
"bay": 10,
"level": 5,
"depth": 2,
"bay_length": 10,
"level_length": 10,
"depth_length": 10
},
"entity_count_per_cell": 1, // 셀당 개체 개수
"receiving_time_policy": { // 입고소요정책
"type": "exponential",
"mean": 10.0
},
"shipping_time_policy": { // 출고소요정책
"type": "exponential",
"mean": 10.0
},
"storage_cost": 0.05, // 보관유지비용
"storage_cost_policy": "per_cell_per_day", // 보관유지비용 정책
"wait_cost": 0.5, // 대기 비용
"cost_time": 3600, // 대기비용 시간설정값
"required_resource": [ "stacker_crane_A" ], // 자원 선택
"resource_usage": 1, // 자원 사용량
"stacker_crane": { // 스태커 크레인
"horizontal_speed": 3.0, // 수평 이동속도
"vertical_speed": 1.5, // 수직 이동속도
"fork_cycle_time": 15 // 포크 사이클 타임 (for_cycle_time 오타 수정)
},
"physical": {
"position": {
"x": 10,
"y": 25,
"z": 0
},
"dimensions": {
"width": 6,
"depth": 4,
"height": 3
},
"orientation": 0,
"access_points": {
"pickup": {
"local_position": {
"x": 3,
"y": 0,
"z": 0
}
}
}
}
}
],
"sources": [ // 투입
{
"name": "material_source",
"label": "Material Source",
"prefab": "raw_material_box", // 생성될 개체 유형(prefab)
"spawn_time_policy": { // 생성 시간 정책
"type": "exponential",
"mean": 10.0
},
"spawn_count_policy": { // 생성 개수 정책
"type": "triangular",
"min_val": 10.0,
"mode": 30.0,
"max_val": 40.0
},
"max_spawn_limit": 1000, // 최대생산개수
"output_store": "raw_materials", // 배출 위치
"physical": {
"position": {
"x": 20,
"y": 10,
"z": 0
},
"dimensions": {
"width": 4,
"depth": 3,
"height": 2
},
"orientation": 0,
"access_points": {
"output": {
"local_position": {
"x": 2,
"y": 0,
"z": 0
}
}
}
}
}
],
"processors": [ // 작업
{
"name": "main_processor",
"label": "Main Processor",
"type": "combine", // 타입 - 조합, (split, transform 존재)
"policy": "priority_based", // 선택 정책
"processing_time": 20, // 처리 시간
"processing_time_distribution": { // 처리 시간 정책 (확률분포기반)
"type": "normal",
"mean": 20,
"std_dev": 2
},
"setup_time": 5, // 준비 시간
"setup_time_distribution": { // 준비 시간 (확률분포기반)
"type": "uniform",
"min": 4,
"max": 6
},
"defect_rate_policy": "normal", // 불량률 (확률분포기반)
"defect_rate_time": [ 1 ],
"input_stores": [
{
"store_name": "raw_materials",
"required_items": 2
}
],
"output_queue": "buffer_A",
"required_resource": [ "agv_fleet" ], // 할당된 자원
"physical": {
"position": {
"x": 50,
"y": 20,
"z": 0
},
"dimensions": {
"width": 6,
"depth": 4,
"height": 3
},
"orientation": 0,
"access_points": {
"input": {
"local_position": {
"x": -3,
"y": 0,
"z": 0
}
},
"output": {
"local_position": {
"x": 3,
"y": 0,
"z": 0
}
}
}
}
}
],
"sinks": [ // 배출
{
"name": "shipping_dock",
"label": "Shipping Dock",
"input_queues": [
"buffer_A"
],
"physical": {
"position": {
"x": 80,
"y": 10,
"z": 0
},
"dimensions": {
"width": 8,
"depth": 6,
"height": 3
},
"orientation": 0,
"access_points": {
"input": {
"local_position": {
"x": -4,
"y": 0,
"z": 0
}
}
}
}
}
],
"conveyors": [ // 컨베이어
{
"name": "main_conveyor", // 이름
"speed": 1.5, // 속도
"length": 20, // 컨베이어의 총 길이
"capacity": 15, // 용량
"routing_rules": [ // 조건분기룰
{
"name": "route_to_qc", // 분기 이름
"target_entity": "sample_entity_1", // 규칙을 적용할 개체
"rules": [ // 규칙들 무조건 or 조건
{
"tag": "product_tag_1", // 규칙에 적용될 테그 키
"value": "1", // 태그의 값
"rule": "more_than" // 조건식
}
],
"output_conveyor": "qc_conveyor" // 출력 컨베이어
},
{
"name": "default_route",
"target_entity": "sample_entity_1",
"rules": [ // 규칙들 무조건 or 조건
{
"tag": "주소", // 규칙에 적용될 테그 키
"value": "의왕", // 태그의 값
"rule": "equal" // 조건식(include, exclude)
}
],
"output_conveyor": "packing_conveyor"
}
],
"wait_rules": [ // 조건 대기룰
{
"name": "inspection_wait", // 대기 이름
"timeout": 300, // 타임아웃
"entity_limit": 5, // 제한 개체 수
"target_entity": "sample_entity_1", // 규칙을 적용할 개체
"rules": [ // 규칙들 무조건 or 조건
{
"tag": "product_tag_1", // 규칙에 적용될 테그 키
"value": "10", // 태그의 값
"rule": "more_less" // 조건식
}
]
}
],
"physical": {
"position": {
"x": 50,
"y": 20,
"z": 0
},
"dimensions": {
"width": 6,
"depth": 4,
"height": 3
}
}
}
],
"node_network": {
"nodes": [
{
"id": "node_source_output",
"position": {
"x": 22,
"y": 10,
"z": 0
},
"type": "station",
"connected_component": "material_source",
"connection_type": "output",
"properties": {
"description": "Material source output point"
}
},
{
"id": "node_storage_pickup",
"position": {
"x": 13,
"y": 25,
"z": 0
},
"type": "station",
"connected_component": "raw_materials",
"connection_type": "pickup",
"properties": {
"description": "Raw materials pickup point"
}
},
{
"id": "node_processor_input",
"position": {
"x": 47,
"y": 20,
"z": 0
},
"type": "station",
"connected_component": "main_processor",
"connection_type": "input",
"properties": {
"description": "Main processor input point"
}
},
{
"id": "node_processor_output",
"position": {
"x": 53,
"y": 20,
"z": 0
},
"type": "station",
"connected_component": "main_processor",
"connection_type": "output",
"properties": {
"description": "Main processor output point"
}
},
{
"id": "node_buffer_input",
"position": {
"x": 28.5,
"y": 20,
"z": 0
},
"type": "station",
"connected_component": "buffer_A",
"connection_type": "input",
"properties": {
"description": "Buffer A input point"
}
},
{
"id": "node_buffer_output",
"position": {
"x": 31.5,
"y": 20,
"z": 0
},
"type": "station",
"connected_component": "buffer_A",
"connection_type": "output",
"properties": {
"description": "Buffer A output point"
}
},
{
"id": "node_sink_input",
"position": {
"x": 76,
"y": 10,
"z": 0
},
"type": "station",
"connected_component": "shipping_dock",
"connection_type": "input",
"properties": {
"description": "Shipping dock input point"
}
},
{
"id": "node_finished_delivery",
"position": {
"x": 66,
"y": 25,
"z": 0
},
"type": "station",
"connected_component": "finished_goods",
"connection_type": "delivery",
"properties": {
"description": "Finished goods delivery point"
}
},
{
"id": "central_hub",
"position": {
"x": 40,
"y": 25,
"z": 0
},
"type": "waypoint",
"properties": {
"description": "Central traffic hub"
}
},
{
"id": "agv_parking_zone",
"position": {
"x": 10,
"y": 10,
"z": 0
},
"type": "parking",
"properties": {
"capacity": 2,
"description": "AGV parking area"
}
},
{
"id": "charging_station",
"position": {
"x": 90,
"y": 40,
"z": 0
},
"type": "charging",
"properties": {
"charging_power": 5.0,
"description": "AGV charging station"
}
}
],
"paths": [
{
"from": "node_source_output",
"to": "node_storage_pickup",
"bidirectional": false
},
{
"from": "node_storage_pickup",
"to": "central_hub",
"bidirectional": true
},
{
"from": "central_hub",
"to": "node_processor_input",
"bidirectional": true
},
{
"from": "node_processor_output",
"to": "node_buffer_input",
"bidirectional": false
},
{
"from": "node_buffer_output",
"to": "central_hub",
"bidirectional": true
},
{
"from": "central_hub",
"to": "node_sink_input",
"bidirectional": true
},
{
"from": "central_hub",
"to": "node_finished_delivery",
"bidirectional": true
},
{
"from": "agv_parking_zone",
"to": "central_hub",
"bidirectional": true
},
{
"from": "central_hub",
"to": "charging_station",
"bidirectional": true
}
],
"agv_specs": {
"speed": 2.0,
"acceleration": 1.0,
"deceleration": 1.2,
"max_load": 10.0,
"empty_weight": 50.0,
"battery_capacity": 24.0,
"charging_power": 5.0,
"base_power_consumption": 0.5,
"max_rotation_speed": 90.0,
"rotation_acceleration": 45.0,
"stop_time": 2.0,
"turn_around_time": 3.0
}
},
"groups": {
"production": {
"label": "Production Line",
"components": [
"material_source",
"main_processor"
],
"queues": [
"buffer_A"
]
},
"logistics": {
"label": "Logistics",
"components": [
"shipping_dock"
],
"stores": [
"raw_materials",
"finished_goods"
]
}
}
}