commit eda97fc5bccd8ecd13aa9e7510e59f48f32795bd Author: igurielidze Date: Fri Mar 20 17:46:47 2026 +0400 real commit diff --git a/app.js b/app.js new file mode 100644 index 0000000..de7f388 --- /dev/null +++ b/app.js @@ -0,0 +1,910 @@ +// ============================================================================= +// Constants +// ============================================================================= + +const CANVAS_W = 1920; +const CANVAS_H = 1080; +const ZOOM_MIN = 0.1; +const ZOOM_MAX = 5; +const ZOOM_IN_FACTOR = 1.1; +const ZOOM_OUT_FACTOR = 0.9; +const PDF_ZOOM_STEP = 1.1; +const PDF_MIN_SCALE = 0.05; +const SNAP_SEARCH_RADIUS = 20; +const ROTATION_STEP = 15; +const CONVEYOR_MIN_W = 40; + +const PRIORITY_TYPES = new Set([ + 'conveyor', 'conveyor_v', 'chute', 'chute_v', + 'tipper', 'tipper_v', 'extendo', 'extendo_v', + 'induction', 'induction_v', +]); + +const SYMBOLS = [ + { id: 'conveyor', name: 'Conveyor', file: 'symbols/conveyor_no_comm.svg', w: 154, h: 30 }, + { id: 'conveyor_v', name: 'Conveyor (V)', file: 'symbols/conveyor_no_comm.svg', w: 154, h: 30, defaultRotation: 90 }, + { id: 'chute', name: 'Chute', file: 'symbols/chute_no_comm.svg', w: 68, h: 20 }, + { id: 'chute_v', name: 'Chute (V)', file: 'symbols/chute_no_comm.svg', w: 68, h: 20, defaultRotation: 90 }, + { id: 'tipper', name: 'Tipper', file: 'symbols/tipper_no_comm.svg', w: 68, h: 20 }, + { id: 'tipper_v', name: 'Tipper (V)', file: 'symbols/tipper_no_comm.svg', w: 68, h: 20, defaultRotation: 90 }, + { id: 'extendo', name: 'Extendo', file: 'symbols/extendo_no_comm.svg', w: 73, h: 20 }, + { id: 'extendo_v', name: 'Extendo (V)', file: 'symbols/extendo_no_comm.svg', w: 73, h: 20, defaultRotation: 90 }, + { id: 'induction', name: 'Induction', file: 'symbols/induction_no_comm.svg',w: 42, h: 20 }, + { id: 'induction_v',name: 'Induction (V)', file: 'symbols/induction_no_comm.svg',w: 42, h: 20, defaultRotation: 90 }, + { id: 'pmm', name: 'PMM', file: 'symbols/pmm_no_comm.svg', w: 49, h: 20 }, + { id: 'dpm', name: 'DPM', file: 'symbols/dpm_no_comm.svg', w: 35, h: 20 }, + { id: 'fio_sio_fioh', name: 'FIO/SIO/FIOH', file: 'symbols/fio_sio_fioh_no_comm.svg', w: 14, h: 20 }, + { id: 'pressure_sensor', name: 'Pressure Sensor', file: 'symbols/pressure_sensor_no_comm.svg', w: 20, h: 20 }, + { id: 'epc', name: 'EPC', file: 'symbols/epc_no_comm.svg', w: 84, h: 20 }, + { id: 'photoeye', name: 'Photoeye', file: 'symbols/photoeye_no_comm.svg', w: 56, h: 20 }, + { id: 'ip_camera', name: 'IP Camera', file: 'symbols/ip_camera.svg', w: 20, h: 20 }, + { id: 'mcm', name: 'MCM', file: 'symbols/mcm_no_comm.svg', w: 60, h: 20 }, + { id: 'diverter', name: 'Diverter', file: 'symbols/diverter_no_comm.svg', w: 31, h: 20 }, + { id: 'jam_reset', name: 'Jam Reset (JR)', file: 'symbols/jam_reset_no_comm.svg',w: 20, h: 20 }, + { id: 'start', name: 'Start (S)', file: 'symbols/start_no_comm.svg', w: 20, h: 20 }, + { id: 'chute_enable', name: 'Chute Enable', file: 'symbols/chute_enable_no_comm.svg', w: 20, h: 20 }, + { id: 'package_release', name: 'Package Release', file: 'symbols/package_release_no_comm.svg', w: 20, h: 20 }, + { id: 'start_stop', name: 'Start Stop (SS)', file: 'symbols/start_stop_no_comm.svg', w: 40, h: 20 }, +]; + +// ============================================================================= +// Cached DOM References +// ============================================================================= + +const dom = { + gridSize: document.getElementById('gridSize'), + minSpacing: document.getElementById('minSpacing'), + snapEnabled: document.getElementById('snapEnabled'), + showGrid: document.getElementById('showGrid'), + gridOverlay: document.getElementById('grid-overlay'), + dropZone: document.getElementById('drop-zone'), + palette: document.getElementById('palette'), + canvas: document.getElementById('canvas'), + canvasWrapper: document.getElementById('canvas-wrapper'), + pdfBackground: document.getElementById('pdf-background'), + pdfInfo: document.getElementById('pdfInfo'), + editBackgroundBtn: document.getElementById('editBackground'), + importFile: document.getElementById('importFile'), + pdfFile: document.getElementById('pdfFile'), +}; + +// ============================================================================= +// MCM State Management +// ============================================================================= + +let currentMcm = document.getElementById('mcmSelect').value; + +function getMcmStorageKey(mcm) { + return 'scada_mcm_' + mcm; +} + +function saveMcmState() { + const state = { + symbols: placedSymbols.map(({ symbolId, name, file, x, y, w, h, rotation }) => ( + { symbolId, name, file, x, y, w, h, rotation: rotation || 0 } + )), + nextId, + gridSize: getGridSize(), + minSpacing: getMinSpacing(), + pdfScale, + pdfOffsetX, + pdfOffsetY, + }; + localStorage.setItem(getMcmStorageKey(currentMcm), JSON.stringify(state)); +} + +function loadMcmState(mcm) { + const raw = localStorage.getItem(getMcmStorageKey(mcm)); + if (!raw) { + placedSymbols = []; + nextId = 1; + selectedId = null; + renderPlacedSymbols(); + return; + } + try { + const state = JSON.parse(raw); + placedSymbols = []; + nextId = 1; + selectedId = null; + if (state.gridSize) dom.gridSize.value = state.gridSize; + if (state.minSpacing) dom.minSpacing.value = state.minSpacing; + if (state.pdfScale) pdfScale = state.pdfScale; + if (state.pdfOffsetX !== undefined) pdfOffsetX = state.pdfOffsetX; + if (state.pdfOffsetY !== undefined) pdfOffsetY = state.pdfOffsetY; + for (const s of (state.symbols || [])) { + placedSymbols.push({ + id: nextId++, symbolId: s.symbolId, name: s.name, + file: s.file, x: s.x, y: s.y, w: s.w, h: s.h, + rotation: s.rotation || 0, + }); + } + if (state.nextId && state.nextId > nextId) nextId = state.nextId; + drawGrid(); + renderPlacedSymbols(); + if (pdfPage) renderPDFBackground(); + } catch (e) { + console.error('Failed to load MCM state:', e); + } +} + +// ============================================================================= +// Application State +// ============================================================================= + +let placedSymbols = []; +let nextId = 1; +let selectedId = null; +let dragState = null; + +// Zoom / Pan +let zoomLevel = 1; +let panX = 0; +let panY = 0; +let isPanning = false; +let panStartX = 0; +let panStartY = 0; + +// PDF Background +let pdfScale = 1.0; +let pdfPage = null; +let pdfNatWidth = 0; +let pdfNatHeight = 0; +let pdfOffsetX = 0; +let pdfOffsetY = 0; +let editingBackground = false; +let pdfDragState = null; + +// ============================================================================= +// Settings Helpers +// ============================================================================= + +function getGridSize() { return parseInt(dom.gridSize.value) || 20; } +function getMinSpacing() { return parseInt(dom.minSpacing.value) || 10; } +function isSnapEnabled() { return dom.snapEnabled.checked; } + +// ============================================================================= +// Utilities +// ============================================================================= + +function clamp(value, min, max) { + return Math.max(min, Math.min(max, value)); +} + +function downloadBlob(blob, filename) { + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = filename; + a.click(); + URL.revokeObjectURL(url); +} + +function createSvgElement(tag, attrs) { + const el = document.createElementNS('http://www.w3.org/2000/svg', tag); + for (const [key, val] of Object.entries(attrs)) { + el.setAttribute(key, val); + } + return el; +} + +// ============================================================================= +// Coordinate Transforms +// ============================================================================= + +function applyTransform() { + dom.canvas.style.transform = `translate(${panX}px, ${panY}px) scale(${zoomLevel})`; +} + +function screenToCanvas(clientX, clientY) { + const rect = dom.canvasWrapper.getBoundingClientRect(); + return { + x: (clientX - rect.left - panX) / zoomLevel, + y: (clientY - rect.top - panY) / zoomLevel, + }; +} + +function snapToGrid(x, y) { + if (!isSnapEnabled()) return { x, y }; + const size = getGridSize(); + return { + x: Math.round(x / size) * size, + y: Math.round(y / size) * size, + }; +} + +// ============================================================================= +// Grid Rendering +// ============================================================================= + +function drawGrid() { + const svg = dom.gridOverlay; + const size = getGridSize(); + svg.innerHTML = ''; + + if (!dom.showGrid.checked) return; + + const defs = createSvgElement('defs', {}); + const pattern = createSvgElement('pattern', { + id: 'gridPattern', width: size, height: size, patternUnits: 'userSpaceOnUse', + }); + pattern.appendChild(createSvgElement('line', { + x1: 0, y1: 0, x2: size, y2: 0, stroke: '#333', 'stroke-width': '0.5', + })); + pattern.appendChild(createSvgElement('line', { + x1: 0, y1: 0, x2: 0, y2: size, stroke: '#333', 'stroke-width': '0.5', + })); + defs.appendChild(pattern); + svg.appendChild(defs); + svg.appendChild(createSvgElement('rect', { + width: CANVAS_W, height: CANVAS_H, fill: 'url(#gridPattern)', + })); +} + +// ============================================================================= +// Rotation-Aware Bounding Box +// ============================================================================= + +function getAABB(x, y, w, h, rotation) { + if (!rotation) return { x, y, w, h }; + const cx = x + w / 2; + const cy = y + h / 2; + const rad = rotation * Math.PI / 180; + const cos = Math.abs(Math.cos(rad)); + const sin = Math.abs(Math.sin(rad)); + const bw = w * cos + h * sin; + const bh = w * sin + h * cos; + return { x: cx - bw / 2, y: cy - bh / 2, w: bw, h: bh }; +} + +// ============================================================================= +// Spacing & Collision +// ============================================================================= + +function edgeDistance(ax, ay, aw, ah, bx, by, bw, bh) { + const dx = Math.max(0, Math.max(ax - (bx + bw), bx - (ax + aw))); + const dy = Math.max(0, Math.max(ay - (by + bh), by - (ay + ah))); + + if (dx === 0 && dy === 0) return 0; + if (dx === 0) return dy; + if (dy === 0) return dx; + return Math.sqrt(dx * dx + dy * dy); +} + +function checkSpacingViolation(id, x, y, w, h, rotation) { + const spacing = getMinSpacing(); + const a = getAABB(x, y, w, h, rotation); + for (const sym of placedSymbols) { + if (sym.id === id) continue; + const b = getAABB(sym.x, sym.y, sym.w, sym.h, sym.rotation); + if (edgeDistance(a.x, a.y, a.w, a.h, b.x, b.y, b.w, b.h) < spacing) return true; + } + return false; +} + +function findValidPosition(id, x, y, w, h, symbolId, rotation) { + const snapped = snapToGrid(x, y); + let sx = snapped.x, sy = snapped.y; + + if (symbolId && PRIORITY_TYPES.has(symbolId)) return { x: sx, y: sy }; + if (!checkSpacingViolation(id, sx, sy, w, h, rotation)) return { x: sx, y: sy }; + + const step = isSnapEnabled() ? getGridSize() : 1; + for (let r = 1; r <= SNAP_SEARCH_RADIUS; r++) { + for (let dx = -r; dx <= r; dx++) { + for (let dy = -r; dy <= r; dy++) { + if (Math.abs(dx) !== r && Math.abs(dy) !== r) continue; + const cx = sx + dx * step; + const cy = sy + dy * step; + const bb = getAABB(cx, cy, w, h, rotation); + if (bb.x < 0 || bb.y < 0 || bb.x + bb.w > CANVAS_W || bb.y + bb.h > CANVAS_H) continue; + if (!checkSpacingViolation(id, cx, cy, w, h, rotation)) return { x: cx, y: cy }; + } + } + } + return { x: sx, y: sy }; +} + +// ============================================================================= +// Context Menu +// ============================================================================= + +function removeContextMenu() { + document.querySelectorAll('.context-menu').forEach(m => m.remove()); +} + +function showContextMenu(x, y, symId) { + removeContextMenu(); + const menu = document.createElement('div'); + menu.className = 'context-menu'; + menu.style.left = x + 'px'; + menu.style.top = y + 'px'; + + const actions = [ + { label: 'Delete', fn: () => { + placedSymbols = placedSymbols.filter(s => s.id !== symId); + if (selectedId === symId) selectedId = null; + renderPlacedSymbols(); + }}, + { label: 'Duplicate', fn: () => { + const orig = placedSymbols.find(s => s.id === symId); + if (!orig) return; + const pos = findValidPosition(-1, orig.x + 20, orig.y + 20, orig.w, orig.h, orig.symbolId, orig.rotation); + placedSymbols.push({ + id: nextId++, symbolId: orig.symbolId, file: orig.file, + name: orig.name, x: pos.x, y: pos.y, w: orig.w, h: orig.h, + rotation: orig.rotation || 0, + }); + renderPlacedSymbols(); + }}, + ]; + + for (const action of actions) { + const item = document.createElement('div'); + item.className = 'context-menu-item'; + item.textContent = action.label; + item.addEventListener('click', () => { action.fn(); removeContextMenu(); }); + menu.appendChild(item); + } + document.body.appendChild(menu); +} + +// ============================================================================= +// Render Placed Symbols +// ============================================================================= + +function isConveyorType(symbolId) { + return symbolId === 'conveyor' || symbolId === 'conveyor_v'; +} + +function renderPlacedSymbols() { + dom.dropZone.innerHTML = ''; + saveMcmState(); + + for (const sym of placedSymbols) { + const div = document.createElement('div'); + div.className = 'placed-symbol'; + if (sym.id === selectedId) div.classList.add('selected'); + div.dataset.id = sym.id; + Object.assign(div.style, { + left: sym.x + 'px', top: sym.y + 'px', + width: sym.w + 'px', height: sym.h + 'px', + }); + + if (sym.rotation) { + div.style.transform = `rotate(${sym.rotation}deg)`; + div.style.transformOrigin = 'center center'; + } + + const img = document.createElement('img'); + img.src = sym.file; + img.draggable = false; + div.appendChild(img); + + // Resize handle for conveyors + if (isConveyorType(sym.symbolId) && sym.id === selectedId) { + const handle = document.createElement('div'); + handle.className = 'resize-handle'; + handle.addEventListener('mousedown', (e) => { + if (e.button !== 0) return; + e.stopPropagation(); + e.preventDefault(); + const pos = screenToCanvas(e.clientX, e.clientY); + dragState = { + type: 'resize', placedId: sym.id, + startX: pos.x, startY: pos.y, origW: sym.w, + }; + }); + div.appendChild(handle); + } + + div.addEventListener('mousedown', (e) => { + if (e.button !== 0) return; + e.stopPropagation(); + e.preventDefault(); + selectedId = sym.id; + const pos = screenToCanvas(e.clientX, e.clientY); + dragState = { + type: 'move', placedId: sym.id, + offsetX: pos.x - sym.x, offsetY: pos.y - sym.y, + }; + div.classList.add('dragging'); + renderPlacedSymbols(); + }); + + div.addEventListener('contextmenu', (e) => { + e.preventDefault(); + e.stopPropagation(); + showContextMenu(e.clientX, e.clientY, sym.id); + }); + + dom.dropZone.appendChild(div); + } +} + +// ============================================================================= +// Palette +// ============================================================================= + +function buildPalette() { + dom.palette.innerHTML = ''; + + for (const sym of SYMBOLS) { + const item = document.createElement('div'); + item.className = 'palette-item'; + item.dataset.symbolId = sym.id; + + const img = document.createElement('img'); + img.src = sym.file; + img.draggable = false; + if (sym.defaultRotation) { + img.style.transform = `rotate(${sym.defaultRotation}deg)`; + } + item.appendChild(img); + + const label = document.createElement('span'); + label.textContent = sym.name; + item.appendChild(label); + + item.addEventListener('mousedown', (e) => { + if (e.button !== 0) return; + e.preventDefault(); + + const ghost = document.createElement('div'); + ghost.className = 'drag-ghost'; + ghost.style.width = sym.w + 'px'; + ghost.style.height = sym.h + 'px'; + const ghostImg = document.createElement('img'); + ghostImg.src = sym.file; + ghostImg.style.width = '100%'; + ghostImg.style.height = '100%'; + if (sym.defaultRotation) { + ghost.style.transform = `rotate(${sym.defaultRotation}deg)`; + } + ghost.appendChild(ghostImg); + ghost.style.left = (e.clientX - sym.w / 2) + 'px'; + ghost.style.top = (e.clientY - sym.h / 2) + 'px'; + document.body.appendChild(ghost); + + dragState = { type: 'palette', symbolDef: sym, ghost }; + }); + + dom.palette.appendChild(item); + } +} + +// ============================================================================= +// Consolidated Mouse Handlers +// ============================================================================= + +document.addEventListener('mousemove', (e) => { + // --- Pan --- + if (isPanning) { + panX = e.clientX - panStartX; + panY = e.clientY - panStartY; + applyTransform(); + return; + } + + // --- PDF drag --- + if (pdfDragState && editingBackground) { + const pos = screenToCanvas(e.clientX, e.clientY); + pdfOffsetX = pdfDragState.origOffsetX + (pos.x - pdfDragState.startX); + pdfOffsetY = pdfDragState.origOffsetY + (pos.y - pdfDragState.startY); + const pdfCanvas = dom.pdfBackground.querySelector('canvas'); + if (pdfCanvas) { + pdfCanvas.style.left = pdfOffsetX + 'px'; + pdfCanvas.style.top = pdfOffsetY + 'px'; + } + dom.pdfInfo.textContent = + `PDF: pos: ${Math.round(pdfOffsetX)},${Math.round(pdfOffsetY)} (${Math.round(pdfScale * 100)}%)`; + return; + } + + // --- Symbol drag --- + if (!dragState) return; + + if (dragState.type === 'palette') { + const sym = dragState.symbolDef; + dragState.ghost.style.left = (e.clientX - sym.w / 2) + 'px'; + dragState.ghost.style.top = (e.clientY - sym.h / 2) + 'px'; + } + + if (dragState.type === 'move') { + const sym = placedSymbols.find(s => s.id === dragState.placedId); + if (!sym) return; + + const pos = screenToCanvas(e.clientX, e.clientY); + const bb = getAABB(0, 0, sym.w, sym.h, sym.rotation); + const newX = clamp(pos.x - dragState.offsetX, -bb.x, CANVAS_W - bb.w - bb.x); + const newY = clamp(pos.y - dragState.offsetY, -bb.y, CANVAS_H - bb.h - bb.y); + const snapped = snapToGrid(newX, newY); + sym.x = snapped.x; + sym.y = snapped.y; + + renderPlacedSymbols(); + + const el = dom.dropZone.querySelector(`[data-id="${sym.id}"]`); + if (el && checkSpacingViolation(sym.id, sym.x, sym.y, sym.w, sym.h, sym.rotation)) { + el.classList.add('collision'); + } + } + + if (dragState.type === 'resize') { + const sym = placedSymbols.find(s => s.id === dragState.placedId); + if (!sym) return; + + const pos = screenToCanvas(e.clientX, e.clientY); + const dx = pos.x - dragState.startX; + const dy = pos.y - dragState.startY; + const rad = (sym.rotation || 0) * Math.PI / 180; + const projectedDelta = dx * Math.cos(rad) + dy * Math.sin(rad); + let newW = dragState.origW + projectedDelta; + if (isSnapEnabled()) { + newW = Math.round(newW / getGridSize()) * getGridSize(); + } + sym.w = Math.max(CONVEYOR_MIN_W, newW); + renderPlacedSymbols(); + } +}); + +document.addEventListener('mouseup', (e) => { + // --- Pan end --- + if (e.button === 1 && isPanning) { + isPanning = false; + document.body.style.cursor = ''; + return; + } + + // --- PDF drag end --- + if (pdfDragState) { + pdfDragState = null; + saveMcmState(); + return; + } + + // --- Symbol drag end --- + if (!dragState) return; + + if (dragState.type === 'palette') { + dragState.ghost.remove(); + const sym = dragState.symbolDef; + const rot = sym.defaultRotation || 0; + const pos = screenToCanvas(e.clientX, e.clientY); + let dropX = pos.x - sym.w / 2; + let dropY = pos.y - sym.h / 2; + + if (dropX >= -sym.w && dropX <= CANVAS_W && dropY >= -sym.h && dropY <= CANVAS_H) { + dropX = clamp(dropX, 0, CANVAS_W - sym.w); + dropY = clamp(dropY, 0, CANVAS_H - sym.h); + const valid = findValidPosition(-1, dropX, dropY, sym.w, sym.h, sym.id, rot); + placedSymbols.push({ + id: nextId++, symbolId: sym.id, file: sym.file, + name: sym.name, x: valid.x, y: valid.y, w: sym.w, h: sym.h, + rotation: rot, + }); + renderPlacedSymbols(); + } + } + + if (dragState.type === 'move') { + const sym = placedSymbols.find(s => s.id === dragState.placedId); + if (sym) { + const valid = findValidPosition(sym.id, sym.x, sym.y, sym.w, sym.h, sym.symbolId, sym.rotation); + sym.x = valid.x; + sym.y = valid.y; + } + renderPlacedSymbols(); + } + + if (dragState.type === 'resize') { + renderPlacedSymbols(); + } + + dragState = null; +}); + +// ============================================================================= +// Canvas Interactions +// ============================================================================= + +dom.dropZone.addEventListener('mousedown', (e) => { + if (e.target === e.currentTarget) { + selectedId = null; + renderPlacedSymbols(); + removeContextMenu(); + } +}); + +document.addEventListener('click', removeContextMenu); + +document.addEventListener('keydown', (e) => { + if (e.key === 'Delete' && selectedId !== null) { + placedSymbols = placedSymbols.filter(s => s.id !== selectedId); + selectedId = null; + renderPlacedSymbols(); + } + + // Rotation: E = clockwise, Q = counter-clockwise + if (selectedId !== null && (e.key === 'e' || e.key === 'E')) { + const sym = placedSymbols.find(s => s.id === selectedId); + if (sym) { + sym.rotation = ((sym.rotation || 0) + ROTATION_STEP) % 360; + renderPlacedSymbols(); + } + } + if (selectedId !== null && (e.key === 'q' || e.key === 'Q')) { + const sym = placedSymbols.find(s => s.id === selectedId); + if (sym) { + sym.rotation = ((sym.rotation || 0) - ROTATION_STEP + 360) % 360; + renderPlacedSymbols(); + } + } +}); + +// ============================================================================= +// Zoom & Pan +// ============================================================================= + +let pdfReRenderTimer = null; + +function schedulePdfReRender() { + if (!pdfPage) return; + clearTimeout(pdfReRenderTimer); + pdfReRenderTimer = setTimeout(() => renderPDFBackground(), 150); +} + +dom.canvasWrapper.addEventListener('wheel', (e) => { + e.preventDefault(); + const rect = dom.canvasWrapper.getBoundingClientRect(); + const mx = e.clientX - rect.left; + const my = e.clientY - rect.top; + const cx = (mx - panX) / zoomLevel; + const cy = (my - panY) / zoomLevel; + + const factor = e.deltaY > 0 ? ZOOM_OUT_FACTOR : ZOOM_IN_FACTOR; + zoomLevel = clamp(zoomLevel * factor, ZOOM_MIN, ZOOM_MAX); + + panX = mx - cx * zoomLevel; + panY = my - cy * zoomLevel; + applyTransform(); + schedulePdfReRender(); +}, { passive: false }); + +dom.canvasWrapper.addEventListener('mousedown', (e) => { + if (e.button === 1) { + e.preventDefault(); + isPanning = true; + panStartX = e.clientX - panX; + panStartY = e.clientY - panY; + document.body.style.cursor = 'grabbing'; + } +}); + +// ============================================================================= +// Settings +// ============================================================================= + +dom.gridSize.addEventListener('change', () => { drawGrid(); saveMcmState(); }); +dom.showGrid.addEventListener('change', drawGrid); +dom.minSpacing.addEventListener('change', () => saveMcmState()); + +document.getElementById('mcmSelect').addEventListener('change', (e) => { + saveMcmState(); + currentMcm = e.target.value; + loadMcmState(currentMcm); +}); + +document.getElementById('clearCanvas').addEventListener('click', () => { + if (!confirm('Clear all placed symbols?')) return; + placedSymbols = []; + selectedId = null; + renderPlacedSymbols(); +}); + +// ============================================================================= +// Export SVG +// ============================================================================= + +document.getElementById('exportSVG').addEventListener('click', async () => { + const lines = [ + '', + `', + ` `, + ]; + + for (const sym of placedSymbols) { + try { + const svgText = await (await fetch(sym.file)).text(); + const doc = new DOMParser().parseFromString(svgText, 'image/svg+xml'); + const svgEl = doc.documentElement; + const viewBox = svgEl.getAttribute('viewBox') || `0 0 ${sym.w} ${sym.h}`; + const rot = sym.rotation || 0; + const cx = sym.x + sym.w / 2; + const cy = sym.y + sym.h / 2; + const rotAttr = rot ? ` transform="rotate(${rot},${cx},${cy})"` : ''; + lines.push(` `); + lines.push(` `); + lines.push(` ${svgEl.innerHTML}`); + lines.push(' '); + } catch (err) { + console.error('Failed to embed symbol:', sym.name, err); + } + } + + lines.push(''); + downloadBlob(new Blob([lines.join('\n')], { type: 'image/svg+xml' }), 'scada_layout.svg'); +}); + +// ============================================================================= +// Save / Load Layout (JSON) +// ============================================================================= + +document.getElementById('saveLayout').addEventListener('click', () => { + const data = { + gridSize: getGridSize(), + minSpacing: getMinSpacing(), + symbols: placedSymbols.map(({ symbolId, name, file, x, y, w, h, rotation }) => ( + { symbolId, name, file, x, y, w, h, rotation: rotation || 0 } + )), + }; + downloadBlob(new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' }), 'scada_layout.json'); +}); + +document.getElementById('loadLayout').addEventListener('click', () => dom.importFile.click()); + +dom.importFile.addEventListener('change', (e) => { + const file = e.target.files[0]; + if (!file) return; + const reader = new FileReader(); + reader.onload = (ev) => { + try { + const data = JSON.parse(ev.target.result); + if (data.gridSize) dom.gridSize.value = data.gridSize; + if (data.minSpacing) dom.minSpacing.value = data.minSpacing; + placedSymbols = []; + nextId = 1; + for (const s of data.symbols) { + placedSymbols.push({ + id: nextId++, symbolId: s.symbolId, name: s.name, + file: s.file, x: s.x, y: s.y, w: s.w, h: s.h, + rotation: s.rotation || 0, + }); + } + drawGrid(); + renderPlacedSymbols(); + } catch (err) { + alert('Invalid layout file: ' + err.message); + } + }; + reader.readAsText(file); + e.target.value = ''; +}); + +// ============================================================================= +// PDF Background +// ============================================================================= + +let pdfRenderTask = null; + +function renderPDFBackground() { + dom.pdfBackground.innerHTML = ''; + if (!pdfPage) { + dom.pdfInfo.textContent = ''; + return; + } + + if (pdfRenderTask) { + pdfRenderTask.cancel(); + pdfRenderTask = null; + } + + const dpr = window.devicePixelRatio || 1; + const hiResScale = pdfScale * zoomLevel * dpr; + const viewport = pdfPage.getViewport({ scale: hiResScale }); + const displayViewport = pdfPage.getViewport({ scale: pdfScale }); + + const canvas = document.createElement('canvas'); + canvas.width = viewport.width; + canvas.height = viewport.height; + canvas.style.width = displayViewport.width + 'px'; + canvas.style.height = displayViewport.height + 'px'; + canvas.style.left = pdfOffsetX + 'px'; + canvas.style.top = pdfOffsetY + 'px'; + + pdfRenderTask = pdfPage.render({ canvasContext: canvas.getContext('2d'), viewport }); + pdfRenderTask.promise.then(() => { + pdfRenderTask = null; + }).catch(() => { + pdfRenderTask = null; + }); + + dom.pdfBackground.appendChild(canvas); + + dom.pdfInfo.textContent = + `PDF: ${Math.round(displayViewport.width)}x${Math.round(displayViewport.height)} (${Math.round(pdfScale * 100)}%) pos: ${Math.round(pdfOffsetX)},${Math.round(pdfOffsetY)}`; +} + +function setEditBackgroundMode(active) { + editingBackground = active; + if (active) { + dom.editBackgroundBtn.classList.add('edit-bg-active'); + dom.editBackgroundBtn.textContent = 'Done Editing'; + dom.pdfBackground.classList.add('editing'); + dom.pdfBackground.style.pointerEvents = 'auto'; + dom.pdfBackground.style.zIndex = '3'; + dom.dropZone.style.pointerEvents = 'none'; + } else { + dom.editBackgroundBtn.classList.remove('edit-bg-active'); + dom.editBackgroundBtn.textContent = 'Edit Background'; + dom.pdfBackground.classList.remove('editing'); + dom.pdfBackground.style.pointerEvents = 'none'; + dom.pdfBackground.style.zIndex = '0'; + dom.dropZone.style.pointerEvents = 'auto'; + pdfDragState = null; + } +} + +dom.editBackgroundBtn.addEventListener('click', () => { + if (pdfPage) setEditBackgroundMode(!editingBackground); +}); + +dom.pdfBackground.addEventListener('mousedown', (e) => { + if (!editingBackground || e.button !== 0) return; + e.preventDefault(); + e.stopPropagation(); + const pos = screenToCanvas(e.clientX, e.clientY); + pdfDragState = { + startX: pos.x, startY: pos.y, + origOffsetX: pdfOffsetX, origOffsetY: pdfOffsetY, + }; +}); + +document.getElementById('loadPDF').addEventListener('click', () => dom.pdfFile.click()); + +dom.pdfFile.addEventListener('change', async (e) => { + const file = e.target.files[0]; + if (!file) return; + const pdf = await pdfjsLib.getDocument({ data: await file.arrayBuffer() }).promise; + pdfPage = await pdf.getPage(1); + const vp = pdfPage.getViewport({ scale: 1 }); + pdfNatWidth = vp.width; + pdfNatHeight = vp.height; + pdfScale = Math.min(CANVAS_W / pdfNatWidth, CANVAS_H / pdfNatHeight); + renderPDFBackground(); + e.target.value = ''; +}); + +document.getElementById('pdfZoomIn').addEventListener('click', () => { + if (!pdfPage) return; + pdfScale *= PDF_ZOOM_STEP; + renderPDFBackground(); + saveMcmState(); +}); + +document.getElementById('pdfZoomOut').addEventListener('click', () => { + if (!pdfPage) return; + pdfScale = Math.max(PDF_MIN_SCALE, pdfScale / PDF_ZOOM_STEP); + renderPDFBackground(); + saveMcmState(); +}); + +document.getElementById('pdfRemove').addEventListener('click', () => { + pdfPage = null; + pdfScale = 1.0; + pdfOffsetX = 0; + pdfOffsetY = 0; + setEditBackgroundMode(false); + renderPDFBackground(); +}); + +// ============================================================================= +// Init +// ============================================================================= + +buildPalette(); +loadMcmState(currentMcm); +drawGrid(); +renderPlacedSymbols(); +applyTransform(); diff --git a/browser_render.xml b/browser_render.xml new file mode 100644 index 0000000..5b57af2 --- /dev/null +++ b/browser_render.xml @@ -0,0 +1,352 @@ + + + + + Testing Project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BSOLPDP
Ignition-DEV-5
SIGN IN
Trial Mode Active
Remaining trial time:
01:51:56
Connected: Ignition-DEV-5
http://localhost:8088/data/perspective/client/Testing_Project
Insecure Connection
STATUS
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dist/assets/index-D5Q66DLP.css b/dist/assets/index-D5Q66DLP.css new file mode 100644 index 0000000..eb85881 --- /dev/null +++ b/dist/assets/index-D5Q66DLP.css @@ -0,0 +1 @@ +*{margin:0;padding:0;box-sizing:border-box}body{font-family:Arial,sans-serif;background:#1a1a2e;color:#e0e0e0;overflow:hidden;height:100vh}#app{display:flex;height:100vh}#toolbar{width:220px;min-width:220px;background:#16213e;border-right:2px solid #0f3460;padding:10px;overflow-y:auto;display:flex;flex-direction:column}#toolbar h2{font-size:14px;color:#e94560;margin:10px 0 6px;text-transform:uppercase;letter-spacing:1px}.setting{margin-bottom:8px}.setting label{display:block;font-size:12px;margin-bottom:3px;color:#aaa}.setting input[type=number]{width:100%;padding:4px 6px;background:#0f3460;border:1px solid #1a1a5e;color:#e0e0e0;border-radius:3px;font-size:13px}.setting input[type=checkbox]{margin-right:5px}.setting button{width:100%;padding:6px;margin-bottom:4px;background:#0f3460;border:1px solid #1a1a5e;color:#e0e0e0;border-radius:3px;cursor:pointer;font-size:12px}.setting button:hover{background:#e94560}#palette{flex:1;overflow-y:auto}.palette-item{display:flex;align-items:center;gap:8px;padding:6px 4px;margin-bottom:4px;background:#0f3460;border:1px solid #1a1a5e;border-radius:4px;cursor:grab;-webkit-user-select:none;user-select:none;transition:background .15s}.palette-item:hover{background:#1a1a5e;border-color:#e94560}.palette-item:active{cursor:grabbing}.palette-item img{width:40px;height:30px;object-fit:contain;background:#222;border-radius:3px;padding:2px}.palette-item span{font-size:11px;color:#ccc}#canvas-wrapper{flex:1;overflow:hidden;background:#111;position:relative}#canvas{width:1920px;height:1080px;position:absolute;background:#1e1e1e;border:1px solid #333;transform-origin:0 0}#pdf-background{position:absolute;top:0;left:0;overflow:hidden;width:1920px;height:1080px;pointer-events:none;z-index:0}#pdf-background canvas{position:absolute;transform-origin:0 0;opacity:.35}#pdf-background.editing canvas{opacity:.6;cursor:move}.edit-bg-active{background:#e94560!important;color:#fff!important}#grid-overlay{position:absolute;top:0;left:0;width:1920px;height:1080px;pointer-events:none;z-index:1}#drop-zone{position:absolute;top:0;left:0;width:1920px;height:1080px;z-index:2}.placed-symbol{position:absolute;cursor:move;-webkit-user-select:none;user-select:none;border:1px solid transparent;transition:border-color .1s;resize:none}.placed-symbol:hover{border-color:#e94560}.placed-symbol.selected{border-color:#0f8;box-shadow:0 0 6px #0f86}.placed-symbol.dragging{opacity:.7;z-index:1000}.placed-symbol.collision{border-color:red;box-shadow:0 0 8px #f009}.placed-symbol img{width:100%;height:100%;pointer-events:none;display:block}.drag-ghost{position:fixed;pointer-events:none;opacity:.6;z-index:9999}.context-menu{position:fixed;background:#16213e;border:1px solid #0f3460;border-radius:4px;padding:4px 0;z-index:10000;min-width:140px}.context-menu-item{padding:6px 14px;font-size:12px;color:#e0e0e0;cursor:pointer}.context-menu-item:hover{background:#e94560}.resize-handle{position:absolute;top:50%;right:-5px;width:10px;height:10px;transform:translateY(-50%);background:#0f8;border:1px solid #009955;border-radius:2px;cursor:ew-resize;z-index:10} diff --git a/dist/index.html b/dist/index.html new file mode 100644 index 0000000..f209d06 --- /dev/null +++ b/dist/index.html @@ -0,0 +1,83 @@ + + + + + + SCADA Device Layout Tool + + + +
+ +
+

Project

+
+ + +
+ +

Background PDF

+
+ + +
+
+ + +
+
+ + +
+
+ +

Settings

+
+ + +
+
+ + +
+
+ +
+
+ +
+
+ + + + + +
+ +

Symbols

+
+
+ + +
+
+
+ +
+
+
+
+ + + + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..eb52ed4 --- /dev/null +++ b/index.html @@ -0,0 +1,83 @@ + + + + + + SCADA Device Layout Tool + + + +
+ +
+

Project

+
+ + +
+ +

Background PDF

+
+ + +
+
+ + +
+
+ + +
+
+ +

Settings

+
+ + +
+
+ + +
+
+ +
+
+ +
+
+ + + + + +
+ +

Symbols

+
+
+ + +
+
+
+ +
+
+
+
+ + + + + + diff --git a/projectes/CDW5/excel/Amazon CDW5_Devices IO.xlsx b/projectes/CDW5/excel/Amazon CDW5_Devices IO.xlsx new file mode 100644 index 0000000..e34c170 Binary files /dev/null and b/projectes/CDW5/excel/Amazon CDW5_Devices IO.xlsx differ diff --git a/projectes/CDW5/excel/Amazon CDW5_IP Addresses_Local.xlsx b/projectes/CDW5/excel/Amazon CDW5_IP Addresses_Local.xlsx new file mode 100644 index 0000000..5fad369 Binary files /dev/null and b/projectes/CDW5/excel/Amazon CDW5_IP Addresses_Local.xlsx differ diff --git a/style.css b/style.css new file mode 100644 index 0000000..ce632fe --- /dev/null +++ b/style.css @@ -0,0 +1,267 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: Arial, sans-serif; + background: #1a1a2e; + color: #e0e0e0; + overflow: hidden; + height: 100vh; +} + +#app { + display: flex; + height: 100vh; +} + +/* --- Toolbar / Palette --- */ +#toolbar { + width: 220px; + min-width: 220px; + background: #16213e; + border-right: 2px solid #0f3460; + padding: 10px; + overflow-y: auto; + display: flex; + flex-direction: column; +} + +#toolbar h2 { + font-size: 14px; + color: #e94560; + margin: 10px 0 6px 0; + text-transform: uppercase; + letter-spacing: 1px; +} + +.setting { + margin-bottom: 8px; +} + +.setting label { + display: block; + font-size: 12px; + margin-bottom: 3px; + color: #aaa; +} + +.setting input[type="number"] { + width: 100%; + padding: 4px 6px; + background: #0f3460; + border: 1px solid #1a1a5e; + color: #e0e0e0; + border-radius: 3px; + font-size: 13px; +} + +.setting input[type="checkbox"] { + margin-right: 5px; +} + +.setting button { + width: 100%; + padding: 6px; + margin-bottom: 4px; + background: #0f3460; + border: 1px solid #1a1a5e; + color: #e0e0e0; + border-radius: 3px; + cursor: pointer; + font-size: 12px; +} + +.setting button:hover { + background: #e94560; +} + +/* --- Palette symbols --- */ +#palette { + flex: 1; + overflow-y: auto; +} + +.palette-item { + display: flex; + align-items: center; + gap: 8px; + padding: 6px 4px; + margin-bottom: 4px; + background: #0f3460; + border: 1px solid #1a1a5e; + border-radius: 4px; + cursor: grab; + user-select: none; + transition: background 0.15s; +} + +.palette-item:hover { + background: #1a1a5e; + border-color: #e94560; +} + +.palette-item:active { + cursor: grabbing; +} + +.palette-item img { + width: 40px; + height: 30px; + object-fit: contain; + background: #222; + border-radius: 3px; + padding: 2px; +} + +.palette-item span { + font-size: 11px; + color: #ccc; +} + +/* --- Canvas area --- */ +#canvas-wrapper { + flex: 1; + overflow: hidden; + background: #111; + position: relative; +} + +#canvas { + width: 1920px; + height: 1080px; + position: absolute; + background: #1e1e1e; + border: 1px solid #333; + transform-origin: 0 0; +} + +#pdf-background { + position: absolute; + top: 0; + left: 0; + overflow: hidden; + width: 1920px; + height: 1080px; + pointer-events: none; + z-index: 0; +} + +#pdf-background canvas { + position: absolute; + transform-origin: 0 0; + opacity: 0.35; +} + +#pdf-background.editing canvas { + opacity: 0.6; + cursor: move; +} + +/* Edit background active indicator */ +.edit-bg-active { + background: #e94560 !important; + color: #fff !important; +} + +#grid-overlay { + position: absolute; + top: 0; + left: 0; + width: 1920px; + height: 1080px; + pointer-events: none; + z-index: 1; +} + +#drop-zone { + position: absolute; + top: 0; + left: 0; + width: 1920px; + height: 1080px; + z-index: 2; +} + +/* --- Placed symbols on canvas --- */ +.placed-symbol { + position: absolute; + cursor: move; + user-select: none; + border: 1px solid transparent; + transition: border-color 0.1s; + resize: none; +} + +.placed-symbol:hover { + border-color: #e94560; +} + +.placed-symbol.selected { + border-color: #00ff88; + box-shadow: 0 0 6px rgba(0, 255, 136, 0.4); +} + +.placed-symbol.dragging { + opacity: 0.7; + z-index: 1000; +} + +.placed-symbol.collision { + border-color: #ff0000; + box-shadow: 0 0 8px rgba(255, 0, 0, 0.6); +} + +.placed-symbol img { + width: 100%; + height: 100%; + pointer-events: none; + display: block; +} + +/* --- Drag ghost --- */ +.drag-ghost { + position: fixed; + pointer-events: none; + opacity: 0.6; + z-index: 9999; +} + +/* --- Context menu --- */ +.context-menu { + position: fixed; + background: #16213e; + border: 1px solid #0f3460; + border-radius: 4px; + padding: 4px 0; + z-index: 10000; + min-width: 140px; +} + +.context-menu-item { + padding: 6px 14px; + font-size: 12px; + color: #e0e0e0; + cursor: pointer; +} + +.context-menu-item:hover { + background: #e94560; +} + +/* --- Resize handle (conveyor width) --- */ +.resize-handle { + position: absolute; + top: 50%; + right: -5px; + width: 10px; + height: 10px; + transform: translateY(-50%); + background: #00ff88; + border: 1px solid #009955; + border-radius: 2px; + cursor: ew-resize; + z-index: 10; +} diff --git a/svelte-app/.gitignore b/svelte-app/.gitignore new file mode 100644 index 0000000..3b462cb --- /dev/null +++ b/svelte-app/.gitignore @@ -0,0 +1,23 @@ +node_modules + +# Output +.output +.vercel +.netlify +.wrangler +/.svelte-kit +/build + +# OS +.DS_Store +Thumbs.db + +# Env +.env +.env.* +!.env.example +!.env.test + +# Vite +vite.config.js.timestamp-* +vite.config.ts.timestamp-* diff --git a/svelte-app/.npmrc b/svelte-app/.npmrc new file mode 100644 index 0000000..b6f27f1 --- /dev/null +++ b/svelte-app/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/svelte-app/.vscode/extensions.json b/svelte-app/.vscode/extensions.json new file mode 100644 index 0000000..28d1e67 --- /dev/null +++ b/svelte-app/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["svelte.svelte-vscode"] +} diff --git a/svelte-app/README.md b/svelte-app/README.md new file mode 100644 index 0000000..483846e --- /dev/null +++ b/svelte-app/README.md @@ -0,0 +1,42 @@ +# sv + +Everything you need to build a Svelte project, powered by [`sv`](https://github.com/sveltejs/cli). + +## Creating a project + +If you're seeing this, you've probably already done this step. Congrats! + +```sh +# create a new project +npx sv create my-app +``` + +To recreate this project with the same configuration: + +```sh +# recreate this project +npx sv@0.12.5 create --template minimal --types ts --install npm svelte-app +``` + +## Developing + +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: + +```sh +npm run dev + +# or start the server and open the app in a new browser tab +npm run dev -- --open +``` + +## Building + +To create a production version of your app: + +```sh +npm run build +``` + +You can preview the production build with `npm run preview`. + +> To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment. diff --git a/svelte-app/package-lock.json b/svelte-app/package-lock.json new file mode 100644 index 0000000..30b0513 --- /dev/null +++ b/svelte-app/package-lock.json @@ -0,0 +1,1911 @@ +{ + "name": "svelte-app", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "svelte-app", + "version": "0.0.1", + "dependencies": { + "@sveltejs/adapter-static": "^3.0.10", + "pdfjs-dist": "^5.5.207" + }, + "devDependencies": { + "@sveltejs/adapter-auto": "^7.0.0", + "@sveltejs/kit": "^2.50.2", + "@sveltejs/vite-plugin-svelte": "^6.2.4", + "svelte": "^5.51.0", + "svelte-check": "^4.4.2", + "typescript": "^5.9.3", + "vite": "^7.3.1", + "xlsx": "^0.18.5" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/canvas": { + "version": "0.1.96", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.96.tgz", + "integrity": "sha512-6NNmNxvoJKeucVjxaaRUt3La2i5jShgiAbaY3G/72s1Vp3U06XPrAIxkAjBxpDcamEn/t+WJ4OOlGmvILo4/Ew==", + "license": "MIT", + "optional": true, + "workspaces": [ + "e2e/*" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/canvas-android-arm64": "0.1.96", + "@napi-rs/canvas-darwin-arm64": "0.1.96", + "@napi-rs/canvas-darwin-x64": "0.1.96", + "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.96", + "@napi-rs/canvas-linux-arm64-gnu": "0.1.96", + "@napi-rs/canvas-linux-arm64-musl": "0.1.96", + "@napi-rs/canvas-linux-riscv64-gnu": "0.1.96", + "@napi-rs/canvas-linux-x64-gnu": "0.1.96", + "@napi-rs/canvas-linux-x64-musl": "0.1.96", + "@napi-rs/canvas-win32-arm64-msvc": "0.1.96", + "@napi-rs/canvas-win32-x64-msvc": "0.1.96" + } + }, + "node_modules/@napi-rs/canvas-android-arm64": { + "version": "0.1.96", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.96.tgz", + "integrity": "sha512-ew1sPrN3dGdZ3L4FoohPfnjq0f9/Jk7o+wP7HkQZokcXgIUD6FIyICEWGhMYzv53j63wUcPvZeAwgewX58/egg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-darwin-arm64": { + "version": "0.1.96", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.96.tgz", + "integrity": "sha512-Q/wOXZ5PzTqpdmA5eUOcegCf4Go/zz3aZ5DlzSeDpOjFmfwMKh8EzLAoweQ+mJVagcHQyzoJhaTEnrO68TNyNg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-darwin-x64": { + "version": "0.1.96", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.96.tgz", + "integrity": "sha512-UrXiQz28tQEvGM1qvyptewOAfmUrrd5+wvi6Rzjj2VprZI8iZ2KIvBD2lTTG1bVF95AbeDeG7PJA0D9sLKaOFA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { + "version": "0.1.96", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.96.tgz", + "integrity": "sha512-I90ODxweD8aEP6XKU/NU+biso95MwCtQ2F46dUvhec1HesFi0tq/tAJkYic/1aBSiO/1kGKmSeD1B0duOHhEHQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-gnu": { + "version": "0.1.96", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.96.tgz", + "integrity": "sha512-Dx/0+RFV++w3PcRy+4xNXkghhXjA5d0Mw1bs95emn5Llinp1vihMaA6WJt3oYv2LAHc36+gnrhIBsPhUyI2SGw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-musl": { + "version": "0.1.96", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.96.tgz", + "integrity": "sha512-UvOi7fii3IE2KDfEfhh8m+LpzSRvhGK7o1eho99M2M0HTik11k3GX+2qgVx9EtujN3/bhFFS1kSO3+vPMaJ0Mg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { + "version": "0.1.96", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.96.tgz", + "integrity": "sha512-MBSukhGCQ5nRtf9NbFYWOU080yqkZU1PbuH4o1ROvB4CbPl12fchDR35tU83Wz8gWIM9JTn99lBn9DenPIv7Ig==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-gnu": { + "version": "0.1.96", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.96.tgz", + "integrity": "sha512-I/ccu2SstyKiV3HIeVzyBIWfrJo8cN7+MSQZPnabewWV6hfJ2nY7Df2WqOHmobBRUw84uGR6zfQHsUEio/m5Vg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-musl": { + "version": "0.1.96", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.96.tgz", + "integrity": "sha512-H3uov7qnTl73GDT4h52lAqpJPsl1tIUyNPWJyhQ6gHakohNqqRq3uf80+NEpzcytKGEOENP1wX3yGwZxhjiWEQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-win32-arm64-msvc": { + "version": "0.1.96", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-0.1.96.tgz", + "integrity": "sha512-ATp6Y+djOjYtkfV/VRH7CZ8I1MEtkUQBmKUbuWw5zWEHHqfL0cEcInE4Cxgx7zkNAhEdBbnH8HMVrqNp+/gwxA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-win32-x64-msvc": { + "version": "0.1.96", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.96.tgz", + "integrity": "sha512-UYGdTltVd+Z8mcIuoqGmAXXUvwH5CLf2M6mIB5B0/JmX5J041jETjqtSYl7gN+aj3k1by/SG6sS0hAwCqyK7zw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@sveltejs/acorn-typescript": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.9.tgz", + "integrity": "sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==", + "license": "MIT", + "peerDependencies": { + "acorn": "^8.9.0" + } + }, + "node_modules/@sveltejs/adapter-auto": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-7.0.1.tgz", + "integrity": "sha512-dvuPm1E7M9NI/+canIQ6KKQDU2AkEefEZ2Dp7cY6uKoPq9Z/PhOXABe526UdW2mN986gjVkuSLkOYIBnS/M2LQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@sveltejs/kit": "^2.0.0" + } + }, + "node_modules/@sveltejs/adapter-static": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.10.tgz", + "integrity": "sha512-7D9lYFWJmB7zxZyTE/qxjksvMqzMuYrrsyh1f4AlZqeZeACPRySjbC3aFiY55wb1tWUaKOQG9PVbm74JcN2Iew==", + "license": "MIT", + "peerDependencies": { + "@sveltejs/kit": "^2.0.0" + } + }, + "node_modules/@sveltejs/kit": { + "version": "2.53.4", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.53.4.tgz", + "integrity": "sha512-iAIPEahFgDJJyvz8g0jP08KvqnM6JvdW8YfsygZ+pMeMvyM2zssWMltcsotETvjSZ82G3VlitgDtBIvpQSZrTA==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@sveltejs/acorn-typescript": "^1.0.5", + "@types/cookie": "^0.6.0", + "acorn": "^8.14.1", + "cookie": "^0.6.0", + "devalue": "^5.6.3", + "esm-env": "^1.2.2", + "kleur": "^4.1.5", + "magic-string": "^0.30.5", + "mrmime": "^2.0.0", + "set-cookie-parser": "^3.0.0", + "sirv": "^3.0.0" + }, + "bin": { + "svelte-kit": "svelte-kit.js" + }, + "engines": { + "node": ">=18.13" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0", + "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 || ^7.0.0", + "svelte": "^4.0.0 || ^5.0.0-next.0", + "typescript": "^5.3.3", + "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.4.tgz", + "integrity": "sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA==", + "license": "MIT", + "dependencies": { + "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", + "deepmerge": "^4.3.1", + "magic-string": "^0.30.21", + "obug": "^2.1.0", + "vitefu": "^1.1.1" + }, + "engines": { + "node": "^20.19 || ^22.12 || >=24" + }, + "peerDependencies": { + "svelte": "^5.0.0", + "vite": "^6.3.0 || ^7.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-5.0.2.tgz", + "integrity": "sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig==", + "license": "MIT", + "dependencies": { + "obug": "^2.1.0" + }, + "engines": { + "node": "^20.19 || ^22.12 || >=24" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^6.0.0-next.0", + "svelte": "^5.0.0", + "vite": "^6.3.0 || ^7.0.0" + } + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/aria-query": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.1.tgz", + "integrity": "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/devalue": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.3.tgz", + "integrity": "sha512-nc7XjUU/2Lb+SvEFVGcWLiKkzfw8+qHI7zn8WYXKkLMgfGSHbgCEaR6bJpev8Cm6Rmrb19Gfd/tZvGqx9is3wg==", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" + } + }, + "node_modules/esm-env": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", + "license": "MIT" + }, + "node_modules/esrap": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.3.tgz", + "integrity": "sha512-8fOS+GIGCQZl/ZIlhl59htOlms6U8NvX6ZYgYHpRU/b6tVSh3uHkOHZikl3D4cMbYM0JlpBe+p/BkZEi8J9XIQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/is-reference": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.6" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-readable-to-web-readable-stream": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/node-readable-to-web-readable-stream/-/node-readable-to-web-readable-stream-0.4.2.tgz", + "integrity": "sha512-/cMZNI34v//jUTrI+UIo4ieHAB5EZRY/+7OmXZgBxaWBMcW2tGdceIw06RFxWxrKZ5Jp3sI2i5TsRo+CBhtVLQ==", + "license": "MIT", + "optional": true + }, + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" + }, + "node_modules/pdfjs-dist": { + "version": "5.5.207", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.5.207.tgz", + "integrity": "sha512-WMqqw06w1vUt9ZfT0gOFhMf3wHsWhaCrxGrckGs5Cci6ybDW87IvPaOd2pnBwT6BJuP/CzXDZxjFgmSULLdsdw==", + "license": "Apache-2.0", + "engines": { + "node": ">=20.19.0 || >=22.13.0 || >=24" + }, + "optionalDependencies": { + "@napi-rs/canvas": "^0.1.95", + "node-readable-to-web-readable-stream": "^0.4.2" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rollup": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/set-cookie-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.0.1.tgz", + "integrity": "sha512-n7Z7dXZhJbwuAHhNzkTti6Aw9QDDjZtm3JTpTGATIdNzdQz5GuFs22w90BcvF4INfnrL5xrX3oGsuqO5Dx3A1Q==", + "license": "MIT" + }, + "node_modules/sirv": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "frac": "~1.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/svelte": { + "version": "5.53.7", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.53.7.tgz", + "integrity": "sha512-uxck1KI7JWtlfP3H6HOWi/94soAl23jsGJkBzN2BAWcQng0+lTrRNhxActFqORgnO9BHVd1hKJhG+ljRuIUWfQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@sveltejs/acorn-typescript": "^1.0.5", + "@types/estree": "^1.0.5", + "@types/trusted-types": "^2.0.7", + "acorn": "^8.12.1", + "aria-query": "5.3.1", + "axobject-query": "^4.1.0", + "clsx": "^2.1.1", + "devalue": "^5.6.3", + "esm-env": "^1.2.1", + "esrap": "^2.2.2", + "is-reference": "^3.0.3", + "locate-character": "^3.0.0", + "magic-string": "^0.30.11", + "zimmerframe": "^1.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/svelte-check": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.4.4.tgz", + "integrity": "sha512-F1pGqXc710Oi/wTI4d/x7d6lgPwwfx1U6w3Q35n4xsC2e8C/yN2sM1+mWxjlMcpAfWucjlq4vPi+P4FZ8a14sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "chokidar": "^4.0.1", + "fdir": "^6.2.0", + "picocolors": "^1.0.0", + "sade": "^1.7.4" + }, + "bin": { + "svelte-check": "bin/svelte-check" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.0", + "typescript": ">=5.0.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.2.tgz", + "integrity": "sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==", + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + }, + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/zimmerframe": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", + "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", + "license": "MIT" + } + } +} diff --git a/svelte-app/package.json b/svelte-app/package.json new file mode 100644 index 0000000..9e27713 --- /dev/null +++ b/svelte-app/package.json @@ -0,0 +1,27 @@ +{ + "name": "svelte-app", + "private": true, + "version": "0.0.1", + "type": "module", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "prepare": "svelte-kit sync || echo ''", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch" + }, + "devDependencies": { + "@sveltejs/adapter-auto": "^7.0.0", + "@sveltejs/kit": "^2.50.2", + "@sveltejs/vite-plugin-svelte": "^6.2.4", + "svelte": "^5.51.0", + "svelte-check": "^4.4.2", + "typescript": "^5.9.3", + "vite": "^7.3.1" + }, + "dependencies": { + "@sveltejs/adapter-static": "^3.0.10", + "pdfjs-dist": "^5.5.207" + } +} diff --git a/svelte-app/src/app.css b/svelte-app/src/app.css new file mode 100644 index 0000000..8240b06 --- /dev/null +++ b/svelte-app/src/app.css @@ -0,0 +1,49 @@ +:root { + --bg-primary: #1a1a2e; + --bg-secondary: #16213e; + --bg-input: #0f3460; + --border-color: #1a1a5e; + --accent: #e94560; + --accent-glow: rgba(233, 69, 96, 0.3); + --text-primary: #e0e0e0; + --text-secondary: #aaa; + --success: #00ff88; + --danger: #ff0000; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif; + background: var(--bg-primary); + color: var(--text-primary); + overflow: hidden; + height: 100vh; + -webkit-font-smoothing: antialiased; +} + +::-webkit-scrollbar { + width: 6px; +} + +::-webkit-scrollbar-track { + background: transparent; +} + +::-webkit-scrollbar-thumb { + background: #334; + border-radius: 3px; +} + +::-webkit-scrollbar-thumb:hover { + background: #556; +} + +::selection { + background: var(--accent); + color: white; +} diff --git a/svelte-app/src/app.d.ts b/svelte-app/src/app.d.ts new file mode 100644 index 0000000..da08e6d --- /dev/null +++ b/svelte-app/src/app.d.ts @@ -0,0 +1,13 @@ +// See https://svelte.dev/docs/kit/types#app.d.ts +// for information about these interfaces +declare global { + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface PageState {} + // interface Platform {} + } +} + +export {}; diff --git a/svelte-app/src/app.html b/svelte-app/src/app.html new file mode 100644 index 0000000..f273cc5 --- /dev/null +++ b/svelte-app/src/app.html @@ -0,0 +1,11 @@ + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/svelte-app/src/components/Canvas.svelte b/svelte-app/src/components/Canvas.svelte new file mode 100644 index 0000000..5f7e8ef --- /dev/null +++ b/svelte-app/src/components/Canvas.svelte @@ -0,0 +1,214 @@ + + +
+
+ +
+ + +
+ + + +
+
+ +{#if contextMenu} + +{/if} + + diff --git a/svelte-app/src/components/DeviceDock.svelte b/svelte-app/src/components/DeviceDock.svelte new file mode 100644 index 0000000..9cf4bf8 --- /dev/null +++ b/svelte-app/src/components/DeviceDock.svelte @@ -0,0 +1,289 @@ + + +
+ + + {#if !collapsed} +
+
+ Devices + {totalAll - totalCount}/{totalAll} +
+ + {#if totalCount === 0} +
All placed
+ {/if} + +
+ {#each svgGroups as [groupName, devices] (groupName)} + + {#if !collapsedZones.has(groupName)} +
+ {#each devices as device (device.id)} + + {/each} +
+ {/if} + {/each} +
+
+ {/if} +
+ + diff --git a/svelte-app/src/components/Palette.svelte b/svelte-app/src/components/Palette.svelte new file mode 100644 index 0000000..223a96e --- /dev/null +++ b/svelte-app/src/components/Palette.svelte @@ -0,0 +1,216 @@ + + +
+ {#each grouped as group (group.name)} +
+
{group.name}
+ + {#if group.subgroups.length > 0} + {#each group.subgroups as sub (sub.name)} + {@const key = `${group.name}/${sub.name}`} + + {#if expandedSubgroups.has(key)} +
+ {#each sub.symbols as sym (sym.id)} + + {/each} +
+ {/if} + {/each} + {/if} + + {#if group.symbols.length > 0} +
+ {#each group.symbols as sym (sym.id)} + + {/each} +
+ {/if} +
+ {/each} +
+ + diff --git a/svelte-app/src/components/Toolbar.svelte b/svelte-app/src/components/Toolbar.svelte new file mode 100644 index 0000000..514186c --- /dev/null +++ b/svelte-app/src/components/Toolbar.svelte @@ -0,0 +1,465 @@ + + +
+ + + {#if !toolbarCollapsed} +
+ + + {#if projectOpen} +
+ {#if layout.projects.length > 0} +
+ + +
+
+ + +
+ {:else} +
+ + +
+ {/if} +
+ {/if} + + + + {#if pdfOpen} +
+
+ + +
+
+ + +
+
+ + +
+ {#if layout.pdfLoaded} +
+ scale {Math.round(layout.pdfScale * 100)}% pos: {Math.round(layout.pdfOffsetX)},{Math.round(layout.pdfOffsetY)} +
+ {/if} +
+ {/if} + + + + {#if settingsOpen} +
+
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ +
+
+ +
+
+ + + + +
+
+ {/if} + + +
Symbols
+ +
+ {/if} +
+ + diff --git a/svelte-app/src/lib/assets/favicon.svg b/svelte-app/src/lib/assets/favicon.svg new file mode 100644 index 0000000..cc5dc66 Binary files /dev/null and b/svelte-app/src/lib/assets/favicon.svg differ diff --git a/svelte-app/src/lib/canvas/collision.ts b/svelte-app/src/lib/canvas/collision.ts new file mode 100644 index 0000000..3f49838 --- /dev/null +++ b/svelte-app/src/lib/canvas/collision.ts @@ -0,0 +1,707 @@ +import type { AABB, EpcWaypoint } from '../types.js'; +import { SPACING_EXEMPT, isCurvedType, isSpurType, isEpcType, getCurveBandWidth, EPC_LEFT_BOX, EPC_RIGHT_BOX, EPC_LINE_WIDTH, EPC_DEFAULT_WAYPOINTS } from '../symbols.js'; +import { layout } from '../stores/layout.svelte.js'; +import { orientedBoxCorners, createCurveTransforms } from './geometry.js'; + +export function getAABB(x: number, y: number, w: number, h: number, rotation: number): AABB { + if (!rotation) return { x, y, w, h }; + const cx = x + w / 2; + const cy = y + h / 2; + const rad = (rotation * Math.PI) / 180; + const cos = Math.abs(Math.cos(rad)); + const sin = Math.abs(Math.sin(rad)); + const bw = w * cos + h * sin; + const bh = w * sin + h * cos; + return { x: cx - bw / 2, y: cy - bh / 2, w: bw, h: bh }; +} + +// ─── OBB collision via Separating Axis Theorem ─── + +function obbOverlapWithSpacing( + ax: number, ay: number, aw: number, ah: number, arot: number, + bx: number, by: number, bw: number, bh: number, brot: number, + spacing: number +): boolean { + const acx = ax + aw / 2, acy = ay + ah / 2; + const bcx = bx + bw / 2, bcy = by + bh / 2; + const ahw = aw / 2 + spacing, ahh = ah / 2 + spacing; + const bhw = bw / 2, bhh = bh / 2; + + const arad = (arot || 0) * Math.PI / 180; + const brad = (brot || 0) * Math.PI / 180; + const cosA = Math.cos(arad), sinA = Math.sin(arad); + const cosB = Math.cos(brad), sinB = Math.sin(brad); + const tx = bcx - acx, ty = bcy - acy; + + const axes: [number, number][] = [ + [cosA, sinA], [-sinA, cosA], + [cosB, sinB], [-sinB, cosB], + ]; + + for (const [nx, ny] of axes) { + const projA = ahw * Math.abs(cosA * nx + sinA * ny) + ahh * Math.abs(-sinA * nx + cosA * ny); + const projB = bhw * Math.abs(cosB * nx + sinB * ny) + bhh * Math.abs(-sinB * nx + cosB * ny); + const dist = Math.abs(tx * nx + ty * ny); + if (dist > projA + projB) return false; + } + return true; +} + +// ─── Convex polygon helpers ─── + +/** Get the 4 vertices of a spur trapezoid in world space (with rotation) */ +function getSpurVertices( + x: number, y: number, w: number, h: number, w2: number, rotation: number +): [number, number][] { + const cx = x + w / 2; + const cy = y + h / 2; + const local: [number, number][] = [ + [x, y], // TL + [x + w2, y], // TR (top base end) + [x + w, y + h], // BR (bottom base end) + [x, y + h], // BL + ]; + if (!rotation) return local; + const rad = rotation * Math.PI / 180; + const cos = Math.cos(rad), sin = Math.sin(rad); + return local.map(([px, py]) => { + const dx = px - cx, dy = py - cy; + return [cx + dx * cos - dy * sin, cy + dx * sin + dy * cos] as [number, number]; + }); +} + +/** Get the 4 vertices of an OBB in world space */ +function getOBBVertices( + x: number, y: number, w: number, h: number, rotation: number +): [number, number][] { + const cx = x + w / 2, cy = y + h / 2; + const rad = (rotation || 0) * Math.PI / 180; + const cos = Math.cos(rad), sin = Math.sin(rad); + const hw = w / 2, hh = h / 2; + return [ + [cx - hw * cos + hh * sin, cy - hw * sin - hh * cos], // TL + [cx + hw * cos + hh * sin, cy + hw * sin - hh * cos], // TR + [cx + hw * cos - hh * sin, cy + hw * sin + hh * cos], // BR + [cx - hw * cos - hh * sin, cy - hw * sin + hh * cos], // BL + ]; +} + +/** General SAT for two convex polygons with spacing tolerance */ +function polygonSATWithSpacing( + aVerts: [number, number][], + bVerts: [number, number][], + spacing: number +): boolean { + const allVerts = [aVerts, bVerts]; + for (const verts of allVerts) { + for (let i = 0; i < verts.length; i++) { + const j = (i + 1) % verts.length; + const ex = verts[j][0] - verts[i][0]; + const ey = verts[j][1] - verts[i][1]; + const len = Math.sqrt(ex * ex + ey * ey); + if (len === 0) continue; + const nx = -ey / len, ny = ex / len; + + let aMin = Infinity, aMax = -Infinity; + for (const [px, py] of aVerts) { + const proj = px * nx + py * ny; + aMin = Math.min(aMin, proj); + aMax = Math.max(aMax, proj); + } + + let bMin = Infinity, bMax = -Infinity; + for (const [px, py] of bVerts) { + const proj = px * nx + py * ny; + bMin = Math.min(bMin, proj); + bMax = Math.max(bMax, proj); + } + + const gap = Math.max(bMin - aMax, aMin - bMax); + if (gap > spacing) return false; + } + } + return true; +} + +/** Check if point is inside a convex polygon (CCW or CW winding) */ +function pointInConvexPolygon(px: number, py: number, verts: [number, number][]): boolean { + let sign = 0; + for (let i = 0; i < verts.length; i++) { + const [x1, y1] = verts[i]; + const [x2, y2] = verts[(i + 1) % verts.length]; + const cross = (x2 - x1) * (py - y1) - (y2 - y1) * (px - x1); + if (cross !== 0) { + if (sign === 0) sign = cross > 0 ? 1 : -1; + else if ((cross > 0 ? 1 : -1) !== sign) return false; + } + } + return true; +} + +/** Distance from a point to a convex polygon (0 if inside) */ +function pointToConvexPolygonDist(px: number, py: number, verts: [number, number][]): number { + if (pointInConvexPolygon(px, py, verts)) return 0; + let minDist = Infinity; + for (let i = 0; i < verts.length; i++) { + const [x1, y1] = verts[i]; + const [x2, y2] = verts[(i + 1) % verts.length]; + minDist = Math.min(minDist, distPointToSegment(px, py, x1, y1, x2, y2)); + } + return minDist; +} + +// ─── Geometric helpers for annular sector distance ─── + +/** Distance from a point to a line segment */ +function distPointToSegment(px: number, py: number, x1: number, y1: number, x2: number, y2: number): number { + const dx = x2 - x1, dy = y2 - y1; + const len2 = dx * dx + dy * dy; + if (len2 === 0) return Math.sqrt((px - x1) ** 2 + (py - y1) ** 2); + const t = Math.max(0, Math.min(1, ((px - x1) * dx + (py - y1) * dy) / len2)); + const nearX = x1 + t * dx, nearY = y1 + t * dy; + return Math.sqrt((px - nearX) ** 2 + (py - nearY) ** 2); +} + +/** + * Distance from a point to an annular sector (arc band). + * Point is in local space: arc center at origin, Y points UP, + * sector sweeps CCW from angle 0 to sweepRad. + */ +function distToAnnularSector(px: number, py: number, innerR: number, outerR: number, sweepRad: number): number { + const r = Math.sqrt(px * px + py * py); + let theta = Math.atan2(py, px); + if (theta < -0.001) theta += 2 * Math.PI; + + const inAngle = theta >= -0.001 && theta <= sweepRad + 0.001; + + if (inAngle) { + if (r >= innerR && r <= outerR) return 0; // inside sector + if (r < innerR) return innerR - r; + return r - outerR; + } + + // Outside angular range — check distance to radial edges and corner points + let minDist = Infinity; + + // Start radial edge (angle 0, from innerR to outerR along +X) + minDist = Math.min(minDist, distPointToSegment(px, py, innerR, 0, outerR, 0)); + + // End radial edge (angle sweepRad) + const ec = Math.cos(sweepRad), es = Math.sin(sweepRad); + minDist = Math.min(minDist, distPointToSegment(px, py, innerR * ec, innerR * es, outerR * ec, outerR * es)); + + // Also check distance to the arcs at the clamped angle + const clampedTheta = Math.max(0, Math.min(sweepRad, theta < 0 ? theta + 2 * Math.PI : theta)); + if (clampedTheta >= 0 && clampedTheta <= sweepRad) { + const oc = Math.cos(clampedTheta), os = Math.sin(clampedTheta); + minDist = Math.min(minDist, Math.sqrt((px - outerR * oc) ** 2 + (py - outerR * os) ** 2)); + if (innerR > 0) { + minDist = Math.min(minDist, Math.sqrt((px - innerR * oc) ** 2 + (py - innerR * os) ** 2)); + } + } + + return minDist; +} + +/** Distance from a point in world space to an OBB */ +function pointToOBBDist(px: number, py: number, bx: number, by: number, bw: number, bh: number, brot: number): number { + const bcx = bx + bw / 2, bcy = by + bh / 2; + const rad = -(brot || 0) * Math.PI / 180; + const cos = Math.cos(rad), sin = Math.sin(rad); + const dx = px - bcx, dy = py - bcy; + const lx = dx * cos - dy * sin; + const ly = dx * sin + dy * cos; + const hw = bw / 2, hh = bh / 2; + const cx = Math.max(-hw, Math.min(hw, lx)); + const cy = Math.max(-hh, Math.min(hh, ly)); + return Math.sqrt((lx - cx) ** 2 + (ly - cy) ** 2); +} + +// ─── Curved vs OBB: true geometric check ─── + +interface CurveParams { + x: number; y: number; w: number; h: number; + rotation: number; symbolId: string; curveAngle?: number; +} + +/** + * Check if an OBB violates spacing against an annular sector (curved conveyor). + * Uses true geometric distance instead of AABB approximation. + */ +function checkCurvedVsOBB( + curve: CurveParams, + bx: number, by: number, bw: number, bh: number, brot: number, + spacing: number +): boolean { + const angle = curve.curveAngle || 90; + const outerR = curve.w; + const bandW = getCurveBandWidth(curve.symbolId); + const innerR = Math.max(0, outerR - bandW); + const curveRot = (curve.rotation || 0) * Math.PI / 180; + const sweepRad = (angle * Math.PI) / 180; + + // Arc center in unrotated local space (bottom-left of bbox) + const acx = curve.x; + const acy = curve.y + curve.h; + + // Symbol center (rotation pivot) + const scx = curve.x + curve.w / 2; + const scy = curve.y + curve.h / 2; + + const { toLocal, toWorld } = createCurveTransforms(acx, acy, scx, scy, curveRot); + + // Get OBB corners in world space + const otherCx = bx + bw / 2, otherCy = by + bh / 2; + const oRad = (brot || 0) * Math.PI / 180; + const oCos = Math.cos(oRad), oSin = Math.sin(oRad); + const ohw = bw / 2, ohh = bh / 2; + + const corners: [number, number][] = [ + [otherCx + ohw * oCos - ohh * oSin, otherCy + ohw * oSin + ohh * oCos], + [otherCx - ohw * oCos - ohh * oSin, otherCy - ohw * oSin + ohh * oCos], + [otherCx - ohw * oCos + ohh * oSin, otherCy - ohw * oSin - ohh * oCos], + [otherCx + ohw * oCos + ohh * oSin, otherCy + ohw * oSin - ohh * oCos], + ]; + + // Check OBB corners against the annular sector + for (const [wx, wy] of corners) { + const [lx, ly] = toLocal(wx, wy); + if (distToAnnularSector(lx, ly, innerR, outerR, sweepRad) < spacing) return true; + } + + // Check edge midpoints and quarter-points for better coverage on long edges + for (let i = 0; i < 4; i++) { + const [x1, y1] = corners[i]; + const [x2, y2] = corners[(i + 1) % 4]; + for (const t of [0.25, 0.5, 0.75]) { + const [lx, ly] = toLocal(x1 + (x2 - x1) * t, y1 + (y2 - y1) * t); + if (distToAnnularSector(lx, ly, innerR, outerR, sweepRad) < spacing) return true; + } + } + + // Check arc sample points against the OBB + const SAMPLES = Math.max(4, Math.ceil(angle / 10)); + for (let i = 0; i <= SAMPLES; i++) { + const a = (i / SAMPLES) * sweepRad; + const cos = Math.cos(a), sin = Math.sin(a); + + const [owx, owy] = toWorld(acx + outerR * cos, acy - outerR * sin); + if (pointToOBBDist(owx, owy, bx, by, bw, bh, brot) < spacing) return true; + + if (innerR > 0) { + const [iwx, iwy] = toWorld(acx + innerR * cos, acy - innerR * sin); + if (pointToOBBDist(iwx, iwy, bx, by, bw, bh, brot) < spacing) return true; + } + } + + return false; +} + +// ─── Curved vs Spur: geometric check ─── + +function checkCurvedVsSpur( + curve: CurveParams, + spurVerts: [number, number][], + spacing: number +): boolean { + const angle = curve.curveAngle || 90; + const outerR = curve.w; + const bandW = getCurveBandWidth(curve.symbolId); + const innerR = Math.max(0, outerR - bandW); + const curveRot = (curve.rotation || 0) * Math.PI / 180; + const sweepRad = (angle * Math.PI) / 180; + + const acx = curve.x; + const acy = curve.y + curve.h; + const scx = curve.x + curve.w / 2; + const scy = curve.y + curve.h / 2; + + const { toLocal, toWorld } = createCurveTransforms(acx, acy, scx, scy, curveRot); + + // Check spur vertices + edge sample points against annular sector + for (const [wx, wy] of spurVerts) { + const [lx, ly] = toLocal(wx, wy); + if (distToAnnularSector(lx, ly, innerR, outerR, sweepRad) < spacing) return true; + } + for (let i = 0; i < spurVerts.length; i++) { + const [x1, y1] = spurVerts[i]; + const [x2, y2] = spurVerts[(i + 1) % spurVerts.length]; + for (const t of [0.25, 0.5, 0.75]) { + const [lx, ly] = toLocal(x1 + (x2 - x1) * t, y1 + (y2 - y1) * t); + if (distToAnnularSector(lx, ly, innerR, outerR, sweepRad) < spacing) return true; + } + } + + // Check arc sample points against spur polygon + const SAMPLES = Math.max(4, Math.ceil(angle / 10)); + for (let i = 0; i <= SAMPLES; i++) { + const a = (i / SAMPLES) * sweepRad; + const cos = Math.cos(a), sin = Math.sin(a); + + const [owx, owy] = toWorld(acx + outerR * cos, acy - outerR * sin); + if (pointToConvexPolygonDist(owx, owy, spurVerts) < spacing) return true; + + if (innerR > 0) { + const [iwx, iwy] = toWorld(acx + innerR * cos, acy - innerR * sin); + if (pointToConvexPolygonDist(iwx, iwy, spurVerts) < spacing) return true; + } + } + + return false; +} + +// ─── Legacy AABB distance (for curved vs curved fallback) ─── + +function edgeDistance( + ax: number, ay: number, aw: number, ah: number, + bx: number, by: number, bw: number, bh: number +): number { + const dx = Math.max(0, ax - (bx + bw), bx - (ax + aw)); + const dy = Math.max(0, ay - (by + bh), by - (ay + ah)); + return Math.sqrt(dx * dx + dy * dy); +} + +// ─── Curved band AABBs (only for curved vs curved fallback) ─── + +function getCurvedBandAABBs(sym: CurveParams): AABB[] { + const angle = sym.curveAngle || 90; + const outerR = sym.w; + const bandW = getCurveBandWidth(sym.symbolId); + const innerR = Math.max(0, outerR - bandW); + const rot = (sym.rotation || 0) * Math.PI / 180; + const sweepRad = (angle * Math.PI) / 180; + const acx = sym.x; + const acy = sym.y + sym.h; + const scx = sym.x + sym.w / 2; + const scy = sym.y + sym.h / 2; + + const cosR = Math.cos(rot), sinR = Math.sin(rot); + function rotatePoint(px: number, py: number): [number, number] { + if (!rot) return [px, py]; + const dx = px - scx, dy = py - scy; + return [scx + dx * cosR - dy * sinR, scy + dx * sinR + dy * cosR]; + } + + const STEPS = Math.max(3, Math.ceil(angle / 10)); + const stepRad = sweepRad / STEPS; + const boxes: AABB[] = []; + + for (let i = 0; i < STEPS; i++) { + const a0 = i * stepRad, a1 = (i + 1) * stepRad; + const p1 = rotatePoint(acx + outerR * Math.cos(a0), acy - outerR * Math.sin(a0)); + const p2 = rotatePoint(acx + outerR * Math.cos(a1), acy - outerR * Math.sin(a1)); + const p3 = rotatePoint(acx + innerR * Math.cos(a0), acy - innerR * Math.sin(a0)); + const p4 = rotatePoint(acx + innerR * Math.cos(a1), acy - innerR * Math.sin(a1)); + const minX = Math.min(p1[0], p2[0], p3[0], p4[0]); + const minY = Math.min(p1[1], p2[1], p3[1], p4[1]); + const maxX = Math.max(p1[0], p2[0], p3[0], p4[0]); + const maxY = Math.max(p1[1], p2[1], p3[1], p4[1]); + boxes.push({ x: minX, y: minY, w: maxX - minX, h: maxY - minY }); + } + return boxes; +} + +// ─── EPC decomposition into oriented quads ─── + +/** Get all collision quads for an EPC symbol in world space */ +function getEpcCollisionQuads( + symX: number, symY: number, symW: number, symH: number, rotation: number, + waypoints: EpcWaypoint[] +): [number, number][][] { + const quads: [number, number][][] = []; + if (waypoints.length < 2) return quads; + + const rot = (rotation || 0) * Math.PI / 180; + const cosR = Math.cos(rot), sinR = Math.sin(rot); + const symCx = symX + symW / 2, symCy = symY + symH / 2; + + function toWorld(lx: number, ly: number): [number, number] { + if (!rotation) return [lx, ly]; + const dx = lx - symCx, dy = ly - symCy; + return [symCx + dx * cosR - dy * sinR, symCy + dx * sinR + dy * cosR]; + } + + /** Build an oriented quad from a segment (p0→p1) with given half-width */ + function segmentQuad( + p0x: number, p0y: number, p1x: number, p1y: number, halfW: number + ): [number, number][] { + const dx = p1x - p0x, dy = p1y - p0y; + const len = Math.sqrt(dx * dx + dy * dy); + if (len === 0) return []; + const nx = -dy / len * halfW, ny = dx / len * halfW; + return [ + toWorld(p0x - nx, p0y - ny), + toWorld(p1x - nx, p1y - ny), + toWorld(p1x + nx, p1y + ny), + toWorld(p0x + nx, p0y + ny), + ]; + } + + /** Build an oriented box quad using shared geometry, then transform to world space. */ + function boxQuad( + anchorX: number, anchorY: number, + dirX: number, dirY: number, + boxW: number, boxH: number, + anchorSide: 'left' | 'right' + ): [number, number][] { + const corners = orientedBoxCorners(anchorX, anchorY, dirX, dirY, boxW, boxH, anchorSide); + if (corners.length < 4) return []; + return corners.map(([cx, cy]) => toWorld(cx, cy)) as [number, number][]; + } + + const ox = symX, oy = symY; + + // Line segment quads (use half-width of at least 1px for collision) + const segHalfW = Math.max(EPC_LINE_WIDTH / 2, 0.5); + for (let i = 0; i < waypoints.length - 1; i++) { + const q = segmentQuad( + ox + waypoints[i].x, oy + waypoints[i].y, + ox + waypoints[i + 1].x, oy + waypoints[i + 1].y, + segHalfW + ); + if (q.length === 4) quads.push(q); + } + + // Left box quad + const p0 = waypoints[0], p1 = waypoints[1]; + const lbQ = boxQuad( + ox + p0.x, oy + p0.y, + p1.x - p0.x, p1.y - p0.y, + EPC_LEFT_BOX.w, EPC_LEFT_BOX.h, + 'right' + ); + if (lbQ.length === 4) quads.push(lbQ); + + // Right box quad + const last = waypoints[waypoints.length - 1]; + const prev = waypoints[waypoints.length - 2]; + const rbQ = boxQuad( + ox + last.x, oy + last.y, + last.x - prev.x, last.y - prev.y, + EPC_RIGHT_BOX.w, EPC_RIGHT_BOX.h, + 'left' + ); + if (rbQ.length === 4) quads.push(rbQ); + + return quads; +} + +/** Look up EPC waypoints for a symbol (from layout store or defaults) */ +function getSymWaypoints(id: number): EpcWaypoint[] { + const sym = layout.symbols.find(s => s.id === id); + return sym?.epcWaypoints || EPC_DEFAULT_WAYPOINTS.map(wp => ({ ...wp })); +} + +// ─── Main spacing violation check ─── + +/** Check if any quad from a set collides with a single polygon */ +function anyQuadVsPolygon( + quads: [number, number][][], + bVerts: [number, number][], + spacing: number +): boolean { + for (const q of quads) { + if (polygonSATWithSpacing(q, bVerts, spacing)) return true; + } + return false; +} + +/** Check if any quad from set A collides with any quad from set B */ +function anyQuadVsQuads( + aQuads: [number, number][][], + bQuads: [number, number][][], + spacing: number +): boolean { + for (const aq of aQuads) { + for (const bq of bQuads) { + if (polygonSATWithSpacing(aq, bq, spacing)) return true; + } + } + return false; +} + +/** Check any EPC quad against a curved symbol */ +function anyQuadVsCurved( + quads: [number, number][][], + curve: CurveParams, + spacing: number +): boolean { + // Use the curved-vs-spur logic: each quad is a convex polygon + for (const q of quads) { + if (checkCurvedVsSpur(curve, q, spacing)) return true; + } + return false; +} + +export function checkSpacingViolation( + id: number, x: number, y: number, w: number, h: number, rotation: number, + symbolId?: string, curveAngle?: number, w2?: number +): boolean { + if (symbolId && SPACING_EXEMPT.has(symbolId)) return false; + + const spacing = layout.minSpacing; + const isCurved = !!(symbolId && isCurvedType(symbolId)); + const isSpur = !!(symbolId && isSpurType(symbolId)); + const isEpc = !!(symbolId && isEpcType(symbolId)); + + // Get EPC quads for "this" symbol if it's an EPC + let epcQuads: [number, number][][] | null = null; + if (isEpc) { + const wps = getSymWaypoints(id); + epcQuads = getEpcCollisionQuads(x, y, w, h, rotation, wps); + } + + for (const sym of layout.symbols) { + if (sym.id === id) continue; + if (SPACING_EXEMPT.has(sym.symbolId)) continue; + + const symIsCurved = isCurvedType(sym.symbolId); + const symIsSpur = isSpurType(sym.symbolId); + const symIsEpc = isEpcType(sym.symbolId); + + // Get EPC quads for "other" symbol if it's EPC + let symEpcQuads: [number, number][][] | null = null; + if (symIsEpc) { + const symWps = sym.epcWaypoints || EPC_DEFAULT_WAYPOINTS; + symEpcQuads = getEpcCollisionQuads(sym.x, sym.y, sym.w, sym.h, sym.rotation, symWps); + } + + // ── EPC vs EPC ── + if (isEpc && symIsEpc && epcQuads && symEpcQuads) { + if (anyQuadVsQuads(epcQuads, symEpcQuads, spacing)) return true; + continue; + } + + // ── EPC vs Curved ── + if (isEpc && symIsCurved && epcQuads) { + if (anyQuadVsCurved(epcQuads, sym, spacing)) return true; + continue; + } + if (isCurved && symIsEpc && symEpcQuads) { + if (anyQuadVsCurved(symEpcQuads, { x, y, w, h, rotation, symbolId: symbolId!, curveAngle }, spacing)) return true; + continue; + } + + // ── EPC vs Spur ── + if (isEpc && symIsSpur && epcQuads) { + const spurVerts = getSpurVertices(sym.x, sym.y, sym.w, sym.h, sym.w2 ?? sym.w, sym.rotation); + if (anyQuadVsPolygon(epcQuads, spurVerts, spacing)) return true; + continue; + } + if (isSpur && symIsEpc && symEpcQuads) { + const spurVerts = getSpurVertices(x, y, w, h, w2 ?? w, rotation); + if (anyQuadVsPolygon(symEpcQuads, spurVerts, spacing)) return true; + continue; + } + + // ── EPC vs OBB (regular symbol) ── + if (isEpc && epcQuads && !symIsCurved && !symIsSpur && !symIsEpc) { + const bVerts = getOBBVertices(sym.x, sym.y, sym.w, sym.h, sym.rotation); + if (anyQuadVsPolygon(epcQuads, bVerts, spacing)) return true; + continue; + } + if (symIsEpc && symEpcQuads && !isCurved && !isSpur && !isEpc) { + const aVerts = getOBBVertices(x, y, w, h, rotation); + if (anyQuadVsPolygon(symEpcQuads, aVerts, spacing)) return true; + continue; + } + + // ── Non-EPC logic (existing) ── + if (!isCurved && !symIsCurved) { + if (isSpur || symIsSpur) { + const aVerts = isSpur + ? getSpurVertices(x, y, w, h, w2 ?? w, rotation) + : getOBBVertices(x, y, w, h, rotation); + const bVerts = symIsSpur + ? getSpurVertices(sym.x, sym.y, sym.w, sym.h, sym.w2 ?? sym.w, sym.rotation) + : getOBBVertices(sym.x, sym.y, sym.w, sym.h, sym.rotation); + if (polygonSATWithSpacing(aVerts, bVerts, spacing)) return true; + } else { + if (obbOverlapWithSpacing(x, y, w, h, rotation, sym.x, sym.y, sym.w, sym.h, sym.rotation, spacing)) { + return true; + } + } + } else if (isCurved && !symIsCurved) { + if (symIsSpur) { + const spurVerts = getSpurVertices(sym.x, sym.y, sym.w, sym.h, sym.w2 ?? sym.w, sym.rotation); + if (checkCurvedVsSpur( + { x, y, w, h, rotation, symbolId: symbolId!, curveAngle }, + spurVerts, spacing + )) return true; + } else { + if (checkCurvedVsOBB( + { x, y, w, h, rotation, symbolId: symbolId!, curveAngle }, + sym.x, sym.y, sym.w, sym.h, sym.rotation, spacing + )) return true; + } + } else if (!isCurved && symIsCurved) { + if (isSpur) { + const spurVerts = getSpurVertices(x, y, w, h, w2 ?? w, rotation); + if (checkCurvedVsSpur(sym, spurVerts, spacing)) return true; + } else { + if (checkCurvedVsOBB( + sym, + x, y, w, h, rotation, spacing + )) return true; + } + } else { + // Both curved: use band AABBs as fallback + const aBoxes = getCurvedBandAABBs({ x, y, w, h, rotation, symbolId: symbolId!, curveAngle }); + const bBoxes = getCurvedBandAABBs(sym); + for (const a of aBoxes) { + for (const b of bBoxes) { + if (edgeDistance(a.x, a.y, a.w, a.h, b.x, b.y, b.w, b.h) < spacing) return true; + } + } + } + } + return false; +} + +// ─── Grid snapping ─── + +export function snapToGrid(x: number, y: number, w?: number, h?: number, rotation?: number): { x: number; y: number } { + if (!layout.snapEnabled) return { x, y }; + const size = layout.gridSize; + if (!rotation || !w || !h) { + return { x: Math.round(x / size) * size, y: Math.round(y / size) * size }; + } + const aabb = getAABB(x, y, w, h, rotation); + const snappedAabbX = Math.round(aabb.x / size) * size; + const snappedAabbY = Math.round(aabb.y / size) * size; + return { + x: snappedAabbX + aabb.w / 2 - w / 2, + y: snappedAabbY + aabb.h / 2 - h / 2, + }; +} + +// ─── Find valid position ─── + +export function findValidPosition( + id: number, x: number, y: number, w: number, h: number, + symbolId: string, rotation: number, curveAngle?: number, w2?: number +): { x: number; y: number } { + const snapped = snapToGrid(x, y, w, h, rotation); + let sx = snapped.x, sy = snapped.y; + if (!checkSpacingViolation(id, sx, sy, w, h, rotation, symbolId, curveAngle, w2)) return { x: sx, y: sy }; + + const step = layout.snapEnabled ? layout.gridSize : 1; + const searchRadius = 20; + for (let r = 1; r <= searchRadius; r++) { + for (let dx = -r; dx <= r; dx++) { + for (let dy = -r; dy <= r; dy++) { + if (Math.abs(dx) !== r && Math.abs(dy) !== r) continue; + const cx = sx + dx * step; + const cy = sy + dy * step; + const bb = getAABB(cx, cy, w, h, rotation); + if (bb.x < 0 || bb.y < 0 || bb.x + bb.w > layout.canvasW || bb.y + bb.h > layout.canvasH) continue; + if (!checkSpacingViolation(id, cx, cy, w, h, rotation, symbolId, curveAngle, w2)) return { x: cx, y: cy }; + } + } + } + return { x: sx, y: sy }; +} + +export function clamp(value: number, min: number, max: number): number { + return Math.max(min, Math.min(max, value)); +} diff --git a/svelte-app/src/lib/canvas/geometry.ts b/svelte-app/src/lib/canvas/geometry.ts new file mode 100644 index 0000000..f8a8e5a --- /dev/null +++ b/svelte-app/src/lib/canvas/geometry.ts @@ -0,0 +1,77 @@ +/** Shared geometry helpers used by both collision.ts and interactions.ts */ + +export type Vec2 = [number, number]; + +/** Compute 4 corners of an oriented box anchored at a point along a direction. + * anchorSide='right': box extends backward from anchor (left box, right-center at anchor). + * anchorSide='left': box extends forward from anchor (right box, left-center at anchor). */ +export function orientedBoxCorners( + anchorX: number, anchorY: number, + dirX: number, dirY: number, + boxW: number, boxH: number, + anchorSide: 'left' | 'right' +): Vec2[] { + const len = Math.sqrt(dirX * dirX + dirY * dirY); + if (len === 0) return [[anchorX, anchorY]]; + const ux = dirX / len, uy = dirY / len; + const nx = -uy, ny = ux; + const hh = boxH / 2; + + if (anchorSide === 'right') { + return [ + [anchorX - ux * boxW - nx * hh, anchorY - uy * boxW - ny * hh], + [anchorX - nx * hh, anchorY - ny * hh], + [anchorX + nx * hh, anchorY + ny * hh], + [anchorX - ux * boxW + nx * hh, anchorY - uy * boxW + ny * hh], + ]; + } else { + return [ + [anchorX - nx * hh, anchorY - ny * hh], + [anchorX + ux * boxW - nx * hh, anchorY + uy * boxW - ny * hh], + [anchorX + ux * boxW + nx * hh, anchorY + uy * boxW + ny * hh], + [anchorX + nx * hh, anchorY + ny * hh], + ]; + } +} + +/** Check if mouse has moved past a drag threshold */ +export function pastDragThreshold( + posX: number, posY: number, + startX: number, startY: number, + threshold: number +): boolean { + const dx = posX - startX; + const dy = posY - startY; + return dx * dx + dy * dy >= threshold * threshold; +} + +/** Create a world-transform pair (toLocal / toWorld) for a rotated curve symbol. + * Arc center is at (acx, acy), symbol center at (scx, scy). */ +export function createCurveTransforms( + acx: number, acy: number, + scx: number, scy: number, + curveRotRad: number +) { + const invCos = Math.cos(-curveRotRad), invSin = Math.sin(-curveRotRad); + const fwdCos = Math.cos(curveRotRad), fwdSin = Math.sin(curveRotRad); + + /** World → arc-local (Y up) */ + function toLocal(wx: number, wy: number): Vec2 { + let lx = wx, ly = wy; + if (curveRotRad) { + const dx = wx - scx, dy = wy - scy; + lx = scx + dx * invCos - dy * invSin; + ly = scy + dx * invSin + dy * invCos; + } + return [lx - acx, acy - ly]; + } + + /** Unrotated-local → world */ + function toWorld(localX: number, localY: number): Vec2 { + if (!curveRotRad) return [localX, localY]; + const dx = localX - scx, dy = localY - scy; + return [scx + dx * fwdCos - dy * fwdSin, scy + dx * fwdSin + dy * fwdCos]; + } + + return { toLocal, toWorld }; +} diff --git a/svelte-app/src/lib/canvas/interactions.ts b/svelte-app/src/lib/canvas/interactions.ts new file mode 100644 index 0000000..08f55bf --- /dev/null +++ b/svelte-app/src/lib/canvas/interactions.ts @@ -0,0 +1,776 @@ +import { layout } from '../stores/layout.svelte.js'; +import { isResizable, isCurvedType, isSpurType, isEpcType, isInductionType, SYMBOLS, EPC_DEFAULT_WAYPOINTS, EPC_LEFT_BOX, EPC_RIGHT_BOX, INDUCTION_STRIP_TOP_FRAC, INDUCTION_STRIP_BOTTOM_FRAC } from '../symbols.js'; +import type { EpcWaypoint } from '../types.js'; +import { getAABB, snapToGrid, clamp, findValidPosition } from './collision.js'; +import { orientedBoxCorners, pastDragThreshold } from './geometry.js'; + +const ZOOM_MIN = 0.1; +const ZOOM_MAX = 5; +const ZOOM_IN_FACTOR = 1.1; +const ZOOM_OUT_FACTOR = 0.9; +const ROTATION_STEP = 15; +const CONVEYOR_MIN_W = 40; +const DRAG_THRESHOLD = 4; // pixels before drag actually starts + +interface DragState { + type: 'palette' | 'move' | 'multi-move' | 'resize-left' | 'resize-right' | 'resize-spur-top' | 'resize-spur-bottom' | 'epc-waypoint' | 'pdf'; + placedId?: number; + offsetX?: number; + offsetY?: number; + startX?: number; + startY?: number; + origW?: number; + origW2?: number; + origX?: number; + origY?: number; + origPdfOffsetX?: number; + origPdfOffsetY?: number; + symbolDef?: (typeof SYMBOLS)[number]; + ghost?: HTMLDivElement; + multiOffsets?: { id: number; offsetX: number; offsetY: number }[]; + dragActivated?: boolean; // true once mouse moves past threshold + waypointIndex?: number; // which EPC waypoint is being dragged + deviceLabel?: string; // label to assign when dropping from device dock +} + +let dragState: DragState | null = null; +let isPanning = false; +let panStartX = 0; +let panStartY = 0; +let canvasEl: HTMLCanvasElement | null = null; +let wrapperEl: HTMLDivElement | null = null; + +// Context menu callback +let contextMenuCallback: ((x: number, y: number, symId: number) => void) | null = null; + +export function setContextMenuCallback(cb: (x: number, y: number, symId: number) => void) { + contextMenuCallback = cb; +} + +export function initInteractions(canvas: HTMLCanvasElement, wrapper: HTMLDivElement) { + canvasEl = canvas; + wrapperEl = wrapper; + + canvas.addEventListener('mousedown', onCanvasMousedown); + canvas.addEventListener('contextmenu', onContextMenu); + wrapper.addEventListener('wheel', onWheel, { passive: false }); + wrapper.addEventListener('mousedown', onWrapperMousedown); + document.addEventListener('mousemove', onMousemove); + document.addEventListener('mouseup', onMouseup); + document.addEventListener('keydown', onKeydown); +} + +export function destroyInteractions() { + if (canvasEl) { + canvasEl.removeEventListener('mousedown', onCanvasMousedown); + canvasEl.removeEventListener('contextmenu', onContextMenu); + } + if (wrapperEl) { + wrapperEl.removeEventListener('wheel', onWheel); + wrapperEl.removeEventListener('mousedown', onWrapperMousedown); + } + document.removeEventListener('mousemove', onMousemove); + document.removeEventListener('mouseup', onMouseup); + document.removeEventListener('keydown', onKeydown); +} + +function screenToCanvas(clientX: number, clientY: number): { x: number; y: number } { + if (!wrapperEl) return { x: 0, y: 0 }; + const rect = wrapperEl.getBoundingClientRect(); + return { + x: (clientX - rect.left - layout.panX) / layout.zoomLevel, + y: (clientY - rect.top - layout.panY) / layout.zoomLevel, + }; +} + +/** Transform a point into a symbol's unrotated local space */ +function toSymbolLocal(px: number, py: number, sym: typeof layout.symbols[0]): { x: number; y: number } { + if (!sym.rotation) return { x: px, y: py }; + const scx = sym.x + sym.w / 2; + const scy = sym.y + sym.h / 2; + const rad = (-sym.rotation * Math.PI) / 180; + const cos = Math.cos(rad), sin = Math.sin(rad); + const dx = px - scx, dy = py - scy; + return { x: dx * cos - dy * sin + scx, y: dx * sin + dy * cos + scy }; +} + +function pointInRect(px: number, py: number, rx: number, ry: number, rw: number, rh: number): boolean { + return px >= rx && px <= rx + rw && py >= ry && py <= ry + rh; +} + +function pointInTrapezoid(px: number, py: number, sym: typeof layout.symbols[0]): boolean { + const w2 = sym.w2 ?? sym.w; + // The right edge of the trapezoid is a slanted line from (x+w2, y) to (x+w, y+h) + // For a given py, the max x is interpolated between w2 (top) and w (bottom) + const t = (py - sym.y) / sym.h; + const maxX = sym.x + w2 + t * (sym.w - w2); + return px >= sym.x && px <= maxX && py >= sym.y && py <= sym.y + sym.h; +} + +function hitTest(cx: number, cy: number): number | null { + for (let i = layout.symbols.length - 1; i >= 0; i--) { + const sym = layout.symbols[i]; + const local = toSymbolLocal(cx, cy, sym); + if (isSpurType(sym.symbolId)) { + if (pointInTrapezoid(local.x, local.y, sym)) return sym.id; + } else if (pointInRect(local.x, local.y, sym.x, sym.y, sym.w, sym.h)) { + return sym.id; + } + } + return null; +} + +/** Hit test EPC waypoint handles. Returns waypoint index or -1 */ +function hitEpcWaypoint(cx: number, cy: number, sym: typeof layout.symbols[0]): number { + if (!isEpcType(sym.symbolId)) return -1; + const waypoints = sym.epcWaypoints || EPC_DEFAULT_WAYPOINTS; + const { x: lx, y: ly } = toSymbolLocal(cx, cy, sym); + const hs = 6; + for (let i = 0; i < waypoints.length; i++) { + const wx = sym.x + waypoints[i].x; + const wy = sym.y + waypoints[i].y; + const dx = lx - wx, dy = ly - wy; + if (dx * dx + dy * dy <= hs * hs) return i; + } + return -1; +} + +/** Hit test EPC line segment midpoints for adding waypoints. Returns insert index or -1 */ +function hitEpcSegmentMidpoint(cx: number, cy: number, sym: typeof layout.symbols[0]): number { + if (!isEpcType(sym.symbolId)) return -1; + const waypoints = sym.epcWaypoints || EPC_DEFAULT_WAYPOINTS; + const { x: lx, y: ly } = toSymbolLocal(cx, cy, sym); + const hs = 8; + for (let i = 0; i < waypoints.length - 1; i++) { + const mx = sym.x + (waypoints[i].x + waypoints[i + 1].x) / 2; + const my = sym.y + (waypoints[i].y + waypoints[i + 1].y) / 2; + const dx = lx - mx, dy = ly - (my - 4); // offset for the "+" indicator position + if (dx * dx + dy * dy <= hs * hs) return i + 1; + } + return -1; +} + +function hitResizeHandle(cx: number, cy: number, sym: typeof layout.symbols[0]): 'left' | 'right' | 'spur-top' | 'spur-bottom' | null { + if (!isResizable(sym.symbolId) || layout.selectedIds.size !== 1 || !layout.selectedIds.has(sym.id)) return null; + + const hs = 10; + const { x: lx, y: ly } = toSymbolLocal(cx, cy, sym); + + if (isCurvedType(sym.symbolId)) { + const arcAngle = sym.curveAngle || 90; + const arcRad = (arcAngle * Math.PI) / 180; + const outerR = sym.w; + const arcCx = sym.x; + const arcCy = sym.y + sym.h; + const h1x = arcCx + outerR, h1y = arcCy; + if (pointInRect(lx, ly, h1x - hs / 2, h1y - hs / 2, hs, hs)) return 'right'; + const h2x = arcCx + outerR * Math.cos(arcRad); + const h2y = arcCy - outerR * Math.sin(arcRad); + if (pointInRect(lx, ly, h2x - hs / 2, h2y - hs / 2, hs, hs)) return 'left'; + return null; + } + + if (isSpurType(sym.symbolId)) { + const w2 = sym.w2 ?? sym.w; + // Top-right handle (controls w2) + if (pointInRect(lx, ly, sym.x + w2 - hs / 2, sym.y - hs / 2, hs, hs)) return 'spur-top'; + // Bottom-right handle (controls w) + if (pointInRect(lx, ly, sym.x + sym.w - hs / 2, sym.y + sym.h - hs / 2, hs, hs)) return 'spur-bottom'; + return null; + } + + if (isInductionType(sym.symbolId)) { + // Only right handle — arrow head is fixed width + const stripTopY = sym.y + sym.h * INDUCTION_STRIP_TOP_FRAC; + const stripBottomY = sym.y + sym.h * INDUCTION_STRIP_BOTTOM_FRAC; + const stripMidY = (stripTopY + stripBottomY) / 2 - hs / 2; + if (pointInRect(lx, ly, sym.x + sym.w - hs / 2, stripMidY, hs, hs)) return 'right'; + return null; + } + + const midY = sym.y + sym.h / 2 - hs / 2; + if (pointInRect(lx, ly, sym.x - hs / 2, midY, hs, hs)) return 'left'; + if (pointInRect(lx, ly, sym.x + sym.w - hs / 2, midY, hs, hs)) return 'right'; + return null; +} + +function onCanvasMousedown(e: MouseEvent) { + if (e.button !== 0) return; + e.preventDefault(); + + const pos = screenToCanvas(e.clientX, e.clientY); + + // PDF editing mode: drag the PDF background + if (layout.editingBackground) { + dragState = { + type: 'pdf', + startX: pos.x, + startY: pos.y, + origPdfOffsetX: layout.pdfOffsetX, + origPdfOffsetY: layout.pdfOffsetY, + }; + return; + } + + // Check EPC waypoint handles and resize handles (only for single selection) + if (layout.selectedIds.size === 1) { + const selId = [...layout.selectedIds][0]; + const sel = layout.symbols.find(s => s.id === selId); + if (sel && isEpcType(sel.symbolId)) { + // Double-click on existing waypoint to remove it (if >2 waypoints) + if (e.detail === 2) { + const wpIdx = hitEpcWaypoint(pos.x, pos.y, sel); + const wps = sel.epcWaypoints || EPC_DEFAULT_WAYPOINTS; + if (wpIdx >= 0 && wps.length > 2) { + layout.pushUndo(); + if (!sel.epcWaypoints) { + sel.epcWaypoints = EPC_DEFAULT_WAYPOINTS.map(wp => ({ ...wp })); + } + sel.epcWaypoints.splice(wpIdx, 1); + recalcEpcBounds(sel); + layout.markDirty(); + layout.saveMcmState(); + return; + } + // Double-click on "+" midpoint to add waypoint + const insertIdx = hitEpcSegmentMidpoint(pos.x, pos.y, sel); + if (insertIdx >= 0) { + layout.pushUndo(); + if (!sel.epcWaypoints) { + sel.epcWaypoints = EPC_DEFAULT_WAYPOINTS.map(wp => ({ ...wp })); + } + const prev = sel.epcWaypoints[insertIdx - 1]; + const next = sel.epcWaypoints[insertIdx]; + sel.epcWaypoints.splice(insertIdx, 0, { + x: (prev.x + next.x) / 2, + y: (prev.y + next.y) / 2, + }); + layout.markDirty(); + layout.saveMcmState(); + return; + } + } + // Check waypoint handles for drag + const wpIdx = hitEpcWaypoint(pos.x, pos.y, sel); + if (wpIdx >= 0) { + layout.pushUndo(); + if (!sel.epcWaypoints) { + sel.epcWaypoints = EPC_DEFAULT_WAYPOINTS.map(wp => ({ ...wp })); + } + dragState = { + type: 'epc-waypoint', + placedId: sel.id, + waypointIndex: wpIdx, + startX: pos.x, + startY: pos.y, + dragActivated: false, + }; + return; + } + } + if (sel) { + const handle = hitResizeHandle(pos.x, pos.y, sel); + if (handle) { + layout.pushUndo(); + if (handle === 'spur-top' || handle === 'spur-bottom') { + dragState = { + type: handle === 'spur-top' ? 'resize-spur-top' : 'resize-spur-bottom', + placedId: sel.id, + startX: pos.x, + startY: pos.y, + origW: sel.w, + origW2: sel.w2 ?? sel.w, + origX: sel.x, + origY: sel.y, + }; + } else { + dragState = { + type: handle === 'left' ? 'resize-left' : 'resize-right', + placedId: sel.id, + startX: pos.x, + startY: pos.y, + origW: sel.w, + origX: sel.x, + origY: sel.y, + }; + } + return; + } + } + } + + const hitId = hitTest(pos.x, pos.y); + + if (hitId !== null) { + if (e.shiftKey) { + // Shift+Click: toggle symbol in/out of selection + const newSet = new Set(layout.selectedIds); + if (newSet.has(hitId)) { + newSet.delete(hitId); + } else { + newSet.add(hitId); + } + layout.selectedIds = newSet; + layout.markDirty(); + return; // Don't start drag on shift+click + } + + // No shift: if symbol not already selected, make it the only selection + if (!layout.selectedIds.has(hitId)) { + layout.selectedIds = new Set([hitId]); + } + + layout.pushUndo(); + + // Start drag for selected symbols (with threshold — won't move until mouse travels DRAG_THRESHOLD px) + if (layout.selectedIds.size > 1) { + const multiOffsets = [...layout.selectedIds].map(id => { + const sym = layout.symbols.find(s => s.id === id)!; + return { id, offsetX: pos.x - sym.x, offsetY: pos.y - sym.y }; + }); + dragState = { type: 'multi-move', multiOffsets, startX: pos.x, startY: pos.y, dragActivated: false }; + } else { + const sym = layout.symbols.find(s => s.id === hitId)!; + dragState = { + type: 'move', + placedId: hitId, + offsetX: pos.x - sym.x, + offsetY: pos.y - sym.y, + startX: pos.x, + startY: pos.y, + dragActivated: false, + }; + } + layout.markDirty(); + } else { + // Click on empty space + if (!e.shiftKey) { + layout.selectedIds = new Set(); + layout.markDirty(); + } + } +} + +function onContextMenu(e: MouseEvent) { + e.preventDefault(); + const pos = screenToCanvas(e.clientX, e.clientY); + const hitId = hitTest(pos.x, pos.y); + if (hitId !== null && contextMenuCallback) { + contextMenuCallback(e.clientX, e.clientY, hitId); + } +} + +function onWheel(e: WheelEvent) { + e.preventDefault(); + if (!wrapperEl) return; + + const rect = wrapperEl.getBoundingClientRect(); + const mx = e.clientX - rect.left; + const my = e.clientY - rect.top; + const cx = (mx - layout.panX) / layout.zoomLevel; + const cy = (my - layout.panY) / layout.zoomLevel; + + const factor = e.deltaY > 0 ? ZOOM_OUT_FACTOR : ZOOM_IN_FACTOR; + layout.zoomLevel = clamp(layout.zoomLevel * factor, ZOOM_MIN, ZOOM_MAX); + + layout.panX = mx - cx * layout.zoomLevel; + layout.panY = my - cy * layout.zoomLevel; +} + +function onWrapperMousedown(e: MouseEvent) { + if (e.button === 1) { + e.preventDefault(); + isPanning = true; + panStartX = e.clientX - layout.panX; + panStartY = e.clientY - layout.panY; + document.body.style.cursor = 'grabbing'; + } +} + +const SPUR_MIN_W = 10; + +// orientedBoxCorners imported from geometry.ts + +/** Recalculate EPC symbol w/h to encompass all waypoints + oriented boxes. + * Symbol origin stays fixed — only w/h expand. Negative local coords are allowed. */ +function recalcEpcBounds(sym: typeof layout.symbols[0]) { + const wps = sym.epcWaypoints; + if (!wps || wps.length < 2) return; + + let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity; + + // Include all waypoints + for (const wp of wps) { + minX = Math.min(minX, wp.x); + minY = Math.min(minY, wp.y); + maxX = Math.max(maxX, wp.x); + maxY = Math.max(maxY, wp.y); + } + + // Left box corners (oriented along first segment) + const lbDir = { x: wps[1].x - wps[0].x, y: wps[1].y - wps[0].y }; + const lbCorners = orientedBoxCorners(wps[0].x, wps[0].y, lbDir.x, lbDir.y, EPC_LEFT_BOX.w, EPC_LEFT_BOX.h, 'right'); + for (const [bx, by] of lbCorners) { + minX = Math.min(minX, bx); minY = Math.min(minY, by); + maxX = Math.max(maxX, bx); maxY = Math.max(maxY, by); + } + + // Right box corners (oriented along last segment) + const last = wps[wps.length - 1]; + const prev = wps[wps.length - 2]; + const rbDir = { x: last.x - prev.x, y: last.y - prev.y }; + const rbCorners = orientedBoxCorners(last.x, last.y, rbDir.x, rbDir.y, EPC_RIGHT_BOX.w, EPC_RIGHT_BOX.h, 'left'); + for (const [bx, by] of rbCorners) { + minX = Math.min(minX, bx); minY = Math.min(minY, by); + maxX = Math.max(maxX, bx); maxY = Math.max(maxY, by); + } + + // Add small padding + minX -= 1; minY -= 1; maxX += 1; maxY += 1; + + // Set w/h to cover full extent from origin (allow negative local coords) + sym.w = Math.max(maxX, 1); + sym.h = Math.max(maxY, 1); +} + +function snapWidth(w: number, ctrlKey: boolean, minW: number = CONVEYOR_MIN_W): number { + if (layout.snapEnabled && !ctrlKey) { + w = Math.round(w / layout.gridSize) * layout.gridSize; + } + return Math.max(minW, Math.round(w)); +} + +function resizeCurved(sym: typeof layout.symbols[0], dx: number, dy: number, isRight: boolean, ctrlKey: boolean) { + const arcAngle = sym.curveAngle || 90; + let delta: number; + if (isRight) { + delta = dx; + } else { + const arcRad = (arcAngle * Math.PI) / 180; + delta = dx * Math.cos(arcRad) - dy * Math.sin(arcRad); + } + const newR = snapWidth(dragState!.origW! + delta, ctrlKey); + const arcCenterY = dragState!.origY! + dragState!.origW!; + sym.w = newR; + sym.h = newR; + sym.x = dragState!.origX!; + sym.y = arcCenterY - newR; +} + +function resizeSpur(sym: typeof layout.symbols[0], dx: number, dy: number, isTop: boolean, ctrlKey: boolean) { + const rad = (sym.rotation || 0) * Math.PI / 180; + const projectedDelta = dx * Math.cos(rad) + dy * Math.sin(rad); + if (isTop) { + sym.w2 = snapWidth(dragState!.origW2! + projectedDelta, ctrlKey, SPUR_MIN_W); + } else { + sym.w = snapWidth(dragState!.origW! + projectedDelta, ctrlKey, SPUR_MIN_W); + } +} + +function resizeStraight(sym: typeof layout.symbols[0], dx: number, dy: number, isRight: boolean, ctrlKey: boolean) { + const rad = (sym.rotation || 0) * Math.PI / 180; + const projectedDelta = dx * Math.cos(rad) + dy * Math.sin(rad); + const newW = snapWidth(dragState!.origW! + (isRight ? projectedDelta : -projectedDelta), ctrlKey); + + const cosR = Math.cos(rad), sinR = Math.sin(rad); + const origCx = dragState!.origX! + dragState!.origW! / 2; + const origCy = dragState!.origY! + sym.h / 2; + // Anchor the opposite edge: left edge for resize-right, right edge for resize-left + const anchorDir = isRight ? -1 : 1; + const anchorX = origCx + (anchorDir * dragState!.origW! / 2) * cosR; + const anchorY = origCy + (anchorDir * dragState!.origW! / 2) * sinR; + const newCx = anchorX + (-anchorDir * newW / 2) * cosR; + const newCy = anchorY + (-anchorDir * newW / 2) * sinR; + sym.w = newW; + sym.x = newCx - newW / 2; + sym.y = newCy - sym.h / 2; +} + +function onMousemove(e: MouseEvent) { + if (isPanning) { + layout.panX = e.clientX - panStartX; + layout.panY = e.clientY - panStartY; + return; + } + + if (!dragState) return; + + if (dragState.type === 'pdf') { + const pos = screenToCanvas(e.clientX, e.clientY); + layout.pdfOffsetX = dragState.origPdfOffsetX! + (pos.x - dragState.startX!); + layout.pdfOffsetY = dragState.origPdfOffsetY! + (pos.y - dragState.startY!); + layout.markDirty(); + return; + } + + if (dragState.type === 'epc-waypoint' && dragState.placedId != null && dragState.waypointIndex != null) { + const pos = screenToCanvas(e.clientX, e.clientY); + if (!dragState.dragActivated) { + if (!pastDragThreshold(pos.x, pos.y, dragState.startX!, dragState.startY!, DRAG_THRESHOLD)) return; + dragState.dragActivated = true; + } + const sym = layout.symbols.find(s => s.id === dragState!.placedId); + if (!sym || !sym.epcWaypoints) return; + const wps = sym.epcWaypoints; + const wpIdx = dragState.waypointIndex; + + // Transform mouse position to local (unrotated) coords + const local = toSymbolLocal(pos.x, pos.y, sym); + let localX = local.x - sym.x; + let localY = local.y - sym.y; + + // Snap to grid (in local coords, grid aligns with symbol origin in world) + if (layout.snapEnabled && !e.ctrlKey) { + // Snap the world position, then convert back to local + const worldSnappedX = Math.round((sym.x + localX) / layout.gridSize) * layout.gridSize; + const worldSnappedY = Math.round((sym.y + localY) / layout.gridSize) * layout.gridSize; + localX = worldSnappedX - sym.x; + localY = worldSnappedY - sym.y; + } + + // Constrain to 0/45/90 degree angles relative to adjacent waypoint + const anchor = wpIdx > 0 ? wps[wpIdx - 1] : (wpIdx < wps.length - 1 ? wps[wpIdx + 1] : null); + if (anchor) { + const dx = localX - anchor.x; + const dy = localY - anchor.y; + const dist = Math.sqrt(dx * dx + dy * dy); + if (dist > 0.1) { + // Snap angle to nearest 15-degree increment + const rawAngle = Math.atan2(dy, dx); + const snappedAngle = Math.round(rawAngle / (Math.PI / 12)) * (Math.PI / 12); + localX = anchor.x + dist * Math.cos(snappedAngle); + localY = anchor.y + dist * Math.sin(snappedAngle); + + // Re-snap to grid after angle constraint + if (layout.snapEnabled && !e.ctrlKey) { + const worldSnappedX = Math.round((sym.x + localX) / layout.gridSize) * layout.gridSize; + const worldSnappedY = Math.round((sym.y + localY) / layout.gridSize) * layout.gridSize; + localX = worldSnappedX - sym.x; + localY = worldSnappedY - sym.y; + } + } + } + + wps[wpIdx] = { x: localX, y: localY }; + // Recalculate bounding box + recalcEpcBounds(sym); + layout.markDirty(); + } + + if (dragState.type === 'palette' && dragState.ghost && dragState.symbolDef) { + const sym = dragState.symbolDef; + dragState.ghost.style.left = (e.clientX - sym.w / 2) + 'px'; + dragState.ghost.style.top = (e.clientY - sym.h / 2) + 'px'; + } + + if (dragState.type === 'move' && dragState.placedId != null) { + const pos = screenToCanvas(e.clientX, e.clientY); + if (!dragState.dragActivated) { + if (!pastDragThreshold(pos.x, pos.y, dragState.startX!, dragState.startY!, DRAG_THRESHOLD)) return; + dragState.dragActivated = true; + } + const sym = layout.symbols.find(s => s.id === dragState!.placedId); + if (!sym) return; + const bb = getAABB(0, 0, sym.w, sym.h, sym.rotation); + const newX = clamp(pos.x - dragState.offsetX!, -bb.x, layout.canvasW - bb.w - bb.x); + const newY = clamp(pos.y - dragState.offsetY!, -bb.y, layout.canvasH - bb.h - bb.y); + // Hold Ctrl for pixel-precise positioning (bypass grid snap) + const snapped = e.ctrlKey ? { x: Math.round(newX), y: Math.round(newY) } : snapToGrid(newX, newY, sym.w, sym.h, sym.rotation); + sym.x = snapped.x; + sym.y = snapped.y; + layout.markDirty(); + } + + if (dragState.type === 'multi-move' && dragState.multiOffsets) { + const pos = screenToCanvas(e.clientX, e.clientY); + if (!dragState.dragActivated) { + if (!pastDragThreshold(pos.x, pos.y, dragState.startX!, dragState.startY!, DRAG_THRESHOLD)) return; + dragState.dragActivated = true; + } + for (const { id, offsetX, offsetY } of dragState.multiOffsets) { + const sym = layout.symbols.find(s => s.id === id); + if (!sym) continue; + const bb = getAABB(0, 0, sym.w, sym.h, sym.rotation); + const rawX = clamp(pos.x - offsetX, -bb.x, layout.canvasW - bb.w - bb.x); + const rawY = clamp(pos.y - offsetY, -bb.y, layout.canvasH - bb.h - bb.y); + const snapped = e.ctrlKey + ? { x: Math.round(rawX), y: Math.round(rawY) } + : snapToGrid(rawX, rawY, sym.w, sym.h, sym.rotation); + sym.x = snapped.x; + sym.y = snapped.y; + } + layout.markDirty(); + } + + if ((dragState.type === 'resize-spur-top' || dragState.type === 'resize-spur-bottom') && dragState.placedId != null) { + const sym = layout.symbols.find(s => s.id === dragState!.placedId); + if (!sym) return; + const pos = screenToCanvas(e.clientX, e.clientY); + const dx = pos.x - dragState.startX!; + const dy = pos.y - dragState.startY!; + resizeSpur(sym, dx, dy, dragState.type === 'resize-spur-top', e.ctrlKey); + layout.markDirty(); + } + + if ((dragState.type === 'resize-left' || dragState.type === 'resize-right') && dragState.placedId != null) { + const sym = layout.symbols.find(s => s.id === dragState!.placedId); + if (!sym) return; + const pos = screenToCanvas(e.clientX, e.clientY); + const dx = pos.x - dragState.startX!; + const dy = pos.y - dragState.startY!; + const isRight = dragState.type === 'resize-right'; + + if (isCurvedType(sym.symbolId)) { + resizeCurved(sym, dx, dy, isRight, e.ctrlKey); + } else { + resizeStraight(sym, dx, dy, isRight, e.ctrlKey); + } + layout.markDirty(); + } +} + +function onMouseup(e: MouseEvent) { + if (e.button === 1 && isPanning) { + isPanning = false; + document.body.style.cursor = ''; + return; + } + + if (!dragState) return; + + if (dragState.type === 'pdf') { + layout.saveMcmState(); + dragState = null; + return; + } + + if (dragState.type === 'palette' && dragState.ghost && dragState.symbolDef) { + dragState.ghost.remove(); + const sym = dragState.symbolDef; + const rot = sym.defaultRotation || 0; + const pos = screenToCanvas(e.clientX, e.clientY); + let dropX = pos.x - sym.w / 2; + let dropY = pos.y - sym.h / 2; + + if (dropX >= -sym.w && dropX <= layout.canvasW && dropY >= -sym.h && dropY <= layout.canvasH) { + dropX = clamp(dropX, 0, layout.canvasW - sym.w); + dropY = clamp(dropY, 0, layout.canvasH - sym.h); + const valid = findValidPosition(-1, dropX, dropY, sym.w, sym.h, sym.id, rot, sym.curveAngle, sym.w2); + layout.addSymbol({ + symbolId: sym.id, + file: sym.file, + name: sym.name, + label: dragState.deviceLabel || '', + x: valid.x, + y: valid.y, + w: sym.w, + h: sym.h, + w2: sym.w2, + rotation: rot, + curveAngle: sym.curveAngle, + epcWaypoints: isEpcType(sym.id) ? EPC_DEFAULT_WAYPOINTS.map(wp => ({ ...wp })) : undefined, + pdpCBs: undefined, + }); + } + } + + if (dragState.type === 'move' && dragState.placedId != null) { + if (dragState.dragActivated) { + const sym = layout.symbols.find(s => s.id === dragState!.placedId); + if (sym) { + if (!e.ctrlKey) { + const valid = findValidPosition(sym.id, sym.x, sym.y, sym.w, sym.h, sym.symbolId, sym.rotation, sym.curveAngle, sym.w2); + sym.x = valid.x; + sym.y = valid.y; + } + } + layout.markDirty(); + layout.saveMcmState(); + } + } + + if (dragState.type === 'multi-move' && dragState.dragActivated) { + layout.markDirty(); + layout.saveMcmState(); + } + + if (dragState.type === 'resize-left' || dragState.type === 'resize-right' || dragState.type === 'resize-spur-top' || dragState.type === 'resize-spur-bottom') { + layout.markDirty(); + layout.saveMcmState(); + } + + if (dragState.type === 'epc-waypoint' && dragState.dragActivated) { + layout.markDirty(); + layout.saveMcmState(); + } + + dragState = null; +} + +function rotateSelected(delta: number) { + if (layout.selectedIds.size === 0) return; + layout.pushUndo(); + for (const id of layout.selectedIds) { + const sym = layout.symbols.find(s => s.id === id); + if (!sym) continue; + sym.rotation = ((sym.rotation || 0) + delta + 360) % 360; + } + layout.markDirty(); + layout.saveMcmState(); +} + +function onKeydown(e: KeyboardEvent) { + // Ctrl+Z: undo + if (e.ctrlKey && e.key === 'z') { + e.preventDefault(); + layout.undo(); + return; + } + + // Ctrl+D: duplicate selected + if (e.ctrlKey && (e.key === 'd' || e.key === 'D')) { + e.preventDefault(); + layout.duplicateSelected(); + return; + } + + // Delete: remove all selected + if (e.key === 'Delete' && layout.selectedIds.size > 0) { + layout.removeSelected(); + return; + } + + // E/Q: rotate all selected + if (layout.selectedIds.size > 0 && (e.key === 'e' || e.key === 'E')) { + rotateSelected(ROTATION_STEP); + } + if (layout.selectedIds.size > 0 && (e.key === 'q' || e.key === 'Q')) { + rotateSelected(-ROTATION_STEP); + } +} + +// Called from Palette component to initiate a palette drag +export function startPaletteDrag(e: MouseEvent, symbolDef: (typeof SYMBOLS)[number], deviceLabel?: string) { + const ghost = document.createElement('div'); + ghost.style.cssText = ` + position: fixed; + pointer-events: none; + opacity: 0.6; + z-index: 9999; + width: ${symbolDef.w}px; + height: ${symbolDef.h}px; + `; + if (symbolDef.defaultRotation) { + ghost.style.transform = `rotate(${symbolDef.defaultRotation}deg)`; + } + const img = document.createElement('img'); + img.src = symbolDef.file; + img.style.width = '100%'; + img.style.height = '100%'; + ghost.appendChild(img); + ghost.style.left = (e.clientX - symbolDef.w / 2) + 'px'; + ghost.style.top = (e.clientY - symbolDef.h / 2) + 'px'; + document.body.appendChild(ghost); + + dragState = { type: 'palette', symbolDef, ghost, deviceLabel }; +} diff --git a/svelte-app/src/lib/canvas/renderer.ts b/svelte-app/src/lib/canvas/renderer.ts new file mode 100644 index 0000000..1f950e8 --- /dev/null +++ b/svelte-app/src/lib/canvas/renderer.ts @@ -0,0 +1,477 @@ +import { layout } from '../stores/layout.svelte.js'; +import { getSymbolImage, isResizable, isCurvedType, isSpurType, isEpcType, isInductionType, isPhotoeyeType, getCurveBandWidth, SPACING_EXEMPT, EPC_LEFT_BOX, EPC_RIGHT_BOX, EPC_DEFAULT_WAYPOINTS, EPC_LINE_WIDTH, EPC_ICON_FILE, INDUCTION_HEAD_W, INDUCTION_ARROW, INDUCTION_STRIP_TOP_FRAC, INDUCTION_STRIP_BOTTOM_FRAC, PHOTOEYE_CONFIG } from '../symbols.js'; +import { checkSpacingViolation } from './collision.js'; +import type { PlacedSymbol } from '../types.js'; + +let ctx: CanvasRenderingContext2D | null = null; +let canvas: HTMLCanvasElement | null = null; +let animFrameId: number | null = null; +let lastDirty = -1; + +const MAX_RENDER_SCALE = 4; +let currentRenderScale = 0; +let lastCanvasW = 0; +let lastCanvasH = 0; + +export function setCanvas(c: HTMLCanvasElement) { + canvas = c; + ctx = c.getContext('2d')!; + currentRenderScale = 0; // force resolution update on first render +} + +function updateCanvasResolution() { + if (!canvas) return; + const dpr = window.devicePixelRatio || 1; + const targetScale = Math.min(Math.ceil(dpr * layout.zoomLevel), MAX_RENDER_SCALE); + const sizeChanged = layout.canvasW !== lastCanvasW || layout.canvasH !== lastCanvasH; + if (targetScale === currentRenderScale && !sizeChanged) return; + currentRenderScale = targetScale; + lastCanvasW = layout.canvasW; + lastCanvasH = layout.canvasH; + canvas.width = layout.canvasW * currentRenderScale; + canvas.height = layout.canvasH * currentRenderScale; + canvas.style.width = layout.canvasW + 'px'; + canvas.style.height = layout.canvasH + 'px'; +} + +export function startRenderLoop() { + function loop() { + animFrameId = requestAnimationFrame(loop); + const dpr = window.devicePixelRatio || 1; + const targetScale = Math.min(Math.ceil(dpr * layout.zoomLevel), MAX_RENDER_SCALE); + const sizeChanged = layout.canvasW !== lastCanvasW || layout.canvasH !== lastCanvasH; + if (layout.dirty !== lastDirty || targetScale !== currentRenderScale || sizeChanged) { + lastDirty = layout.dirty; + render(); + } + } + loop(); +} + +export function stopRenderLoop() { + if (animFrameId !== null) { + cancelAnimationFrame(animFrameId); + animFrameId = null; + } +} + +export function render() { + if (!ctx || !canvas) return; + + updateCanvasResolution(); + ctx.save(); + ctx.setTransform(currentRenderScale, 0, 0, currentRenderScale, 0, 0); + ctx.clearRect(0, 0, layout.canvasW, layout.canvasH); + + if (layout.showGrid) { + drawGrid(ctx); + } + + // Draw non-overlay symbols first, then overlay symbols (photoeyes) on top + for (const sym of layout.symbols) { + if (!SPACING_EXEMPT.has(sym.symbolId)) drawSymbol(ctx, sym as PlacedSymbol); + } + for (const sym of layout.symbols) { + if (SPACING_EXEMPT.has(sym.symbolId)) drawSymbol(ctx, sym as PlacedSymbol); + } + + ctx.restore(); +} + +function drawGrid(ctx: CanvasRenderingContext2D) { + const size = layout.gridSize; + ctx.strokeStyle = '#333'; + ctx.lineWidth = 0.5; + ctx.beginPath(); + for (let x = 0; x <= layout.canvasW; x += size) { + ctx.moveTo(x, 0); + ctx.lineTo(x, layout.canvasH); + } + for (let y = 0; y <= layout.canvasH; y += size) { + ctx.moveTo(0, y); + ctx.lineTo(layout.canvasW, y); + } + ctx.stroke(); +} + +/** Trace the arc band outline path (for selection/collision/hover strokes on curved types) */ +function traceArcBandPath(ctx: CanvasRenderingContext2D, sym: PlacedSymbol, pad: number = 0) { + const angle = sym.curveAngle || 90; + const outerR = sym.w + pad; + const bandW = getCurveBandWidth(sym.symbolId); + const innerR = Math.max(0, sym.w - bandW - pad); + const sweepRad = (angle * Math.PI) / 180; + const arcCx = sym.x; + const arcCy = sym.y + sym.h; + + ctx.beginPath(); + ctx.arc(arcCx, arcCy, outerR, 0, -sweepRad, true); + ctx.arc(arcCx, arcCy, innerR, -sweepRad, 0, false); + ctx.closePath(); +} + +/** Trace the spur trapezoid path (for selection/collision strokes) */ +function traceSpurPath(ctx: CanvasRenderingContext2D, sym: PlacedSymbol, pad: number = 0) { + const w2 = sym.w2 ?? sym.w; + // Expand vertices outward by pad + ctx.beginPath(); + ctx.moveTo(sym.x - pad, sym.y - pad); + ctx.lineTo(sym.x + w2 + pad, sym.y - pad); + ctx.lineTo(sym.x + sym.w + pad, sym.y + sym.h + pad); + ctx.lineTo(sym.x - pad, sym.y + sym.h + pad); + ctx.closePath(); +} + +/** Draw the EPC symbol: SVG image for left icon, programmatic polyline + right box. + * Both boxes auto-orient along the line direction at their respective ends. */ +function drawEpcSymbol(ctx: CanvasRenderingContext2D, sym: PlacedSymbol) { + const waypoints = sym.epcWaypoints || EPC_DEFAULT_WAYPOINTS; + + const ox = sym.x; // origin x + const oy = sym.y; // origin y + + // Draw polyline connecting waypoints + if (waypoints.length >= 2) { + ctx.beginPath(); + ctx.moveTo(ox + waypoints[0].x, oy + waypoints[0].y); + for (let i = 1; i < waypoints.length; i++) { + ctx.lineTo(ox + waypoints[i].x, oy + waypoints[i].y); + } + ctx.strokeStyle = '#000000'; + ctx.lineWidth = EPC_LINE_WIDTH; + ctx.stroke(); + } + + // --- Left icon: use actual SVG image, oriented along first segment --- + if (waypoints.length >= 2) { + const lb = EPC_LEFT_BOX; + const p0x = ox + waypoints[0].x, p0y = oy + waypoints[0].y; + const p1x = ox + waypoints[1].x, p1y = oy + waypoints[1].y; + const angle = Math.atan2(p1y - p0y, p1x - p0x); + + const iconImg = getSymbolImage(EPC_ICON_FILE); + if (iconImg) { + ctx.save(); + ctx.translate(p0x, p0y); + ctx.rotate(angle); + ctx.drawImage(iconImg, -lb.w, -lb.h / 2, lb.w, lb.h); + ctx.restore(); + } + } + + // --- Right box: oriented along direction from wp[n-2] to wp[n-1] --- + if (waypoints.length >= 2) { + const last = waypoints[waypoints.length - 1]; + const prev = waypoints[waypoints.length - 2]; + const plx = ox + last.x, ply = oy + last.y; + const ppx = ox + prev.x, ppy = oy + prev.y; + const angle = Math.atan2(ply - ppy, plx - ppx); + + ctx.save(); + ctx.translate(plx, ply); + ctx.rotate(angle); + const rb = EPC_RIGHT_BOX; + ctx.fillStyle = '#aaaaaa'; + ctx.strokeStyle = '#000000'; + ctx.lineWidth = 0.3; + ctx.fillRect(0, -rb.h / 2, rb.w, rb.h); + ctx.strokeRect(0, -rb.h / 2, rb.w, rb.h); + ctx.restore(); + } +} + +/** Draw EPC waypoint handles when selected */ +function drawEpcWaypointHandles(ctx: CanvasRenderingContext2D, sym: PlacedSymbol) { + const waypoints = sym.epcWaypoints || EPC_DEFAULT_WAYPOINTS; + const hs = 6; + ctx.fillStyle = '#00ccff'; + ctx.strokeStyle = '#0088aa'; + ctx.lineWidth = 1; + + for (const wp of waypoints) { + const hx = sym.x + wp.x; + const hy = sym.y + wp.y; + ctx.beginPath(); + ctx.arc(hx, hy, hs / 2, 0, Math.PI * 2); + ctx.fill(); + ctx.stroke(); + } + + // Draw "+" at midpoints of segments to hint add-waypoint + if (waypoints.length >= 2) { + ctx.fillStyle = '#00ccff'; + ctx.font = '6px sans-serif'; + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + for (let i = 0; i < waypoints.length - 1; i++) { + const mx = sym.x + (waypoints[i].x + waypoints[i + 1].x) / 2; + const my = sym.y + (waypoints[i].y + waypoints[i + 1].y) / 2; + ctx.fillText('+', mx, my - 4); + } + } +} + +/** Trace the EPC outline path: left box + segments + right box */ +function traceEpcOutlinePath(ctx: CanvasRenderingContext2D, sym: PlacedSymbol, pad: number) { + const waypoints = sym.epcWaypoints || EPC_DEFAULT_WAYPOINTS; + if (waypoints.length < 2) return; + const ox = sym.x, oy = sym.y; + + // Draw left box outline + const p0x = ox + waypoints[0].x, p0y = oy + waypoints[0].y; + const p1x = ox + waypoints[1].x, p1y = oy + waypoints[1].y; + const lAngle = Math.atan2(p1y - p0y, p1x - p0x); + const lb = EPC_LEFT_BOX; + + ctx.save(); + ctx.translate(p0x, p0y); + ctx.rotate(lAngle); + ctx.beginPath(); + ctx.rect(-lb.w - pad, -lb.h / 2 - pad, lb.w + pad * 2, lb.h + pad * 2); + ctx.stroke(); + ctx.restore(); + + // Draw line segments outline (thickened) + for (let i = 0; i < waypoints.length - 1; i++) { + const ax = ox + waypoints[i].x, ay = oy + waypoints[i].y; + const bx = ox + waypoints[i + 1].x, by = oy + waypoints[i + 1].y; + const segAngle = Math.atan2(by - ay, bx - ax); + const segLen = Math.sqrt((bx - ax) ** 2 + (by - ay) ** 2); + ctx.save(); + ctx.translate(ax, ay); + ctx.rotate(segAngle); + ctx.beginPath(); + ctx.rect(-pad, -pad - EPC_LINE_WIDTH / 2, segLen + pad * 2, EPC_LINE_WIDTH + pad * 2); + ctx.stroke(); + ctx.restore(); + } + + // Draw right box outline + const last = waypoints[waypoints.length - 1]; + const prev = waypoints[waypoints.length - 2]; + const plx = ox + last.x, ply = oy + last.y; + const ppx = ox + prev.x, ppy = oy + prev.y; + const rAngle = Math.atan2(ply - ppy, plx - ppx); + const rb = EPC_RIGHT_BOX; + + ctx.save(); + ctx.translate(plx, ply); + ctx.rotate(rAngle); + ctx.beginPath(); + ctx.rect(-pad, -rb.h / 2 - pad, rb.w + pad * 2, rb.h + pad * 2); + ctx.stroke(); + ctx.restore(); +} + +/** Trace the induction outline path (arrow head + strip) */ +function traceInductionPath(ctx: CanvasRenderingContext2D, sym: PlacedSymbol, pad: number) { + const hw = INDUCTION_HEAD_W; + const stripTopY = sym.y + sym.h * INDUCTION_STRIP_TOP_FRAC; + const stripBottomY = sym.y + sym.h * INDUCTION_STRIP_BOTTOM_FRAC; + const pts = INDUCTION_ARROW.map(([xf, yf]) => [sym.x + xf * hw, sym.y + yf * sym.h] as const); + + ctx.beginPath(); + ctx.moveTo(sym.x + sym.w + pad, stripTopY - pad); + ctx.lineTo(pts[0][0], stripTopY - pad); + // Arrow outline with padding + for (let i = 0; i < pts.length; i++) { + const [px, py] = pts[i]; + // Simple approach: offset each point outward by pad + ctx.lineTo(px + (i <= 2 ? -pad : pad), py + (i <= 1 ? -pad : pad)); + } + ctx.lineTo(pts[5][0], stripBottomY + pad); + ctx.lineTo(sym.x + sym.w + pad, stripBottomY + pad); + ctx.closePath(); +} + +/** Stroke an outline around a symbol — uses arc path for curved, trapezoid for spur, EPC shape for EPC, induction shape for induction, rect for straight */ +function strokeOutline(ctx: CanvasRenderingContext2D, sym: PlacedSymbol, pad: number) { + if (isCurvedType(sym.symbolId)) { + traceArcBandPath(ctx, sym, pad); + ctx.stroke(); + } else if (isSpurType(sym.symbolId)) { + traceSpurPath(ctx, sym, pad); + ctx.stroke(); + } else if (isEpcType(sym.symbolId)) { + traceEpcOutlinePath(ctx, sym, pad); + } else if (isInductionType(sym.symbolId)) { + traceInductionPath(ctx, sym, pad); + ctx.stroke(); + } else { + ctx.strokeRect(sym.x - pad, sym.y - pad, sym.w + pad * 2, sym.h + pad * 2); + } +} + +/** Draw a filled+stroked resize handle at (x, y) */ +function drawHandle(ctx: CanvasRenderingContext2D, x: number, y: number, size: number) { + const half = size / 2; + ctx.fillRect(x - half, y - half, size, size); + ctx.strokeRect(x - half, y - half, size, size); +} + +function drawResizeHandles(ctx: CanvasRenderingContext2D, sym: PlacedSymbol) { + if (!isResizable(sym.symbolId)) return; + const hs = 10; + ctx.fillStyle = '#00ff88'; + ctx.strokeStyle = '#009955'; + ctx.lineWidth = 1; + + if (isCurvedType(sym.symbolId)) { + const arcAngle = sym.curveAngle || 90; + const arcRad = (arcAngle * Math.PI) / 180; + const outerR = sym.w; + const arcCx = sym.x; + const arcCy = sym.y + sym.h; + drawHandle(ctx, arcCx + outerR, arcCy, hs); + drawHandle(ctx, arcCx + outerR * Math.cos(arcRad), arcCy - outerR * Math.sin(arcRad), hs); + } else if (isSpurType(sym.symbolId)) { + const w2 = sym.w2 ?? sym.w; + // Right handle on top base (controls w2) + drawHandle(ctx, sym.x + w2, sym.y, hs); + // Right handle on bottom base (controls w) + drawHandle(ctx, sym.x + sym.w, sym.y + sym.h, hs); + } else if (isInductionType(sym.symbolId)) { + // Only right handle — arrow head is fixed width + const stripTopY = sym.y + sym.h * INDUCTION_STRIP_TOP_FRAC; + const stripBottomY = sym.y + sym.h * INDUCTION_STRIP_BOTTOM_FRAC; + const stripMidY = (stripTopY + stripBottomY) / 2; + drawHandle(ctx, sym.x + sym.w, stripMidY, hs); + } else { + const midY = sym.y + sym.h / 2; + drawHandle(ctx, sym.x, midY, hs); + drawHandle(ctx, sym.x + sym.w, midY, hs); + } +} + +/** Draw induction programmatically: fixed arrow head + variable strip, as one path */ +function drawInductionSymbol(ctx: CanvasRenderingContext2D, sym: PlacedSymbol) { + const hw = INDUCTION_HEAD_W; + const stripTopY = sym.y + sym.h * INDUCTION_STRIP_TOP_FRAC; + const stripBottomY = sym.y + sym.h * INDUCTION_STRIP_BOTTOM_FRAC; + + // Arrow points in display coords + const pts = INDUCTION_ARROW.map(([xf, yf]) => [sym.x + xf * hw, sym.y + yf * sym.h] as const); + + ctx.beginPath(); + // Top-right of strip + ctx.moveTo(sym.x + sym.w, stripTopY); + // Top-left junction (arrow meets strip) + ctx.lineTo(pts[0][0], stripTopY); + // Arrow outline + for (const [px, py] of pts) { + ctx.lineTo(px, py); + } + // Bottom-left junction to strip bottom + ctx.lineTo(pts[5][0], stripBottomY); + // Bottom-right of strip + ctx.lineTo(sym.x + sym.w, stripBottomY); + ctx.closePath(); + + ctx.fillStyle = '#000000'; + ctx.fill(); +} + +/** Draw photoeye with 3-slice: fixed left cap, stretched middle beam, fixed right cap */ +function drawPhotoeye3Slice(ctx: CanvasRenderingContext2D, sym: PlacedSymbol, img: HTMLImageElement) { + const { leftCap, rightCap, defaultWidth } = PHOTOEYE_CONFIG; + const srcW = img.naturalWidth; + const srcH = img.naturalHeight; + const scale = srcW / defaultWidth; + const srcLeftW = leftCap * scale; + const srcRightW = rightCap * scale; + const srcMiddleW = srcW - srcLeftW - srcRightW; + const dstMiddleW = sym.w - leftCap - rightCap; + + // Left cap (fixed) + ctx.drawImage(img, 0, 0, srcLeftW, srcH, sym.x, sym.y, leftCap, sym.h); + // Middle beam (stretched) + ctx.drawImage(img, srcLeftW, 0, srcMiddleW, srcH, sym.x + leftCap, sym.y, dstMiddleW, sym.h); + // Right cap (fixed) + ctx.drawImage(img, srcW - srcRightW, 0, srcRightW, srcH, sym.x + sym.w - rightCap, sym.y, rightCap, sym.h); +} + +function drawSymbolBody(ctx: CanvasRenderingContext2D, sym: PlacedSymbol): boolean { + if (isEpcType(sym.symbolId)) { + drawEpcSymbol(ctx, sym); + } else if (isInductionType(sym.symbolId)) { + drawInductionSymbol(ctx, sym); + } else { + const img = getSymbolImage(sym.file); + if (!img) return false; + if (isPhotoeyeType(sym.symbolId)) { + drawPhotoeye3Slice(ctx, sym, img); + } else { + ctx.drawImage(img, sym.x, sym.y, sym.w, sym.h); + } + } + return true; +} + +function drawSymbolOverlays(ctx: CanvasRenderingContext2D, sym: PlacedSymbol) { + const cx = sym.x + sym.w / 2; + const isSelected = layout.selectedIds.has(sym.id); + + // Selection highlight + if (isSelected) { + ctx.strokeStyle = '#00ff88'; + ctx.lineWidth = 2; + ctx.shadowColor = 'rgba(0, 255, 136, 0.4)'; + ctx.shadowBlur = 6; + strokeOutline(ctx, sym, 2); + ctx.shadowBlur = 0; + if (layout.selectedIds.size === 1) { + if (isEpcType(sym.symbolId)) { + drawEpcWaypointHandles(ctx, sym); + } else { + drawResizeHandles(ctx, sym); + } + } + } + + // Collision highlight + if (checkSpacingViolation(sym.id, sym.x, sym.y, sym.w, sym.h, sym.rotation, sym.symbolId, sym.curveAngle, sym.w2)) { + ctx.strokeStyle = '#ff0000'; + ctx.lineWidth = 2; + ctx.shadowColor = 'rgba(255, 0, 0, 0.6)'; + ctx.shadowBlur = 8; + strokeOutline(ctx, sym, 2); + ctx.shadowBlur = 0; + } + + // Hover border (non-selected) + if (!isSelected) { + ctx.strokeStyle = 'rgba(233, 69, 96, 0.3)'; + ctx.lineWidth = 1; + strokeOutline(ctx, sym, 0); + } + + // Label above symbol + if (sym.label) { + ctx.fillStyle = '#e94560'; + ctx.font = '10px sans-serif'; + ctx.textAlign = 'center'; + ctx.textBaseline = 'bottom'; + ctx.fillText(sym.label, cx, sym.y - 3); + } +} + +function drawSymbol(ctx: CanvasRenderingContext2D, sym: PlacedSymbol) { + ctx.save(); + + // Apply rotation once for all symbol types + if (sym.rotation) { + const cx = sym.x + sym.w / 2; + const cy = sym.y + sym.h / 2; + ctx.translate(cx, cy); + ctx.rotate((sym.rotation * Math.PI) / 180); + ctx.translate(-cx, -cy); + } + + if (!drawSymbolBody(ctx, sym)) { + ctx.restore(); + return; + } + + drawSymbolOverlays(ctx, sym); + ctx.restore(); +} diff --git a/svelte-app/src/lib/export.ts b/svelte-app/src/lib/export.ts new file mode 100644 index 0000000..0926af4 --- /dev/null +++ b/svelte-app/src/lib/export.ts @@ -0,0 +1,152 @@ +import { layout } from './stores/layout.svelte.js'; +import { isEpcType, isInductionType, EPC_LEFT_BOX, EPC_RIGHT_BOX, EPC_LINE_WIDTH, EPC_DEFAULT_WAYPOINTS, EPC_ICON_FILE, INDUCTION_HEAD_W, INDUCTION_ARROW, INDUCTION_STRIP_TOP_FRAC, INDUCTION_STRIP_BOTTOM_FRAC } from './symbols.js'; +import { deserializeSymbol } from './serialization.js'; +import type { PlacedSymbol } from './types.js'; + +function downloadBlob(blob: Blob, filename: string) { + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = filename; + a.click(); + URL.revokeObjectURL(url); +} + +async function buildEpcSvgElements(sym: PlacedSymbol): Promise { + const waypoints = sym.epcWaypoints || EPC_DEFAULT_WAYPOINTS; + const ox = sym.x; + const oy = sym.y; + const parts: string[] = []; + + // Polyline + if (waypoints.length >= 2) { + const points = waypoints.map(wp => `${ox + wp.x},${oy + wp.y}`).join(' '); + parts.push(` `); + } + + if (waypoints.length >= 2) { + // Left icon — embed actual SVG, oriented along first segment + const lb = EPC_LEFT_BOX; + const p0x = ox + waypoints[0].x, p0y = oy + waypoints[0].y; + const p1x = ox + waypoints[1].x, p1y = oy + waypoints[1].y; + const lAngle = Math.atan2(p1y - p0y, p1x - p0x) * 180 / Math.PI; + + try { + const svgText = await (await fetch(EPC_ICON_FILE)).text(); + const doc = new DOMParser().parseFromString(svgText, 'image/svg+xml'); + const svgEl = doc.documentElement; + const vb = svgEl.getAttribute('viewBox'); + const [vbX, vbY, vbW, vbH] = vb ? vb.split(/[\s,]+/).map(Number) : [0, 0, lb.w, lb.h]; + const sx = lb.w / vbW; + const sy = lb.h / vbH; + const transform = `translate(${p0x},${p0y}) rotate(${lAngle.toFixed(2)}) translate(${-lb.w},${-lb.h / 2}) scale(${sx.toFixed(6)},${sy.toFixed(6)}) translate(${-vbX},${-vbY})`; + parts.push(` `); + parts.push(` ${svgEl.innerHTML}`); + parts.push(` `); + } catch { + // Fallback: plain rect + parts.push(` `); + } + + // Right box — oriented along last segment, left-center at wp[last] + const last = waypoints[waypoints.length - 1]; + const prev = waypoints[waypoints.length - 2]; + const plx = ox + last.x, ply = oy + last.y; + const ppx = ox + prev.x, ppy = oy + prev.y; + const rAngle = Math.atan2(ply - ppy, plx - ppx) * 180 / Math.PI; + const rb = EPC_RIGHT_BOX; + parts.push(` `); + } + + return parts.join('\n'); +} + +export async function exportSVG() { + const lines: string[] = [ + '', + `', + ` `, + ]; + + for (const sym of layout.symbols) { + const rot = sym.rotation || 0; + const cx = sym.x + sym.w / 2; + const cy = sym.y + sym.h / 2; + const rotAttr = rot ? ` transform="rotate(${rot},${cx},${cy})"` : ''; + const label = sym.label || sym.name; + const idAttr = ` id="${label}" inkscape:label="${label}"`; + + if (isEpcType(sym.symbolId)) { + lines.push(` `); + lines.push(await buildEpcSvgElements(sym as PlacedSymbol)); + lines.push(' '); + } else if (isInductionType(sym.symbolId)) { + const hw = INDUCTION_HEAD_W; + const stripTopY = sym.y + sym.h * INDUCTION_STRIP_TOP_FRAC; + const stripBottomY = sym.y + sym.h * INDUCTION_STRIP_BOTTOM_FRAC; + const pts = INDUCTION_ARROW.map(([xf, yf]) => [sym.x + xf * hw, sym.y + yf * sym.h] as const); + const d = `M ${sym.x + sym.w},${stripTopY} L ${pts[0][0]},${stripTopY} ${pts.map(([px, py]) => `L ${px},${py}`).join(' ')} L ${pts[5][0]},${stripBottomY} L ${sym.x + sym.w},${stripBottomY} Z`; + lines.push(` `); + lines.push(` `); + lines.push(' '); + } else { + try { + const svgText = await (await fetch(sym.file)).text(); + const doc = new DOMParser().parseFromString(svgText, 'image/svg+xml'); + const svgEl = doc.documentElement; + // Skip if DOMParser returned an error (e.g., 404 or invalid SVG) + if (svgEl.querySelector('parsererror')) { + console.error('SVG parse error for:', sym.file); + continue; + } + const vb = svgEl.getAttribute('viewBox'); + const [vbX, vbY, vbW, vbH] = vb + ? vb.split(/[\s,]+/).map(Number) + : [0, 0, sym.w, sym.h]; + const sx = sym.w / vbW; + const sy = sym.h / vbH; + + let transform = `translate(${sym.x},${sym.y}) scale(${sx.toFixed(6)},${sy.toFixed(6)}) translate(${-vbX},${-vbY})`; + if (rot) { + transform = `rotate(${rot},${cx},${cy}) ${transform}`; + } + + lines.push(` `); + lines.push(` ${svgEl.innerHTML}`); + lines.push(' '); + } catch (err) { + console.error('Failed to embed symbol:', sym.name, err); + } + } + } + + lines.push(''); + downloadBlob(new Blob([lines.join('\n')], { type: 'image/svg+xml' }), 'test_view.svg'); +} + +export function loadLayoutJSON(file: File): Promise { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onload = (ev) => { + try { + const data = JSON.parse(ev.target!.result as string); + layout.pushUndo(); + if (data.gridSize) layout.gridSize = data.gridSize; + if (data.minSpacing) layout.minSpacing = data.minSpacing; + layout.symbols = []; + layout.nextId = 1; + for (const s of data.symbols) { + layout.symbols.push(deserializeSymbol(s, layout.nextId++)); + } + layout.markDirty(); + layout.saveMcmState(); + resolve(); + } catch (err) { + reject(err); + } + }; + reader.readAsText(file); + }); +} diff --git a/svelte-app/src/lib/index.ts b/svelte-app/src/lib/index.ts new file mode 100644 index 0000000..856f2b6 --- /dev/null +++ b/svelte-app/src/lib/index.ts @@ -0,0 +1 @@ +// place files you want to import through the `$lib` alias in this folder. diff --git a/svelte-app/src/lib/pdf.ts b/svelte-app/src/lib/pdf.ts new file mode 100644 index 0000000..1f17709 --- /dev/null +++ b/svelte-app/src/lib/pdf.ts @@ -0,0 +1,215 @@ +import { layout } from './stores/layout.svelte.js'; +import type { PDFPageProxy } from 'pdfjs-dist'; + +let pdfPage: PDFPageProxy | null = null; +let pdfjsLib: typeof import('pdfjs-dist') | null = null; +let pdfNatWidth = 0; +let pdfNatHeight = 0; + +// High-res raster rendered once at load time +let hiResCanvas: HTMLCanvasElement | null = null; + +// Callback to pass the image to Canvas component +let onImageUpdate: ((img: HTMLCanvasElement | null, natW: number, natH: number) => void) | null = null; + +export function setImageUpdateCallback(cb: (img: HTMLCanvasElement | null, natW: number, natH: number) => void) { + onImageUpdate = cb; + if (hiResCanvas) { + cb(hiResCanvas, pdfNatWidth, pdfNatHeight); + } +} + +// --- IndexedDB for PDF persistence --- + +const DB_NAME = 'scada_pdf_store'; +const DB_VERSION = 1; +const STORE_NAME = 'pdfs'; + +function openDb(): Promise { + return new Promise((resolve, reject) => { + const req = indexedDB.open(DB_NAME, DB_VERSION); + req.onupgradeneeded = () => { + req.result.createObjectStore(STORE_NAME); + }; + req.onsuccess = () => resolve(req.result); + req.onerror = () => reject(req.error); + }); +} + +function getPdfKey(): string { + return `${layout.currentProject}_${layout.currentMcm}`; +} + +async function savePdfData(data: ArrayBuffer) { + try { + const db = await openDb(); + const tx = db.transaction(STORE_NAME, 'readwrite'); + tx.objectStore(STORE_NAME).put(data, getPdfKey()); + await new Promise((resolve, reject) => { + tx.oncomplete = () => resolve(); + tx.onerror = () => reject(tx.error); + }); + db.close(); + } catch (e) { + console.warn('Failed to save PDF to IndexedDB:', e); + } +} + +async function loadPdfData(): Promise { + try { + const db = await openDb(); + const tx = db.transaction(STORE_NAME, 'readonly'); + const req = tx.objectStore(STORE_NAME).get(getPdfKey()); + const result = await new Promise((resolve, reject) => { + req.onsuccess = () => resolve(req.result ?? null); + req.onerror = () => reject(req.error); + }); + db.close(); + return result; + } catch (e) { + console.warn('Failed to load PDF from IndexedDB:', e); + return null; + } +} + +async function deletePdfData() { + try { + const db = await openDb(); + const tx = db.transaction(STORE_NAME, 'readwrite'); + tx.objectStore(STORE_NAME).delete(getPdfKey()); + db.close(); + } catch (e) { + console.warn('Failed to delete PDF from IndexedDB:', e); + } +} + +// --- PDF loading --- + +async function ensurePdfjs() { + if (!pdfjsLib) { + pdfjsLib = await import('pdfjs-dist'); + // @ts-expect-error Vite handles new URL(..., import.meta.url) at build time + const workerUrl = new URL('pdfjs-dist/build/pdf.worker.min.mjs', import.meta.url); + pdfjsLib.GlobalWorkerOptions.workerSrc = workerUrl.href; + } + return pdfjsLib; +} + +/** + * Render the PDF page once at high resolution (HI_RES_SCALE x native). + * This gives crisp quality when zooming in up to ~5x without re-rendering. + * The canvas is stored as a DOM element and scaled via CSS (instant, no wait). + */ +const HI_RES_SCALE = 5; + +async function renderHiRes() { + if (!pdfPage) return; + + const viewport = pdfPage.getViewport({ scale: HI_RES_SCALE }); + + if (!hiResCanvas) { + hiResCanvas = document.createElement('canvas'); + } + hiResCanvas.width = viewport.width; + hiResCanvas.height = viewport.height; + + const ctx = hiResCanvas.getContext('2d'); + if (!ctx) return; + await pdfPage.render({ canvasContext: ctx, viewport }).promise; + + notifyImage(); +} + +function notifyImage() { + if (onImageUpdate) { + onImageUpdate(hiResCanvas, pdfNatWidth, pdfNatHeight); + } +} + +async function loadPdfFromBuffer(data: ArrayBuffer, resetTransform: boolean) { + const lib = await ensurePdfjs(); + const pdf = await lib.getDocument({ data }).promise; + pdfPage = await pdf.getPage(1); + + const vp = pdfPage.getViewport({ scale: 1 }); + pdfNatWidth = vp.width; + pdfNatHeight = vp.height; + + if (resetTransform) { + layout.pdfScale = Math.min(layout.canvasW / pdfNatWidth, layout.canvasH / pdfNatHeight); + layout.pdfOffsetX = 0; + layout.pdfOffsetY = 0; + } + + layout.pdfLoaded = true; + await renderHiRes(); + layout.markDirty(); +} + +/** Load PDF from raw data, persist to IndexedDB, and save layout state */ +async function loadAndPersistPdf(data: ArrayBuffer) { + const copy = data.slice(0); + await loadPdfFromBuffer(data, true); + await savePdfData(copy); + layout.saveMcmState(); +} + +// --- Public API --- + +export async function loadPdfFile(file: File) { + await loadAndPersistPdf(await file.arrayBuffer()); +} + +export async function loadPdfFromPath(path: string) { + try { + const resp = await fetch(path); + if (!resp.ok) return; + await loadAndPersistPdf(await resp.arrayBuffer()); + } catch (e) { + console.warn('Could not load PDF from path:', e); + } +} + +export async function restorePdf() { + const data = await loadPdfData(); + if (!data) return; + await loadPdfFromBuffer(data, false); +} + +export function removePdf() { + pdfPage = null; + hiResCanvas = null; + pdfNatWidth = 0; + pdfNatHeight = 0; + layout.pdfScale = 1.0; + layout.pdfOffsetX = 0; + layout.pdfOffsetY = 0; + layout.pdfLoaded = false; + layout.editingBackground = false; + notifyImage(); + layout.markDirty(); + deletePdfData(); + layout.saveMcmState(); +} + +const PDF_ZOOM_STEP = 1.1; +const PDF_MIN_SCALE = 0.05; + +export function pdfZoomIn() { + if (!layout.pdfLoaded) return; + layout.pdfScale *= PDF_ZOOM_STEP; + layout.markDirty(); + layout.saveMcmState(); +} + +export function pdfZoomOut() { + if (!layout.pdfLoaded) return; + layout.pdfScale = Math.max(PDF_MIN_SCALE, layout.pdfScale / PDF_ZOOM_STEP); + layout.markDirty(); + layout.saveMcmState(); +} + +export function toggleEditBackground() { + if (!layout.pdfLoaded) return; + layout.editingBackground = !layout.editingBackground; +} diff --git a/svelte-app/src/lib/projects.ts b/svelte-app/src/lib/projects.ts new file mode 100644 index 0000000..d35079d --- /dev/null +++ b/svelte-app/src/lib/projects.ts @@ -0,0 +1,83 @@ +import type { ProjectInfo, McmInfo } from './types.js'; + +/** + * Scans the static/projectes/ directory structure to discover available projects and MCMs. + * + * Expected structure: + * projectes/{PROJECT}/excel/{PROJECT}_SYSDL_{MCM}*.xlsx + * projectes/{PROJECT}/pdf/{PROJECT}_SYSDL_{MCM}*-SYSDL.pdf + * + * Since we're in a static SPA, we use a manifest approach: + * At build time or at runtime, we fetch a directory listing. + * For simplicity, we'll use a manifest file that can be auto-generated. + */ + +// We'll scan using a known project list fetched from a manifest +// For the static SPA, we generate a manifest at build time via a vite plugin, +// or we hardcode discovery by trying known paths. + +const MCM_REGEX = /SYSDL[_ ]+(MCM\d+)/i; + +export async function discoverProjects(): Promise { + try { + const resp = await fetch('/projectes/manifest.json'); + if (resp.ok) { + return await resp.json(); + } + } catch { + // manifest doesn't exist, fall through + } + + // Fallback: try to discover from known project names + // This won't work in pure static hosting without a manifest + // So we provide a way to scan from the file input + return []; +} + +export function parseProjectFiles(files: FileList): ProjectInfo[] { + const projectMap = new Map>(); + + for (const file of files) { + const parts = file.webkitRelativePath?.split('/') || file.name.split('/'); + if (parts.length < 4) continue; + + const projectName = parts[1] || parts[0]; + const folder = parts[2]; // 'excel' or 'pdf' + const fileName = parts[parts.length - 1]; + + if (!projectMap.has(projectName)) { + projectMap.set(projectName, new Map()); + } + + const mcmMatch = fileName.match(MCM_REGEX); + if (!mcmMatch) continue; + const mcmName = mcmMatch[1]; + + const mcms = projectMap.get(projectName)!; + if (!mcms.has(mcmName)) { + mcms.set(mcmName, { excel: '', pdf: null }); + } + + if (folder === 'excel' && fileName.endsWith('.xlsx')) { + mcms.get(mcmName)!.excel = file.webkitRelativePath || file.name; + } else if (folder === 'pdf' && fileName.endsWith('.pdf')) { + mcms.get(mcmName)!.pdf = file.webkitRelativePath || file.name; + } + } + + const projects: ProjectInfo[] = []; + for (const [name, mcms] of projectMap) { + const mcmList: McmInfo[] = []; + for (const [mcmName, paths] of mcms) { + mcmList.push({ + name: mcmName, + excelPath: paths.excel, + pdfPath: paths.pdf, + }); + } + mcmList.sort((a, b) => a.name.localeCompare(b.name)); + projects.push({ name, mcms: mcmList }); + } + projects.sort((a, b) => a.name.localeCompare(b.name)); + return projects; +} diff --git a/svelte-app/src/lib/serialization.ts b/svelte-app/src/lib/serialization.ts new file mode 100644 index 0000000..ab4603a --- /dev/null +++ b/svelte-app/src/lib/serialization.ts @@ -0,0 +1,55 @@ +import type { PlacedSymbol, EpcWaypoint } from './types.js'; + +/** JSON shape stored in localStorage / exported JSON files */ +export interface SerializedSymbol { + symbolId: string; + name: string; + label?: string; + file: string; + x: number; + y: number; + w: number; + h: number; + w2?: number; + rotation?: number; + curveAngle?: number; + epcWaypoints?: EpcWaypoint[]; + pdpCBs?: number[]; +} + +export function serializeSymbol(sym: PlacedSymbol): SerializedSymbol { + return { + symbolId: sym.symbolId, + name: sym.name, + label: sym.label || undefined, + file: sym.file, + x: sym.x, + y: sym.y, + w: sym.w, + h: sym.h, + w2: sym.w2, + rotation: sym.rotation || undefined, + curveAngle: sym.curveAngle, + epcWaypoints: sym.epcWaypoints, + pdpCBs: sym.pdpCBs, + }; +} + +export function deserializeSymbol(data: SerializedSymbol, id: number): PlacedSymbol { + return { + id, + symbolId: data.symbolId, + name: data.name, + label: data.label || '', + file: data.file?.replace('_no_comm.svg', '.svg') || data.file, + x: data.x, + y: data.y, + w: data.w, + h: data.h, + w2: data.w2, + rotation: data.rotation || 0, + curveAngle: data.curveAngle, + epcWaypoints: data.epcWaypoints, + pdpCBs: data.pdpCBs, + }; +} diff --git a/svelte-app/src/lib/stores/layout.svelte.ts b/svelte-app/src/lib/stores/layout.svelte.ts new file mode 100644 index 0000000..22506c8 --- /dev/null +++ b/svelte-app/src/lib/stores/layout.svelte.ts @@ -0,0 +1,194 @@ +import type { PlacedSymbol, ProjectInfo } from '../types.js'; +import { serializeSymbol, deserializeSymbol } from '../serialization.js'; + +export const DEFAULT_CANVAS_W = 1920; +export const DEFAULT_CANVAS_H = 1080; + +const MAX_UNDO = 50; + +class LayoutStore { + symbols = $state([]); + nextId = $state(1); + selectedIds = $state>(new Set()); + gridSize = $state(20); + minSpacing = $state(10); + snapEnabled = $state(true); + showGrid = $state(true); + zoomLevel = $state(1); + panX = $state(0); + panY = $state(0); + canvasW = $state(DEFAULT_CANVAS_W); + canvasH = $state(DEFAULT_CANVAS_H); + + // Project/MCM + projects = $state([]); + currentProject = $state(''); + currentMcm = $state(''); + + // PDF state + pdfScale = $state(1.0); + pdfOffsetX = $state(0); + pdfOffsetY = $state(0); + pdfLoaded = $state(false); + editingBackground = $state(false); + + // Dirty flag for canvas re-render + dirty = $state(0); + + // Undo stack (not reactive — internal only) + private undoStack: { symbols: PlacedSymbol[]; nextId: number }[] = []; + + markDirty() { + this.dirty++; + } + + pushUndo() { + this.undoStack.push({ + symbols: this.symbols.map(s => ({ + ...s, + epcWaypoints: s.epcWaypoints?.map(wp => ({ ...wp })), + })), + nextId: this.nextId, + }); + if (this.undoStack.length > MAX_UNDO) this.undoStack.shift(); + } + + undo() { + const prev = this.undoStack.pop(); + if (!prev) return; + this.symbols = prev.symbols; + this.nextId = prev.nextId; + this.selectedIds = new Set(); + this.markDirty(); + this.saveMcmState(); + } + + getMcmStorageKey(): string { + return `scada_${this.currentProject}_${this.currentMcm}`; + } + + saveMcmState() { + if (!this.currentProject || !this.currentMcm) return; + const state = { + symbols: this.symbols.map(s => serializeSymbol(s)), + nextId: this.nextId, + gridSize: this.gridSize, + minSpacing: this.minSpacing, + pdfScale: this.pdfScale, + pdfOffsetX: this.pdfOffsetX, + pdfOffsetY: this.pdfOffsetY, + canvasW: this.canvasW, + canvasH: this.canvasH, + }; + localStorage.setItem(this.getMcmStorageKey(), JSON.stringify(state)); + } + + loadMcmState() { + this.undoStack = []; + const raw = localStorage.getItem(this.getMcmStorageKey()); + if (!raw) { + this.symbols = []; + this.nextId = 1; + this.selectedIds = new Set(); + this.markDirty(); + return; + } + try { + const state = JSON.parse(raw); + this.symbols = []; + this.nextId = 1; + this.selectedIds = new Set(); + if (state.gridSize) this.gridSize = state.gridSize; + if (state.minSpacing) this.minSpacing = state.minSpacing; + if (state.pdfScale) this.pdfScale = state.pdfScale; + if (state.pdfOffsetX !== undefined) this.pdfOffsetX = state.pdfOffsetX; + if (state.pdfOffsetY !== undefined) this.pdfOffsetY = state.pdfOffsetY; + if (state.canvasW) this.canvasW = state.canvasW; + if (state.canvasH) this.canvasH = state.canvasH; + for (const s of state.symbols || []) { + this.symbols.push(deserializeSymbol(s, this.nextId++)); + } + if (state.nextId && state.nextId > this.nextId) this.nextId = state.nextId; + this.markDirty(); + } catch (e) { + console.error('Failed to load MCM state:', e); + } + } + + addSymbol(sym: Omit): PlacedSymbol { + this.pushUndo(); + const placed: PlacedSymbol = { ...sym, id: this.nextId++ }; + this.symbols.push(placed); + this.selectedIds = new Set([placed.id]); + this.markDirty(); + this.saveMcmState(); + return placed; + } + + removeSymbol(id: number) { + this.pushUndo(); + this.symbols = this.symbols.filter(s => s.id !== id); + const newSet = new Set(this.selectedIds); + newSet.delete(id); + this.selectedIds = newSet; + this.markDirty(); + this.saveMcmState(); + } + + removeSelected() { + if (this.selectedIds.size === 0) return; + this.pushUndo(); + this.symbols = this.symbols.filter(s => !this.selectedIds.has(s.id)); + this.selectedIds = new Set(); + this.markDirty(); + this.saveMcmState(); + } + + duplicateSymbol(id: number) { + const orig = this.symbols.find(s => s.id === id); + if (!orig) return; + this.pushUndo(); + const newSym: PlacedSymbol = { + ...orig, + id: this.nextId++, + x: orig.x + 20, + y: orig.y + 20, + }; + this.symbols.push(newSym); + this.selectedIds = new Set([newSym.id]); + this.markDirty(); + this.saveMcmState(); + } + + duplicateSelected() { + if (this.selectedIds.size === 0) return; + this.pushUndo(); + const newIds: number[] = []; + for (const id of this.selectedIds) { + const orig = this.symbols.find(s => s.id === id); + if (!orig) continue; + const newId = this.nextId++; + this.symbols.push({ + ...orig, + id: newId, + x: orig.x + 20, + y: orig.y + 20, + }); + newIds.push(newId); + } + this.selectedIds = new Set(newIds); + this.markDirty(); + this.saveMcmState(); + } + + clearAll() { + this.pushUndo(); + this.symbols = []; + this.selectedIds = new Set(); + this.nextId = 1; + this.markDirty(); + this.saveMcmState(); + } +} + +export const layout = new LayoutStore(); diff --git a/svelte-app/src/lib/symbol-config.ts b/svelte-app/src/lib/symbol-config.ts new file mode 100644 index 0000000..173b233 --- /dev/null +++ b/svelte-app/src/lib/symbol-config.ts @@ -0,0 +1,38 @@ +/** Centralized geometry config for symbol types with programmatic rendering */ + +export const EPC_CONFIG = { + iconFile: '/symbols/epc_icon.svg', + leftBox: { x: 0, y: 0, w: 26, h: 20 }, + rightBox: { w: 10, h: 20 }, + lineWidth: 0.4, + defaultWaypoints: [ + { x: 26, y: 10 }, // exit from left box center-right + { x: 57, y: 10 }, // entry to right box center-left + ], +} as const; + +export const INDUCTION_CONFIG = { + headWidth: 78, // fixed display width of arrow head (px) + // Arrow shape points as [xFrac of headW, yFrac of h] — derived from original SVG path + arrowPoints: [ + [0.5552, 0.2832], // top junction with strip + [0.2946, 0.0106], // top of arrow + [0.0096, 0.3088], // left point + [0.6602, 0.9890], // bottom of arrow + [0.9331, 0.7035], // small step + [0.9154, 0.6849], // bottom junction with strip + ] as [number, number][], + stripTopFrac: 0.2832, + stripBottomFrac: 0.6849, +} as const; + +export const PHOTOEYE_CONFIG = { + leftCap: 8.2, // fixed display px — left transmitter arrow + rightCap: 4.2, // fixed display px — right receiver cap + defaultWidth: 56, // original PE width +} as const; + +export const CURVE_CONFIG = { + convBand: 30, // matches conveyor height + chuteBand: 30, // matches chute height +} as const; diff --git a/svelte-app/src/lib/symbols.ts b/svelte-app/src/lib/symbols.ts new file mode 100644 index 0000000..37dded1 --- /dev/null +++ b/svelte-app/src/lib/symbols.ts @@ -0,0 +1,179 @@ +import type { SymbolDef } from './types.js'; +import { EPC_CONFIG, INDUCTION_CONFIG, CURVE_CONFIG, PHOTOEYE_CONFIG } from './symbol-config.js'; +export { EPC_CONFIG, INDUCTION_CONFIG, CURVE_CONFIG, PHOTOEYE_CONFIG }; + +export const SYMBOLS: SymbolDef[] = [ + // --- Conveyance > Conveyor --- + { id: 'conveyor', name: 'Conveyor', file: '/symbols/conveyor.svg', w: 154, h: 30, group: 'Conveyance', subgroup: 'Conveyor' }, + { id: 'conveyor_v', name: 'Conveyor (V)', file: '/symbols/conveyor.svg', w: 154, h: 30, defaultRotation: 90, group: 'Conveyance', subgroup: 'Conveyor' }, + { id: 'curved_conv_30', name: 'Curve 30\u00B0', file: '/symbols/curved_conveyor_30.svg', w: 154, h: 154, group: 'Conveyance', subgroup: 'Conveyor', curveAngle: 30 }, + { id: 'curved_conv_45', name: 'Curve 45\u00B0', file: '/symbols/curved_conveyor_45.svg', w: 154, h: 154, group: 'Conveyance', subgroup: 'Conveyor', curveAngle: 45 }, + { id: 'curved_conv_60', name: 'Curve 60\u00B0', file: '/symbols/curved_conveyor_60.svg', w: 154, h: 154, group: 'Conveyance', subgroup: 'Conveyor', curveAngle: 60 }, + { id: 'curved_conv_90', name: 'Curve 90\u00B0', file: '/symbols/curved_conveyor_90.svg', w: 154, h: 154, group: 'Conveyance', subgroup: 'Conveyor', curveAngle: 90 }, + + // --- Conveyance > Chute --- + { id: 'chute', name: 'Chute', file: '/symbols/chute.svg', w: 68, h: 30, group: 'Conveyance', subgroup: 'Chute' }, + { id: 'chute_v', name: 'Chute (V)', file: '/symbols/chute.svg', w: 68, h: 30, defaultRotation: 90, group: 'Conveyance', subgroup: 'Chute' }, + { id: 'tipper', name: 'Tipper', file: '/symbols/tipper.svg', w: 68, h: 30, group: 'Conveyance', subgroup: 'Chute' }, + { id: 'tipper_v', name: 'Tipper (V)', file: '/symbols/tipper.svg', w: 68, h: 30, defaultRotation: 90, group: 'Conveyance', subgroup: 'Chute' }, + { id: 'curved_chute_30', name: 'C.Chute 30\u00B0', file: '/symbols/curved_chute_30.svg', w: 100, h: 100, group: 'Conveyance', subgroup: 'Chute', curveAngle: 30 }, + { id: 'curved_chute_45', name: 'C.Chute 45\u00B0', file: '/symbols/curved_chute_45.svg', w: 100, h: 100, group: 'Conveyance', subgroup: 'Chute', curveAngle: 45 }, + { id: 'curved_chute_60', name: 'C.Chute 60\u00B0', file: '/symbols/curved_chute_60.svg', w: 100, h: 100, group: 'Conveyance', subgroup: 'Chute', curveAngle: 60 }, + { id: 'curved_chute_90', name: 'C.Chute 90\u00B0', file: '/symbols/curved_chute_90.svg', w: 100, h: 100, group: 'Conveyance', subgroup: 'Chute', curveAngle: 90 }, + + // --- Conveyance > Other --- + { id: 'spur', name: 'Spur', file: '/symbols/spur.svg', w: 80, h: 30, w2: 40, group: 'Conveyance', subgroup: 'Other' }, + { id: 'spur_v', name: 'Spur (V)', file: '/symbols/spur.svg', w: 80, h: 30, w2: 40, defaultRotation: 90, group: 'Conveyance', subgroup: 'Other' }, + { id: 'extendo', name: 'Extendo', file: '/symbols/extendo.svg', w: 73, h: 54, group: 'Conveyance', subgroup: 'Other' }, + { id: 'extendo_v', name: 'Extendo (V)', file: '/symbols/extendo.svg', w: 73, h: 54, defaultRotation: 90, group: 'Conveyance', subgroup: 'Other' }, + { id: 'induction', name: 'Induction', file: '/symbols/induction.svg', w: 154, h: 75, group: 'Conveyance', subgroup: 'Other' }, + { id: 'induction_v', name: 'Induction (V)', file: '/symbols/induction.svg', w: 154, h: 75, defaultRotation: 90, group: 'Conveyance', subgroup: 'Other' }, + { id: 'diverter', name: 'Diverter', file: '/symbols/diverter.svg', w: 31, h: 20, group: 'Conveyance', subgroup: 'Other' }, + { id: 'diverter_v', name: 'Diverter (V)', file: '/symbols/diverter.svg', w: 31, h: 20, defaultRotation: 90, group: 'Conveyance', subgroup: 'Other' }, + + // --- I/O Modules --- + { id: 'fio_sio_fioh', name: 'FIO/SIO/FIOH', file: '/symbols/fio_sio_fioh.svg', w: 14, h: 20, group: 'I/O Modules' }, + { id: 'fio_sio_fioh_v', name: 'FIO/SIO/FIOH (V)', file: '/symbols/fio_sio_fioh.svg', w: 14, h: 20, defaultRotation: 90, group: 'I/O Modules' }, + + // --- Sensors --- + { id: 'photoeye', name: 'Photoeye', file: '/symbols/photoeye.svg', w: 56, h: 20, group: 'Sensors' }, + { id: 'photoeye_v', name: 'Photoeye (V)', file: '/symbols/photoeye.svg', w: 56, h: 20, defaultRotation: 90, group: 'Sensors' }, + { id: 'pressure_sensor', name: 'Pressure Sensor', file: '/symbols/pressure_sensor.svg', w: 20, h: 20, group: 'Sensors' }, + { id: 'pressure_sensor_v', name: 'Pressure Sensor (V)', file: '/symbols/pressure_sensor.svg', w: 20, h: 20, defaultRotation: 90, group: 'Sensors' }, + + // --- Controls --- + { id: 'jam_reset', name: 'Jam Reset (JR)', file: '/symbols/jam_reset.svg', w: 20, h: 20, group: 'Controls' }, + { id: 'jam_reset_v', name: 'Jam Reset (V)', file: '/symbols/jam_reset.svg', w: 20, h: 20, defaultRotation: 90, group: 'Controls' }, + { id: 'start', name: 'Start (S)', file: '/symbols/start.svg', w: 20, h: 20, group: 'Controls' }, + { id: 'start_v', name: 'Start (V)', file: '/symbols/start.svg', w: 20, h: 20, defaultRotation: 90, group: 'Controls' }, + { id: 'start_stop', name: 'Start Stop (SS)', file: '/symbols/start_stop.svg', w: 40, h: 20, group: 'Controls' }, + { id: 'start_stop_v', name: 'Start Stop (V)', file: '/symbols/start_stop.svg', w: 40, h: 20, defaultRotation: 90, group: 'Controls' }, + { id: 'chute_enable', name: 'Chute Enable', file: '/symbols/chute_enable.svg', w: 20, h: 20, group: 'Controls' }, + { id: 'chute_enable_v', name: 'Chute Enable (V)', file: '/symbols/chute_enable.svg', w: 20, h: 20, defaultRotation: 90, group: 'Controls' }, + { id: 'package_release', name: 'Package Release', file: '/symbols/package_release.svg', w: 20, h: 20, group: 'Controls' }, + { id: 'package_release_v', name: 'Package Release (V)', file: '/symbols/package_release.svg', w: 20, h: 20, defaultRotation: 90, group: 'Controls' }, + { id: 'beacon', name: 'Beacon', file: '/symbols/beacon.svg', w: 20, h: 20, group: 'Controls' }, + { id: 'beacon_v', name: 'Beacon (V)', file: '/symbols/beacon.svg', w: 20, h: 20, defaultRotation: 90, group: 'Controls' }, + { id: 'solenoid', name: '[SOL]', file: '/symbols/solenoid.svg', w: 30, h: 20, group: 'Controls' }, + { id: 'solenoid_v', name: '[SOL] (V)', file: '/symbols/solenoid.svg', w: 30, h: 20, defaultRotation: 90, group: 'Controls' }, + + // --- Other --- + { id: 'pdp', name: 'PDP', file: '/symbols/pdp.svg', w: 30, h: 20, group: 'Other' }, + { id: 'pdp_v', name: 'PDP (V)', file: '/symbols/pdp.svg', w: 30, h: 20, defaultRotation: 90, group: 'Other' }, + { id: 'dpm', name: 'DPM', file: '/symbols/dpm.svg', w: 35, h: 20, group: 'Other' }, + { id: 'dpm_v', name: 'DPM (V)', file: '/symbols/dpm.svg', w: 35, h: 20, defaultRotation: 90, group: 'Other' }, + { id: 'mcm', name: 'MCM', file: '/symbols/mcm.svg', w: 60, h: 20, group: 'Other' }, + { id: 'mcm_v', name: 'MCM (V)', file: '/symbols/mcm.svg', w: 60, h: 20, defaultRotation: 90, group: 'Other' }, + { id: 'epc', name: 'EPC', file: '/symbols/epc.svg', w: 67, h: 20, group: 'Other' }, + { id: 'epc_v', name: 'EPC (V)', file: '/symbols/epc.svg', w: 67, h: 20, defaultRotation: 90, group: 'Other' }, + { id: 'ip_camera', name: 'IP Camera', file: '/symbols/ip_camera.svg', w: 20, h: 20, group: 'Other' }, + { id: 'ip_camera_v', name: 'IP Camera (V)', file: '/symbols/ip_camera.svg', w: 20, h: 20, defaultRotation: 90, group: 'Other' }, +]; + +export const SYMBOL_GROUPS = [...new Set(SYMBOLS.map(s => s.group))]; + +export const PRIORITY_TYPES = new Set([ + 'conveyor', 'conveyor_v', 'chute', 'chute_v', + 'tipper', 'tipper_v', 'extendo', 'extendo_v', + 'induction', 'induction_v', + 'curved_conv_30', 'curved_conv_45', 'curved_conv_60', 'curved_conv_90', + 'curved_chute_30', 'curved_chute_45', 'curved_chute_60', 'curved_chute_90', + 'spur', 'spur_v', + 'photoeye', 'photoeye_v', +]); + +// Photoeyes are exempt from spacing — can be placed freely on top of anything +export const SPACING_EXEMPT = new Set([ + 'photoeye', 'photoeye_v', +]); + +// Re-export config as legacy names for backward compatibility +export const EPC_ICON_FILE = EPC_CONFIG.iconFile; +export const INDUCTION_HEAD_W = INDUCTION_CONFIG.headWidth; +export const INDUCTION_ARROW: [number, number][] = [...INDUCTION_CONFIG.arrowPoints]; +export const INDUCTION_STRIP_TOP_FRAC = INDUCTION_CONFIG.stripTopFrac; +export const INDUCTION_STRIP_BOTTOM_FRAC = INDUCTION_CONFIG.stripBottomFrac; +export const CURVE_CONV_BAND = CURVE_CONFIG.convBand; +export const CURVE_CHUTE_BAND = CURVE_CONFIG.chuteBand; + +export function getCurveBandWidth(symbolId: string): number { + if (symbolId.startsWith('curved_chute')) return CURVE_CONFIG.chuteBand; + return CURVE_CONFIG.convBand; +} + +const imageCache = new Map(); +const SVG_SCALE = 10; // Rasterize SVGs at 10x for crisp canvas rendering + +export function preloadSymbolImages(): Promise { + const uniqueFiles = [...new Set(SYMBOLS.map(s => s.file)), EPC_ICON_FILE]; + return Promise.all( + uniqueFiles.map( + (file) => + new Promise(async (resolve) => { + if (imageCache.has(file)) { + resolve(); + return; + } + try { + const resp = await fetch(file); + const svgText = await resp.text(); + // Scale up width/height so the browser rasterizes at higher resolution + const scaled = svgText.replace( + /]*)\bwidth="([^"]*)"([^>]*)\bheight="([^"]*)"/, + (_, before, w, mid, h) => + ` { + URL.revokeObjectURL(url); + imageCache.set(file, img); + resolve(); + }; + img.onerror = () => { + URL.revokeObjectURL(url); + resolve(); + }; + img.src = url; + } catch { + resolve(); + } + }) + ) + ); +} + +export function getSymbolImage(file: string): HTMLImageElement | undefined { + return imageCache.get(file); +} + +export function isCurvedType(symbolId: string): boolean { + return symbolId.startsWith('curved_'); +} + +export function isSpurType(symbolId: string): boolean { + return symbolId === 'spur' || symbolId === 'spur_v'; +} + +export function isEpcType(symbolId: string): boolean { + return symbolId === 'epc' || symbolId === 'epc_v'; +} + +export function isInductionType(symbolId: string): boolean { + return symbolId === 'induction' || symbolId === 'induction_v'; +} + +export function isPhotoeyeType(symbolId: string): boolean { + return symbolId === 'photoeye' || symbolId === 'photoeye_v'; +} + +// EPC box dimensions — derived from symbol-config +export const EPC_LEFT_BOX = EPC_CONFIG.leftBox; +export const EPC_RIGHT_BOX = EPC_CONFIG.rightBox; +export const EPC_LINE_WIDTH = EPC_CONFIG.lineWidth; +export const EPC_DEFAULT_WAYPOINTS = EPC_CONFIG.defaultWaypoints.map(wp => ({ ...wp })); + +export function isResizable(symbolId: string): boolean { + return PRIORITY_TYPES.has(symbolId); +} diff --git a/svelte-app/src/lib/types.ts b/svelte-app/src/lib/types.ts new file mode 100644 index 0000000..f8ff40a --- /dev/null +++ b/svelte-app/src/lib/types.ts @@ -0,0 +1,52 @@ +export interface SymbolDef { + id: string; + name: string; + file: string; + w: number; + h: number; + w2?: number; // Spur: top base width + defaultRotation?: number; + group: string; + subgroup?: string; + curveAngle?: number; // For curved conveyors/chutes: arc angle in degrees +} + +export interface EpcWaypoint { + x: number; // local coords relative to symbol origin + y: number; +} + +export interface PlacedSymbol { + id: number; + symbolId: string; + name: string; + label: string; // User-assigned ID, exported as id and inkscape:label + file: string; + x: number; + y: number; + w: number; + h: number; + w2?: number; // Spur: top base width + rotation: number; + curveAngle?: number; // For curved conveyors/chutes + epcWaypoints?: EpcWaypoint[]; // EPC editable line waypoints (local coords) + pdpCBs?: number[]; // PDP visible circuit breaker numbers (1-26) +} + +export interface AABB { + x: number; + y: number; + w: number; + h: number; +} + +export interface ProjectInfo { + name: string; + mcms: McmInfo[]; +} + +export interface McmInfo { + name: string; + excelPath: string; + pdfPath: string | null; +} diff --git a/svelte-app/src/routes/+layout.svelte b/svelte-app/src/routes/+layout.svelte new file mode 100644 index 0000000..34832d6 --- /dev/null +++ b/svelte-app/src/routes/+layout.svelte @@ -0,0 +1,6 @@ + + +{@render children()} diff --git a/svelte-app/src/routes/+layout.ts b/svelte-app/src/routes/+layout.ts new file mode 100644 index 0000000..ceccaaf --- /dev/null +++ b/svelte-app/src/routes/+layout.ts @@ -0,0 +1,2 @@ +export const prerender = true; +export const ssr = false; diff --git a/svelte-app/src/routes/+page.svelte b/svelte-app/src/routes/+page.svelte new file mode 100644 index 0000000..4488c68 --- /dev/null +++ b/svelte-app/src/routes/+page.svelte @@ -0,0 +1,63 @@ + + + + SCADA Device Layout Tool + + +{#if ready} +
+ + + +
+{:else} +
+
+

Loading symbols...

+
+{/if} + + diff --git a/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM01.xlsx b/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM01.xlsx new file mode 100644 index 0000000..e69de29 diff --git a/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM02.xlsx b/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM02.xlsx new file mode 100644 index 0000000..e69de29 diff --git a/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM03.xlsx b/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM03.xlsx new file mode 100644 index 0000000..e69de29 diff --git a/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM04.xlsx b/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM04.xlsx new file mode 100644 index 0000000..e69de29 diff --git a/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM05.xlsx b/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM05.xlsx new file mode 100644 index 0000000..e69de29 diff --git a/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM06.xlsx b/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM06.xlsx new file mode 100644 index 0000000..e69de29 diff --git a/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM07.xlsx b/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM07.xlsx new file mode 100644 index 0000000..e69de29 diff --git a/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM08.xlsx b/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM08.xlsx new file mode 100644 index 0000000..e69de29 diff --git a/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM09 Non Con PH1.xlsx b/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM09 Non Con PH1.xlsx new file mode 100644 index 0000000..de91091 Binary files /dev/null and b/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM09 Non Con PH1.xlsx differ diff --git a/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM10.xlsx b/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM10.xlsx new file mode 100644 index 0000000..e69de29 diff --git a/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM11.xlsx b/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM11.xlsx new file mode 100644 index 0000000..e69de29 diff --git a/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM12.xlsx b/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM12.xlsx new file mode 100644 index 0000000..e69de29 diff --git a/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM13.xlsx b/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM13.xlsx new file mode 100644 index 0000000..e69de29 diff --git a/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM14.xlsx b/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM14.xlsx new file mode 100644 index 0000000..e69de29 diff --git a/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM15.xlsx b/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM15.xlsx new file mode 100644 index 0000000..e69de29 diff --git a/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM16.xlsx b/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM16.xlsx new file mode 100644 index 0000000..e69de29 diff --git a/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM17.xlsx b/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM17.xlsx new file mode 100644 index 0000000..e69de29 diff --git a/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM18.xlsx b/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM18.xlsx new file mode 100644 index 0000000..e69de29 diff --git a/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM19.xlsx b/svelte-app/static/projectes/CDW5/excel/CDW5_SYSDL_MCM19.xlsx new file mode 100644 index 0000000..e69de29 diff --git a/svelte-app/static/projectes/CDW5/pdf/CDW5_SYSDL_MCM09 Non Con PH1-SYSDL.pdf b/svelte-app/static/projectes/CDW5/pdf/CDW5_SYSDL_MCM09 Non Con PH1-SYSDL.pdf new file mode 100644 index 0000000..a69e53b Binary files /dev/null and b/svelte-app/static/projectes/CDW5/pdf/CDW5_SYSDL_MCM09 Non Con PH1-SYSDL.pdf differ diff --git a/svelte-app/static/projectes/devices-manifest.json b/svelte-app/static/projectes/devices-manifest.json new file mode 100644 index 0000000..5bc98df --- /dev/null +++ b/svelte-app/static/projectes/devices-manifest.json @@ -0,0 +1,33915 @@ +{ + "MCM01": [ + { + "id": "PDP01", + "svg": "pdp", + "zone": "PDP01" + }, + { + "id": "PDP01_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP01" + }, + { + "id": "PDP01_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP01" + }, + { + "id": "UL27_10_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL27_10" + }, + { + "id": "UL27_10_VFD", + "svg": "conveyor", + "zone": "UL27_10" + }, + { + "id": "UL27_2_BCN1", + "svg": "beacon", + "zone": "UL27_2" + }, + { + "id": "UL27_2_BCN2", + "svg": "beacon", + "zone": "UL27_2" + }, + { + "id": "UL27_2_EPC1", + "svg": "epc", + "zone": "UL27_2" + }, + { + "id": "UL27_2_EPC2", + "svg": "epc", + "zone": "UL27_2" + }, + { + "id": "UL27_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "UL27_2" + }, + { + "id": "UL27_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL27_2" + }, + { + "id": "UL27_2_SS1_SPB", + "svg": "start_stop", + "zone": "UL27_2" + }, + { + "id": "UL27_2_SS1_STPB", + "svg": "start_stop", + "zone": "UL27_2" + }, + { + "id": "UL27_2_SS2_SPB", + "svg": "start_stop", + "zone": "UL27_2" + }, + { + "id": "UL27_2_SS2_STPB", + "svg": "start_stop", + "zone": "UL27_2" + }, + { + "id": "UL27_2_TPE1", + "svg": "photoeye", + "zone": "UL27_2" + }, + { + "id": "UL27_2_TPE2", + "svg": "photoeye", + "zone": "UL27_2" + }, + { + "id": "UL27_2_VFD", + "svg": "conveyor", + "zone": "UL27_2" + }, + { + "id": "UL27_3_TPE1", + "svg": "photoeye", + "zone": "UL27_3" + }, + { + "id": "UL27_3_VFD", + "svg": "conveyor", + "zone": "UL27_3" + }, + { + "id": "UL27_4_TPE1", + "svg": "photoeye", + "zone": "UL27_4" + }, + { + "id": "UL27_4_VFD", + "svg": "conveyor", + "zone": "UL27_4" + }, + { + "id": "UL27_5_BCN1", + "svg": "beacon", + "zone": "UL27_5" + }, + { + "id": "UL27_5_BCN2", + "svg": "beacon", + "zone": "UL27_5" + }, + { + "id": "UL27_5_EPC1", + "svg": "epc", + "zone": "UL27_5" + }, + { + "id": "UL27_5_EPC2", + "svg": "epc", + "zone": "UL27_5" + }, + { + "id": "UL27_5_S1_PB", + "svg": "start", + "zone": "UL27_5" + }, + { + "id": "UL27_5_S2_PB", + "svg": "start", + "zone": "UL27_5" + }, + { + "id": "UL27_5_TPE1", + "svg": "photoeye", + "zone": "UL27_5" + }, + { + "id": "UL27_5_VFD", + "svg": "conveyor", + "zone": "UL27_5" + }, + { + "id": "UL27_6_LPE1", + "svg": "photoeye", + "zone": "UL27_6" + }, + { + "id": "UL27_6_LPE2", + "svg": "photoeye", + "zone": "UL27_6" + }, + { + "id": "UL27_6_TPE1", + "svg": "photoeye", + "zone": "UL27_6" + }, + { + "id": "UL27_6_VFD", + "svg": "conveyor", + "zone": "UL27_6" + }, + { + "id": "UL27_7_TPE1", + "svg": "photoeye", + "zone": "UL27_7" + }, + { + "id": "UL27_7_VFD", + "svg": "conveyor", + "zone": "UL27_7" + }, + { + "id": "UL27_8_TPE1", + "svg": "photoeye", + "zone": "UL27_8" + }, + { + "id": "UL27_8_VFD", + "svg": "conveyor", + "zone": "UL27_8" + }, + { + "id": "UL27_9_TPE1", + "svg": "photoeye", + "zone": "UL27_9" + }, + { + "id": "UL27_9_VFD", + "svg": "conveyor", + "zone": "UL27_9" + }, + { + "id": "UL28_2_BCN1", + "svg": "beacon", + "zone": "UL28_2" + }, + { + "id": "UL28_2_BCN2", + "svg": "beacon", + "zone": "UL28_2" + }, + { + "id": "UL28_2_EPC1", + "svg": "epc", + "zone": "UL28_2" + }, + { + "id": "UL28_2_EPC2", + "svg": "epc", + "zone": "UL28_2" + }, + { + "id": "UL28_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "UL28_2" + }, + { + "id": "UL28_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL28_2" + }, + { + "id": "UL28_2_SS1_SPB", + "svg": "start_stop", + "zone": "UL28_2" + }, + { + "id": "UL28_2_SS1_STPB", + "svg": "start_stop", + "zone": "UL28_2" + }, + { + "id": "UL28_2_SS2_SPB", + "svg": "start_stop", + "zone": "UL28_2" + }, + { + "id": "UL28_2_SS2_STPB", + "svg": "start_stop", + "zone": "UL28_2" + }, + { + "id": "UL28_2_TPE1", + "svg": "photoeye", + "zone": "UL28_2" + }, + { + "id": "UL28_2_TPE2", + "svg": "photoeye", + "zone": "UL28_2" + }, + { + "id": "UL28_2_VFD", + "svg": "conveyor", + "zone": "UL28_2" + }, + { + "id": "UL28_3_BCN1", + "svg": "beacon", + "zone": "UL28_3" + }, + { + "id": "UL28_3_BCN2", + "svg": "beacon", + "zone": "UL28_3" + }, + { + "id": "UL28_3_EPC1", + "svg": "epc", + "zone": "UL28_3" + }, + { + "id": "UL28_3_EPC2", + "svg": "epc", + "zone": "UL28_3" + }, + { + "id": "UL28_3_S1_PB", + "svg": "start", + "zone": "UL28_3" + }, + { + "id": "UL28_3_S2_PB", + "svg": "start", + "zone": "UL28_3" + }, + { + "id": "UL28_3_TPE1", + "svg": "photoeye", + "zone": "UL28_3" + }, + { + "id": "UL28_3_VFD", + "svg": "conveyor", + "zone": "UL28_3" + }, + { + "id": "UL28_4_TPE1", + "svg": "photoeye", + "zone": "UL28_4" + }, + { + "id": "UL28_4_VFD", + "svg": "conveyor", + "zone": "UL28_4" + }, + { + "id": "UL28_5_LPE1", + "svg": "photoeye", + "zone": "UL28_5" + }, + { + "id": "UL28_5_LPE2", + "svg": "photoeye", + "zone": "UL28_5" + }, + { + "id": "UL28_5_TPE1", + "svg": "photoeye", + "zone": "UL28_5" + }, + { + "id": "UL28_5_VFD", + "svg": "conveyor", + "zone": "UL28_5" + }, + { + "id": "UL28_6_TPE1", + "svg": "photoeye", + "zone": "UL28_6" + }, + { + "id": "UL28_6_VFD", + "svg": "conveyor", + "zone": "UL28_6" + }, + { + "id": "UL28_7_TPE1", + "svg": "photoeye", + "zone": "UL28_7" + }, + { + "id": "UL28_7_VFD", + "svg": "conveyor", + "zone": "UL28_7" + }, + { + "id": "UL28_8_TPE1", + "svg": "photoeye", + "zone": "UL28_8" + }, + { + "id": "UL28_8_VFD", + "svg": "conveyor", + "zone": "UL28_8" + }, + { + "id": "UL28_9_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL28_9" + }, + { + "id": "UL28_9_VFD", + "svg": "conveyor", + "zone": "UL28_9" + }, + { + "id": "UL29_1_BCN1", + "svg": "beacon", + "zone": "UL29_1" + }, + { + "id": "UL29_1_BCN2", + "svg": "beacon", + "zone": "UL29_1" + }, + { + "id": "UL29_1_EPC1", + "svg": "epc", + "zone": "UL29_1" + }, + { + "id": "UL29_1_EPC2", + "svg": "epc", + "zone": "UL29_1" + }, + { + "id": "UL29_1_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL29_1" + }, + { + "id": "UL29_1_SS1_SPB", + "svg": "start_stop", + "zone": "UL29_1" + }, + { + "id": "UL29_1_SS1_STPB", + "svg": "start_stop", + "zone": "UL29_1" + }, + { + "id": "UL29_1_SS2_SPB", + "svg": "start_stop", + "zone": "UL29_1" + }, + { + "id": "UL29_1_SS2_STPB", + "svg": "start_stop", + "zone": "UL29_1" + }, + { + "id": "UL29_1_TPE1", + "svg": "photoeye", + "zone": "UL29_1" + }, + { + "id": "UL29_1_VFD", + "svg": "conveyor", + "zone": "UL29_1" + }, + { + "id": "UL29_10_TPE1", + "svg": "photoeye", + "zone": "UL29_10" + }, + { + "id": "UL29_10_TPE2", + "svg": "photoeye", + "zone": "UL29_10" + }, + { + "id": "UL29_10_VFD", + "svg": "conveyor", + "zone": "UL29_10" + }, + { + "id": "UL29_11_BCN1", + "svg": "beacon", + "zone": "UL29_11" + }, + { + "id": "UL29_11_JR1_PB", + "svg": "jam_reset", + "zone": "UL29_11" + }, + { + "id": "UL29_11_JR2_PB", + "svg": "jam_reset", + "zone": "UL29_11" + }, + { + "id": "UL29_11_TPE1", + "svg": "photoeye", + "zone": "UL29_11" + }, + { + "id": "UL29_11_VFD", + "svg": "conveyor", + "zone": "UL29_11" + }, + { + "id": "UL29_12_TPE1", + "svg": "photoeye", + "zone": "UL29_12" + }, + { + "id": "UL29_12_VFD", + "svg": "conveyor", + "zone": "UL29_12" + }, + { + "id": "UL29_13_BCN1", + "svg": "beacon", + "zone": "UL29_13" + }, + { + "id": "UL29_13_DPM1", + "svg": "dpm", + "zone": "UL29_13" + }, + { + "id": "UL29_13_JR1_PB", + "svg": "jam_reset", + "zone": "UL29_13" + }, + { + "id": "UL29_13_JR2_PB", + "svg": "jam_reset", + "zone": "UL29_13" + }, + { + "id": "UL29_13_TPE1", + "svg": "photoeye", + "zone": "UL29_13" + }, + { + "id": "UL29_13_VFD", + "svg": "conveyor", + "zone": "UL29_13" + }, + { + "id": "UL29_14_TPE1", + "svg": "photoeye", + "zone": "UL29_14" + }, + { + "id": "UL29_15_BCN1", + "svg": "beacon", + "zone": "UL29_15" + }, + { + "id": "UL29_15_BCN2", + "svg": "beacon", + "zone": "UL29_15" + }, + { + "id": "UL29_15_EPC1", + "svg": "epc", + "zone": "UL29_15" + }, + { + "id": "UL29_15_EPC2", + "svg": "epc", + "zone": "UL29_15" + }, + { + "id": "UL29_15_LPE1", + "svg": "photoeye", + "zone": "UL29_15" + }, + { + "id": "UL29_15_SS1_SPB", + "svg": "start_stop", + "zone": "UL29_15" + }, + { + "id": "UL29_15_SS1_STPB", + "svg": "start_stop", + "zone": "UL29_15" + }, + { + "id": "UL29_15_SS2_SPB", + "svg": "start_stop", + "zone": "UL29_15" + }, + { + "id": "UL29_15_SS2_STPB", + "svg": "start_stop", + "zone": "UL29_15" + }, + { + "id": "UL29_15_TPE1", + "svg": "photoeye", + "zone": "UL29_15" + }, + { + "id": "UL29_15_TPE2", + "svg": "photoeye", + "zone": "UL29_15" + }, + { + "id": "UL29_15_VFD", + "svg": "conveyor", + "zone": "UL29_15" + }, + { + "id": "UL29_16_TPE1", + "svg": "photoeye", + "zone": "UL29_16" + }, + { + "id": "UL29_16_VFD", + "svg": "conveyor", + "zone": "UL29_16" + }, + { + "id": "UL29_17_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL29_17" + }, + { + "id": "UL29_18_TPE1", + "svg": "photoeye", + "zone": "UL29_18" + }, + { + "id": "UL29_18_VFD", + "svg": "conveyor", + "zone": "UL29_18" + }, + { + "id": "UL29_2_TPE1", + "svg": "photoeye", + "zone": "UL29_2" + }, + { + "id": "UL29_2_VFD", + "svg": "conveyor", + "zone": "UL29_2" + }, + { + "id": "UL29_3_TPE1", + "svg": "photoeye", + "zone": "UL29_3" + }, + { + "id": "UL29_3_VFD", + "svg": "conveyor", + "zone": "UL29_3" + }, + { + "id": "UL29_30_BCN1", + "svg": "beacon", + "zone": "UL29_30" + }, + { + "id": "UL29_30_BCN2", + "svg": "beacon", + "zone": "UL29_30" + }, + { + "id": "UL29_30_EPC1", + "svg": "epc", + "zone": "UL29_30" + }, + { + "id": "UL29_30_EPC2", + "svg": "epc", + "zone": "UL29_30" + }, + { + "id": "UL29_30_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL29_30" + }, + { + "id": "UL29_30_S1_PB", + "svg": "start", + "zone": "UL29_30" + }, + { + "id": "UL29_30_S2_PB", + "svg": "start", + "zone": "UL29_30" + }, + { + "id": "UL29_30_TPE1", + "svg": "photoeye", + "zone": "UL29_30" + }, + { + "id": "UL29_30_VFD", + "svg": "conveyor", + "zone": "UL29_30" + }, + { + "id": "UL29_31_TPE1", + "svg": "photoeye", + "zone": "UL29_31" + }, + { + "id": "UL29_4_TPE1", + "svg": "photoeye", + "zone": "UL29_4" + }, + { + "id": "UL29_4_VFD", + "svg": "conveyor", + "zone": "UL29_4" + }, + { + "id": "UL29_5_TPE1", + "svg": "photoeye", + "zone": "UL29_5" + }, + { + "id": "UL29_5_VFD", + "svg": "conveyor", + "zone": "UL29_5" + }, + { + "id": "UL29_6_TPE1", + "svg": "photoeye", + "zone": "UL29_6" + }, + { + "id": "UL29_6_VFD", + "svg": "conveyor", + "zone": "UL29_6" + }, + { + "id": "UL29_7_TPE1", + "svg": "photoeye", + "zone": "UL29_7" + }, + { + "id": "UL29_7_VFD", + "svg": "conveyor", + "zone": "UL29_7" + }, + { + "id": "UL29_8_BCN1", + "svg": "beacon", + "zone": "UL29_8" + }, + { + "id": "UL29_8_BCN2", + "svg": "beacon", + "zone": "UL29_8" + }, + { + "id": "UL29_8_DPM1", + "svg": "dpm", + "zone": "UL29_8" + }, + { + "id": "UL29_8_DPM2", + "svg": "dpm", + "zone": "UL29_8" + }, + { + "id": "UL29_8_EPC1", + "svg": "epc", + "zone": "UL29_8" + }, + { + "id": "UL29_8_EPC2", + "svg": "epc", + "zone": "UL29_8" + }, + { + "id": "UL29_8_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL29_8" + }, + { + "id": "UL29_8_JR1_PB", + "svg": "jam_reset", + "zone": "UL29_8" + }, + { + "id": "UL29_8_JR2_PB", + "svg": "jam_reset", + "zone": "UL29_8" + }, + { + "id": "UL29_8_S1_PB", + "svg": "start", + "zone": "UL29_8" + }, + { + "id": "UL29_8_S2_PB", + "svg": "start", + "zone": "UL29_8" + }, + { + "id": "UL29_8_TPE1", + "svg": "photoeye", + "zone": "UL29_8" + }, + { + "id": "UL29_8_TPE2", + "svg": "photoeye", + "zone": "UL29_8" + }, + { + "id": "UL29_8_TPE3", + "svg": "photoeye", + "zone": "UL29_8" + }, + { + "id": "UL29_8_TPE4", + "svg": "photoeye", + "zone": "UL29_8" + }, + { + "id": "UL29_8_TPE5", + "svg": "photoeye", + "zone": "UL29_8" + }, + { + "id": "UL29_8_VFD", + "svg": "conveyor", + "zone": "UL29_8" + }, + { + "id": "UL29_9A_VFD", + "svg": "conveyor", + "zone": "UL29_9A" + }, + { + "id": "UL29_9B_VFD", + "svg": "conveyor", + "zone": "UL29_9B" + } + ], + "MCM02": [ + { + "id": "PDP02", + "svg": "pdp", + "zone": "PDP02" + }, + { + "id": "PDP02_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP02" + }, + { + "id": "PDP02_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP02" + }, + { + "id": "UL21_10_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL21_10" + }, + { + "id": "UL21_10_VFD", + "svg": "conveyor", + "zone": "UL21_10" + }, + { + "id": "UL21_2_BCN1", + "svg": "beacon", + "zone": "UL21_2" + }, + { + "id": "UL21_2_BCN2", + "svg": "beacon", + "zone": "UL21_2" + }, + { + "id": "UL21_2_EPC1", + "svg": "epc", + "zone": "UL21_2" + }, + { + "id": "UL21_2_EPC2", + "svg": "epc", + "zone": "UL21_2" + }, + { + "id": "UL21_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "UL21_2" + }, + { + "id": "UL21_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL21_2" + }, + { + "id": "UL21_2_SS1_SPB", + "svg": "start_stop", + "zone": "UL21_2" + }, + { + "id": "UL21_2_SS1_STPB", + "svg": "start_stop", + "zone": "UL21_2" + }, + { + "id": "UL21_2_SS2_SPB", + "svg": "start_stop", + "zone": "UL21_2" + }, + { + "id": "UL21_2_SS2_STPB", + "svg": "start_stop", + "zone": "UL21_2" + }, + { + "id": "UL21_2_TPE1", + "svg": "photoeye", + "zone": "UL21_2" + }, + { + "id": "UL21_2_TPE2", + "svg": "photoeye", + "zone": "UL21_2" + }, + { + "id": "UL21_2_VFD", + "svg": "conveyor", + "zone": "UL21_2" + }, + { + "id": "UL21_3_TPE1", + "svg": "photoeye", + "zone": "UL21_3" + }, + { + "id": "UL21_3_VFD", + "svg": "conveyor", + "zone": "UL21_3" + }, + { + "id": "UL21_4_TPE1", + "svg": "photoeye", + "zone": "UL21_4" + }, + { + "id": "UL21_4_VFD", + "svg": "conveyor", + "zone": "UL21_4" + }, + { + "id": "UL21_5_BCN1", + "svg": "beacon", + "zone": "UL21_5" + }, + { + "id": "UL21_5_BCN2", + "svg": "beacon", + "zone": "UL21_5" + }, + { + "id": "UL21_5_EPC1", + "svg": "epc", + "zone": "UL21_5" + }, + { + "id": "UL21_5_EPC2", + "svg": "epc", + "zone": "UL21_5" + }, + { + "id": "UL21_5_S1_PB", + "svg": "start", + "zone": "UL21_5" + }, + { + "id": "UL21_5_S2_PB", + "svg": "start", + "zone": "UL21_5" + }, + { + "id": "UL21_5_TPE1", + "svg": "photoeye", + "zone": "UL21_5" + }, + { + "id": "UL21_5_VFD", + "svg": "conveyor", + "zone": "UL21_5" + }, + { + "id": "UL21_6_LPE1", + "svg": "photoeye", + "zone": "UL21_6" + }, + { + "id": "UL21_6_LPE2", + "svg": "photoeye", + "zone": "UL21_6" + }, + { + "id": "UL21_6_TPE1", + "svg": "photoeye", + "zone": "UL21_6" + }, + { + "id": "UL21_6_VFD", + "svg": "conveyor", + "zone": "UL21_6" + }, + { + "id": "UL21_7_TPE1", + "svg": "photoeye", + "zone": "UL21_7" + }, + { + "id": "UL21_7_VFD", + "svg": "conveyor", + "zone": "UL21_7" + }, + { + "id": "UL21_8_TPE1", + "svg": "photoeye", + "zone": "UL21_8" + }, + { + "id": "UL21_8_VFD", + "svg": "conveyor", + "zone": "UL21_8" + }, + { + "id": "UL21_9_TPE1", + "svg": "photoeye", + "zone": "UL21_9" + }, + { + "id": "UL21_9_VFD", + "svg": "conveyor", + "zone": "UL21_9" + }, + { + "id": "UL22_2_BCN1", + "svg": "beacon", + "zone": "UL22_2" + }, + { + "id": "UL22_2_BCN2", + "svg": "beacon", + "zone": "UL22_2" + }, + { + "id": "UL22_2_EPC1", + "svg": "epc", + "zone": "UL22_2" + }, + { + "id": "UL22_2_EPC2", + "svg": "epc", + "zone": "UL22_2" + }, + { + "id": "UL22_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "UL22_2" + }, + { + "id": "UL22_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL22_2" + }, + { + "id": "UL22_2_SS1_SPB", + "svg": "start_stop", + "zone": "UL22_2" + }, + { + "id": "UL22_2_SS1_STPB", + "svg": "start_stop", + "zone": "UL22_2" + }, + { + "id": "UL22_2_SS2_SPB", + "svg": "start_stop", + "zone": "UL22_2" + }, + { + "id": "UL22_2_SS2_STPB", + "svg": "start_stop", + "zone": "UL22_2" + }, + { + "id": "UL22_2_TPE1", + "svg": "photoeye", + "zone": "UL22_2" + }, + { + "id": "UL22_2_TPE2", + "svg": "photoeye", + "zone": "UL22_2" + }, + { + "id": "UL22_2_VFD", + "svg": "conveyor", + "zone": "UL22_2" + }, + { + "id": "UL22_3_BCN1", + "svg": "beacon", + "zone": "UL22_3" + }, + { + "id": "UL22_3_BCN2", + "svg": "beacon", + "zone": "UL22_3" + }, + { + "id": "UL22_3_EPC1", + "svg": "epc", + "zone": "UL22_3" + }, + { + "id": "UL22_3_EPC2", + "svg": "epc", + "zone": "UL22_3" + }, + { + "id": "UL22_3_S1_PB", + "svg": "start", + "zone": "UL22_3" + }, + { + "id": "UL22_3_S2_PB", + "svg": "start", + "zone": "UL22_3" + }, + { + "id": "UL22_3_TPE1", + "svg": "photoeye", + "zone": "UL22_3" + }, + { + "id": "UL22_3_VFD", + "svg": "conveyor", + "zone": "UL22_3" + }, + { + "id": "UL22_4_TPE1", + "svg": "photoeye", + "zone": "UL22_4" + }, + { + "id": "UL22_4_VFD", + "svg": "conveyor", + "zone": "UL22_4" + }, + { + "id": "UL22_5_LPE1", + "svg": "photoeye", + "zone": "UL22_5" + }, + { + "id": "UL22_5_LPE2", + "svg": "photoeye", + "zone": "UL22_5" + }, + { + "id": "UL22_5_TPE1", + "svg": "photoeye", + "zone": "UL22_5" + }, + { + "id": "UL22_5_VFD", + "svg": "conveyor", + "zone": "UL22_5" + }, + { + "id": "UL22_6_TPE1", + "svg": "photoeye", + "zone": "UL22_6" + }, + { + "id": "UL22_6_VFD", + "svg": "conveyor", + "zone": "UL22_6" + }, + { + "id": "UL22_7_TPE1", + "svg": "photoeye", + "zone": "UL22_7" + }, + { + "id": "UL22_7_VFD", + "svg": "conveyor", + "zone": "UL22_7" + }, + { + "id": "UL22_8_TPE1", + "svg": "photoeye", + "zone": "UL22_8" + }, + { + "id": "UL22_8_VFD", + "svg": "conveyor", + "zone": "UL22_8" + }, + { + "id": "UL22_9_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL22_9" + }, + { + "id": "UL22_9_VFD", + "svg": "conveyor", + "zone": "UL22_9" + }, + { + "id": "UL23_1_BCN1", + "svg": "beacon", + "zone": "UL23_1" + }, + { + "id": "UL23_1_BCN2", + "svg": "beacon", + "zone": "UL23_1" + }, + { + "id": "UL23_1_EPC1", + "svg": "epc", + "zone": "UL23_1" + }, + { + "id": "UL23_1_EPC2", + "svg": "epc", + "zone": "UL23_1" + }, + { + "id": "UL23_1_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL23_1" + }, + { + "id": "UL23_1_SS1_SPB", + "svg": "start_stop", + "zone": "UL23_1" + }, + { + "id": "UL23_1_SS1_STPB", + "svg": "start_stop", + "zone": "UL23_1" + }, + { + "id": "UL23_1_SS2_SPB", + "svg": "start_stop", + "zone": "UL23_1" + }, + { + "id": "UL23_1_SS2_STPB", + "svg": "start_stop", + "zone": "UL23_1" + }, + { + "id": "UL23_1_TPE1", + "svg": "photoeye", + "zone": "UL23_1" + }, + { + "id": "UL23_1_VFD", + "svg": "conveyor", + "zone": "UL23_1" + }, + { + "id": "UL23_10_TPE1", + "svg": "photoeye", + "zone": "UL23_10" + }, + { + "id": "UL23_10_TPE2", + "svg": "photoeye", + "zone": "UL23_10" + }, + { + "id": "UL23_10_VFD", + "svg": "conveyor", + "zone": "UL23_10" + }, + { + "id": "UL23_11_BCN1", + "svg": "beacon", + "zone": "UL23_11" + }, + { + "id": "UL23_11_JR1_PB", + "svg": "jam_reset", + "zone": "UL23_11" + }, + { + "id": "UL23_11_JR2_PB", + "svg": "jam_reset", + "zone": "UL23_11" + }, + { + "id": "UL23_11_TPE1", + "svg": "photoeye", + "zone": "UL23_11" + }, + { + "id": "UL23_11_VFD", + "svg": "conveyor", + "zone": "UL23_11" + }, + { + "id": "UL23_12_TPE1", + "svg": "photoeye", + "zone": "UL23_12" + }, + { + "id": "UL23_12_VFD", + "svg": "conveyor", + "zone": "UL23_12" + }, + { + "id": "UL23_13_BCN1", + "svg": "beacon", + "zone": "UL23_13" + }, + { + "id": "UL23_13_DPM1", + "svg": "dpm", + "zone": "UL23_13" + }, + { + "id": "UL23_13_JR1_PB", + "svg": "jam_reset", + "zone": "UL23_13" + }, + { + "id": "UL23_13_JR2_PB", + "svg": "jam_reset", + "zone": "UL23_13" + }, + { + "id": "UL23_13_TPE1", + "svg": "photoeye", + "zone": "UL23_13" + }, + { + "id": "UL23_13_VFD", + "svg": "conveyor", + "zone": "UL23_13" + }, + { + "id": "UL23_14_TPE1", + "svg": "photoeye", + "zone": "UL23_14" + }, + { + "id": "UL23_15_BCN1", + "svg": "beacon", + "zone": "UL23_15" + }, + { + "id": "UL23_15_BCN2", + "svg": "beacon", + "zone": "UL23_15" + }, + { + "id": "UL23_15_EPC1", + "svg": "epc", + "zone": "UL23_15" + }, + { + "id": "UL23_15_EPC2", + "svg": "epc", + "zone": "UL23_15" + }, + { + "id": "UL23_15_LPE1", + "svg": "photoeye", + "zone": "UL23_15" + }, + { + "id": "UL23_15_SS1_SPB", + "svg": "start_stop", + "zone": "UL23_15" + }, + { + "id": "UL23_15_SS1_STPB", + "svg": "start_stop", + "zone": "UL23_15" + }, + { + "id": "UL23_15_SS2_SPB", + "svg": "start_stop", + "zone": "UL23_15" + }, + { + "id": "UL23_15_SS2_STPB", + "svg": "start_stop", + "zone": "UL23_15" + }, + { + "id": "UL23_15_TPE1", + "svg": "photoeye", + "zone": "UL23_15" + }, + { + "id": "UL23_15_TPE2", + "svg": "photoeye", + "zone": "UL23_15" + }, + { + "id": "UL23_15_VFD", + "svg": "conveyor", + "zone": "UL23_15" + }, + { + "id": "UL23_16_TPE1", + "svg": "photoeye", + "zone": "UL23_16" + }, + { + "id": "UL23_16_VFD", + "svg": "conveyor", + "zone": "UL23_16" + }, + { + "id": "UL23_17_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL23_17" + }, + { + "id": "UL23_18_TPE1", + "svg": "photoeye", + "zone": "UL23_18" + }, + { + "id": "UL23_18_VFD", + "svg": "conveyor", + "zone": "UL23_18" + }, + { + "id": "UL23_2_TPE1", + "svg": "photoeye", + "zone": "UL23_2" + }, + { + "id": "UL23_2_VFD", + "svg": "conveyor", + "zone": "UL23_2" + }, + { + "id": "UL23_3_TPE1", + "svg": "photoeye", + "zone": "UL23_3" + }, + { + "id": "UL23_3_VFD", + "svg": "conveyor", + "zone": "UL23_3" + }, + { + "id": "UL23_30_BCN1", + "svg": "beacon", + "zone": "UL23_30" + }, + { + "id": "UL23_30_BCN2", + "svg": "beacon", + "zone": "UL23_30" + }, + { + "id": "UL23_30_EPC1", + "svg": "epc", + "zone": "UL23_30" + }, + { + "id": "UL23_30_EPC2", + "svg": "epc", + "zone": "UL23_30" + }, + { + "id": "UL23_30_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL23_30" + }, + { + "id": "UL23_30_S1_PB", + "svg": "start", + "zone": "UL23_30" + }, + { + "id": "UL23_30_S2_PB", + "svg": "start", + "zone": "UL23_30" + }, + { + "id": "UL23_30_TPE1", + "svg": "photoeye", + "zone": "UL23_30" + }, + { + "id": "UL23_30_VFD", + "svg": "conveyor", + "zone": "UL23_30" + }, + { + "id": "UL23_31_TPE1", + "svg": "photoeye", + "zone": "UL23_31" + }, + { + "id": "UL23_4_TPE1", + "svg": "photoeye", + "zone": "UL23_4" + }, + { + "id": "UL23_4_VFD", + "svg": "conveyor", + "zone": "UL23_4" + }, + { + "id": "UL23_5_TPE1", + "svg": "photoeye", + "zone": "UL23_5" + }, + { + "id": "UL23_5_VFD", + "svg": "conveyor", + "zone": "UL23_5" + }, + { + "id": "UL23_6_TPE1", + "svg": "photoeye", + "zone": "UL23_6" + }, + { + "id": "UL23_6_VFD", + "svg": "conveyor", + "zone": "UL23_6" + }, + { + "id": "UL23_7_TPE1", + "svg": "photoeye", + "zone": "UL23_7" + }, + { + "id": "UL23_7_VFD", + "svg": "conveyor", + "zone": "UL23_7" + }, + { + "id": "UL23_8_BCN1", + "svg": "beacon", + "zone": "UL23_8" + }, + { + "id": "UL23_8_BCN2", + "svg": "beacon", + "zone": "UL23_8" + }, + { + "id": "UL23_8_DPM1", + "svg": "dpm", + "zone": "UL23_8" + }, + { + "id": "UL23_8_DPM2", + "svg": "dpm", + "zone": "UL23_8" + }, + { + "id": "UL23_8_EPC1", + "svg": "epc", + "zone": "UL23_8" + }, + { + "id": "UL23_8_EPC2", + "svg": "epc", + "zone": "UL23_8" + }, + { + "id": "UL23_8_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL23_8" + }, + { + "id": "UL23_8_JR1_PB", + "svg": "jam_reset", + "zone": "UL23_8" + }, + { + "id": "UL23_8_JR2_PB", + "svg": "jam_reset", + "zone": "UL23_8" + }, + { + "id": "UL23_8_S1_PB", + "svg": "start", + "zone": "UL23_8" + }, + { + "id": "UL23_8_S2_PB", + "svg": "start", + "zone": "UL23_8" + }, + { + "id": "UL23_8_TPE1", + "svg": "photoeye", + "zone": "UL23_8" + }, + { + "id": "UL23_8_TPE2", + "svg": "photoeye", + "zone": "UL23_8" + }, + { + "id": "UL23_8_TPE3", + "svg": "photoeye", + "zone": "UL23_8" + }, + { + "id": "UL23_8_TPE4", + "svg": "photoeye", + "zone": "UL23_8" + }, + { + "id": "UL23_8_TPE5", + "svg": "photoeye", + "zone": "UL23_8" + }, + { + "id": "UL23_8_VFD", + "svg": "conveyor", + "zone": "UL23_8" + }, + { + "id": "UL23_9A_VFD", + "svg": "conveyor", + "zone": "UL23_9A" + }, + { + "id": "UL23_9B_VFD", + "svg": "conveyor", + "zone": "UL23_9B" + }, + { + "id": "UL24_10_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL24_10" + }, + { + "id": "UL24_10_VFD", + "svg": "conveyor", + "zone": "UL24_10" + }, + { + "id": "UL24_2_BCN1", + "svg": "beacon", + "zone": "UL24_2" + }, + { + "id": "UL24_2_BCN2", + "svg": "beacon", + "zone": "UL24_2" + }, + { + "id": "UL24_2_EPC1", + "svg": "epc", + "zone": "UL24_2" + }, + { + "id": "UL24_2_EPC2", + "svg": "epc", + "zone": "UL24_2" + }, + { + "id": "UL24_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "UL24_2" + }, + { + "id": "UL24_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL24_2" + }, + { + "id": "UL24_2_SS1_SPB", + "svg": "start_stop", + "zone": "UL24_2" + }, + { + "id": "UL24_2_SS1_STPB", + "svg": "start_stop", + "zone": "UL24_2" + }, + { + "id": "UL24_2_SS2_SPB", + "svg": "start_stop", + "zone": "UL24_2" + }, + { + "id": "UL24_2_SS2_STPB", + "svg": "start_stop", + "zone": "UL24_2" + }, + { + "id": "UL24_2_TPE1", + "svg": "photoeye", + "zone": "UL24_2" + }, + { + "id": "UL24_2_TPE2", + "svg": "photoeye", + "zone": "UL24_2" + }, + { + "id": "UL24_2_VFD", + "svg": "conveyor", + "zone": "UL24_2" + }, + { + "id": "UL24_3_TPE1", + "svg": "photoeye", + "zone": "UL24_3" + }, + { + "id": "UL24_3_VFD", + "svg": "conveyor", + "zone": "UL24_3" + }, + { + "id": "UL24_4_TPE1", + "svg": "photoeye", + "zone": "UL24_4" + }, + { + "id": "UL24_4_VFD", + "svg": "conveyor", + "zone": "UL24_4" + }, + { + "id": "UL24_5_BCN1", + "svg": "beacon", + "zone": "UL24_5" + }, + { + "id": "UL24_5_BCN2", + "svg": "beacon", + "zone": "UL24_5" + }, + { + "id": "UL24_5_EPC1", + "svg": "epc", + "zone": "UL24_5" + }, + { + "id": "UL24_5_EPC2", + "svg": "epc", + "zone": "UL24_5" + }, + { + "id": "UL24_5_S1_PB", + "svg": "start", + "zone": "UL24_5" + }, + { + "id": "UL24_5_S2_PB", + "svg": "start", + "zone": "UL24_5" + }, + { + "id": "UL24_5_TPE1", + "svg": "photoeye", + "zone": "UL24_5" + }, + { + "id": "UL24_5_VFD", + "svg": "conveyor", + "zone": "UL24_5" + }, + { + "id": "UL24_6_LPE1", + "svg": "photoeye", + "zone": "UL24_6" + }, + { + "id": "UL24_6_LPE2", + "svg": "photoeye", + "zone": "UL24_6" + }, + { + "id": "UL24_6_TPE1", + "svg": "photoeye", + "zone": "UL24_6" + }, + { + "id": "UL24_6_VFD", + "svg": "conveyor", + "zone": "UL24_6" + }, + { + "id": "UL24_7_TPE1", + "svg": "photoeye", + "zone": "UL24_7" + }, + { + "id": "UL24_7_VFD", + "svg": "conveyor", + "zone": "UL24_7" + }, + { + "id": "UL24_8_TPE1", + "svg": "photoeye", + "zone": "UL24_8" + }, + { + "id": "UL24_8_VFD", + "svg": "conveyor", + "zone": "UL24_8" + }, + { + "id": "UL24_9_TPE1", + "svg": "photoeye", + "zone": "UL24_9" + }, + { + "id": "UL24_9_VFD", + "svg": "conveyor", + "zone": "UL24_9" + }, + { + "id": "UL25_2_BCN1", + "svg": "beacon", + "zone": "UL25_2" + }, + { + "id": "UL25_2_BCN2", + "svg": "beacon", + "zone": "UL25_2" + }, + { + "id": "UL25_2_EPC1", + "svg": "epc", + "zone": "UL25_2" + }, + { + "id": "UL25_2_EPC2", + "svg": "epc", + "zone": "UL25_2" + }, + { + "id": "UL25_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "UL25_2" + }, + { + "id": "UL25_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL25_2" + }, + { + "id": "UL25_2_SS1_SPB", + "svg": "start_stop", + "zone": "UL25_2" + }, + { + "id": "UL25_2_SS1_STPB", + "svg": "start_stop", + "zone": "UL25_2" + }, + { + "id": "UL25_2_SS2_SPB", + "svg": "start_stop", + "zone": "UL25_2" + }, + { + "id": "UL25_2_SS2_STPB", + "svg": "start_stop", + "zone": "UL25_2" + }, + { + "id": "UL25_2_TPE1", + "svg": "photoeye", + "zone": "UL25_2" + }, + { + "id": "UL25_2_TPE2", + "svg": "photoeye", + "zone": "UL25_2" + }, + { + "id": "UL25_2_VFD", + "svg": "conveyor", + "zone": "UL25_2" + }, + { + "id": "UL25_3_BCN1", + "svg": "beacon", + "zone": "UL25_3" + }, + { + "id": "UL25_3_BCN2", + "svg": "beacon", + "zone": "UL25_3" + }, + { + "id": "UL25_3_EPC1", + "svg": "epc", + "zone": "UL25_3" + }, + { + "id": "UL25_3_EPC2", + "svg": "epc", + "zone": "UL25_3" + }, + { + "id": "UL25_3_S1_PB", + "svg": "start", + "zone": "UL25_3" + }, + { + "id": "UL25_3_S2_PB", + "svg": "start", + "zone": "UL25_3" + }, + { + "id": "UL25_3_TPE1", + "svg": "photoeye", + "zone": "UL25_3" + }, + { + "id": "UL25_3_VFD", + "svg": "conveyor", + "zone": "UL25_3" + }, + { + "id": "UL25_4_TPE1", + "svg": "photoeye", + "zone": "UL25_4" + }, + { + "id": "UL25_4_VFD", + "svg": "conveyor", + "zone": "UL25_4" + }, + { + "id": "UL25_5_LPE1", + "svg": "photoeye", + "zone": "UL25_5" + }, + { + "id": "UL25_5_LPE2", + "svg": "photoeye", + "zone": "UL25_5" + }, + { + "id": "UL25_5_TPE1", + "svg": "photoeye", + "zone": "UL25_5" + }, + { + "id": "UL25_5_VFD", + "svg": "conveyor", + "zone": "UL25_5" + }, + { + "id": "UL25_6_TPE1", + "svg": "photoeye", + "zone": "UL25_6" + }, + { + "id": "UL25_6_VFD", + "svg": "conveyor", + "zone": "UL25_6" + }, + { + "id": "UL25_7_TPE1", + "svg": "photoeye", + "zone": "UL25_7" + }, + { + "id": "UL25_7_VFD", + "svg": "conveyor", + "zone": "UL25_7" + }, + { + "id": "UL25_8_TPE1", + "svg": "photoeye", + "zone": "UL25_8" + }, + { + "id": "UL25_8_VFD", + "svg": "conveyor", + "zone": "UL25_8" + }, + { + "id": "UL25_9_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL25_9" + }, + { + "id": "UL25_9_VFD", + "svg": "conveyor", + "zone": "UL25_9" + }, + { + "id": "UL26_1_BCN1", + "svg": "beacon", + "zone": "UL26_1" + }, + { + "id": "UL26_1_BCN2", + "svg": "beacon", + "zone": "UL26_1" + }, + { + "id": "UL26_1_EPC1", + "svg": "epc", + "zone": "UL26_1" + }, + { + "id": "UL26_1_EPC2", + "svg": "epc", + "zone": "UL26_1" + }, + { + "id": "UL26_1_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL26_1" + }, + { + "id": "UL26_1_SS1_SPB", + "svg": "start_stop", + "zone": "UL26_1" + }, + { + "id": "UL26_1_SS1_STPB", + "svg": "start_stop", + "zone": "UL26_1" + }, + { + "id": "UL26_1_SS2_SPB", + "svg": "start_stop", + "zone": "UL26_1" + }, + { + "id": "UL26_1_SS2_STPB", + "svg": "start_stop", + "zone": "UL26_1" + }, + { + "id": "UL26_1_TPE1", + "svg": "photoeye", + "zone": "UL26_1" + }, + { + "id": "UL26_1_VFD", + "svg": "conveyor", + "zone": "UL26_1" + }, + { + "id": "UL26_10_TPE1", + "svg": "photoeye", + "zone": "UL26_10" + }, + { + "id": "UL26_10_TPE2", + "svg": "photoeye", + "zone": "UL26_10" + }, + { + "id": "UL26_10_VFD", + "svg": "conveyor", + "zone": "UL26_10" + }, + { + "id": "UL26_11_BCN1", + "svg": "beacon", + "zone": "UL26_11" + }, + { + "id": "UL26_11_JR1_PB", + "svg": "jam_reset", + "zone": "UL26_11" + }, + { + "id": "UL26_11_JR2_PB", + "svg": "jam_reset", + "zone": "UL26_11" + }, + { + "id": "UL26_11_TPE1", + "svg": "photoeye", + "zone": "UL26_11" + }, + { + "id": "UL26_11_VFD", + "svg": "conveyor", + "zone": "UL26_11" + }, + { + "id": "UL26_12_TPE1", + "svg": "photoeye", + "zone": "UL26_12" + }, + { + "id": "UL26_12_VFD", + "svg": "conveyor", + "zone": "UL26_12" + }, + { + "id": "UL26_13_BCN1", + "svg": "beacon", + "zone": "UL26_13" + }, + { + "id": "UL26_13_DPM1", + "svg": "dpm", + "zone": "UL26_13" + }, + { + "id": "UL26_13_JR1_PB", + "svg": "jam_reset", + "zone": "UL26_13" + }, + { + "id": "UL26_13_JR2_PB", + "svg": "jam_reset", + "zone": "UL26_13" + }, + { + "id": "UL26_13_TPE1", + "svg": "photoeye", + "zone": "UL26_13" + }, + { + "id": "UL26_13_VFD", + "svg": "conveyor", + "zone": "UL26_13" + }, + { + "id": "UL26_14_TPE1", + "svg": "photoeye", + "zone": "UL26_14" + }, + { + "id": "UL26_15_BCN1", + "svg": "beacon", + "zone": "UL26_15" + }, + { + "id": "UL26_15_BCN2", + "svg": "beacon", + "zone": "UL26_15" + }, + { + "id": "UL26_15_EPC1", + "svg": "epc", + "zone": "UL26_15" + }, + { + "id": "UL26_15_EPC2", + "svg": "epc", + "zone": "UL26_15" + }, + { + "id": "UL26_15_LPE1", + "svg": "photoeye", + "zone": "UL26_15" + }, + { + "id": "UL26_15_SS1_SPB", + "svg": "start_stop", + "zone": "UL26_15" + }, + { + "id": "UL26_15_SS1_STPB", + "svg": "start_stop", + "zone": "UL26_15" + }, + { + "id": "UL26_15_SS2_SPB", + "svg": "start_stop", + "zone": "UL26_15" + }, + { + "id": "UL26_15_SS2_STPB", + "svg": "start_stop", + "zone": "UL26_15" + }, + { + "id": "UL26_15_TPE1", + "svg": "photoeye", + "zone": "UL26_15" + }, + { + "id": "UL26_15_TPE2", + "svg": "photoeye", + "zone": "UL26_15" + }, + { + "id": "UL26_15_VFD", + "svg": "conveyor", + "zone": "UL26_15" + }, + { + "id": "UL26_16_TPE1", + "svg": "photoeye", + "zone": "UL26_16" + }, + { + "id": "UL26_16_VFD", + "svg": "conveyor", + "zone": "UL26_16" + }, + { + "id": "UL26_17_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL26_17" + }, + { + "id": "UL26_18_TPE1", + "svg": "photoeye", + "zone": "UL26_18" + }, + { + "id": "UL26_18_VFD", + "svg": "conveyor", + "zone": "UL26_18" + }, + { + "id": "UL26_2_TPE1", + "svg": "photoeye", + "zone": "UL26_2" + }, + { + "id": "UL26_2_VFD", + "svg": "conveyor", + "zone": "UL26_2" + }, + { + "id": "UL26_3_TPE1", + "svg": "photoeye", + "zone": "UL26_3" + }, + { + "id": "UL26_3_VFD", + "svg": "conveyor", + "zone": "UL26_3" + }, + { + "id": "UL26_30_BCN1", + "svg": "beacon", + "zone": "UL26_30" + }, + { + "id": "UL26_30_BCN2", + "svg": "beacon", + "zone": "UL26_30" + }, + { + "id": "UL26_30_EPC1", + "svg": "epc", + "zone": "UL26_30" + }, + { + "id": "UL26_30_EPC2", + "svg": "epc", + "zone": "UL26_30" + }, + { + "id": "UL26_30_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL26_30" + }, + { + "id": "UL26_30_S1_PB", + "svg": "start", + "zone": "UL26_30" + }, + { + "id": "UL26_30_S2_PB", + "svg": "start", + "zone": "UL26_30" + }, + { + "id": "UL26_30_TPE1", + "svg": "photoeye", + "zone": "UL26_30" + }, + { + "id": "UL26_30_VFD", + "svg": "conveyor", + "zone": "UL26_30" + }, + { + "id": "UL26_31_TPE1", + "svg": "photoeye", + "zone": "UL26_31" + }, + { + "id": "UL26_4_TPE1", + "svg": "photoeye", + "zone": "UL26_4" + }, + { + "id": "UL26_4_VFD", + "svg": "conveyor", + "zone": "UL26_4" + }, + { + "id": "UL26_5_TPE1", + "svg": "photoeye", + "zone": "UL26_5" + }, + { + "id": "UL26_5_VFD", + "svg": "conveyor", + "zone": "UL26_5" + }, + { + "id": "UL26_6_TPE1", + "svg": "photoeye", + "zone": "UL26_6" + }, + { + "id": "UL26_6_VFD", + "svg": "conveyor", + "zone": "UL26_6" + }, + { + "id": "UL26_7_TPE1", + "svg": "photoeye", + "zone": "UL26_7" + }, + { + "id": "UL26_7_VFD", + "svg": "conveyor", + "zone": "UL26_7" + }, + { + "id": "UL26_8_BCN1", + "svg": "beacon", + "zone": "UL26_8" + }, + { + "id": "UL26_8_BCN2", + "svg": "beacon", + "zone": "UL26_8" + }, + { + "id": "UL26_8_DPM1", + "svg": "dpm", + "zone": "UL26_8" + }, + { + "id": "UL26_8_DPM2", + "svg": "dpm", + "zone": "UL26_8" + }, + { + "id": "UL26_8_EPC1", + "svg": "epc", + "zone": "UL26_8" + }, + { + "id": "UL26_8_EPC2", + "svg": "epc", + "zone": "UL26_8" + }, + { + "id": "UL26_8_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL26_8" + }, + { + "id": "UL26_8_JR1_PB", + "svg": "jam_reset", + "zone": "UL26_8" + }, + { + "id": "UL26_8_JR2_PB", + "svg": "jam_reset", + "zone": "UL26_8" + }, + { + "id": "UL26_8_S1_PB", + "svg": "start", + "zone": "UL26_8" + }, + { + "id": "UL26_8_S2_PB", + "svg": "start", + "zone": "UL26_8" + }, + { + "id": "UL26_8_TPE1", + "svg": "photoeye", + "zone": "UL26_8" + }, + { + "id": "UL26_8_TPE2", + "svg": "photoeye", + "zone": "UL26_8" + }, + { + "id": "UL26_8_TPE3", + "svg": "photoeye", + "zone": "UL26_8" + }, + { + "id": "UL26_8_TPE4", + "svg": "photoeye", + "zone": "UL26_8" + }, + { + "id": "UL26_8_TPE5", + "svg": "photoeye", + "zone": "UL26_8" + }, + { + "id": "UL26_8_VFD", + "svg": "conveyor", + "zone": "UL26_8" + }, + { + "id": "UL26_9A_VFD", + "svg": "conveyor", + "zone": "UL26_9A" + }, + { + "id": "UL26_9B_VFD", + "svg": "conveyor", + "zone": "UL26_9B" + } + ], + "MCM03": [ + { + "id": "PDP03", + "svg": "pdp", + "zone": "PDP03" + }, + { + "id": "PDP03_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP03" + }, + { + "id": "PDP03_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP03" + }, + { + "id": "UL15_10_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL15_10" + }, + { + "id": "UL15_10_VFD", + "svg": "conveyor", + "zone": "UL15_10" + }, + { + "id": "UL15_2_BCN1", + "svg": "beacon", + "zone": "UL15_2" + }, + { + "id": "UL15_2_BCN2", + "svg": "beacon", + "zone": "UL15_2" + }, + { + "id": "UL15_2_EPC1", + "svg": "epc", + "zone": "UL15_2" + }, + { + "id": "UL15_2_EPC2", + "svg": "epc", + "zone": "UL15_2" + }, + { + "id": "UL15_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "UL15_2" + }, + { + "id": "UL15_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL15_2" + }, + { + "id": "UL15_2_SS1_SPB", + "svg": "start_stop", + "zone": "UL15_2" + }, + { + "id": "UL15_2_SS1_STPB", + "svg": "start_stop", + "zone": "UL15_2" + }, + { + "id": "UL15_2_SS2_SPB", + "svg": "start_stop", + "zone": "UL15_2" + }, + { + "id": "UL15_2_SS2_STPB", + "svg": "start_stop", + "zone": "UL15_2" + }, + { + "id": "UL15_2_TPE1", + "svg": "photoeye", + "zone": "UL15_2" + }, + { + "id": "UL15_2_TPE2", + "svg": "photoeye", + "zone": "UL15_2" + }, + { + "id": "UL15_2_VFD", + "svg": "conveyor", + "zone": "UL15_2" + }, + { + "id": "UL15_3_TPE1", + "svg": "photoeye", + "zone": "UL15_3" + }, + { + "id": "UL15_3_VFD", + "svg": "conveyor", + "zone": "UL15_3" + }, + { + "id": "UL15_4_TPE1", + "svg": "photoeye", + "zone": "UL15_4" + }, + { + "id": "UL15_4_VFD", + "svg": "conveyor", + "zone": "UL15_4" + }, + { + "id": "UL15_5_BCN1", + "svg": "beacon", + "zone": "UL15_5" + }, + { + "id": "UL15_5_BCN2", + "svg": "beacon", + "zone": "UL15_5" + }, + { + "id": "UL15_5_EPC1", + "svg": "epc", + "zone": "UL15_5" + }, + { + "id": "UL15_5_EPC2", + "svg": "epc", + "zone": "UL15_5" + }, + { + "id": "UL15_5_S1_PB", + "svg": "start", + "zone": "UL15_5" + }, + { + "id": "UL15_5_S2_PB", + "svg": "start", + "zone": "UL15_5" + }, + { + "id": "UL15_5_TPE1", + "svg": "photoeye", + "zone": "UL15_5" + }, + { + "id": "UL15_5_VFD", + "svg": "conveyor", + "zone": "UL15_5" + }, + { + "id": "UL15_6_LPE1", + "svg": "photoeye", + "zone": "UL15_6" + }, + { + "id": "UL15_6_LPE2", + "svg": "photoeye", + "zone": "UL15_6" + }, + { + "id": "UL15_6_TPE1", + "svg": "photoeye", + "zone": "UL15_6" + }, + { + "id": "UL15_6_VFD", + "svg": "conveyor", + "zone": "UL15_6" + }, + { + "id": "UL15_7_TPE1", + "svg": "photoeye", + "zone": "UL15_7" + }, + { + "id": "UL15_7_VFD", + "svg": "conveyor", + "zone": "UL15_7" + }, + { + "id": "UL15_8_TPE1", + "svg": "photoeye", + "zone": "UL15_8" + }, + { + "id": "UL15_8_VFD", + "svg": "conveyor", + "zone": "UL15_8" + }, + { + "id": "UL15_9_TPE1", + "svg": "photoeye", + "zone": "UL15_9" + }, + { + "id": "UL15_9_VFD", + "svg": "conveyor", + "zone": "UL15_9" + }, + { + "id": "UL16_2_BCN1", + "svg": "beacon", + "zone": "UL16_2" + }, + { + "id": "UL16_2_BCN2", + "svg": "beacon", + "zone": "UL16_2" + }, + { + "id": "UL16_2_EPC1", + "svg": "epc", + "zone": "UL16_2" + }, + { + "id": "UL16_2_EPC2", + "svg": "epc", + "zone": "UL16_2" + }, + { + "id": "UL16_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "UL16_2" + }, + { + "id": "UL16_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL16_2" + }, + { + "id": "UL16_2_SS1_SPB", + "svg": "start_stop", + "zone": "UL16_2" + }, + { + "id": "UL16_2_SS1_STPB", + "svg": "start_stop", + "zone": "UL16_2" + }, + { + "id": "UL16_2_SS2_SPB", + "svg": "start_stop", + "zone": "UL16_2" + }, + { + "id": "UL16_2_SS2_STPB", + "svg": "start_stop", + "zone": "UL16_2" + }, + { + "id": "UL16_2_TPE1", + "svg": "photoeye", + "zone": "UL16_2" + }, + { + "id": "UL16_2_TPE2", + "svg": "photoeye", + "zone": "UL16_2" + }, + { + "id": "UL16_2_VFD", + "svg": "conveyor", + "zone": "UL16_2" + }, + { + "id": "UL16_3_BCN1", + "svg": "beacon", + "zone": "UL16_3" + }, + { + "id": "UL16_3_BCN2", + "svg": "beacon", + "zone": "UL16_3" + }, + { + "id": "UL16_3_EPC1", + "svg": "epc", + "zone": "UL16_3" + }, + { + "id": "UL16_3_EPC2", + "svg": "epc", + "zone": "UL16_3" + }, + { + "id": "UL16_3_S1_PB", + "svg": "start", + "zone": "UL16_3" + }, + { + "id": "UL16_3_S2_PB", + "svg": "start", + "zone": "UL16_3" + }, + { + "id": "UL16_3_TPE1", + "svg": "photoeye", + "zone": "UL16_3" + }, + { + "id": "UL16_3_VFD", + "svg": "conveyor", + "zone": "UL16_3" + }, + { + "id": "UL16_4_TPE1", + "svg": "photoeye", + "zone": "UL16_4" + }, + { + "id": "UL16_4_VFD", + "svg": "conveyor", + "zone": "UL16_4" + }, + { + "id": "UL16_5_LPE1", + "svg": "photoeye", + "zone": "UL16_5" + }, + { + "id": "UL16_5_LPE2", + "svg": "photoeye", + "zone": "UL16_5" + }, + { + "id": "UL16_5_TPE1", + "svg": "photoeye", + "zone": "UL16_5" + }, + { + "id": "UL16_5_VFD", + "svg": "conveyor", + "zone": "UL16_5" + }, + { + "id": "UL16_6_TPE1", + "svg": "photoeye", + "zone": "UL16_6" + }, + { + "id": "UL16_6_VFD", + "svg": "conveyor", + "zone": "UL16_6" + }, + { + "id": "UL16_7_TPE1", + "svg": "photoeye", + "zone": "UL16_7" + }, + { + "id": "UL16_7_VFD", + "svg": "conveyor", + "zone": "UL16_7" + }, + { + "id": "UL16_8_TPE1", + "svg": "photoeye", + "zone": "UL16_8" + }, + { + "id": "UL16_8_VFD", + "svg": "conveyor", + "zone": "UL16_8" + }, + { + "id": "UL16_9_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL16_9" + }, + { + "id": "UL16_9_VFD", + "svg": "conveyor", + "zone": "UL16_9" + }, + { + "id": "UL17_1_BCN1", + "svg": "beacon", + "zone": "UL17_1" + }, + { + "id": "UL17_1_BCN2", + "svg": "beacon", + "zone": "UL17_1" + }, + { + "id": "UL17_1_EPC1", + "svg": "epc", + "zone": "UL17_1" + }, + { + "id": "UL17_1_EPC2", + "svg": "epc", + "zone": "UL17_1" + }, + { + "id": "UL17_1_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL17_1" + }, + { + "id": "UL17_1_SS1_SPB", + "svg": "start_stop", + "zone": "UL17_1" + }, + { + "id": "UL17_1_SS1_STPB", + "svg": "start_stop", + "zone": "UL17_1" + }, + { + "id": "UL17_1_SS2_SPB", + "svg": "start_stop", + "zone": "UL17_1" + }, + { + "id": "UL17_1_SS2_STPB", + "svg": "start_stop", + "zone": "UL17_1" + }, + { + "id": "UL17_1_TPE1", + "svg": "photoeye", + "zone": "UL17_1" + }, + { + "id": "UL17_1_VFD", + "svg": "conveyor", + "zone": "UL17_1" + }, + { + "id": "UL17_10_TPE1", + "svg": "photoeye", + "zone": "UL17_10" + }, + { + "id": "UL17_10_TPE2", + "svg": "photoeye", + "zone": "UL17_10" + }, + { + "id": "UL17_10_VFD", + "svg": "conveyor", + "zone": "UL17_10" + }, + { + "id": "UL17_11_BCN1", + "svg": "beacon", + "zone": "UL17_11" + }, + { + "id": "UL17_11_JR1_PB", + "svg": "jam_reset", + "zone": "UL17_11" + }, + { + "id": "UL17_11_JR2_PB", + "svg": "jam_reset", + "zone": "UL17_11" + }, + { + "id": "UL17_11_TPE1", + "svg": "photoeye", + "zone": "UL17_11" + }, + { + "id": "UL17_11_VFD", + "svg": "conveyor", + "zone": "UL17_11" + }, + { + "id": "UL17_12_TPE1", + "svg": "photoeye", + "zone": "UL17_12" + }, + { + "id": "UL17_12_VFD", + "svg": "conveyor", + "zone": "UL17_12" + }, + { + "id": "UL17_13_BCN1", + "svg": "beacon", + "zone": "UL17_13" + }, + { + "id": "UL17_13_DPM1", + "svg": "dpm", + "zone": "UL17_13" + }, + { + "id": "UL17_13_JR1_PB", + "svg": "jam_reset", + "zone": "UL17_13" + }, + { + "id": "UL17_13_JR2_PB", + "svg": "jam_reset", + "zone": "UL17_13" + }, + { + "id": "UL17_13_TPE1", + "svg": "photoeye", + "zone": "UL17_13" + }, + { + "id": "UL17_13_VFD", + "svg": "conveyor", + "zone": "UL17_13" + }, + { + "id": "UL17_14_TPE1", + "svg": "photoeye", + "zone": "UL17_14" + }, + { + "id": "UL17_15_BCN1", + "svg": "beacon", + "zone": "UL17_15" + }, + { + "id": "UL17_15_BCN2", + "svg": "beacon", + "zone": "UL17_15" + }, + { + "id": "UL17_15_EPC1", + "svg": "epc", + "zone": "UL17_15" + }, + { + "id": "UL17_15_EPC2", + "svg": "epc", + "zone": "UL17_15" + }, + { + "id": "UL17_15_LPE1", + "svg": "photoeye", + "zone": "UL17_15" + }, + { + "id": "UL17_15_SS1_SPB", + "svg": "start_stop", + "zone": "UL17_15" + }, + { + "id": "UL17_15_SS1_STPB", + "svg": "start_stop", + "zone": "UL17_15" + }, + { + "id": "UL17_15_SS2_SPB", + "svg": "start_stop", + "zone": "UL17_15" + }, + { + "id": "UL17_15_SS2_STPB", + "svg": "start_stop", + "zone": "UL17_15" + }, + { + "id": "UL17_15_TPE1", + "svg": "photoeye", + "zone": "UL17_15" + }, + { + "id": "UL17_15_TPE2", + "svg": "photoeye", + "zone": "UL17_15" + }, + { + "id": "UL17_15_VFD", + "svg": "conveyor", + "zone": "UL17_15" + }, + { + "id": "UL17_16_TPE1", + "svg": "photoeye", + "zone": "UL17_16" + }, + { + "id": "UL17_16_VFD", + "svg": "conveyor", + "zone": "UL17_16" + }, + { + "id": "UL17_17_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL17_17" + }, + { + "id": "UL17_18_TPE1", + "svg": "photoeye", + "zone": "UL17_18" + }, + { + "id": "UL17_18_VFD", + "svg": "conveyor", + "zone": "UL17_18" + }, + { + "id": "UL17_2_TPE1", + "svg": "photoeye", + "zone": "UL17_2" + }, + { + "id": "UL17_2_VFD", + "svg": "conveyor", + "zone": "UL17_2" + }, + { + "id": "UL17_3_TPE1", + "svg": "photoeye", + "zone": "UL17_3" + }, + { + "id": "UL17_3_VFD", + "svg": "conveyor", + "zone": "UL17_3" + }, + { + "id": "UL17_30_BCN1", + "svg": "beacon", + "zone": "UL17_30" + }, + { + "id": "UL17_30_BCN2", + "svg": "beacon", + "zone": "UL17_30" + }, + { + "id": "UL17_30_EPC1", + "svg": "epc", + "zone": "UL17_30" + }, + { + "id": "UL17_30_EPC2", + "svg": "epc", + "zone": "UL17_30" + }, + { + "id": "UL17_30_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL17_30" + }, + { + "id": "UL17_30_S1_PB", + "svg": "start", + "zone": "UL17_30" + }, + { + "id": "UL17_30_S2_PB", + "svg": "start", + "zone": "UL17_30" + }, + { + "id": "UL17_30_TPE1", + "svg": "photoeye", + "zone": "UL17_30" + }, + { + "id": "UL17_30_VFD", + "svg": "conveyor", + "zone": "UL17_30" + }, + { + "id": "UL17_31_TPE1", + "svg": "photoeye", + "zone": "UL17_31" + }, + { + "id": "UL17_4_TPE1", + "svg": "photoeye", + "zone": "UL17_4" + }, + { + "id": "UL17_4_VFD", + "svg": "conveyor", + "zone": "UL17_4" + }, + { + "id": "UL17_5_TPE1", + "svg": "photoeye", + "zone": "UL17_5" + }, + { + "id": "UL17_5_VFD", + "svg": "conveyor", + "zone": "UL17_5" + }, + { + "id": "UL17_6_TPE1", + "svg": "photoeye", + "zone": "UL17_6" + }, + { + "id": "UL17_6_VFD", + "svg": "conveyor", + "zone": "UL17_6" + }, + { + "id": "UL17_7_TPE1", + "svg": "photoeye", + "zone": "UL17_7" + }, + { + "id": "UL17_7_VFD", + "svg": "conveyor", + "zone": "UL17_7" + }, + { + "id": "UL17_8_BCN1", + "svg": "beacon", + "zone": "UL17_8" + }, + { + "id": "UL17_8_BCN2", + "svg": "beacon", + "zone": "UL17_8" + }, + { + "id": "UL17_8_DPM1", + "svg": "dpm", + "zone": "UL17_8" + }, + { + "id": "UL17_8_DPM2", + "svg": "dpm", + "zone": "UL17_8" + }, + { + "id": "UL17_8_EPC1", + "svg": "epc", + "zone": "UL17_8" + }, + { + "id": "UL17_8_EPC2", + "svg": "epc", + "zone": "UL17_8" + }, + { + "id": "UL17_8_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL17_8" + }, + { + "id": "UL17_8_JR1_PB", + "svg": "jam_reset", + "zone": "UL17_8" + }, + { + "id": "UL17_8_JR2_PB", + "svg": "jam_reset", + "zone": "UL17_8" + }, + { + "id": "UL17_8_S1_PB", + "svg": "start", + "zone": "UL17_8" + }, + { + "id": "UL17_8_S2_PB", + "svg": "start", + "zone": "UL17_8" + }, + { + "id": "UL17_8_TPE1", + "svg": "photoeye", + "zone": "UL17_8" + }, + { + "id": "UL17_8_TPE2", + "svg": "photoeye", + "zone": "UL17_8" + }, + { + "id": "UL17_8_TPE3", + "svg": "photoeye", + "zone": "UL17_8" + }, + { + "id": "UL17_8_TPE4", + "svg": "photoeye", + "zone": "UL17_8" + }, + { + "id": "UL17_8_TPE5", + "svg": "photoeye", + "zone": "UL17_8" + }, + { + "id": "UL17_8_VFD", + "svg": "conveyor", + "zone": "UL17_8" + }, + { + "id": "UL17_9A_VFD", + "svg": "conveyor", + "zone": "UL17_9A" + }, + { + "id": "UL17_9B_VFD", + "svg": "conveyor", + "zone": "UL17_9B" + }, + { + "id": "UL18_10_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL18_10" + }, + { + "id": "UL18_10_VFD", + "svg": "conveyor", + "zone": "UL18_10" + }, + { + "id": "UL18_2_BCN1", + "svg": "beacon", + "zone": "UL18_2" + }, + { + "id": "UL18_2_BCN2", + "svg": "beacon", + "zone": "UL18_2" + }, + { + "id": "UL18_2_EPC1", + "svg": "epc", + "zone": "UL18_2" + }, + { + "id": "UL18_2_EPC2", + "svg": "epc", + "zone": "UL18_2" + }, + { + "id": "UL18_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "UL18_2" + }, + { + "id": "UL18_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL18_2" + }, + { + "id": "UL18_2_SS1_SPB", + "svg": "start_stop", + "zone": "UL18_2" + }, + { + "id": "UL18_2_SS1_STPB", + "svg": "start_stop", + "zone": "UL18_2" + }, + { + "id": "UL18_2_SS2_SPB", + "svg": "start_stop", + "zone": "UL18_2" + }, + { + "id": "UL18_2_SS2_STPB", + "svg": "start_stop", + "zone": "UL18_2" + }, + { + "id": "UL18_2_TPE1", + "svg": "photoeye", + "zone": "UL18_2" + }, + { + "id": "UL18_2_TPE2", + "svg": "photoeye", + "zone": "UL18_2" + }, + { + "id": "UL18_2_VFD", + "svg": "conveyor", + "zone": "UL18_2" + }, + { + "id": "UL18_3_TPE1", + "svg": "photoeye", + "zone": "UL18_3" + }, + { + "id": "UL18_3_VFD", + "svg": "conveyor", + "zone": "UL18_3" + }, + { + "id": "UL18_4_TPE1", + "svg": "photoeye", + "zone": "UL18_4" + }, + { + "id": "UL18_4_VFD", + "svg": "conveyor", + "zone": "UL18_4" + }, + { + "id": "UL18_5_BCN1", + "svg": "beacon", + "zone": "UL18_5" + }, + { + "id": "UL18_5_BCN2", + "svg": "beacon", + "zone": "UL18_5" + }, + { + "id": "UL18_5_EPC1", + "svg": "epc", + "zone": "UL18_5" + }, + { + "id": "UL18_5_EPC2", + "svg": "epc", + "zone": "UL18_5" + }, + { + "id": "UL18_5_S1_PB", + "svg": "start", + "zone": "UL18_5" + }, + { + "id": "UL18_5_S2_PB", + "svg": "start", + "zone": "UL18_5" + }, + { + "id": "UL18_5_TPE1", + "svg": "photoeye", + "zone": "UL18_5" + }, + { + "id": "UL18_5_VFD", + "svg": "conveyor", + "zone": "UL18_5" + }, + { + "id": "UL18_6_LPE1", + "svg": "photoeye", + "zone": "UL18_6" + }, + { + "id": "UL18_6_LPE2", + "svg": "photoeye", + "zone": "UL18_6" + }, + { + "id": "UL18_6_TPE1", + "svg": "photoeye", + "zone": "UL18_6" + }, + { + "id": "UL18_6_VFD", + "svg": "conveyor", + "zone": "UL18_6" + }, + { + "id": "UL18_7_TPE1", + "svg": "photoeye", + "zone": "UL18_7" + }, + { + "id": "UL18_7_VFD", + "svg": "conveyor", + "zone": "UL18_7" + }, + { + "id": "UL18_8_TPE1", + "svg": "photoeye", + "zone": "UL18_8" + }, + { + "id": "UL18_8_VFD", + "svg": "conveyor", + "zone": "UL18_8" + }, + { + "id": "UL18_9_TPE1", + "svg": "photoeye", + "zone": "UL18_9" + }, + { + "id": "UL18_9_VFD", + "svg": "conveyor", + "zone": "UL18_9" + }, + { + "id": "UL19_2_BCN1", + "svg": "beacon", + "zone": "UL19_2" + }, + { + "id": "UL19_2_BCN2", + "svg": "beacon", + "zone": "UL19_2" + }, + { + "id": "UL19_2_EPC1", + "svg": "epc", + "zone": "UL19_2" + }, + { + "id": "UL19_2_EPC2", + "svg": "epc", + "zone": "UL19_2" + }, + { + "id": "UL19_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "UL19_2" + }, + { + "id": "UL19_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL19_2" + }, + { + "id": "UL19_2_SS1_SPB", + "svg": "start_stop", + "zone": "UL19_2" + }, + { + "id": "UL19_2_SS1_STPB", + "svg": "start_stop", + "zone": "UL19_2" + }, + { + "id": "UL19_2_SS2_SPB", + "svg": "start_stop", + "zone": "UL19_2" + }, + { + "id": "UL19_2_SS2_STPB", + "svg": "start_stop", + "zone": "UL19_2" + }, + { + "id": "UL19_2_TPE1", + "svg": "photoeye", + "zone": "UL19_2" + }, + { + "id": "UL19_2_TPE2", + "svg": "photoeye", + "zone": "UL19_2" + }, + { + "id": "UL19_2_VFD", + "svg": "conveyor", + "zone": "UL19_2" + }, + { + "id": "UL19_3_BCN1", + "svg": "beacon", + "zone": "UL19_3" + }, + { + "id": "UL19_3_BCN2", + "svg": "beacon", + "zone": "UL19_3" + }, + { + "id": "UL19_3_EPC1", + "svg": "epc", + "zone": "UL19_3" + }, + { + "id": "UL19_3_EPC2", + "svg": "epc", + "zone": "UL19_3" + }, + { + "id": "UL19_3_S1_PB", + "svg": "start", + "zone": "UL19_3" + }, + { + "id": "UL19_3_S2_PB", + "svg": "start", + "zone": "UL19_3" + }, + { + "id": "UL19_3_TPE1", + "svg": "photoeye", + "zone": "UL19_3" + }, + { + "id": "UL19_3_VFD", + "svg": "conveyor", + "zone": "UL19_3" + }, + { + "id": "UL19_4_TPE1", + "svg": "photoeye", + "zone": "UL19_4" + }, + { + "id": "UL19_4_VFD", + "svg": "conveyor", + "zone": "UL19_4" + }, + { + "id": "UL19_5_LPE1", + "svg": "photoeye", + "zone": "UL19_5" + }, + { + "id": "UL19_5_LPE2", + "svg": "photoeye", + "zone": "UL19_5" + }, + { + "id": "UL19_5_TPE1", + "svg": "photoeye", + "zone": "UL19_5" + }, + { + "id": "UL19_5_VFD", + "svg": "conveyor", + "zone": "UL19_5" + }, + { + "id": "UL19_6_TPE1", + "svg": "photoeye", + "zone": "UL19_6" + }, + { + "id": "UL19_6_VFD", + "svg": "conveyor", + "zone": "UL19_6" + }, + { + "id": "UL19_7_TPE1", + "svg": "photoeye", + "zone": "UL19_7" + }, + { + "id": "UL19_7_VFD", + "svg": "conveyor", + "zone": "UL19_7" + }, + { + "id": "UL19_8_TPE1", + "svg": "photoeye", + "zone": "UL19_8" + }, + { + "id": "UL19_8_VFD", + "svg": "conveyor", + "zone": "UL19_8" + }, + { + "id": "UL19_9_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL19_9" + }, + { + "id": "UL19_9_VFD", + "svg": "conveyor", + "zone": "UL19_9" + }, + { + "id": "UL20_1_BCN1", + "svg": "beacon", + "zone": "UL20_1" + }, + { + "id": "UL20_1_BCN2", + "svg": "beacon", + "zone": "UL20_1" + }, + { + "id": "UL20_1_EPC1", + "svg": "epc", + "zone": "UL20_1" + }, + { + "id": "UL20_1_EPC2", + "svg": "epc", + "zone": "UL20_1" + }, + { + "id": "UL20_1_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL20_1" + }, + { + "id": "UL20_1_SS1_SPB", + "svg": "start_stop", + "zone": "UL20_1" + }, + { + "id": "UL20_1_SS1_STPB", + "svg": "start_stop", + "zone": "UL20_1" + }, + { + "id": "UL20_1_SS2_SPB", + "svg": "start_stop", + "zone": "UL20_1" + }, + { + "id": "UL20_1_SS2_STPB", + "svg": "start_stop", + "zone": "UL20_1" + }, + { + "id": "UL20_1_TPE1", + "svg": "photoeye", + "zone": "UL20_1" + }, + { + "id": "UL20_1_VFD", + "svg": "conveyor", + "zone": "UL20_1" + }, + { + "id": "UL20_10_TPE1", + "svg": "photoeye", + "zone": "UL20_10" + }, + { + "id": "UL20_10_TPE2", + "svg": "photoeye", + "zone": "UL20_10" + }, + { + "id": "UL20_10_VFD", + "svg": "conveyor", + "zone": "UL20_10" + }, + { + "id": "UL20_11_BCN1", + "svg": "beacon", + "zone": "UL20_11" + }, + { + "id": "UL20_11_JR1_PB", + "svg": "jam_reset", + "zone": "UL20_11" + }, + { + "id": "UL20_11_JR2_PB", + "svg": "jam_reset", + "zone": "UL20_11" + }, + { + "id": "UL20_11_TPE1", + "svg": "photoeye", + "zone": "UL20_11" + }, + { + "id": "UL20_11_VFD", + "svg": "conveyor", + "zone": "UL20_11" + }, + { + "id": "UL20_12_TPE1", + "svg": "photoeye", + "zone": "UL20_12" + }, + { + "id": "UL20_12_VFD", + "svg": "conveyor", + "zone": "UL20_12" + }, + { + "id": "UL20_13_BCN1", + "svg": "beacon", + "zone": "UL20_13" + }, + { + "id": "UL20_13_DPM1", + "svg": "dpm", + "zone": "UL20_13" + }, + { + "id": "UL20_13_JR1_PB", + "svg": "jam_reset", + "zone": "UL20_13" + }, + { + "id": "UL20_13_JR2_PB", + "svg": "jam_reset", + "zone": "UL20_13" + }, + { + "id": "UL20_13_TPE1", + "svg": "photoeye", + "zone": "UL20_13" + }, + { + "id": "UL20_13_VFD", + "svg": "conveyor", + "zone": "UL20_13" + }, + { + "id": "UL20_14_TPE1", + "svg": "photoeye", + "zone": "UL20_14" + }, + { + "id": "UL20_15_BCN1", + "svg": "beacon", + "zone": "UL20_15" + }, + { + "id": "UL20_15_BCN2", + "svg": "beacon", + "zone": "UL20_15" + }, + { + "id": "UL20_15_EPC1", + "svg": "epc", + "zone": "UL20_15" + }, + { + "id": "UL20_15_EPC2", + "svg": "epc", + "zone": "UL20_15" + }, + { + "id": "UL20_15_LPE1", + "svg": "photoeye", + "zone": "UL20_15" + }, + { + "id": "UL20_15_SS1_SPB", + "svg": "start_stop", + "zone": "UL20_15" + }, + { + "id": "UL20_15_SS1_STPB", + "svg": "start_stop", + "zone": "UL20_15" + }, + { + "id": "UL20_15_SS2_SPB", + "svg": "start_stop", + "zone": "UL20_15" + }, + { + "id": "UL20_15_SS2_STPB", + "svg": "start_stop", + "zone": "UL20_15" + }, + { + "id": "UL20_15_TPE1", + "svg": "photoeye", + "zone": "UL20_15" + }, + { + "id": "UL20_15_TPE2", + "svg": "photoeye", + "zone": "UL20_15" + }, + { + "id": "UL20_15_VFD", + "svg": "conveyor", + "zone": "UL20_15" + }, + { + "id": "UL20_16_TPE1", + "svg": "photoeye", + "zone": "UL20_16" + }, + { + "id": "UL20_16_VFD", + "svg": "conveyor", + "zone": "UL20_16" + }, + { + "id": "UL20_17_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL20_17" + }, + { + "id": "UL20_18_TPE1", + "svg": "photoeye", + "zone": "UL20_18" + }, + { + "id": "UL20_18_VFD", + "svg": "conveyor", + "zone": "UL20_18" + }, + { + "id": "UL20_2_TPE1", + "svg": "photoeye", + "zone": "UL20_2" + }, + { + "id": "UL20_2_VFD", + "svg": "conveyor", + "zone": "UL20_2" + }, + { + "id": "UL20_3_TPE1", + "svg": "photoeye", + "zone": "UL20_3" + }, + { + "id": "UL20_3_VFD", + "svg": "conveyor", + "zone": "UL20_3" + }, + { + "id": "UL20_30_BCN1", + "svg": "beacon", + "zone": "UL20_30" + }, + { + "id": "UL20_30_BCN2", + "svg": "beacon", + "zone": "UL20_30" + }, + { + "id": "UL20_30_EPC1", + "svg": "epc", + "zone": "UL20_30" + }, + { + "id": "UL20_30_EPC2", + "svg": "epc", + "zone": "UL20_30" + }, + { + "id": "UL20_30_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL20_30" + }, + { + "id": "UL20_30_S1_PB", + "svg": "start", + "zone": "UL20_30" + }, + { + "id": "UL20_30_S2_PB", + "svg": "start", + "zone": "UL20_30" + }, + { + "id": "UL20_30_TPE1", + "svg": "photoeye", + "zone": "UL20_30" + }, + { + "id": "UL20_30_VFD", + "svg": "conveyor", + "zone": "UL20_30" + }, + { + "id": "UL20_31_TPE1", + "svg": "photoeye", + "zone": "UL20_31" + }, + { + "id": "UL20_4_TPE1", + "svg": "photoeye", + "zone": "UL20_4" + }, + { + "id": "UL20_4_VFD", + "svg": "conveyor", + "zone": "UL20_4" + }, + { + "id": "UL20_5_TPE1", + "svg": "photoeye", + "zone": "UL20_5" + }, + { + "id": "UL20_5_VFD", + "svg": "conveyor", + "zone": "UL20_5" + }, + { + "id": "UL20_6_TPE1", + "svg": "photoeye", + "zone": "UL20_6" + }, + { + "id": "UL20_6_VFD", + "svg": "conveyor", + "zone": "UL20_6" + }, + { + "id": "UL20_7_TPE1", + "svg": "photoeye", + "zone": "UL20_7" + }, + { + "id": "UL20_7_VFD", + "svg": "conveyor", + "zone": "UL20_7" + }, + { + "id": "UL20_8_BCN1", + "svg": "beacon", + "zone": "UL20_8" + }, + { + "id": "UL20_8_BCN2", + "svg": "beacon", + "zone": "UL20_8" + }, + { + "id": "UL20_8_DPM1", + "svg": "dpm", + "zone": "UL20_8" + }, + { + "id": "UL20_8_DPM2", + "svg": "dpm", + "zone": "UL20_8" + }, + { + "id": "UL20_8_EPC1", + "svg": "epc", + "zone": "UL20_8" + }, + { + "id": "UL20_8_EPC2", + "svg": "epc", + "zone": "UL20_8" + }, + { + "id": "UL20_8_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL20_8" + }, + { + "id": "UL20_8_JR1_PB", + "svg": "jam_reset", + "zone": "UL20_8" + }, + { + "id": "UL20_8_JR2_PB", + "svg": "jam_reset", + "zone": "UL20_8" + }, + { + "id": "UL20_8_S1_PB", + "svg": "start", + "zone": "UL20_8" + }, + { + "id": "UL20_8_S2_PB", + "svg": "start", + "zone": "UL20_8" + }, + { + "id": "UL20_8_TPE1", + "svg": "photoeye", + "zone": "UL20_8" + }, + { + "id": "UL20_8_TPE2", + "svg": "photoeye", + "zone": "UL20_8" + }, + { + "id": "UL20_8_TPE3", + "svg": "photoeye", + "zone": "UL20_8" + }, + { + "id": "UL20_8_TPE4", + "svg": "photoeye", + "zone": "UL20_8" + }, + { + "id": "UL20_8_TPE5", + "svg": "photoeye", + "zone": "UL20_8" + }, + { + "id": "UL20_8_VFD", + "svg": "conveyor", + "zone": "UL20_8" + }, + { + "id": "UL20_9A_VFD", + "svg": "conveyor", + "zone": "UL20_9A" + }, + { + "id": "UL20_9B_VFD", + "svg": "conveyor", + "zone": "UL20_9B" + } + ], + "MCM04": [ + { + "id": "PDP06", + "svg": "pdp", + "zone": "PDP06" + }, + { + "id": "PDP06_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP06" + }, + { + "id": "PDP06_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP06" + }, + { + "id": "PDP07", + "svg": "pdp", + "zone": "PDP07" + }, + { + "id": "PDP07_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP07" + }, + { + "id": "PDP07_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP07" + }, + { + "id": "PDP08", + "svg": "pdp", + "zone": "PDP08" + }, + { + "id": "PDP08_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP08" + }, + { + "id": "PDP08_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP08" + }, + { + "id": "PS10_1_TPE1", + "svg": "photoeye", + "zone": "PS10_1" + }, + { + "id": "PS10_1_VFD", + "svg": "conveyor", + "zone": "PS10_1" + }, + { + "id": "PS10_10_BCN1", + "svg": "beacon", + "zone": "PS10_10" + }, + { + "id": "PS10_10_BCN2", + "svg": "beacon", + "zone": "PS10_10" + }, + { + "id": "PS10_10_EPC1", + "svg": "epc", + "zone": "PS10_10" + }, + { + "id": "PS10_10_EPC2", + "svg": "epc", + "zone": "PS10_10" + }, + { + "id": "PS10_10_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS10_10" + }, + { + "id": "PS10_10_S1_PB", + "svg": "start", + "zone": "PS10_10" + }, + { + "id": "PS10_10_S2_PB", + "svg": "start", + "zone": "PS10_10" + }, + { + "id": "PS10_10_TPE1", + "svg": "photoeye", + "zone": "PS10_10" + }, + { + "id": "PS10_10_VFD", + "svg": "conveyor", + "zone": "PS10_10" + }, + { + "id": "PS10_11_TPE1", + "svg": "photoeye", + "zone": "PS10_11" + }, + { + "id": "PS10_11_VFD", + "svg": "conveyor", + "zone": "PS10_11" + }, + { + "id": "PS10_12_BCN2", + "svg": "beacon", + "zone": "PS10_12" + }, + { + "id": "PS10_12_JR1_PB", + "svg": "jam_reset", + "zone": "PS10_12" + }, + { + "id": "PS10_12_JR2_PB", + "svg": "jam_reset", + "zone": "PS10_12" + }, + { + "id": "PS10_12_TPE1", + "svg": "photoeye", + "zone": "PS10_12" + }, + { + "id": "PS10_12_VFD", + "svg": "conveyor", + "zone": "PS10_12" + }, + { + "id": "PS10_13_TPE1", + "svg": "photoeye", + "zone": "PS10_13" + }, + { + "id": "PS10_13_VFD", + "svg": "conveyor", + "zone": "PS10_13" + }, + { + "id": "PS10_14_BCN1", + "svg": "beacon", + "zone": "PS10_14" + }, + { + "id": "PS10_14_BCN2", + "svg": "beacon", + "zone": "PS10_14" + }, + { + "id": "PS10_14_EPC1", + "svg": "epc", + "zone": "PS10_14" + }, + { + "id": "PS10_14_EPC2", + "svg": "epc", + "zone": "PS10_14" + }, + { + "id": "PS10_14_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS10_14" + }, + { + "id": "PS10_14_S1_PB", + "svg": "start", + "zone": "PS10_14" + }, + { + "id": "PS10_14_S2_PB", + "svg": "start", + "zone": "PS10_14" + }, + { + "id": "PS10_14_TPE1", + "svg": "photoeye", + "zone": "PS10_14" + }, + { + "id": "PS10_14_VFD", + "svg": "conveyor", + "zone": "PS10_14" + }, + { + "id": "PS10_2_TPE1", + "svg": "photoeye", + "zone": "PS10_2" + }, + { + "id": "PS10_2_VFD", + "svg": "conveyor", + "zone": "PS10_2" + }, + { + "id": "PS10_3_TPE1", + "svg": "photoeye", + "zone": "PS10_3" + }, + { + "id": "PS10_3_VFD", + "svg": "conveyor", + "zone": "PS10_3" + }, + { + "id": "PS10_4_BCN1", + "svg": "beacon", + "zone": "PS10_4" + }, + { + "id": "PS10_4_JR1_PB", + "svg": "jam_reset", + "zone": "PS10_4" + }, + { + "id": "PS10_4_TPE1", + "svg": "photoeye", + "zone": "PS10_4" + }, + { + "id": "PS10_4_VFD", + "svg": "conveyor", + "zone": "PS10_4" + }, + { + "id": "PS10_5_TPE1", + "svg": "photoeye", + "zone": "PS10_5" + }, + { + "id": "PS10_5_VFD", + "svg": "conveyor", + "zone": "PS10_5" + }, + { + "id": "PS10_6_DPM1", + "svg": "dpm", + "zone": "PS10_6" + }, + { + "id": "PS10_6_TPE1", + "svg": "photoeye", + "zone": "PS10_6" + }, + { + "id": "PS10_6_VFD", + "svg": "conveyor", + "zone": "PS10_6" + }, + { + "id": "PS10_7_TPE1", + "svg": "photoeye", + "zone": "PS10_7" + }, + { + "id": "PS10_7_VFD", + "svg": "conveyor", + "zone": "PS10_7" + }, + { + "id": "PS10_8_TPE1", + "svg": "photoeye", + "zone": "PS10_8" + }, + { + "id": "PS10_8_VFD", + "svg": "conveyor", + "zone": "PS10_8" + }, + { + "id": "PS10_9_DPM1", + "svg": "dpm", + "zone": "PS10_9" + }, + { + "id": "PS10_9_TPE1", + "svg": "photoeye", + "zone": "PS10_9" + }, + { + "id": "PS10_9_VFD", + "svg": "conveyor", + "zone": "PS10_9" + }, + { + "id": "PS6_1_TPE1", + "svg": "photoeye", + "zone": "PS6_1" + }, + { + "id": "PS6_1_VFD", + "svg": "conveyor", + "zone": "PS6_1" + }, + { + "id": "PS6_10_BCN1", + "svg": "beacon", + "zone": "PS6_10" + }, + { + "id": "PS6_10_DPM1", + "svg": "dpm", + "zone": "PS6_10" + }, + { + "id": "PS6_10_JR1_PB", + "svg": "jam_reset", + "zone": "PS6_10" + }, + { + "id": "PS6_10_TPE1", + "svg": "photoeye", + "zone": "PS6_10" + }, + { + "id": "PS6_10_VFD", + "svg": "conveyor", + "zone": "PS6_10" + }, + { + "id": "PS6_11_TPE1", + "svg": "photoeye", + "zone": "PS6_11" + }, + { + "id": "PS6_11_VFD", + "svg": "conveyor", + "zone": "PS6_11" + }, + { + "id": "PS6_12_DPM1", + "svg": "dpm", + "zone": "PS6_12" + }, + { + "id": "PS6_12_TPE1", + "svg": "photoeye", + "zone": "PS6_12" + }, + { + "id": "PS6_12_VFD", + "svg": "conveyor", + "zone": "PS6_12" + }, + { + "id": "PS6_13_DPM1", + "svg": "dpm", + "zone": "PS6_13" + }, + { + "id": "PS6_13_TPE1", + "svg": "photoeye", + "zone": "PS6_13" + }, + { + "id": "PS6_13_VFD", + "svg": "conveyor", + "zone": "PS6_13" + }, + { + "id": "PS6_14_TPE1", + "svg": "photoeye", + "zone": "PS6_14" + }, + { + "id": "PS6_14_VFD", + "svg": "conveyor", + "zone": "PS6_14" + }, + { + "id": "PS6_15_DPM1", + "svg": "dpm", + "zone": "PS6_15" + }, + { + "id": "PS6_15_TPE1", + "svg": "photoeye", + "zone": "PS6_15" + }, + { + "id": "PS6_15_VFD", + "svg": "conveyor", + "zone": "PS6_15" + }, + { + "id": "PS6_16_TPE1", + "svg": "photoeye", + "zone": "PS6_16" + }, + { + "id": "PS6_16_VFD", + "svg": "conveyor", + "zone": "PS6_16" + }, + { + "id": "PS6_2_TPE1", + "svg": "photoeye", + "zone": "PS6_2" + }, + { + "id": "PS6_2_VFD", + "svg": "conveyor", + "zone": "PS6_2" + }, + { + "id": "PS6_3_TPE1", + "svg": "photoeye", + "zone": "PS6_3" + }, + { + "id": "PS6_3_VFD", + "svg": "conveyor", + "zone": "PS6_3" + }, + { + "id": "PS6_4_BCN1", + "svg": "beacon", + "zone": "PS6_4" + }, + { + "id": "PS6_4_JR1_PB", + "svg": "jam_reset", + "zone": "PS6_4" + }, + { + "id": "PS6_4_TPE1", + "svg": "photoeye", + "zone": "PS6_4" + }, + { + "id": "PS6_4_VFD", + "svg": "conveyor", + "zone": "PS6_4" + }, + { + "id": "PS6_5_TPE1", + "svg": "photoeye", + "zone": "PS6_5" + }, + { + "id": "PS6_5_VFD", + "svg": "conveyor", + "zone": "PS6_5" + }, + { + "id": "PS6_6_TPE1", + "svg": "photoeye", + "zone": "PS6_6" + }, + { + "id": "PS6_6_VFD", + "svg": "conveyor", + "zone": "PS6_6" + }, + { + "id": "PS6_7_DPM1", + "svg": "dpm", + "zone": "PS6_7" + }, + { + "id": "PS6_7_TPE1", + "svg": "photoeye", + "zone": "PS6_7" + }, + { + "id": "PS6_7_VFD", + "svg": "conveyor", + "zone": "PS6_7" + }, + { + "id": "PS6_8_BCN1", + "svg": "beacon", + "zone": "PS6_8" + }, + { + "id": "PS6_8_JR1_PB", + "svg": "jam_reset", + "zone": "PS6_8" + }, + { + "id": "PS6_8_TPE1", + "svg": "photoeye", + "zone": "PS6_8" + }, + { + "id": "PS6_8_VFD", + "svg": "conveyor", + "zone": "PS6_8" + }, + { + "id": "PS6_9_TPE1", + "svg": "photoeye", + "zone": "PS6_9" + }, + { + "id": "PS6_9_VFD", + "svg": "conveyor", + "zone": "PS6_9" + }, + { + "id": "PS7_1_TPE1", + "svg": "photoeye", + "zone": "PS7_1" + }, + { + "id": "PS7_1_VFD", + "svg": "conveyor", + "zone": "PS7_1" + }, + { + "id": "PS7_10_TPE1", + "svg": "photoeye", + "zone": "PS7_10" + }, + { + "id": "PS7_10_VFD", + "svg": "conveyor", + "zone": "PS7_10" + }, + { + "id": "PS7_11_BCN1", + "svg": "beacon", + "zone": "PS7_11" + }, + { + "id": "PS7_11_BCN2", + "svg": "beacon", + "zone": "PS7_11" + }, + { + "id": "PS7_11_EPC1", + "svg": "epc", + "zone": "PS7_11" + }, + { + "id": "PS7_11_EPC2", + "svg": "epc", + "zone": "PS7_11" + }, + { + "id": "PS7_11_S1_PB", + "svg": "start", + "zone": "PS7_11" + }, + { + "id": "PS7_11_S2_PB", + "svg": "start", + "zone": "PS7_11" + }, + { + "id": "PS7_11_TPE1", + "svg": "photoeye", + "zone": "PS7_11" + }, + { + "id": "PS7_11_VFD", + "svg": "conveyor", + "zone": "PS7_11" + }, + { + "id": "PS7_12_TPE1", + "svg": "photoeye", + "zone": "PS7_12" + }, + { + "id": "PS7_12_VFD", + "svg": "conveyor", + "zone": "PS7_12" + }, + { + "id": "PS7_13_BCN1", + "svg": "beacon", + "zone": "PS7_13" + }, + { + "id": "PS7_13_BCN2", + "svg": "beacon", + "zone": "PS7_13" + }, + { + "id": "PS7_13_EPC1", + "svg": "epc", + "zone": "PS7_13" + }, + { + "id": "PS7_13_EPC2", + "svg": "epc", + "zone": "PS7_13" + }, + { + "id": "PS7_13_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PS7_13" + }, + { + "id": "PS7_13_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS7_13" + }, + { + "id": "PS7_13_S1_PB", + "svg": "start", + "zone": "PS7_13" + }, + { + "id": "PS7_13_S2_PB", + "svg": "start", + "zone": "PS7_13" + }, + { + "id": "PS7_13_TPE1", + "svg": "photoeye", + "zone": "PS7_13" + }, + { + "id": "PS7_13_VFD", + "svg": "conveyor", + "zone": "PS7_13" + }, + { + "id": "PS7_14_TPE1", + "svg": "photoeye", + "zone": "PS7_14" + }, + { + "id": "PS7_14_VFD", + "svg": "conveyor", + "zone": "PS7_14" + }, + { + "id": "PS7_15_TPE1", + "svg": "photoeye", + "zone": "PS7_15" + }, + { + "id": "PS7_15_VFD", + "svg": "conveyor", + "zone": "PS7_15" + }, + { + "id": "PS7_16_BCN1", + "svg": "beacon", + "zone": "PS7_16" + }, + { + "id": "PS7_16_BCN2", + "svg": "beacon", + "zone": "PS7_16" + }, + { + "id": "PS7_16_DPM1", + "svg": "dpm", + "zone": "PS7_16" + }, + { + "id": "PS7_16_EPC1", + "svg": "epc", + "zone": "PS7_16" + }, + { + "id": "PS7_16_EPC2", + "svg": "epc", + "zone": "PS7_16" + }, + { + "id": "PS7_16_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS7_16" + }, + { + "id": "PS7_16_S1_PB", + "svg": "start", + "zone": "PS7_16" + }, + { + "id": "PS7_16_S2_PB", + "svg": "start", + "zone": "PS7_16" + }, + { + "id": "PS7_16_TPE1", + "svg": "photoeye", + "zone": "PS7_16" + }, + { + "id": "PS7_16_VFD", + "svg": "conveyor", + "zone": "PS7_16" + }, + { + "id": "PS7_17_DPM1", + "svg": "dpm", + "zone": "PS7_17" + }, + { + "id": "PS7_17_TPE1", + "svg": "photoeye", + "zone": "PS7_17" + }, + { + "id": "PS7_17_VFD", + "svg": "conveyor", + "zone": "PS7_17" + }, + { + "id": "PS7_18_TPE1", + "svg": "photoeye", + "zone": "PS7_18" + }, + { + "id": "PS7_18_VFD", + "svg": "conveyor", + "zone": "PS7_18" + }, + { + "id": "PS7_19_BCN1", + "svg": "beacon", + "zone": "PS7_19" + }, + { + "id": "PS7_19_EPC1", + "svg": "epc", + "zone": "PS7_19" + }, + { + "id": "PS7_19_S1_PB", + "svg": "start", + "zone": "PS7_19" + }, + { + "id": "PS7_19_TPE1", + "svg": "photoeye", + "zone": "PS7_19" + }, + { + "id": "PS7_19_VFD", + "svg": "conveyor", + "zone": "PS7_19" + }, + { + "id": "PS7_2_TPE1", + "svg": "photoeye", + "zone": "PS7_2" + }, + { + "id": "PS7_2_VFD", + "svg": "conveyor", + "zone": "PS7_2" + }, + { + "id": "PS7_20_DPM1", + "svg": "dpm", + "zone": "PS7_20" + }, + { + "id": "PS7_20_TPE1", + "svg": "photoeye", + "zone": "PS7_20" + }, + { + "id": "PS7_20_VFD", + "svg": "conveyor", + "zone": "PS7_20" + }, + { + "id": "PS7_21_BCN1", + "svg": "beacon", + "zone": "PS7_21" + }, + { + "id": "PS7_21_EPC1", + "svg": "epc", + "zone": "PS7_21" + }, + { + "id": "PS7_21_S1_PB", + "svg": "start", + "zone": "PS7_21" + }, + { + "id": "PS7_21_TPE1", + "svg": "photoeye", + "zone": "PS7_21" + }, + { + "id": "PS7_21_VFD", + "svg": "conveyor", + "zone": "PS7_21" + }, + { + "id": "PS7_22_TPE1", + "svg": "photoeye", + "zone": "PS7_22" + }, + { + "id": "PS7_22_VFD", + "svg": "conveyor", + "zone": "PS7_22" + }, + { + "id": "PS7_23_BCN1", + "svg": "beacon", + "zone": "PS7_23" + }, + { + "id": "PS7_23_JR1_PB", + "svg": "jam_reset", + "zone": "PS7_23" + }, + { + "id": "PS7_23_TPE1", + "svg": "photoeye", + "zone": "PS7_23" + }, + { + "id": "PS7_23_VFD", + "svg": "conveyor", + "zone": "PS7_23" + }, + { + "id": "PS7_24_TPE1", + "svg": "photoeye", + "zone": "PS7_24" + }, + { + "id": "PS7_24_VFD", + "svg": "conveyor", + "zone": "PS7_24" + }, + { + "id": "PS7_25_TPE1", + "svg": "photoeye", + "zone": "PS7_25" + }, + { + "id": "PS7_25_VFD", + "svg": "conveyor", + "zone": "PS7_25" + }, + { + "id": "PS7_26_TPE1", + "svg": "photoeye", + "zone": "PS7_26" + }, + { + "id": "PS7_26_VFD", + "svg": "conveyor", + "zone": "PS7_26" + }, + { + "id": "PS7_27_TPE1", + "svg": "photoeye", + "zone": "PS7_27" + }, + { + "id": "PS7_27_VFD", + "svg": "conveyor", + "zone": "PS7_27" + }, + { + "id": "PS7_3_TPE1", + "svg": "photoeye", + "zone": "PS7_3" + }, + { + "id": "PS7_3_VFD", + "svg": "conveyor", + "zone": "PS7_3" + }, + { + "id": "PS7_4_BCN1", + "svg": "beacon", + "zone": "PS7_4" + }, + { + "id": "PS7_4_JR1_PB", + "svg": "jam_reset", + "zone": "PS7_4" + }, + { + "id": "PS7_4_TPE1", + "svg": "photoeye", + "zone": "PS7_4" + }, + { + "id": "PS7_4_VFD", + "svg": "conveyor", + "zone": "PS7_4" + }, + { + "id": "PS7_5_TPE1", + "svg": "photoeye", + "zone": "PS7_5" + }, + { + "id": "PS7_5_VFD", + "svg": "conveyor", + "zone": "PS7_5" + }, + { + "id": "PS7_6_DPM1", + "svg": "dpm", + "zone": "PS7_6" + }, + { + "id": "PS7_6_TPE1", + "svg": "photoeye", + "zone": "PS7_6" + }, + { + "id": "PS7_6_VFD", + "svg": "conveyor", + "zone": "PS7_6" + }, + { + "id": "PS7_7_TPE1", + "svg": "photoeye", + "zone": "PS7_7" + }, + { + "id": "PS7_7_VFD", + "svg": "conveyor", + "zone": "PS7_7" + }, + { + "id": "PS7_8_TPE1", + "svg": "photoeye", + "zone": "PS7_8" + }, + { + "id": "PS7_8_VFD", + "svg": "conveyor", + "zone": "PS7_8" + }, + { + "id": "PS7_9_TPE1", + "svg": "photoeye", + "zone": "PS7_9" + }, + { + "id": "PS7_9_VFD", + "svg": "conveyor", + "zone": "PS7_9" + }, + { + "id": "PS8_1_TPE1", + "svg": "photoeye", + "zone": "PS8_1" + }, + { + "id": "PS8_1_VFD", + "svg": "conveyor", + "zone": "PS8_1" + }, + { + "id": "PS8_10_TPE1", + "svg": "photoeye", + "zone": "PS8_10" + }, + { + "id": "PS8_10_VFD", + "svg": "conveyor", + "zone": "PS8_10" + }, + { + "id": "PS8_11_BCN1", + "svg": "beacon", + "zone": "PS8_11" + }, + { + "id": "PS8_11_BCN2", + "svg": "beacon", + "zone": "PS8_11" + }, + { + "id": "PS8_11_EPC1", + "svg": "epc", + "zone": "PS8_11" + }, + { + "id": "PS8_11_EPC2", + "svg": "epc", + "zone": "PS8_11" + }, + { + "id": "PS8_11_S1_PB", + "svg": "start", + "zone": "PS8_11" + }, + { + "id": "PS8_11_S2_PB", + "svg": "start", + "zone": "PS8_11" + }, + { + "id": "PS8_11_TPE1", + "svg": "photoeye", + "zone": "PS8_11" + }, + { + "id": "PS8_11_VFD", + "svg": "conveyor", + "zone": "PS8_11" + }, + { + "id": "PS8_12_TPE1", + "svg": "photoeye", + "zone": "PS8_12" + }, + { + "id": "PS8_12_VFD", + "svg": "conveyor", + "zone": "PS8_12" + }, + { + "id": "PS8_13_BCN1", + "svg": "beacon", + "zone": "PS8_13" + }, + { + "id": "PS8_13_BCN2", + "svg": "beacon", + "zone": "PS8_13" + }, + { + "id": "PS8_13_EPC1", + "svg": "epc", + "zone": "PS8_13" + }, + { + "id": "PS8_13_EPC2", + "svg": "epc", + "zone": "PS8_13" + }, + { + "id": "PS8_13_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PS8_13" + }, + { + "id": "PS8_13_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS8_13" + }, + { + "id": "PS8_13_S1_PB", + "svg": "start", + "zone": "PS8_13" + }, + { + "id": "PS8_13_S2_PB", + "svg": "start", + "zone": "PS8_13" + }, + { + "id": "PS8_13_TPE1", + "svg": "photoeye", + "zone": "PS8_13" + }, + { + "id": "PS8_13_VFD", + "svg": "conveyor", + "zone": "PS8_13" + }, + { + "id": "PS8_14_TPE1", + "svg": "photoeye", + "zone": "PS8_14" + }, + { + "id": "PS8_14_VFD", + "svg": "conveyor", + "zone": "PS8_14" + }, + { + "id": "PS8_15_TPE1", + "svg": "photoeye", + "zone": "PS8_15" + }, + { + "id": "PS8_15_VFD", + "svg": "conveyor", + "zone": "PS8_15" + }, + { + "id": "PS8_16_BCN1", + "svg": "beacon", + "zone": "PS8_16" + }, + { + "id": "PS8_16_BCN2", + "svg": "beacon", + "zone": "PS8_16" + }, + { + "id": "PS8_16_DPM1", + "svg": "dpm", + "zone": "PS8_16" + }, + { + "id": "PS8_16_EPC1", + "svg": "epc", + "zone": "PS8_16" + }, + { + "id": "PS8_16_EPC2", + "svg": "epc", + "zone": "PS8_16" + }, + { + "id": "PS8_16_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS8_16" + }, + { + "id": "PS8_16_S1_PB", + "svg": "start", + "zone": "PS8_16" + }, + { + "id": "PS8_16_S2_PB", + "svg": "start", + "zone": "PS8_16" + }, + { + "id": "PS8_16_TPE1", + "svg": "photoeye", + "zone": "PS8_16" + }, + { + "id": "PS8_16_VFD", + "svg": "conveyor", + "zone": "PS8_16" + }, + { + "id": "PS8_17_DPM1", + "svg": "dpm", + "zone": "PS8_17" + }, + { + "id": "PS8_17_TPE1", + "svg": "photoeye", + "zone": "PS8_17" + }, + { + "id": "PS8_17_VFD", + "svg": "conveyor", + "zone": "PS8_17" + }, + { + "id": "PS8_18_TPE1", + "svg": "photoeye", + "zone": "PS8_18" + }, + { + "id": "PS8_18_VFD", + "svg": "conveyor", + "zone": "PS8_18" + }, + { + "id": "PS8_19_BCN1", + "svg": "beacon", + "zone": "PS8_19" + }, + { + "id": "PS8_19_EPC1", + "svg": "epc", + "zone": "PS8_19" + }, + { + "id": "PS8_19_S1_PB", + "svg": "start", + "zone": "PS8_19" + }, + { + "id": "PS8_19_TPE1", + "svg": "photoeye", + "zone": "PS8_19" + }, + { + "id": "PS8_19_VFD", + "svg": "conveyor", + "zone": "PS8_19" + }, + { + "id": "PS8_2_TPE1", + "svg": "photoeye", + "zone": "PS8_2" + }, + { + "id": "PS8_2_VFD", + "svg": "conveyor", + "zone": "PS8_2" + }, + { + "id": "PS8_20_DPM1", + "svg": "dpm", + "zone": "PS8_20" + }, + { + "id": "PS8_20_TPE1", + "svg": "photoeye", + "zone": "PS8_20" + }, + { + "id": "PS8_20_VFD", + "svg": "conveyor", + "zone": "PS8_20" + }, + { + "id": "PS8_21_BCN1", + "svg": "beacon", + "zone": "PS8_21" + }, + { + "id": "PS8_21_EPC1", + "svg": "epc", + "zone": "PS8_21" + }, + { + "id": "PS8_21_S1_PB", + "svg": "start", + "zone": "PS8_21" + }, + { + "id": "PS8_21_TPE1", + "svg": "photoeye", + "zone": "PS8_21" + }, + { + "id": "PS8_21_VFD", + "svg": "conveyor", + "zone": "PS8_21" + }, + { + "id": "PS8_22_TPE1", + "svg": "photoeye", + "zone": "PS8_22" + }, + { + "id": "PS8_22_VFD", + "svg": "conveyor", + "zone": "PS8_22" + }, + { + "id": "PS8_23_BCN1", + "svg": "beacon", + "zone": "PS8_23" + }, + { + "id": "PS8_23_DPM1", + "svg": "dpm", + "zone": "PS8_23" + }, + { + "id": "PS8_23_JR1_PB", + "svg": "jam_reset", + "zone": "PS8_23" + }, + { + "id": "PS8_23_TPE1", + "svg": "photoeye", + "zone": "PS8_23" + }, + { + "id": "PS8_23_VFD", + "svg": "conveyor", + "zone": "PS8_23" + }, + { + "id": "PS8_24_TPE1", + "svg": "photoeye", + "zone": "PS8_24" + }, + { + "id": "PS8_24_VFD", + "svg": "conveyor", + "zone": "PS8_24" + }, + { + "id": "PS8_25_BCN1", + "svg": "beacon", + "zone": "PS8_25" + }, + { + "id": "PS8_25_JR1_PB", + "svg": "jam_reset", + "zone": "PS8_25" + }, + { + "id": "PS8_25_TPE1", + "svg": "photoeye", + "zone": "PS8_25" + }, + { + "id": "PS8_25_VFD", + "svg": "conveyor", + "zone": "PS8_25" + }, + { + "id": "PS8_26_TPE1", + "svg": "photoeye", + "zone": "PS8_26" + }, + { + "id": "PS8_26_VFD", + "svg": "conveyor", + "zone": "PS8_26" + }, + { + "id": "PS8_27_TPE1", + "svg": "photoeye", + "zone": "PS8_27" + }, + { + "id": "PS8_27_VFD", + "svg": "conveyor", + "zone": "PS8_27" + }, + { + "id": "PS8_3_TPE1", + "svg": "photoeye", + "zone": "PS8_3" + }, + { + "id": "PS8_3_VFD", + "svg": "conveyor", + "zone": "PS8_3" + }, + { + "id": "PS8_4_BCN1", + "svg": "beacon", + "zone": "PS8_4" + }, + { + "id": "PS8_4_JR1_PB", + "svg": "jam_reset", + "zone": "PS8_4" + }, + { + "id": "PS8_4_TPE1", + "svg": "photoeye", + "zone": "PS8_4" + }, + { + "id": "PS8_4_VFD", + "svg": "conveyor", + "zone": "PS8_4" + }, + { + "id": "PS8_5_TPE1", + "svg": "photoeye", + "zone": "PS8_5" + }, + { + "id": "PS8_5_VFD", + "svg": "conveyor", + "zone": "PS8_5" + }, + { + "id": "PS8_6_TPE1", + "svg": "photoeye", + "zone": "PS8_6" + }, + { + "id": "PS8_6_VFD", + "svg": "conveyor", + "zone": "PS8_6" + }, + { + "id": "PS8_7_TPE1", + "svg": "photoeye", + "zone": "PS8_7" + }, + { + "id": "PS8_7_VFD", + "svg": "conveyor", + "zone": "PS8_7" + }, + { + "id": "PS8_8_TPE1", + "svg": "photoeye", + "zone": "PS8_8" + }, + { + "id": "PS8_8_VFD", + "svg": "conveyor", + "zone": "PS8_8" + }, + { + "id": "PS8_9_TPE1", + "svg": "photoeye", + "zone": "PS8_9" + }, + { + "id": "PS8_9_VFD", + "svg": "conveyor", + "zone": "PS8_9" + }, + { + "id": "PS9_1_TPE1", + "svg": "photoeye", + "zone": "PS9_1" + }, + { + "id": "PS9_1_VFD", + "svg": "conveyor", + "zone": "PS9_1" + }, + { + "id": "PS9_10_BCN1", + "svg": "beacon", + "zone": "PS9_10" + }, + { + "id": "PS9_10_BCN2", + "svg": "beacon", + "zone": "PS9_10" + }, + { + "id": "PS9_10_EPC1", + "svg": "epc", + "zone": "PS9_10" + }, + { + "id": "PS9_10_EPC2", + "svg": "epc", + "zone": "PS9_10" + }, + { + "id": "PS9_10_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS9_10" + }, + { + "id": "PS9_10_S1_PB", + "svg": "start", + "zone": "PS9_10" + }, + { + "id": "PS9_10_S2_PB", + "svg": "start", + "zone": "PS9_10" + }, + { + "id": "PS9_10_TPE1", + "svg": "photoeye", + "zone": "PS9_10" + }, + { + "id": "PS9_10_VFD", + "svg": "conveyor", + "zone": "PS9_10" + }, + { + "id": "PS9_11_TPE1", + "svg": "photoeye", + "zone": "PS9_11" + }, + { + "id": "PS9_11_VFD", + "svg": "conveyor", + "zone": "PS9_11" + }, + { + "id": "PS9_12_BCN1", + "svg": "beacon", + "zone": "PS9_12" + }, + { + "id": "PS9_12_DPM1", + "svg": "dpm", + "zone": "PS9_12" + }, + { + "id": "PS9_12_JR1_PB", + "svg": "jam_reset", + "zone": "PS9_12" + }, + { + "id": "PS9_12_JR2_PB", + "svg": "jam_reset", + "zone": "PS9_12" + }, + { + "id": "PS9_12_TPE1", + "svg": "photoeye", + "zone": "PS9_12" + }, + { + "id": "PS9_12_VFD", + "svg": "conveyor", + "zone": "PS9_12" + }, + { + "id": "PS9_13_TPE1", + "svg": "photoeye", + "zone": "PS9_13" + }, + { + "id": "PS9_13_VFD", + "svg": "conveyor", + "zone": "PS9_13" + }, + { + "id": "PS9_14_BCN1", + "svg": "beacon", + "zone": "PS9_14" + }, + { + "id": "PS9_14_BCN2", + "svg": "beacon", + "zone": "PS9_14" + }, + { + "id": "PS9_14_EPC1", + "svg": "epc", + "zone": "PS9_14" + }, + { + "id": "PS9_14_EPC2", + "svg": "epc", + "zone": "PS9_14" + }, + { + "id": "PS9_14_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS9_14" + }, + { + "id": "PS9_14_S1_PB", + "svg": "start", + "zone": "PS9_14" + }, + { + "id": "PS9_14_S2_PB", + "svg": "start", + "zone": "PS9_14" + }, + { + "id": "PS9_14_TPE1", + "svg": "photoeye", + "zone": "PS9_14" + }, + { + "id": "PS9_14_VFD", + "svg": "conveyor", + "zone": "PS9_14" + }, + { + "id": "PS9_2_TPE1", + "svg": "photoeye", + "zone": "PS9_2" + }, + { + "id": "PS9_2_VFD", + "svg": "conveyor", + "zone": "PS9_2" + }, + { + "id": "PS9_3_TPE1", + "svg": "photoeye", + "zone": "PS9_3" + }, + { + "id": "PS9_3_VFD", + "svg": "conveyor", + "zone": "PS9_3" + }, + { + "id": "PS9_4_BCN1", + "svg": "beacon", + "zone": "PS9_4" + }, + { + "id": "PS9_4_JR1_PB", + "svg": "jam_reset", + "zone": "PS9_4" + }, + { + "id": "PS9_4_TPE1", + "svg": "photoeye", + "zone": "PS9_4" + }, + { + "id": "PS9_4_VFD", + "svg": "conveyor", + "zone": "PS9_4" + }, + { + "id": "PS9_5_TPE1", + "svg": "photoeye", + "zone": "PS9_5" + }, + { + "id": "PS9_5_VFD", + "svg": "conveyor", + "zone": "PS9_5" + }, + { + "id": "PS9_6_TPE1", + "svg": "photoeye", + "zone": "PS9_6" + }, + { + "id": "PS9_6_VFD", + "svg": "conveyor", + "zone": "PS9_6" + }, + { + "id": "PS9_7_TPE1", + "svg": "photoeye", + "zone": "PS9_7" + }, + { + "id": "PS9_7_VFD", + "svg": "conveyor", + "zone": "PS9_7" + }, + { + "id": "PS9_8_TPE1", + "svg": "photoeye", + "zone": "PS9_8" + }, + { + "id": "PS9_8_VFD", + "svg": "conveyor", + "zone": "PS9_8" + }, + { + "id": "PS9_9_TPE1", + "svg": "photoeye", + "zone": "PS9_9" + }, + { + "id": "PS9_9_VFD", + "svg": "conveyor", + "zone": "PS9_9" + } + ], + "MCM05": [ + { + "id": "PDP09", + "svg": "pdp", + "zone": "PDP09" + }, + { + "id": "PDP09_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP09" + }, + { + "id": "PDP09_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP09" + }, + { + "id": "UL1_10_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL1_10" + }, + { + "id": "UL1_10_VFD", + "svg": "conveyor", + "zone": "UL1_10" + }, + { + "id": "UL1_2_BCN1", + "svg": "beacon", + "zone": "UL1_2" + }, + { + "id": "UL1_2_BCN2", + "svg": "beacon", + "zone": "UL1_2" + }, + { + "id": "UL1_2_EPC1", + "svg": "epc", + "zone": "UL1_2" + }, + { + "id": "UL1_2_EPC2", + "svg": "epc", + "zone": "UL1_2" + }, + { + "id": "UL1_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "UL1_2" + }, + { + "id": "UL1_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL1_2" + }, + { + "id": "UL1_2_SS1_SPB", + "svg": "start_stop", + "zone": "UL1_2" + }, + { + "id": "UL1_2_SS1_STPB", + "svg": "start_stop", + "zone": "UL1_2" + }, + { + "id": "UL1_2_SS2_SPB", + "svg": "start_stop", + "zone": "UL1_2" + }, + { + "id": "UL1_2_SS2_STPB", + "svg": "start_stop", + "zone": "UL1_2" + }, + { + "id": "UL1_2_TPE1", + "svg": "photoeye", + "zone": "UL1_2" + }, + { + "id": "UL1_2_TPE2", + "svg": "photoeye", + "zone": "UL1_2" + }, + { + "id": "UL1_2_VFD", + "svg": "conveyor", + "zone": "UL1_2" + }, + { + "id": "UL1_3_TPE1", + "svg": "photoeye", + "zone": "UL1_3" + }, + { + "id": "UL1_3_VFD", + "svg": "conveyor", + "zone": "UL1_3" + }, + { + "id": "UL1_4_TPE1", + "svg": "photoeye", + "zone": "UL1_4" + }, + { + "id": "UL1_4_VFD", + "svg": "conveyor", + "zone": "UL1_4" + }, + { + "id": "UL1_5_BCN1", + "svg": "beacon", + "zone": "UL1_5" + }, + { + "id": "UL1_5_BCN2", + "svg": "beacon", + "zone": "UL1_5" + }, + { + "id": "UL1_5_EPC1", + "svg": "epc", + "zone": "UL1_5" + }, + { + "id": "UL1_5_EPC2", + "svg": "epc", + "zone": "UL1_5" + }, + { + "id": "UL1_5_S1_PB", + "svg": "start", + "zone": "UL1_5" + }, + { + "id": "UL1_5_S2_PB", + "svg": "start", + "zone": "UL1_5" + }, + { + "id": "UL1_5_TPE1", + "svg": "photoeye", + "zone": "UL1_5" + }, + { + "id": "UL1_5_VFD", + "svg": "conveyor", + "zone": "UL1_5" + }, + { + "id": "UL1_6_LPE1", + "svg": "photoeye", + "zone": "UL1_6" + }, + { + "id": "UL1_6_LPE2", + "svg": "photoeye", + "zone": "UL1_6" + }, + { + "id": "UL1_6_TPE1", + "svg": "photoeye", + "zone": "UL1_6" + }, + { + "id": "UL1_6_VFD", + "svg": "conveyor", + "zone": "UL1_6" + }, + { + "id": "UL1_7_TPE1", + "svg": "photoeye", + "zone": "UL1_7" + }, + { + "id": "UL1_7_VFD", + "svg": "conveyor", + "zone": "UL1_7" + }, + { + "id": "UL1_8_TPE1", + "svg": "photoeye", + "zone": "UL1_8" + }, + { + "id": "UL1_8_VFD", + "svg": "conveyor", + "zone": "UL1_8" + }, + { + "id": "UL1_9_TPE1", + "svg": "photoeye", + "zone": "UL1_9" + }, + { + "id": "UL1_9_VFD", + "svg": "conveyor", + "zone": "UL1_9" + }, + { + "id": "UL2_2_BCN1", + "svg": "beacon", + "zone": "UL2_2" + }, + { + "id": "UL2_2_BCN2", + "svg": "beacon", + "zone": "UL2_2" + }, + { + "id": "UL2_2_EPC1", + "svg": "epc", + "zone": "UL2_2" + }, + { + "id": "UL2_2_EPC2", + "svg": "epc", + "zone": "UL2_2" + }, + { + "id": "UL2_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "UL2_2" + }, + { + "id": "UL2_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL2_2" + }, + { + "id": "UL2_2_SS1_SPB", + "svg": "start_stop", + "zone": "UL2_2" + }, + { + "id": "UL2_2_SS1_STPB", + "svg": "start_stop", + "zone": "UL2_2" + }, + { + "id": "UL2_2_SS2_SPB", + "svg": "start_stop", + "zone": "UL2_2" + }, + { + "id": "UL2_2_SS2_STPB", + "svg": "start_stop", + "zone": "UL2_2" + }, + { + "id": "UL2_2_TPE1", + "svg": "photoeye", + "zone": "UL2_2" + }, + { + "id": "UL2_2_TPE2", + "svg": "photoeye", + "zone": "UL2_2" + }, + { + "id": "UL2_2_VFD", + "svg": "conveyor", + "zone": "UL2_2" + }, + { + "id": "UL2_3_BCN1", + "svg": "beacon", + "zone": "UL2_3" + }, + { + "id": "UL2_3_BCN2", + "svg": "beacon", + "zone": "UL2_3" + }, + { + "id": "UL2_3_EPC1", + "svg": "epc", + "zone": "UL2_3" + }, + { + "id": "UL2_3_EPC2", + "svg": "epc", + "zone": "UL2_3" + }, + { + "id": "UL2_3_S1_PB", + "svg": "start", + "zone": "UL2_3" + }, + { + "id": "UL2_3_S2_PB", + "svg": "start", + "zone": "UL2_3" + }, + { + "id": "UL2_3_TPE1", + "svg": "photoeye", + "zone": "UL2_3" + }, + { + "id": "UL2_3_VFD", + "svg": "conveyor", + "zone": "UL2_3" + }, + { + "id": "UL2_4_TPE1", + "svg": "photoeye", + "zone": "UL2_4" + }, + { + "id": "UL2_4_VFD", + "svg": "conveyor", + "zone": "UL2_4" + }, + { + "id": "UL2_5_LPE1", + "svg": "photoeye", + "zone": "UL2_5" + }, + { + "id": "UL2_5_LPE2", + "svg": "photoeye", + "zone": "UL2_5" + }, + { + "id": "UL2_5_TPE1", + "svg": "photoeye", + "zone": "UL2_5" + }, + { + "id": "UL2_5_VFD", + "svg": "conveyor", + "zone": "UL2_5" + }, + { + "id": "UL2_6_TPE1", + "svg": "photoeye", + "zone": "UL2_6" + }, + { + "id": "UL2_6_VFD", + "svg": "conveyor", + "zone": "UL2_6" + }, + { + "id": "UL2_7_TPE1", + "svg": "photoeye", + "zone": "UL2_7" + }, + { + "id": "UL2_7_VFD", + "svg": "conveyor", + "zone": "UL2_7" + }, + { + "id": "UL2_8_TPE1", + "svg": "photoeye", + "zone": "UL2_8" + }, + { + "id": "UL2_8_VFD", + "svg": "conveyor", + "zone": "UL2_8" + }, + { + "id": "UL2_9_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL2_9" + }, + { + "id": "UL2_9_VFD", + "svg": "conveyor", + "zone": "UL2_9" + }, + { + "id": "UL3_1_BCN1", + "svg": "beacon", + "zone": "UL3_1" + }, + { + "id": "UL3_1_BCN2", + "svg": "beacon", + "zone": "UL3_1" + }, + { + "id": "UL3_1_EPC1", + "svg": "epc", + "zone": "UL3_1" + }, + { + "id": "UL3_1_EPC2", + "svg": "epc", + "zone": "UL3_1" + }, + { + "id": "UL3_1_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL3_1" + }, + { + "id": "UL3_1_SS1_SPB", + "svg": "start_stop", + "zone": "UL3_1" + }, + { + "id": "UL3_1_SS1_STPB", + "svg": "start_stop", + "zone": "UL3_1" + }, + { + "id": "UL3_1_SS2_SPB", + "svg": "start_stop", + "zone": "UL3_1" + }, + { + "id": "UL3_1_SS2_STPB", + "svg": "start_stop", + "zone": "UL3_1" + }, + { + "id": "UL3_1_TPE1", + "svg": "photoeye", + "zone": "UL3_1" + }, + { + "id": "UL3_1_VFD", + "svg": "conveyor", + "zone": "UL3_1" + }, + { + "id": "UL3_10_TPE1", + "svg": "photoeye", + "zone": "UL3_10" + }, + { + "id": "UL3_10_TPE2", + "svg": "photoeye", + "zone": "UL3_10" + }, + { + "id": "UL3_10_VFD", + "svg": "conveyor", + "zone": "UL3_10" + }, + { + "id": "UL3_11_BCN1", + "svg": "beacon", + "zone": "UL3_11" + }, + { + "id": "UL3_11_JR1_PB", + "svg": "jam_reset", + "zone": "UL3_11" + }, + { + "id": "UL3_11_JR2_PB", + "svg": "jam_reset", + "zone": "UL3_11" + }, + { + "id": "UL3_11_TPE1", + "svg": "photoeye", + "zone": "UL3_11" + }, + { + "id": "UL3_11_VFD", + "svg": "conveyor", + "zone": "UL3_11" + }, + { + "id": "UL3_12_TPE1", + "svg": "photoeye", + "zone": "UL3_12" + }, + { + "id": "UL3_12_VFD", + "svg": "conveyor", + "zone": "UL3_12" + }, + { + "id": "UL3_13_BCN1", + "svg": "beacon", + "zone": "UL3_13" + }, + { + "id": "UL3_13_DPM1", + "svg": "dpm", + "zone": "UL3_13" + }, + { + "id": "UL3_13_JR1_PB", + "svg": "jam_reset", + "zone": "UL3_13" + }, + { + "id": "UL3_13_JR2_PB", + "svg": "jam_reset", + "zone": "UL3_13" + }, + { + "id": "UL3_13_TPE1", + "svg": "photoeye", + "zone": "UL3_13" + }, + { + "id": "UL3_13_VFD", + "svg": "conveyor", + "zone": "UL3_13" + }, + { + "id": "UL3_14_TPE1", + "svg": "photoeye", + "zone": "UL3_14" + }, + { + "id": "UL3_15_BCN1", + "svg": "beacon", + "zone": "UL3_15" + }, + { + "id": "UL3_15_BCN2", + "svg": "beacon", + "zone": "UL3_15" + }, + { + "id": "UL3_15_EPC1", + "svg": "epc", + "zone": "UL3_15" + }, + { + "id": "UL3_15_EPC2", + "svg": "epc", + "zone": "UL3_15" + }, + { + "id": "UL3_15_LPE1", + "svg": "photoeye", + "zone": "UL3_15" + }, + { + "id": "UL3_15_SS1_SPB", + "svg": "start_stop", + "zone": "UL3_15" + }, + { + "id": "UL3_15_SS1_STPB", + "svg": "start_stop", + "zone": "UL3_15" + }, + { + "id": "UL3_15_SS2_SPB", + "svg": "start_stop", + "zone": "UL3_15" + }, + { + "id": "UL3_15_SS2_STPB", + "svg": "start_stop", + "zone": "UL3_15" + }, + { + "id": "UL3_15_TPE1", + "svg": "photoeye", + "zone": "UL3_15" + }, + { + "id": "UL3_15_TPE2", + "svg": "photoeye", + "zone": "UL3_15" + }, + { + "id": "UL3_15_VFD", + "svg": "conveyor", + "zone": "UL3_15" + }, + { + "id": "UL3_16_TPE1", + "svg": "photoeye", + "zone": "UL3_16" + }, + { + "id": "UL3_16_VFD", + "svg": "conveyor", + "zone": "UL3_16" + }, + { + "id": "UL3_17_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL3_17" + }, + { + "id": "UL3_18_TPE1", + "svg": "photoeye", + "zone": "UL3_18" + }, + { + "id": "UL3_18_VFD", + "svg": "conveyor", + "zone": "UL3_18" + }, + { + "id": "UL3_2_TPE1", + "svg": "photoeye", + "zone": "UL3_2" + }, + { + "id": "UL3_2_VFD", + "svg": "conveyor", + "zone": "UL3_2" + }, + { + "id": "UL3_3_TPE1", + "svg": "photoeye", + "zone": "UL3_3" + }, + { + "id": "UL3_3_VFD", + "svg": "conveyor", + "zone": "UL3_3" + }, + { + "id": "UL3_30_BCN1", + "svg": "beacon", + "zone": "UL3_30" + }, + { + "id": "UL3_30_BCN2", + "svg": "beacon", + "zone": "UL3_30" + }, + { + "id": "UL3_30_EPC1", + "svg": "epc", + "zone": "UL3_30" + }, + { + "id": "UL3_30_EPC2", + "svg": "epc", + "zone": "UL3_30" + }, + { + "id": "UL3_30_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL3_30" + }, + { + "id": "UL3_30_S1_PB", + "svg": "start", + "zone": "UL3_30" + }, + { + "id": "UL3_30_S2_PB", + "svg": "start", + "zone": "UL3_30" + }, + { + "id": "UL3_30_TPE1", + "svg": "photoeye", + "zone": "UL3_30" + }, + { + "id": "UL3_30_VFD", + "svg": "conveyor", + "zone": "UL3_30" + }, + { + "id": "UL3_31_TPE1", + "svg": "photoeye", + "zone": "UL3_31" + }, + { + "id": "UL3_4_TPE1", + "svg": "photoeye", + "zone": "UL3_4" + }, + { + "id": "UL3_4_VFD", + "svg": "conveyor", + "zone": "UL3_4" + }, + { + "id": "UL3_5_TPE1", + "svg": "photoeye", + "zone": "UL3_5" + }, + { + "id": "UL3_5_VFD", + "svg": "conveyor", + "zone": "UL3_5" + }, + { + "id": "UL3_6_TPE1", + "svg": "photoeye", + "zone": "UL3_6" + }, + { + "id": "UL3_6_VFD", + "svg": "conveyor", + "zone": "UL3_6" + }, + { + "id": "UL3_7_TPE1", + "svg": "photoeye", + "zone": "UL3_7" + }, + { + "id": "UL3_7_VFD", + "svg": "conveyor", + "zone": "UL3_7" + }, + { + "id": "UL3_8_BCN1", + "svg": "beacon", + "zone": "UL3_8" + }, + { + "id": "UL3_8_BCN2", + "svg": "beacon", + "zone": "UL3_8" + }, + { + "id": "UL3_8_DPM1", + "svg": "dpm", + "zone": "UL3_8" + }, + { + "id": "UL3_8_DPM2", + "svg": "dpm", + "zone": "UL3_8" + }, + { + "id": "UL3_8_EPC1", + "svg": "epc", + "zone": "UL3_8" + }, + { + "id": "UL3_8_EPC2", + "svg": "epc", + "zone": "UL3_8" + }, + { + "id": "UL3_8_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL3_8" + }, + { + "id": "UL3_8_S1_PB", + "svg": "start", + "zone": "UL3_8" + }, + { + "id": "UL3_8_S2_PB", + "svg": "start", + "zone": "UL3_8" + }, + { + "id": "UL3_8_TPE1", + "svg": "photoeye", + "zone": "UL3_8" + }, + { + "id": "UL3_8_TPE2", + "svg": "photoeye", + "zone": "UL3_8" + }, + { + "id": "UL3_8_TPE3", + "svg": "photoeye", + "zone": "UL3_8" + }, + { + "id": "UL3_8_TPE4", + "svg": "photoeye", + "zone": "UL3_8" + }, + { + "id": "UL3_8_TPE5", + "svg": "photoeye", + "zone": "UL3_8" + }, + { + "id": "UL3_8_VFD", + "svg": "conveyor", + "zone": "UL3_8" + }, + { + "id": "UL3_9_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL3_9" + }, + { + "id": "UL3_9A_VFD", + "svg": "conveyor", + "zone": "UL3_9A" + }, + { + "id": "UL3_9B_VFD", + "svg": "conveyor", + "zone": "UL3_9B" + }, + { + "id": "UL4_10_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL4_10" + }, + { + "id": "UL4_10_VFD", + "svg": "conveyor", + "zone": "UL4_10" + }, + { + "id": "UL4_2_BCN1", + "svg": "beacon", + "zone": "UL4_2" + }, + { + "id": "UL4_2_BCN2", + "svg": "beacon", + "zone": "UL4_2" + }, + { + "id": "UL4_2_EPC1", + "svg": "epc", + "zone": "UL4_2" + }, + { + "id": "UL4_2_EPC2", + "svg": "epc", + "zone": "UL4_2" + }, + { + "id": "UL4_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "UL4_2" + }, + { + "id": "UL4_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL4_2" + }, + { + "id": "UL4_2_SS1_SPB", + "svg": "start_stop", + "zone": "UL4_2" + }, + { + "id": "UL4_2_SS1_STPB", + "svg": "start_stop", + "zone": "UL4_2" + }, + { + "id": "UL4_2_SS2_SPB", + "svg": "start_stop", + "zone": "UL4_2" + }, + { + "id": "UL4_2_SS2_STPB", + "svg": "start_stop", + "zone": "UL4_2" + }, + { + "id": "UL4_2_TPE1", + "svg": "photoeye", + "zone": "UL4_2" + }, + { + "id": "UL4_2_TPE2", + "svg": "photoeye", + "zone": "UL4_2" + }, + { + "id": "UL4_2_VFD", + "svg": "conveyor", + "zone": "UL4_2" + }, + { + "id": "UL4_3_TPE1", + "svg": "photoeye", + "zone": "UL4_3" + }, + { + "id": "UL4_3_VFD", + "svg": "conveyor", + "zone": "UL4_3" + }, + { + "id": "UL4_4_TPE1", + "svg": "photoeye", + "zone": "UL4_4" + }, + { + "id": "UL4_4_VFD", + "svg": "conveyor", + "zone": "UL4_4" + }, + { + "id": "UL4_5_BCN1", + "svg": "beacon", + "zone": "UL4_5" + }, + { + "id": "UL4_5_BCN2", + "svg": "beacon", + "zone": "UL4_5" + }, + { + "id": "UL4_5_EPC1", + "svg": "epc", + "zone": "UL4_5" + }, + { + "id": "UL4_5_EPC2", + "svg": "epc", + "zone": "UL4_5" + }, + { + "id": "UL4_5_S1_PB", + "svg": "start", + "zone": "UL4_5" + }, + { + "id": "UL4_5_S2_PB", + "svg": "start", + "zone": "UL4_5" + }, + { + "id": "UL4_5_TPE1", + "svg": "photoeye", + "zone": "UL4_5" + }, + { + "id": "UL4_5_VFD", + "svg": "conveyor", + "zone": "UL4_5" + }, + { + "id": "UL4_6_LPE1", + "svg": "photoeye", + "zone": "UL4_6" + }, + { + "id": "UL4_6_LPE2", + "svg": "photoeye", + "zone": "UL4_6" + }, + { + "id": "UL4_6_TPE1", + "svg": "photoeye", + "zone": "UL4_6" + }, + { + "id": "UL4_6_VFD", + "svg": "conveyor", + "zone": "UL4_6" + }, + { + "id": "UL4_7_TPE1", + "svg": "photoeye", + "zone": "UL4_7" + }, + { + "id": "UL4_7_VFD", + "svg": "conveyor", + "zone": "UL4_7" + }, + { + "id": "UL4_8_TPE1", + "svg": "photoeye", + "zone": "UL4_8" + }, + { + "id": "UL4_8_VFD", + "svg": "conveyor", + "zone": "UL4_8" + }, + { + "id": "UL4_9_TPE1", + "svg": "photoeye", + "zone": "UL4_9" + }, + { + "id": "UL4_9_VFD", + "svg": "conveyor", + "zone": "UL4_9" + }, + { + "id": "UL5_2_BCN1", + "svg": "beacon", + "zone": "UL5_2" + }, + { + "id": "UL5_2_BCN2", + "svg": "beacon", + "zone": "UL5_2" + }, + { + "id": "UL5_2_EPC1", + "svg": "epc", + "zone": "UL5_2" + }, + { + "id": "UL5_2_EPC2", + "svg": "epc", + "zone": "UL5_2" + }, + { + "id": "UL5_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "UL5_2" + }, + { + "id": "UL5_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL5_2" + }, + { + "id": "UL5_2_SS1_SPB", + "svg": "start_stop", + "zone": "UL5_2" + }, + { + "id": "UL5_2_SS1_STPB", + "svg": "start_stop", + "zone": "UL5_2" + }, + { + "id": "UL5_2_SS2_SPB", + "svg": "start_stop", + "zone": "UL5_2" + }, + { + "id": "UL5_2_SS2_STPB", + "svg": "start_stop", + "zone": "UL5_2" + }, + { + "id": "UL5_2_TPE1", + "svg": "photoeye", + "zone": "UL5_2" + }, + { + "id": "UL5_2_TPE2", + "svg": "photoeye", + "zone": "UL5_2" + }, + { + "id": "UL5_2_VFD", + "svg": "conveyor", + "zone": "UL5_2" + }, + { + "id": "UL5_3_BCN1", + "svg": "beacon", + "zone": "UL5_3" + }, + { + "id": "UL5_3_BCN2", + "svg": "beacon", + "zone": "UL5_3" + }, + { + "id": "UL5_3_EPC1", + "svg": "epc", + "zone": "UL5_3" + }, + { + "id": "UL5_3_EPC2", + "svg": "epc", + "zone": "UL5_3" + }, + { + "id": "UL5_3_S1_PB", + "svg": "start", + "zone": "UL5_3" + }, + { + "id": "UL5_3_S2_PB", + "svg": "start", + "zone": "UL5_3" + }, + { + "id": "UL5_3_TPE1", + "svg": "photoeye", + "zone": "UL5_3" + }, + { + "id": "UL5_3_VFD", + "svg": "conveyor", + "zone": "UL5_3" + }, + { + "id": "UL5_4_TPE1", + "svg": "photoeye", + "zone": "UL5_4" + }, + { + "id": "UL5_4_VFD", + "svg": "conveyor", + "zone": "UL5_4" + }, + { + "id": "UL5_5_LPE1", + "svg": "photoeye", + "zone": "UL5_5" + }, + { + "id": "UL5_5_LPE2", + "svg": "photoeye", + "zone": "UL5_5" + }, + { + "id": "UL5_5_TPE1", + "svg": "photoeye", + "zone": "UL5_5" + }, + { + "id": "UL5_5_VFD", + "svg": "conveyor", + "zone": "UL5_5" + }, + { + "id": "UL5_6_TPE1", + "svg": "photoeye", + "zone": "UL5_6" + }, + { + "id": "UL5_6_VFD", + "svg": "conveyor", + "zone": "UL5_6" + }, + { + "id": "UL5_7_TPE1", + "svg": "photoeye", + "zone": "UL5_7" + }, + { + "id": "UL5_7_VFD", + "svg": "conveyor", + "zone": "UL5_7" + }, + { + "id": "UL5_8_TPE1", + "svg": "photoeye", + "zone": "UL5_8" + }, + { + "id": "UL5_8_VFD", + "svg": "conveyor", + "zone": "UL5_8" + }, + { + "id": "UL5_9_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL5_9" + }, + { + "id": "UL5_9_VFD", + "svg": "conveyor", + "zone": "UL5_9" + }, + { + "id": "UL6_1_BCN1", + "svg": "beacon", + "zone": "UL6_1" + }, + { + "id": "UL6_1_BCN2", + "svg": "beacon", + "zone": "UL6_1" + }, + { + "id": "UL6_1_EPC1", + "svg": "epc", + "zone": "UL6_1" + }, + { + "id": "UL6_1_EPC2", + "svg": "epc", + "zone": "UL6_1" + }, + { + "id": "UL6_1_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL6_1" + }, + { + "id": "UL6_1_SS1_SPB", + "svg": "start_stop", + "zone": "UL6_1" + }, + { + "id": "UL6_1_SS1_STPB", + "svg": "start_stop", + "zone": "UL6_1" + }, + { + "id": "UL6_1_SS2_SPB", + "svg": "start_stop", + "zone": "UL6_1" + }, + { + "id": "UL6_1_SS2_STPB", + "svg": "start_stop", + "zone": "UL6_1" + }, + { + "id": "UL6_1_TPE1", + "svg": "photoeye", + "zone": "UL6_1" + }, + { + "id": "UL6_1_VFD", + "svg": "conveyor", + "zone": "UL6_1" + }, + { + "id": "UL6_10_TPE1", + "svg": "photoeye", + "zone": "UL6_10" + }, + { + "id": "UL6_10_TPE2", + "svg": "photoeye", + "zone": "UL6_10" + }, + { + "id": "UL6_10_VFD", + "svg": "conveyor", + "zone": "UL6_10" + }, + { + "id": "UL6_11_BCN1", + "svg": "beacon", + "zone": "UL6_11" + }, + { + "id": "UL6_11_JR1_PB", + "svg": "jam_reset", + "zone": "UL6_11" + }, + { + "id": "UL6_11_JR2_PB", + "svg": "jam_reset", + "zone": "UL6_11" + }, + { + "id": "UL6_11_TPE1", + "svg": "photoeye", + "zone": "UL6_11" + }, + { + "id": "UL6_11_VFD", + "svg": "conveyor", + "zone": "UL6_11" + }, + { + "id": "UL6_12_TPE1", + "svg": "photoeye", + "zone": "UL6_12" + }, + { + "id": "UL6_12_VFD", + "svg": "conveyor", + "zone": "UL6_12" + }, + { + "id": "UL6_13_BCN1", + "svg": "beacon", + "zone": "UL6_13" + }, + { + "id": "UL6_13_DPM1", + "svg": "dpm", + "zone": "UL6_13" + }, + { + "id": "UL6_13_JR1_PB", + "svg": "jam_reset", + "zone": "UL6_13" + }, + { + "id": "UL6_13_JR2_PB", + "svg": "jam_reset", + "zone": "UL6_13" + }, + { + "id": "UL6_13_TPE1", + "svg": "photoeye", + "zone": "UL6_13" + }, + { + "id": "UL6_13_VFD", + "svg": "conveyor", + "zone": "UL6_13" + }, + { + "id": "UL6_14_TPE1", + "svg": "photoeye", + "zone": "UL6_14" + }, + { + "id": "UL6_15_BCN1", + "svg": "beacon", + "zone": "UL6_15" + }, + { + "id": "UL6_15_EPC1", + "svg": "epc", + "zone": "UL6_15" + }, + { + "id": "UL6_15_EPC2", + "svg": "epc", + "zone": "UL6_15" + }, + { + "id": "UL6_15_LPE1", + "svg": "photoeye", + "zone": "UL6_15" + }, + { + "id": "UL6_15_SS1_SPB", + "svg": "start_stop", + "zone": "UL6_15" + }, + { + "id": "UL6_15_SS1_STPB", + "svg": "start_stop", + "zone": "UL6_15" + }, + { + "id": "UL6_15_SS2_SPB", + "svg": "start_stop", + "zone": "UL6_15" + }, + { + "id": "UL6_15_SS2_STPB", + "svg": "start_stop", + "zone": "UL6_15" + }, + { + "id": "UL6_15_TPE1", + "svg": "photoeye", + "zone": "UL6_15" + }, + { + "id": "UL6_15_TPE2", + "svg": "photoeye", + "zone": "UL6_15" + }, + { + "id": "UL6_15_VFD", + "svg": "conveyor", + "zone": "UL6_15" + }, + { + "id": "UL6_16_BCN2", + "svg": "beacon", + "zone": "UL6_16" + }, + { + "id": "UL6_16_TPE1", + "svg": "photoeye", + "zone": "UL6_16" + }, + { + "id": "UL6_16_VFD", + "svg": "conveyor", + "zone": "UL6_16" + }, + { + "id": "UL6_17_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL6_17" + }, + { + "id": "UL6_18_TPE1", + "svg": "photoeye", + "zone": "UL6_18" + }, + { + "id": "UL6_18_VFD", + "svg": "conveyor", + "zone": "UL6_18" + }, + { + "id": "UL6_2_TPE1", + "svg": "photoeye", + "zone": "UL6_2" + }, + { + "id": "UL6_2_VFD", + "svg": "conveyor", + "zone": "UL6_2" + }, + { + "id": "UL6_3_TPE1", + "svg": "photoeye", + "zone": "UL6_3" + }, + { + "id": "UL6_3_VFD", + "svg": "conveyor", + "zone": "UL6_3" + }, + { + "id": "UL6_30_BCN1", + "svg": "beacon", + "zone": "UL6_30" + }, + { + "id": "UL6_30_BCN2", + "svg": "beacon", + "zone": "UL6_30" + }, + { + "id": "UL6_30_EPC1", + "svg": "epc", + "zone": "UL6_30" + }, + { + "id": "UL6_30_EPC2", + "svg": "epc", + "zone": "UL6_30" + }, + { + "id": "UL6_30_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL6_30" + }, + { + "id": "UL6_30_S1_PB", + "svg": "start", + "zone": "UL6_30" + }, + { + "id": "UL6_30_S2_PB", + "svg": "start", + "zone": "UL6_30" + }, + { + "id": "UL6_30_TPE1", + "svg": "photoeye", + "zone": "UL6_30" + }, + { + "id": "UL6_30_VFD", + "svg": "conveyor", + "zone": "UL6_30" + }, + { + "id": "UL6_31_TPE1", + "svg": "photoeye", + "zone": "UL6_31" + }, + { + "id": "UL6_4_TPE1", + "svg": "photoeye", + "zone": "UL6_4" + }, + { + "id": "UL6_4_VFD", + "svg": "conveyor", + "zone": "UL6_4" + }, + { + "id": "UL6_5_TPE1", + "svg": "photoeye", + "zone": "UL6_5" + }, + { + "id": "UL6_5_VFD", + "svg": "conveyor", + "zone": "UL6_5" + }, + { + "id": "UL6_6_TPE1", + "svg": "photoeye", + "zone": "UL6_6" + }, + { + "id": "UL6_6_VFD", + "svg": "conveyor", + "zone": "UL6_6" + }, + { + "id": "UL6_7_TPE1", + "svg": "photoeye", + "zone": "UL6_7" + }, + { + "id": "UL6_7_VFD", + "svg": "conveyor", + "zone": "UL6_7" + }, + { + "id": "UL6_8_BCN1", + "svg": "beacon", + "zone": "UL6_8" + }, + { + "id": "UL6_8_BCN2", + "svg": "beacon", + "zone": "UL6_8" + }, + { + "id": "UL6_8_DPM1", + "svg": "dpm", + "zone": "UL6_8" + }, + { + "id": "UL6_8_DPM2", + "svg": "dpm", + "zone": "UL6_8" + }, + { + "id": "UL6_8_EPC1", + "svg": "epc", + "zone": "UL6_8" + }, + { + "id": "UL6_8_EPC2", + "svg": "epc", + "zone": "UL6_8" + }, + { + "id": "UL6_8_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL6_8" + }, + { + "id": "UL6_8_S1_PB", + "svg": "start", + "zone": "UL6_8" + }, + { + "id": "UL6_8_S2_PB", + "svg": "start", + "zone": "UL6_8" + }, + { + "id": "UL6_8_TPE1", + "svg": "photoeye", + "zone": "UL6_8" + }, + { + "id": "UL6_8_TPE2", + "svg": "photoeye", + "zone": "UL6_8" + }, + { + "id": "UL6_8_TPE3", + "svg": "photoeye", + "zone": "UL6_8" + }, + { + "id": "UL6_8_TPE4", + "svg": "photoeye", + "zone": "UL6_8" + }, + { + "id": "UL6_8_TPE5", + "svg": "photoeye", + "zone": "UL6_8" + }, + { + "id": "UL6_8_VFD", + "svg": "conveyor", + "zone": "UL6_8" + }, + { + "id": "UL6_9A_VFD", + "svg": "conveyor", + "zone": "UL6_9A" + }, + { + "id": "UL6_9B_VFD", + "svg": "conveyor", + "zone": "UL6_9B" + } + ], + "MCM06": [ + { + "id": "PDP10", + "svg": "pdp", + "zone": "PDP10" + }, + { + "id": "PDP10_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP10" + }, + { + "id": "PDP10_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP10" + }, + { + "id": "UL10_2_BCN1", + "svg": "beacon", + "zone": "UL10_2" + }, + { + "id": "UL10_2_BCN2", + "svg": "beacon", + "zone": "UL10_2" + }, + { + "id": "UL10_2_EPC1", + "svg": "epc", + "zone": "UL10_2" + }, + { + "id": "UL10_2_EPC2", + "svg": "epc", + "zone": "UL10_2" + }, + { + "id": "UL10_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "UL10_2" + }, + { + "id": "UL10_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL10_2" + }, + { + "id": "UL10_2_SS1_SPB", + "svg": "start_stop", + "zone": "UL10_2" + }, + { + "id": "UL10_2_SS1_STPB", + "svg": "start_stop", + "zone": "UL10_2" + }, + { + "id": "UL10_2_SS2_SPB", + "svg": "start_stop", + "zone": "UL10_2" + }, + { + "id": "UL10_2_SS2_STPB", + "svg": "start_stop", + "zone": "UL10_2" + }, + { + "id": "UL10_2_TPE1", + "svg": "photoeye", + "zone": "UL10_2" + }, + { + "id": "UL10_2_TPE2", + "svg": "photoeye", + "zone": "UL10_2" + }, + { + "id": "UL10_2_VFD", + "svg": "conveyor", + "zone": "UL10_2" + }, + { + "id": "UL10_3_BCN1", + "svg": "beacon", + "zone": "UL10_3" + }, + { + "id": "UL10_3_BCN2", + "svg": "beacon", + "zone": "UL10_3" + }, + { + "id": "UL10_3_EPC1", + "svg": "epc", + "zone": "UL10_3" + }, + { + "id": "UL10_3_EPC2", + "svg": "epc", + "zone": "UL10_3" + }, + { + "id": "UL10_3_S1_PB", + "svg": "start", + "zone": "UL10_3" + }, + { + "id": "UL10_3_S2_PB", + "svg": "start", + "zone": "UL10_3" + }, + { + "id": "UL10_3_TPE1", + "svg": "photoeye", + "zone": "UL10_3" + }, + { + "id": "UL10_3_VFD", + "svg": "conveyor", + "zone": "UL10_3" + }, + { + "id": "UL10_4_TPE1", + "svg": "photoeye", + "zone": "UL10_4" + }, + { + "id": "UL10_4_VFD", + "svg": "conveyor", + "zone": "UL10_4" + }, + { + "id": "UL10_5_LPE1", + "svg": "photoeye", + "zone": "UL10_5" + }, + { + "id": "UL10_5_LPE2", + "svg": "photoeye", + "zone": "UL10_5" + }, + { + "id": "UL10_5_TPE1", + "svg": "photoeye", + "zone": "UL10_5" + }, + { + "id": "UL10_5_VFD", + "svg": "conveyor", + "zone": "UL10_5" + }, + { + "id": "UL10_6_TPE1", + "svg": "photoeye", + "zone": "UL10_6" + }, + { + "id": "UL10_6_VFD", + "svg": "conveyor", + "zone": "UL10_6" + }, + { + "id": "UL10_7_TPE1", + "svg": "photoeye", + "zone": "UL10_7" + }, + { + "id": "UL10_7_VFD", + "svg": "conveyor", + "zone": "UL10_7" + }, + { + "id": "UL10_8_TPE1", + "svg": "photoeye", + "zone": "UL10_8" + }, + { + "id": "UL10_8_VFD", + "svg": "conveyor", + "zone": "UL10_8" + }, + { + "id": "UL10_9_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL10_9" + }, + { + "id": "UL10_9_VFD", + "svg": "conveyor", + "zone": "UL10_9" + }, + { + "id": "UL11_1_BCN1", + "svg": "beacon", + "zone": "UL11_1" + }, + { + "id": "UL11_1_EPC1", + "svg": "epc", + "zone": "UL11_1" + }, + { + "id": "UL11_1_EPC2", + "svg": "epc", + "zone": "UL11_1" + }, + { + "id": "UL11_1_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL11_1" + }, + { + "id": "UL11_1_SS1_SPB", + "svg": "start_stop", + "zone": "UL11_1" + }, + { + "id": "UL11_1_SS1_STPB", + "svg": "start_stop", + "zone": "UL11_1" + }, + { + "id": "UL11_1_SS2_SPB", + "svg": "start_stop", + "zone": "UL11_1" + }, + { + "id": "UL11_1_SS2_STPB", + "svg": "start_stop", + "zone": "UL11_1" + }, + { + "id": "UL11_1_TPE1", + "svg": "photoeye", + "zone": "UL11_1" + }, + { + "id": "UL11_1_VFD", + "svg": "conveyor", + "zone": "UL11_1" + }, + { + "id": "UL11_10_TPE1", + "svg": "photoeye", + "zone": "UL11_10" + }, + { + "id": "UL11_10_TPE2", + "svg": "photoeye", + "zone": "UL11_10" + }, + { + "id": "UL11_10_VFD", + "svg": "conveyor", + "zone": "UL11_10" + }, + { + "id": "UL11_11_BCN1", + "svg": "beacon", + "zone": "UL11_11" + }, + { + "id": "UL11_11_JR1_PB", + "svg": "jam_reset", + "zone": "UL11_11" + }, + { + "id": "UL11_11_JR2_PB", + "svg": "jam_reset", + "zone": "UL11_11" + }, + { + "id": "UL11_11_TPE1", + "svg": "photoeye", + "zone": "UL11_11" + }, + { + "id": "UL11_11_VFD", + "svg": "conveyor", + "zone": "UL11_11" + }, + { + "id": "UL11_12_TPE1", + "svg": "photoeye", + "zone": "UL11_12" + }, + { + "id": "UL11_12_VFD", + "svg": "conveyor", + "zone": "UL11_12" + }, + { + "id": "UL11_13_BCN1", + "svg": "beacon", + "zone": "UL11_13" + }, + { + "id": "UL11_13_DPM1", + "svg": "dpm", + "zone": "UL11_13" + }, + { + "id": "UL11_13_JR1_PB", + "svg": "jam_reset", + "zone": "UL11_13" + }, + { + "id": "UL11_13_JR2_PB", + "svg": "jam_reset", + "zone": "UL11_13" + }, + { + "id": "UL11_13_TPE1", + "svg": "photoeye", + "zone": "UL11_13" + }, + { + "id": "UL11_13_VFD", + "svg": "conveyor", + "zone": "UL11_13" + }, + { + "id": "UL11_14_TPE1", + "svg": "photoeye", + "zone": "UL11_14" + }, + { + "id": "UL11_15_BCN1", + "svg": "beacon", + "zone": "UL11_15" + }, + { + "id": "UL11_15_BCN2", + "svg": "beacon", + "zone": "UL11_15" + }, + { + "id": "UL11_15_EPC1", + "svg": "epc", + "zone": "UL11_15" + }, + { + "id": "UL11_15_EPC2", + "svg": "epc", + "zone": "UL11_15" + }, + { + "id": "UL11_15_LPE1", + "svg": "photoeye", + "zone": "UL11_15" + }, + { + "id": "UL11_15_SS1_SPB", + "svg": "start_stop", + "zone": "UL11_15" + }, + { + "id": "UL11_15_SS1_STPB", + "svg": "start_stop", + "zone": "UL11_15" + }, + { + "id": "UL11_15_SS2_SPB", + "svg": "start_stop", + "zone": "UL11_15" + }, + { + "id": "UL11_15_SS2_STPB", + "svg": "start_stop", + "zone": "UL11_15" + }, + { + "id": "UL11_15_TPE1", + "svg": "photoeye", + "zone": "UL11_15" + }, + { + "id": "UL11_15_TPE2", + "svg": "photoeye", + "zone": "UL11_15" + }, + { + "id": "UL11_15_VFD", + "svg": "conveyor", + "zone": "UL11_15" + }, + { + "id": "UL11_16_TPE1", + "svg": "photoeye", + "zone": "UL11_16" + }, + { + "id": "UL11_16_VFD", + "svg": "conveyor", + "zone": "UL11_16" + }, + { + "id": "UL11_17_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL11_17" + }, + { + "id": "UL11_18_TPE1", + "svg": "photoeye", + "zone": "UL11_18" + }, + { + "id": "UL11_18_VFD", + "svg": "conveyor", + "zone": "UL11_18" + }, + { + "id": "UL11_2_BCN2", + "svg": "beacon", + "zone": "UL11_2" + }, + { + "id": "UL11_2_TPE1", + "svg": "photoeye", + "zone": "UL11_2" + }, + { + "id": "UL11_2_VFD", + "svg": "conveyor", + "zone": "UL11_2" + }, + { + "id": "UL11_3_TPE1", + "svg": "photoeye", + "zone": "UL11_3" + }, + { + "id": "UL11_3_VFD", + "svg": "conveyor", + "zone": "UL11_3" + }, + { + "id": "UL11_30_BCN1", + "svg": "beacon", + "zone": "UL11_30" + }, + { + "id": "UL11_30_BCN2", + "svg": "beacon", + "zone": "UL11_30" + }, + { + "id": "UL11_30_EPC1", + "svg": "epc", + "zone": "UL11_30" + }, + { + "id": "UL11_30_EPC2", + "svg": "epc", + "zone": "UL11_30" + }, + { + "id": "UL11_30_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL11_30" + }, + { + "id": "UL11_30_S1_PB", + "svg": "start", + "zone": "UL11_30" + }, + { + "id": "UL11_30_S2_PB", + "svg": "start", + "zone": "UL11_30" + }, + { + "id": "UL11_30_TPE1", + "svg": "photoeye", + "zone": "UL11_30" + }, + { + "id": "UL11_30_VFD", + "svg": "conveyor", + "zone": "UL11_30" + }, + { + "id": "UL11_31_TPE1", + "svg": "photoeye", + "zone": "UL11_31" + }, + { + "id": "UL11_4_TPE1", + "svg": "photoeye", + "zone": "UL11_4" + }, + { + "id": "UL11_4_VFD", + "svg": "conveyor", + "zone": "UL11_4" + }, + { + "id": "UL11_5_TPE1", + "svg": "photoeye", + "zone": "UL11_5" + }, + { + "id": "UL11_5_VFD", + "svg": "conveyor", + "zone": "UL11_5" + }, + { + "id": "UL11_6_TPE1", + "svg": "photoeye", + "zone": "UL11_6" + }, + { + "id": "UL11_6_VFD", + "svg": "conveyor", + "zone": "UL11_6" + }, + { + "id": "UL11_7_TPE1", + "svg": "photoeye", + "zone": "UL11_7" + }, + { + "id": "UL11_7_VFD", + "svg": "conveyor", + "zone": "UL11_7" + }, + { + "id": "UL11_8_BCN1", + "svg": "beacon", + "zone": "UL11_8" + }, + { + "id": "UL11_8_BCN2", + "svg": "beacon", + "zone": "UL11_8" + }, + { + "id": "UL11_8_DPM1", + "svg": "dpm", + "zone": "UL11_8" + }, + { + "id": "UL11_8_DPM2", + "svg": "dpm", + "zone": "UL11_8" + }, + { + "id": "UL11_8_EPC1", + "svg": "epc", + "zone": "UL11_8" + }, + { + "id": "UL11_8_EPC2", + "svg": "epc", + "zone": "UL11_8" + }, + { + "id": "UL11_8_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL11_8" + }, + { + "id": "UL11_8_S1_PB", + "svg": "start", + "zone": "UL11_8" + }, + { + "id": "UL11_8_S2_PB", + "svg": "start", + "zone": "UL11_8" + }, + { + "id": "UL11_8_TPE1", + "svg": "photoeye", + "zone": "UL11_8" + }, + { + "id": "UL11_8_TPE2", + "svg": "photoeye", + "zone": "UL11_8" + }, + { + "id": "UL11_8_TPE3", + "svg": "photoeye", + "zone": "UL11_8" + }, + { + "id": "UL11_8_TPE4", + "svg": "photoeye", + "zone": "UL11_8" + }, + { + "id": "UL11_8_TPE5", + "svg": "photoeye", + "zone": "UL11_8" + }, + { + "id": "UL11_8_VFD", + "svg": "conveyor", + "zone": "UL11_8" + }, + { + "id": "UL11_9A_VFD", + "svg": "conveyor", + "zone": "UL11_9A" + }, + { + "id": "UL11_9B_VFD", + "svg": "conveyor", + "zone": "UL11_9B" + }, + { + "id": "UL7_2_BCN1", + "svg": "beacon", + "zone": "UL7_2" + }, + { + "id": "UL7_2_BCN2", + "svg": "beacon", + "zone": "UL7_2" + }, + { + "id": "UL7_2_EPC1", + "svg": "epc", + "zone": "UL7_2" + }, + { + "id": "UL7_2_EPC2", + "svg": "epc", + "zone": "UL7_2" + }, + { + "id": "UL7_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "UL7_2" + }, + { + "id": "UL7_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL7_2" + }, + { + "id": "UL7_2_SS1_SPB", + "svg": "start_stop", + "zone": "UL7_2" + }, + { + "id": "UL7_2_SS1_STPB", + "svg": "start_stop", + "zone": "UL7_2" + }, + { + "id": "UL7_2_SS2_SPB", + "svg": "start_stop", + "zone": "UL7_2" + }, + { + "id": "UL7_2_SS2_STPB", + "svg": "start_stop", + "zone": "UL7_2" + }, + { + "id": "UL7_2_TPE1", + "svg": "photoeye", + "zone": "UL7_2" + }, + { + "id": "UL7_2_TPE2", + "svg": "photoeye", + "zone": "UL7_2" + }, + { + "id": "UL7_2_VFD", + "svg": "conveyor", + "zone": "UL7_2" + }, + { + "id": "UL7_3_BCN1", + "svg": "beacon", + "zone": "UL7_3" + }, + { + "id": "UL7_3_BCN2", + "svg": "beacon", + "zone": "UL7_3" + }, + { + "id": "UL7_3_EPC1", + "svg": "epc", + "zone": "UL7_3" + }, + { + "id": "UL7_3_EPC2", + "svg": "epc", + "zone": "UL7_3" + }, + { + "id": "UL7_3_S1_PB", + "svg": "start", + "zone": "UL7_3" + }, + { + "id": "UL7_3_S2_PB", + "svg": "start", + "zone": "UL7_3" + }, + { + "id": "UL7_3_TPE1", + "svg": "photoeye", + "zone": "UL7_3" + }, + { + "id": "UL7_3_VFD", + "svg": "conveyor", + "zone": "UL7_3" + }, + { + "id": "UL7_4_TPE1", + "svg": "photoeye", + "zone": "UL7_4" + }, + { + "id": "UL7_4_VFD", + "svg": "conveyor", + "zone": "UL7_4" + }, + { + "id": "UL7_5_LPE1", + "svg": "photoeye", + "zone": "UL7_5" + }, + { + "id": "UL7_5_LPE2", + "svg": "photoeye", + "zone": "UL7_5" + }, + { + "id": "UL7_5_TPE1", + "svg": "photoeye", + "zone": "UL7_5" + }, + { + "id": "UL7_5_VFD", + "svg": "conveyor", + "zone": "UL7_5" + }, + { + "id": "UL7_6_TPE1", + "svg": "photoeye", + "zone": "UL7_6" + }, + { + "id": "UL7_6_VFD", + "svg": "conveyor", + "zone": "UL7_6" + }, + { + "id": "UL7_7_TPE1", + "svg": "photoeye", + "zone": "UL7_7" + }, + { + "id": "UL7_7_VFD", + "svg": "conveyor", + "zone": "UL7_7" + }, + { + "id": "UL7_8_TPE1", + "svg": "photoeye", + "zone": "UL7_8" + }, + { + "id": "UL7_8_VFD", + "svg": "conveyor", + "zone": "UL7_8" + }, + { + "id": "UL7_9_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL7_9" + }, + { + "id": "UL7_9_VFD", + "svg": "conveyor", + "zone": "UL7_9" + }, + { + "id": "UL8_1_BCN1", + "svg": "beacon", + "zone": "UL8_1" + }, + { + "id": "UL8_1_BCN2", + "svg": "beacon", + "zone": "UL8_1" + }, + { + "id": "UL8_1_EPC1", + "svg": "epc", + "zone": "UL8_1" + }, + { + "id": "UL8_1_EPC2", + "svg": "epc", + "zone": "UL8_1" + }, + { + "id": "UL8_1_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL8_1" + }, + { + "id": "UL8_1_SS1_SPB", + "svg": "start_stop", + "zone": "UL8_1" + }, + { + "id": "UL8_1_SS1_STPB", + "svg": "start_stop", + "zone": "UL8_1" + }, + { + "id": "UL8_1_SS2_SPB", + "svg": "start_stop", + "zone": "UL8_1" + }, + { + "id": "UL8_1_SS2_STPB", + "svg": "start_stop", + "zone": "UL8_1" + }, + { + "id": "UL8_1_TPE1", + "svg": "photoeye", + "zone": "UL8_1" + }, + { + "id": "UL8_1_VFD", + "svg": "conveyor", + "zone": "UL8_1" + }, + { + "id": "UL8_10_TPE1", + "svg": "photoeye", + "zone": "UL8_10" + }, + { + "id": "UL8_10_TPE2", + "svg": "photoeye", + "zone": "UL8_10" + }, + { + "id": "UL8_10_VFD", + "svg": "conveyor", + "zone": "UL8_10" + }, + { + "id": "UL8_11_BCN1", + "svg": "beacon", + "zone": "UL8_11" + }, + { + "id": "UL8_11_JR1_PB", + "svg": "jam_reset", + "zone": "UL8_11" + }, + { + "id": "UL8_11_JR2_PB", + "svg": "jam_reset", + "zone": "UL8_11" + }, + { + "id": "UL8_11_TPE1", + "svg": "photoeye", + "zone": "UL8_11" + }, + { + "id": "UL8_11_VFD", + "svg": "conveyor", + "zone": "UL8_11" + }, + { + "id": "UL8_12_TPE1", + "svg": "photoeye", + "zone": "UL8_12" + }, + { + "id": "UL8_12_VFD", + "svg": "conveyor", + "zone": "UL8_12" + }, + { + "id": "UL8_13_BCN1", + "svg": "beacon", + "zone": "UL8_13" + }, + { + "id": "UL8_13_DPM1", + "svg": "dpm", + "zone": "UL8_13" + }, + { + "id": "UL8_13_JR1_PB", + "svg": "jam_reset", + "zone": "UL8_13" + }, + { + "id": "UL8_13_JR2_PB", + "svg": "jam_reset", + "zone": "UL8_13" + }, + { + "id": "UL8_13_TPE1", + "svg": "photoeye", + "zone": "UL8_13" + }, + { + "id": "UL8_13_VFD", + "svg": "conveyor", + "zone": "UL8_13" + }, + { + "id": "UL8_14_TPE1", + "svg": "photoeye", + "zone": "UL8_14" + }, + { + "id": "UL8_15_BCN1", + "svg": "beacon", + "zone": "UL8_15" + }, + { + "id": "UL8_15_BCN2", + "svg": "beacon", + "zone": "UL8_15" + }, + { + "id": "UL8_15_EPC1", + "svg": "epc", + "zone": "UL8_15" + }, + { + "id": "UL8_15_EPC2", + "svg": "epc", + "zone": "UL8_15" + }, + { + "id": "UL8_15_LPE1", + "svg": "photoeye", + "zone": "UL8_15" + }, + { + "id": "UL8_15_SS1_SPB", + "svg": "start_stop", + "zone": "UL8_15" + }, + { + "id": "UL8_15_SS1_STPB", + "svg": "start_stop", + "zone": "UL8_15" + }, + { + "id": "UL8_15_SS2_SPB", + "svg": "start_stop", + "zone": "UL8_15" + }, + { + "id": "UL8_15_SS2_STPB", + "svg": "start_stop", + "zone": "UL8_15" + }, + { + "id": "UL8_15_TPE1", + "svg": "photoeye", + "zone": "UL8_15" + }, + { + "id": "UL8_15_TPE2", + "svg": "photoeye", + "zone": "UL8_15" + }, + { + "id": "UL8_15_VFD", + "svg": "conveyor", + "zone": "UL8_15" + }, + { + "id": "UL8_16_TPE1", + "svg": "photoeye", + "zone": "UL8_16" + }, + { + "id": "UL8_16_VFD", + "svg": "conveyor", + "zone": "UL8_16" + }, + { + "id": "UL8_17_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL8_17" + }, + { + "id": "UL8_18_TPE1", + "svg": "photoeye", + "zone": "UL8_18" + }, + { + "id": "UL8_18_VFD", + "svg": "conveyor", + "zone": "UL8_18" + }, + { + "id": "UL8_2_TPE1", + "svg": "photoeye", + "zone": "UL8_2" + }, + { + "id": "UL8_2_VFD", + "svg": "conveyor", + "zone": "UL8_2" + }, + { + "id": "UL8_3_TPE1", + "svg": "photoeye", + "zone": "UL8_3" + }, + { + "id": "UL8_3_VFD", + "svg": "conveyor", + "zone": "UL8_3" + }, + { + "id": "UL8_30_BCN1", + "svg": "beacon", + "zone": "UL8_30" + }, + { + "id": "UL8_30_BCN2", + "svg": "beacon", + "zone": "UL8_30" + }, + { + "id": "UL8_30_EPC1", + "svg": "epc", + "zone": "UL8_30" + }, + { + "id": "UL8_30_EPC2", + "svg": "epc", + "zone": "UL8_30" + }, + { + "id": "UL8_30_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL8_30" + }, + { + "id": "UL8_30_S1_PB", + "svg": "start", + "zone": "UL8_30" + }, + { + "id": "UL8_30_S2_PB", + "svg": "start", + "zone": "UL8_30" + }, + { + "id": "UL8_30_TPE1", + "svg": "photoeye", + "zone": "UL8_30" + }, + { + "id": "UL8_30_VFD", + "svg": "conveyor", + "zone": "UL8_30" + }, + { + "id": "UL8_31_TPE1", + "svg": "photoeye", + "zone": "UL8_31" + }, + { + "id": "UL8_4_TPE1", + "svg": "photoeye", + "zone": "UL8_4" + }, + { + "id": "UL8_4_VFD", + "svg": "conveyor", + "zone": "UL8_4" + }, + { + "id": "UL8_5_TPE1", + "svg": "photoeye", + "zone": "UL8_5" + }, + { + "id": "UL8_5_VFD", + "svg": "conveyor", + "zone": "UL8_5" + }, + { + "id": "UL8_6_TPE1", + "svg": "photoeye", + "zone": "UL8_6" + }, + { + "id": "UL8_6_VFD", + "svg": "conveyor", + "zone": "UL8_6" + }, + { + "id": "UL8_7_TPE1", + "svg": "photoeye", + "zone": "UL8_7" + }, + { + "id": "UL8_7_VFD", + "svg": "conveyor", + "zone": "UL8_7" + }, + { + "id": "UL8_8_BCN1", + "svg": "beacon", + "zone": "UL8_8" + }, + { + "id": "UL8_8_BCN2", + "svg": "beacon", + "zone": "UL8_8" + }, + { + "id": "UL8_8_DPM1", + "svg": "dpm", + "zone": "UL8_8" + }, + { + "id": "UL8_8_EPC1", + "svg": "epc", + "zone": "UL8_8" + }, + { + "id": "UL8_8_EPC2", + "svg": "epc", + "zone": "UL8_8" + }, + { + "id": "UL8_8_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL8_8" + }, + { + "id": "UL8_8_S1_PB", + "svg": "start", + "zone": "UL8_8" + }, + { + "id": "UL8_8_S2_PB", + "svg": "start", + "zone": "UL8_8" + }, + { + "id": "UL8_8_TPE1", + "svg": "photoeye", + "zone": "UL8_8" + }, + { + "id": "UL8_8_TPE2", + "svg": "photoeye", + "zone": "UL8_8" + }, + { + "id": "UL8_8_TPE3", + "svg": "photoeye", + "zone": "UL8_8" + }, + { + "id": "UL8_8_VFD", + "svg": "conveyor", + "zone": "UL8_8" + }, + { + "id": "UL8_9A_VFD", + "svg": "conveyor", + "zone": "UL8_9A" + }, + { + "id": "UL8_9B_VFD", + "svg": "conveyor", + "zone": "UL8_9B" + }, + { + "id": "UL9_10_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL9_10" + }, + { + "id": "UL9_10_VFD", + "svg": "conveyor", + "zone": "UL9_10" + }, + { + "id": "UL9_2_BCN1", + "svg": "beacon", + "zone": "UL9_2" + }, + { + "id": "UL9_2_BCN2", + "svg": "beacon", + "zone": "UL9_2" + }, + { + "id": "UL9_2_EPC1", + "svg": "epc", + "zone": "UL9_2" + }, + { + "id": "UL9_2_EPC2", + "svg": "epc", + "zone": "UL9_2" + }, + { + "id": "UL9_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "UL9_2" + }, + { + "id": "UL9_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL9_2" + }, + { + "id": "UL9_2_SS1_SPB", + "svg": "start_stop", + "zone": "UL9_2" + }, + { + "id": "UL9_2_SS1_STPB", + "svg": "start_stop", + "zone": "UL9_2" + }, + { + "id": "UL9_2_SS2_SPB", + "svg": "start_stop", + "zone": "UL9_2" + }, + { + "id": "UL9_2_SS2_STPB", + "svg": "start_stop", + "zone": "UL9_2" + }, + { + "id": "UL9_2_TPE1", + "svg": "photoeye", + "zone": "UL9_2" + }, + { + "id": "UL9_2_TPE2", + "svg": "photoeye", + "zone": "UL9_2" + }, + { + "id": "UL9_2_VFD", + "svg": "conveyor", + "zone": "UL9_2" + }, + { + "id": "UL9_3_TPE1", + "svg": "photoeye", + "zone": "UL9_3" + }, + { + "id": "UL9_3_VFD", + "svg": "conveyor", + "zone": "UL9_3" + }, + { + "id": "UL9_4_TPE1", + "svg": "photoeye", + "zone": "UL9_4" + }, + { + "id": "UL9_4_VFD", + "svg": "conveyor", + "zone": "UL9_4" + }, + { + "id": "UL9_5_BCN1", + "svg": "beacon", + "zone": "UL9_5" + }, + { + "id": "UL9_5_BCN2", + "svg": "beacon", + "zone": "UL9_5" + }, + { + "id": "UL9_5_EPC1", + "svg": "epc", + "zone": "UL9_5" + }, + { + "id": "UL9_5_EPC2", + "svg": "epc", + "zone": "UL9_5" + }, + { + "id": "UL9_5_S1_PB", + "svg": "start", + "zone": "UL9_5" + }, + { + "id": "UL9_5_S2_PB", + "svg": "start", + "zone": "UL9_5" + }, + { + "id": "UL9_5_TPE1", + "svg": "photoeye", + "zone": "UL9_5" + }, + { + "id": "UL9_5_VFD", + "svg": "conveyor", + "zone": "UL9_5" + }, + { + "id": "UL9_6_LPE1", + "svg": "photoeye", + "zone": "UL9_6" + }, + { + "id": "UL9_6_LPE2", + "svg": "photoeye", + "zone": "UL9_6" + }, + { + "id": "UL9_6_TPE1", + "svg": "photoeye", + "zone": "UL9_6" + }, + { + "id": "UL9_6_VFD", + "svg": "conveyor", + "zone": "UL9_6" + }, + { + "id": "UL9_7_TPE1", + "svg": "photoeye", + "zone": "UL9_7" + }, + { + "id": "UL9_7_VFD", + "svg": "conveyor", + "zone": "UL9_7" + }, + { + "id": "UL9_8_TPE1", + "svg": "photoeye", + "zone": "UL9_8" + }, + { + "id": "UL9_8_VFD", + "svg": "conveyor", + "zone": "UL9_8" + }, + { + "id": "UL9_9_TPE1", + "svg": "photoeye", + "zone": "UL9_9" + }, + { + "id": "UL9_9_VFD", + "svg": "conveyor", + "zone": "UL9_9" + } + ], + "MCM07": [ + { + "id": "PDP11", + "svg": "pdp", + "zone": "PDP11" + }, + { + "id": "PDP11_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP11" + }, + { + "id": "PDP11_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP11" + }, + { + "id": "UL12_10_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL12_10" + }, + { + "id": "UL12_10_VFD", + "svg": "conveyor", + "zone": "UL12_10" + }, + { + "id": "UL12_2_BCN1", + "svg": "beacon", + "zone": "UL12_2" + }, + { + "id": "UL12_2_BCN2", + "svg": "beacon", + "zone": "UL12_2" + }, + { + "id": "UL12_2_EPC1", + "svg": "epc", + "zone": "UL12_2" + }, + { + "id": "UL12_2_EPC2", + "svg": "epc", + "zone": "UL12_2" + }, + { + "id": "UL12_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "UL12_2" + }, + { + "id": "UL12_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL12_2" + }, + { + "id": "UL12_2_SS1_SPB", + "svg": "start_stop", + "zone": "UL12_2" + }, + { + "id": "UL12_2_SS1_STPB", + "svg": "start_stop", + "zone": "UL12_2" + }, + { + "id": "UL12_2_SS2_SPB", + "svg": "start_stop", + "zone": "UL12_2" + }, + { + "id": "UL12_2_SS2_STPB", + "svg": "start_stop", + "zone": "UL12_2" + }, + { + "id": "UL12_2_TPE1", + "svg": "photoeye", + "zone": "UL12_2" + }, + { + "id": "UL12_2_TPE2", + "svg": "photoeye", + "zone": "UL12_2" + }, + { + "id": "UL12_2_VFD", + "svg": "conveyor", + "zone": "UL12_2" + }, + { + "id": "UL12_3_TPE1", + "svg": "photoeye", + "zone": "UL12_3" + }, + { + "id": "UL12_3_VFD", + "svg": "conveyor", + "zone": "UL12_3" + }, + { + "id": "UL12_4_TPE1", + "svg": "photoeye", + "zone": "UL12_4" + }, + { + "id": "UL12_4_VFD", + "svg": "conveyor", + "zone": "UL12_4" + }, + { + "id": "UL12_5_BCN1", + "svg": "beacon", + "zone": "UL12_5" + }, + { + "id": "UL12_5_BCN2", + "svg": "beacon", + "zone": "UL12_5" + }, + { + "id": "UL12_5_EPC1", + "svg": "epc", + "zone": "UL12_5" + }, + { + "id": "UL12_5_EPC2", + "svg": "epc", + "zone": "UL12_5" + }, + { + "id": "UL12_5_S1_PB", + "svg": "start", + "zone": "UL12_5" + }, + { + "id": "UL12_5_S2_PB", + "svg": "start", + "zone": "UL12_5" + }, + { + "id": "UL12_5_TPE1", + "svg": "photoeye", + "zone": "UL12_5" + }, + { + "id": "UL12_5_VFD", + "svg": "conveyor", + "zone": "UL12_5" + }, + { + "id": "UL12_6_LPE1", + "svg": "photoeye", + "zone": "UL12_6" + }, + { + "id": "UL12_6_LPE2", + "svg": "photoeye", + "zone": "UL12_6" + }, + { + "id": "UL12_6_TPE1", + "svg": "photoeye", + "zone": "UL12_6" + }, + { + "id": "UL12_6_VFD", + "svg": "conveyor", + "zone": "UL12_6" + }, + { + "id": "UL12_7_TPE1", + "svg": "photoeye", + "zone": "UL12_7" + }, + { + "id": "UL12_7_VFD", + "svg": "conveyor", + "zone": "UL12_7" + }, + { + "id": "UL12_8_TPE1", + "svg": "photoeye", + "zone": "UL12_8" + }, + { + "id": "UL12_8_VFD", + "svg": "conveyor", + "zone": "UL12_8" + }, + { + "id": "UL12_9_TPE1", + "svg": "photoeye", + "zone": "UL12_9" + }, + { + "id": "UL12_9_VFD", + "svg": "conveyor", + "zone": "UL12_9" + }, + { + "id": "UL13_2_BCN1", + "svg": "beacon", + "zone": "UL13_2" + }, + { + "id": "UL13_2_BCN2", + "svg": "beacon", + "zone": "UL13_2" + }, + { + "id": "UL13_2_EPC1", + "svg": "epc", + "zone": "UL13_2" + }, + { + "id": "UL13_2_EPC2", + "svg": "epc", + "zone": "UL13_2" + }, + { + "id": "UL13_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "UL13_2" + }, + { + "id": "UL13_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL13_2" + }, + { + "id": "UL13_2_SS1_SPB", + "svg": "start_stop", + "zone": "UL13_2" + }, + { + "id": "UL13_2_SS1_STPB", + "svg": "start_stop", + "zone": "UL13_2" + }, + { + "id": "UL13_2_SS2_SPB", + "svg": "start_stop", + "zone": "UL13_2" + }, + { + "id": "UL13_2_SS2_STPB", + "svg": "start_stop", + "zone": "UL13_2" + }, + { + "id": "UL13_2_TPE1", + "svg": "photoeye", + "zone": "UL13_2" + }, + { + "id": "UL13_2_TPE2", + "svg": "photoeye", + "zone": "UL13_2" + }, + { + "id": "UL13_2_VFD", + "svg": "conveyor", + "zone": "UL13_2" + }, + { + "id": "UL13_3_BCN1", + "svg": "beacon", + "zone": "UL13_3" + }, + { + "id": "UL13_3_BCN2", + "svg": "beacon", + "zone": "UL13_3" + }, + { + "id": "UL13_3_EPC1", + "svg": "epc", + "zone": "UL13_3" + }, + { + "id": "UL13_3_EPC2", + "svg": "epc", + "zone": "UL13_3" + }, + { + "id": "UL13_3_S1_PB", + "svg": "start", + "zone": "UL13_3" + }, + { + "id": "UL13_3_S2_PB", + "svg": "start", + "zone": "UL13_3" + }, + { + "id": "UL13_3_TPE1", + "svg": "photoeye", + "zone": "UL13_3" + }, + { + "id": "UL13_3_VFD", + "svg": "conveyor", + "zone": "UL13_3" + }, + { + "id": "UL13_4_TPE1", + "svg": "photoeye", + "zone": "UL13_4" + }, + { + "id": "UL13_4_VFD", + "svg": "conveyor", + "zone": "UL13_4" + }, + { + "id": "UL13_5_LPE1", + "svg": "photoeye", + "zone": "UL13_5" + }, + { + "id": "UL13_5_LPE2", + "svg": "photoeye", + "zone": "UL13_5" + }, + { + "id": "UL13_5_TPE1", + "svg": "photoeye", + "zone": "UL13_5" + }, + { + "id": "UL13_5_VFD", + "svg": "conveyor", + "zone": "UL13_5" + }, + { + "id": "UL13_6_TPE1", + "svg": "photoeye", + "zone": "UL13_6" + }, + { + "id": "UL13_6_VFD", + "svg": "conveyor", + "zone": "UL13_6" + }, + { + "id": "UL13_7_TPE1", + "svg": "photoeye", + "zone": "UL13_7" + }, + { + "id": "UL13_7_VFD", + "svg": "conveyor", + "zone": "UL13_7" + }, + { + "id": "UL13_8_TPE1", + "svg": "photoeye", + "zone": "UL13_8" + }, + { + "id": "UL13_8_VFD", + "svg": "conveyor", + "zone": "UL13_8" + }, + { + "id": "UL13_9_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL13_9" + }, + { + "id": "UL13_9_VFD", + "svg": "conveyor", + "zone": "UL13_9" + }, + { + "id": "UL14_1_BCN1", + "svg": "beacon", + "zone": "UL14_1" + }, + { + "id": "UL14_1_BCN2", + "svg": "beacon", + "zone": "UL14_1" + }, + { + "id": "UL14_1_EPC1", + "svg": "epc", + "zone": "UL14_1" + }, + { + "id": "UL14_1_EPC2", + "svg": "epc", + "zone": "UL14_1" + }, + { + "id": "UL14_1_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL14_1" + }, + { + "id": "UL14_1_SS1_SPB", + "svg": "start_stop", + "zone": "UL14_1" + }, + { + "id": "UL14_1_SS1_STPB", + "svg": "start_stop", + "zone": "UL14_1" + }, + { + "id": "UL14_1_SS2_SPB", + "svg": "start_stop", + "zone": "UL14_1" + }, + { + "id": "UL14_1_SS2_STPB", + "svg": "start_stop", + "zone": "UL14_1" + }, + { + "id": "UL14_1_TPE1", + "svg": "photoeye", + "zone": "UL14_1" + }, + { + "id": "UL14_1_VFD", + "svg": "conveyor", + "zone": "UL14_1" + }, + { + "id": "UL14_10_TPE1", + "svg": "photoeye", + "zone": "UL14_10" + }, + { + "id": "UL14_10_TPE2", + "svg": "photoeye", + "zone": "UL14_10" + }, + { + "id": "UL14_10_VFD", + "svg": "conveyor", + "zone": "UL14_10" + }, + { + "id": "UL14_11_BCN1", + "svg": "beacon", + "zone": "UL14_11" + }, + { + "id": "UL14_11_JR1_PB", + "svg": "jam_reset", + "zone": "UL14_11" + }, + { + "id": "UL14_11_JR2_PB", + "svg": "jam_reset", + "zone": "UL14_11" + }, + { + "id": "UL14_11_TPE1", + "svg": "photoeye", + "zone": "UL14_11" + }, + { + "id": "UL14_11_VFD", + "svg": "conveyor", + "zone": "UL14_11" + }, + { + "id": "UL14_12_TPE1", + "svg": "photoeye", + "zone": "UL14_12" + }, + { + "id": "UL14_12_VFD", + "svg": "conveyor", + "zone": "UL14_12" + }, + { + "id": "UL14_13_BCN1", + "svg": "beacon", + "zone": "UL14_13" + }, + { + "id": "UL14_13_DPM1", + "svg": "dpm", + "zone": "UL14_13" + }, + { + "id": "UL14_13_JR1_PB", + "svg": "jam_reset", + "zone": "UL14_13" + }, + { + "id": "UL14_13_JR2_PB", + "svg": "jam_reset", + "zone": "UL14_13" + }, + { + "id": "UL14_13_TPE1", + "svg": "photoeye", + "zone": "UL14_13" + }, + { + "id": "UL14_13_VFD", + "svg": "conveyor", + "zone": "UL14_13" + }, + { + "id": "UL14_14_TPE1", + "svg": "photoeye", + "zone": "UL14_14" + }, + { + "id": "UL14_15_BCN1", + "svg": "beacon", + "zone": "UL14_15" + }, + { + "id": "UL14_15_BCN2", + "svg": "beacon", + "zone": "UL14_15" + }, + { + "id": "UL14_15_EPC1", + "svg": "epc", + "zone": "UL14_15" + }, + { + "id": "UL14_15_EPC2", + "svg": "epc", + "zone": "UL14_15" + }, + { + "id": "UL14_15_LPE1", + "svg": "photoeye", + "zone": "UL14_15" + }, + { + "id": "UL14_15_SS1_SPB", + "svg": "start_stop", + "zone": "UL14_15" + }, + { + "id": "UL14_15_SS1_STPB", + "svg": "start_stop", + "zone": "UL14_15" + }, + { + "id": "UL14_15_SS2_SPB", + "svg": "start_stop", + "zone": "UL14_15" + }, + { + "id": "UL14_15_SS2_STPB", + "svg": "start_stop", + "zone": "UL14_15" + }, + { + "id": "UL14_15_TPE1", + "svg": "photoeye", + "zone": "UL14_15" + }, + { + "id": "UL14_15_TPE2", + "svg": "photoeye", + "zone": "UL14_15" + }, + { + "id": "UL14_15_VFD", + "svg": "conveyor", + "zone": "UL14_15" + }, + { + "id": "UL14_16_TPE1", + "svg": "photoeye", + "zone": "UL14_16" + }, + { + "id": "UL14_16_VFD", + "svg": "conveyor", + "zone": "UL14_16" + }, + { + "id": "UL14_17_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL14_17" + }, + { + "id": "UL14_18_TPE1", + "svg": "photoeye", + "zone": "UL14_18" + }, + { + "id": "UL14_18_VFD", + "svg": "conveyor", + "zone": "UL14_18" + }, + { + "id": "UL14_2_TPE1", + "svg": "photoeye", + "zone": "UL14_2" + }, + { + "id": "UL14_2_VFD", + "svg": "conveyor", + "zone": "UL14_2" + }, + { + "id": "UL14_3_TPE1", + "svg": "photoeye", + "zone": "UL14_3" + }, + { + "id": "UL14_3_VFD", + "svg": "conveyor", + "zone": "UL14_3" + }, + { + "id": "UL14_30_BCN1", + "svg": "beacon", + "zone": "UL14_30" + }, + { + "id": "UL14_30_BCN2", + "svg": "beacon", + "zone": "UL14_30" + }, + { + "id": "UL14_30_EPC1", + "svg": "epc", + "zone": "UL14_30" + }, + { + "id": "UL14_30_EPC2", + "svg": "epc", + "zone": "UL14_30" + }, + { + "id": "UL14_30_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL14_30" + }, + { + "id": "UL14_30_S1_PB", + "svg": "start", + "zone": "UL14_30" + }, + { + "id": "UL14_30_S2_PB", + "svg": "start", + "zone": "UL14_30" + }, + { + "id": "UL14_30_TPE1", + "svg": "photoeye", + "zone": "UL14_30" + }, + { + "id": "UL14_30_VFD", + "svg": "conveyor", + "zone": "UL14_30" + }, + { + "id": "UL14_31_TPE1", + "svg": "photoeye", + "zone": "UL14_31" + }, + { + "id": "UL14_4_TPE1", + "svg": "photoeye", + "zone": "UL14_4" + }, + { + "id": "UL14_4_VFD", + "svg": "conveyor", + "zone": "UL14_4" + }, + { + "id": "UL14_5_TPE1", + "svg": "photoeye", + "zone": "UL14_5" + }, + { + "id": "UL14_5_VFD", + "svg": "conveyor", + "zone": "UL14_5" + }, + { + "id": "UL14_6_TPE1", + "svg": "photoeye", + "zone": "UL14_6" + }, + { + "id": "UL14_6_VFD", + "svg": "conveyor", + "zone": "UL14_6" + }, + { + "id": "UL14_7_TPE1", + "svg": "photoeye", + "zone": "UL14_7" + }, + { + "id": "UL14_7_VFD", + "svg": "conveyor", + "zone": "UL14_7" + }, + { + "id": "UL14_8_BCN1", + "svg": "beacon", + "zone": "UL14_8" + }, + { + "id": "UL14_8_BCN2", + "svg": "beacon", + "zone": "UL14_8" + }, + { + "id": "UL14_8_DPM1", + "svg": "dpm", + "zone": "UL14_8" + }, + { + "id": "UL14_8_DPM2", + "svg": "dpm", + "zone": "UL14_8" + }, + { + "id": "UL14_8_EPC1", + "svg": "epc", + "zone": "UL14_8" + }, + { + "id": "UL14_8_EPC2", + "svg": "epc", + "zone": "UL14_8" + }, + { + "id": "UL14_8_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL14_8" + }, + { + "id": "UL14_8_S1_PB", + "svg": "start", + "zone": "UL14_8" + }, + { + "id": "UL14_8_S2_PB", + "svg": "start", + "zone": "UL14_8" + }, + { + "id": "UL14_8_TPE1", + "svg": "photoeye", + "zone": "UL14_8" + }, + { + "id": "UL14_8_TPE2", + "svg": "photoeye", + "zone": "UL14_8" + }, + { + "id": "UL14_8_TPE3", + "svg": "photoeye", + "zone": "UL14_8" + }, + { + "id": "UL14_8_TPE4", + "svg": "photoeye", + "zone": "UL14_8" + }, + { + "id": "UL14_8_TPE5", + "svg": "photoeye", + "zone": "UL14_8" + }, + { + "id": "UL14_8_VFD", + "svg": "conveyor", + "zone": "UL14_8" + }, + { + "id": "UL14_9A_VFD", + "svg": "conveyor", + "zone": "UL14_9A" + }, + { + "id": "UL14_9B_VFD", + "svg": "conveyor", + "zone": "UL14_9B" + } + ], + "MCM08": [ + { + "id": "PDP15", + "svg": "pdp", + "zone": "PDP15" + }, + { + "id": "PDP15_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP15" + }, + { + "id": "PDP15_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP15" + }, + { + "id": "PDP16", + "svg": "pdp", + "zone": "PDP16" + }, + { + "id": "PDP16_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP16" + }, + { + "id": "PDP16_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP16" + }, + { + "id": "PS1_1_VFD", + "svg": "conveyor", + "zone": "PS1_1" + }, + { + "id": "PS1_10_DPM1", + "svg": "dpm", + "zone": "PS1_10" + }, + { + "id": "PS1_10_TPE1", + "svg": "photoeye", + "zone": "PS1_10" + }, + { + "id": "PS1_10_VFD", + "svg": "conveyor", + "zone": "PS1_10" + }, + { + "id": "PS1_11_TPE1", + "svg": "photoeye", + "zone": "PS1_11" + }, + { + "id": "PS1_11_VFD", + "svg": "conveyor", + "zone": "PS1_11" + }, + { + "id": "PS1_12_DPM1", + "svg": "dpm", + "zone": "PS1_12" + }, + { + "id": "PS1_12_TPE1", + "svg": "photoeye", + "zone": "PS1_12" + }, + { + "id": "PS1_12_VFD", + "svg": "conveyor", + "zone": "PS1_12" + }, + { + "id": "PS1_13_TPE1", + "svg": "photoeye", + "zone": "PS1_13" + }, + { + "id": "PS1_13_VFD", + "svg": "conveyor", + "zone": "PS1_13" + }, + { + "id": "PS1_14_DPM1", + "svg": "dpm", + "zone": "PS1_14" + }, + { + "id": "PS1_14_TPE1", + "svg": "photoeye", + "zone": "PS1_14" + }, + { + "id": "PS1_14_VFD", + "svg": "conveyor", + "zone": "PS1_14" + }, + { + "id": "PS1_15_TPE1", + "svg": "photoeye", + "zone": "PS1_15" + }, + { + "id": "PS1_15_VFD", + "svg": "conveyor", + "zone": "PS1_15" + }, + { + "id": "PS1_16_BCN1", + "svg": "beacon", + "zone": "PS1_16" + }, + { + "id": "PS1_16_BCN2", + "svg": "beacon", + "zone": "PS1_16" + }, + { + "id": "PS1_16_EPC1", + "svg": "epc", + "zone": "PS1_16" + }, + { + "id": "PS1_16_EPC2", + "svg": "epc", + "zone": "PS1_16" + }, + { + "id": "PS1_16_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS1_16" + }, + { + "id": "PS1_16_S1_PB", + "svg": "start", + "zone": "PS1_16" + }, + { + "id": "PS1_16_S2_PB", + "svg": "start", + "zone": "PS1_16" + }, + { + "id": "PS1_16_TPE1", + "svg": "photoeye", + "zone": "PS1_16" + }, + { + "id": "PS1_16_VFD", + "svg": "conveyor", + "zone": "PS1_16" + }, + { + "id": "PS1_17_TPE1", + "svg": "photoeye", + "zone": "PS1_17" + }, + { + "id": "PS1_17_VFD", + "svg": "conveyor", + "zone": "PS1_17" + }, + { + "id": "PS1_18_BCN1", + "svg": "beacon", + "zone": "PS1_18" + }, + { + "id": "PS1_18_JR1_PB", + "svg": "jam_reset", + "zone": "PS1_18" + }, + { + "id": "PS1_18_TPE1", + "svg": "photoeye", + "zone": "PS1_18" + }, + { + "id": "PS1_18_VFD", + "svg": "conveyor", + "zone": "PS1_18" + }, + { + "id": "PS1_19_TPE1", + "svg": "photoeye", + "zone": "PS1_19" + }, + { + "id": "PS1_19_VFD", + "svg": "conveyor", + "zone": "PS1_19" + }, + { + "id": "PS1_2_BCN1", + "svg": "beacon", + "zone": "PS1_2" + }, + { + "id": "PS1_2_JR1_PB", + "svg": "jam_reset", + "zone": "PS1_2" + }, + { + "id": "PS1_2_JR2_PB", + "svg": "jam_reset", + "zone": "PS1_2" + }, + { + "id": "PS1_2_TPE1", + "svg": "photoeye", + "zone": "PS1_2" + }, + { + "id": "PS1_2_VFD", + "svg": "conveyor", + "zone": "PS1_2" + }, + { + "id": "PS1_3_TPE1", + "svg": "photoeye", + "zone": "PS1_3" + }, + { + "id": "PS1_3_VFD", + "svg": "conveyor", + "zone": "PS1_3" + }, + { + "id": "PS1_4_BCN1", + "svg": "beacon", + "zone": "PS1_4" + }, + { + "id": "PS1_4_JR1_PB", + "svg": "jam_reset", + "zone": "PS1_4" + }, + { + "id": "PS1_4_TPE1", + "svg": "photoeye", + "zone": "PS1_4" + }, + { + "id": "PS1_4_VFD", + "svg": "conveyor", + "zone": "PS1_4" + }, + { + "id": "PS1_5_TPE1", + "svg": "photoeye", + "zone": "PS1_5" + }, + { + "id": "PS1_5_VFD", + "svg": "conveyor", + "zone": "PS1_5" + }, + { + "id": "PS1_6_TPE1", + "svg": "photoeye", + "zone": "PS1_6" + }, + { + "id": "PS1_6_VFD", + "svg": "conveyor", + "zone": "PS1_6" + }, + { + "id": "PS1_7_BCN1", + "svg": "beacon", + "zone": "PS1_7" + }, + { + "id": "PS1_7_DPM1", + "svg": "dpm", + "zone": "PS1_7" + }, + { + "id": "PS1_7_JR1_PB", + "svg": "jam_reset", + "zone": "PS1_7" + }, + { + "id": "PS1_7_TPE1", + "svg": "photoeye", + "zone": "PS1_7" + }, + { + "id": "PS1_7_VFD", + "svg": "conveyor", + "zone": "PS1_7" + }, + { + "id": "PS1_8_TPE1", + "svg": "photoeye", + "zone": "PS1_8" + }, + { + "id": "PS1_8_VFD", + "svg": "conveyor", + "zone": "PS1_8" + }, + { + "id": "PS1_9_TPE1", + "svg": "photoeye", + "zone": "PS1_9" + }, + { + "id": "PS1_9_VFD", + "svg": "conveyor", + "zone": "PS1_9" + }, + { + "id": "PS2_1_VFD", + "svg": "conveyor", + "zone": "PS2_1" + }, + { + "id": "PS2_10_TPE1", + "svg": "photoeye", + "zone": "PS2_10" + }, + { + "id": "PS2_10_VFD", + "svg": "conveyor", + "zone": "PS2_10" + }, + { + "id": "PS2_11_TPE1", + "svg": "photoeye", + "zone": "PS2_11" + }, + { + "id": "PS2_11_VFD", + "svg": "conveyor", + "zone": "PS2_11" + }, + { + "id": "PS2_12_DPM1", + "svg": "dpm", + "zone": "PS2_12" + }, + { + "id": "PS2_12_TPE1", + "svg": "photoeye", + "zone": "PS2_12" + }, + { + "id": "PS2_12_VFD", + "svg": "conveyor", + "zone": "PS2_12" + }, + { + "id": "PS2_13_DPM1", + "svg": "dpm", + "zone": "PS2_13" + }, + { + "id": "PS2_13_TPE1", + "svg": "photoeye", + "zone": "PS2_13" + }, + { + "id": "PS2_13_VFD", + "svg": "conveyor", + "zone": "PS2_13" + }, + { + "id": "PS2_14_TPE1", + "svg": "photoeye", + "zone": "PS2_14" + }, + { + "id": "PS2_14_VFD", + "svg": "conveyor", + "zone": "PS2_14" + }, + { + "id": "PS2_15_DPM1", + "svg": "dpm", + "zone": "PS2_15" + }, + { + "id": "PS2_15_TPE1", + "svg": "photoeye", + "zone": "PS2_15" + }, + { + "id": "PS2_15_VFD", + "svg": "conveyor", + "zone": "PS2_15" + }, + { + "id": "PS2_16_TPE1", + "svg": "photoeye", + "zone": "PS2_16" + }, + { + "id": "PS2_16_VFD", + "svg": "conveyor", + "zone": "PS2_16" + }, + { + "id": "PS2_17_BCN1", + "svg": "beacon", + "zone": "PS2_17" + }, + { + "id": "PS2_17_BCN2", + "svg": "beacon", + "zone": "PS2_17" + }, + { + "id": "PS2_17_EPC1", + "svg": "epc", + "zone": "PS2_17" + }, + { + "id": "PS2_17_EPC2", + "svg": "epc", + "zone": "PS2_17" + }, + { + "id": "PS2_17_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS2_17" + }, + { + "id": "PS2_17_S1_PB", + "svg": "start", + "zone": "PS2_17" + }, + { + "id": "PS2_17_S2_PB", + "svg": "start", + "zone": "PS2_17" + }, + { + "id": "PS2_17_TPE1", + "svg": "photoeye", + "zone": "PS2_17" + }, + { + "id": "PS2_17_VFD", + "svg": "conveyor", + "zone": "PS2_17" + }, + { + "id": "PS2_18_BCN1", + "svg": "beacon", + "zone": "PS2_18" + }, + { + "id": "PS2_18_DPM1", + "svg": "dpm", + "zone": "PS2_18" + }, + { + "id": "PS2_18_JR1_PB", + "svg": "jam_reset", + "zone": "PS2_18" + }, + { + "id": "PS2_18_TPE1", + "svg": "photoeye", + "zone": "PS2_18" + }, + { + "id": "PS2_18_VFD", + "svg": "conveyor", + "zone": "PS2_18" + }, + { + "id": "PS2_19_TPE1", + "svg": "photoeye", + "zone": "PS2_19" + }, + { + "id": "PS2_19_VFD", + "svg": "conveyor", + "zone": "PS2_19" + }, + { + "id": "PS2_2_TPE1", + "svg": "photoeye", + "zone": "PS2_2" + }, + { + "id": "PS2_2_VFD", + "svg": "conveyor", + "zone": "PS2_2" + }, + { + "id": "PS2_20_TPE1", + "svg": "photoeye", + "zone": "PS2_20" + }, + { + "id": "PS2_20_VFD", + "svg": "conveyor", + "zone": "PS2_20" + }, + { + "id": "PS2_21_TPE1", + "svg": "photoeye", + "zone": "PS2_21" + }, + { + "id": "PS2_21_VFD", + "svg": "conveyor", + "zone": "PS2_21" + }, + { + "id": "PS2_3_BCN1", + "svg": "beacon", + "zone": "PS2_3" + }, + { + "id": "PS2_3_JR1_PB", + "svg": "jam_reset", + "zone": "PS2_3" + }, + { + "id": "PS2_3_TPE1", + "svg": "photoeye", + "zone": "PS2_3" + }, + { + "id": "PS2_3_VFD", + "svg": "conveyor", + "zone": "PS2_3" + }, + { + "id": "PS2_4_TPE1", + "svg": "photoeye", + "zone": "PS2_4" + }, + { + "id": "PS2_4_VFD", + "svg": "conveyor", + "zone": "PS2_4" + }, + { + "id": "PS2_5_TPE1", + "svg": "photoeye", + "zone": "PS2_5" + }, + { + "id": "PS2_5_VFD", + "svg": "conveyor", + "zone": "PS2_5" + }, + { + "id": "PS2_6_BCN1", + "svg": "beacon", + "zone": "PS2_6" + }, + { + "id": "PS2_6_DPM1", + "svg": "dpm", + "zone": "PS2_6" + }, + { + "id": "PS2_6_JR1_PB", + "svg": "jam_reset", + "zone": "PS2_6" + }, + { + "id": "PS2_6_TPE1", + "svg": "photoeye", + "zone": "PS2_6" + }, + { + "id": "PS2_6_VFD", + "svg": "conveyor", + "zone": "PS2_6" + }, + { + "id": "PS2_7_TPE1", + "svg": "photoeye", + "zone": "PS2_7" + }, + { + "id": "PS2_7_VFD", + "svg": "conveyor", + "zone": "PS2_7" + }, + { + "id": "PS2_8_TPE1", + "svg": "photoeye", + "zone": "PS2_8" + }, + { + "id": "PS2_8_VFD", + "svg": "conveyor", + "zone": "PS2_8" + }, + { + "id": "PS2_9_BCN1", + "svg": "beacon", + "zone": "PS2_9" + }, + { + "id": "PS2_9_DPM1", + "svg": "dpm", + "zone": "PS2_9" + }, + { + "id": "PS2_9_JR1_PB", + "svg": "jam_reset", + "zone": "PS2_9" + }, + { + "id": "PS2_9_TPE1", + "svg": "photoeye", + "zone": "PS2_9" + }, + { + "id": "PS2_9_VFD", + "svg": "conveyor", + "zone": "PS2_9" + }, + { + "id": "PS3_1_VFD", + "svg": "conveyor", + "zone": "PS3_1" + }, + { + "id": "PS3_10_TPE1", + "svg": "photoeye", + "zone": "PS3_10" + }, + { + "id": "PS3_10_VFD", + "svg": "conveyor", + "zone": "PS3_10" + }, + { + "id": "PS3_11_TPE1", + "svg": "photoeye", + "zone": "PS3_11" + }, + { + "id": "PS3_11_VFD", + "svg": "conveyor", + "zone": "PS3_11" + }, + { + "id": "PS3_12_DPM1", + "svg": "dpm", + "zone": "PS3_12" + }, + { + "id": "PS3_12_TPE1", + "svg": "photoeye", + "zone": "PS3_12" + }, + { + "id": "PS3_12_VFD", + "svg": "conveyor", + "zone": "PS3_12" + }, + { + "id": "PS3_13_TPE1", + "svg": "photoeye", + "zone": "PS3_13" + }, + { + "id": "PS3_13_VFD", + "svg": "conveyor", + "zone": "PS3_13" + }, + { + "id": "PS3_14_TPE1", + "svg": "photoeye", + "zone": "PS3_14" + }, + { + "id": "PS3_14_VFD", + "svg": "conveyor", + "zone": "PS3_14" + }, + { + "id": "PS3_15_DPM1", + "svg": "dpm", + "zone": "PS3_15" + }, + { + "id": "PS3_15_TPE1", + "svg": "photoeye", + "zone": "PS3_15" + }, + { + "id": "PS3_15_VFD", + "svg": "conveyor", + "zone": "PS3_15" + }, + { + "id": "PS3_16_TPE1", + "svg": "photoeye", + "zone": "PS3_16" + }, + { + "id": "PS3_16_VFD", + "svg": "conveyor", + "zone": "PS3_16" + }, + { + "id": "PS3_2_TPE1", + "svg": "photoeye", + "zone": "PS3_2" + }, + { + "id": "PS3_2_VFD", + "svg": "conveyor", + "zone": "PS3_2" + }, + { + "id": "PS3_3_BCN1", + "svg": "beacon", + "zone": "PS3_3" + }, + { + "id": "PS3_3_JR1_PB", + "svg": "jam_reset", + "zone": "PS3_3" + }, + { + "id": "PS3_3_TPE1", + "svg": "photoeye", + "zone": "PS3_3" + }, + { + "id": "PS3_3_VFD", + "svg": "conveyor", + "zone": "PS3_3" + }, + { + "id": "PS3_4_TPE1", + "svg": "photoeye", + "zone": "PS3_4" + }, + { + "id": "PS3_4_VFD", + "svg": "conveyor", + "zone": "PS3_4" + }, + { + "id": "PS3_5_TPE1", + "svg": "photoeye", + "zone": "PS3_5" + }, + { + "id": "PS3_5_VFD", + "svg": "conveyor", + "zone": "PS3_5" + }, + { + "id": "PS3_6_BCN1", + "svg": "beacon", + "zone": "PS3_6" + }, + { + "id": "PS3_6_JR1_PB", + "svg": "jam_reset", + "zone": "PS3_6" + }, + { + "id": "PS3_6_TPE1", + "svg": "photoeye", + "zone": "PS3_6" + }, + { + "id": "PS3_6_VFD", + "svg": "conveyor", + "zone": "PS3_6" + }, + { + "id": "PS3_7_TPE1", + "svg": "photoeye", + "zone": "PS3_7" + }, + { + "id": "PS3_7_VFD", + "svg": "conveyor", + "zone": "PS3_7" + }, + { + "id": "PS3_8_BCN1", + "svg": "beacon", + "zone": "PS3_8" + }, + { + "id": "PS3_8_JR1_PB", + "svg": "jam_reset", + "zone": "PS3_8" + }, + { + "id": "PS3_8_TPE1", + "svg": "photoeye", + "zone": "PS3_8" + }, + { + "id": "PS3_8_VFD", + "svg": "conveyor", + "zone": "PS3_8" + }, + { + "id": "PS3_9_TPE1", + "svg": "photoeye", + "zone": "PS3_9" + }, + { + "id": "PS3_9_VFD", + "svg": "conveyor", + "zone": "PS3_9" + }, + { + "id": "PS4_1_VFD", + "svg": "conveyor", + "zone": "PS4_1" + }, + { + "id": "PS4_10_TPE1", + "svg": "photoeye", + "zone": "PS4_10" + }, + { + "id": "PS4_10_VFD", + "svg": "conveyor", + "zone": "PS4_10" + }, + { + "id": "PS4_11_TPE1", + "svg": "photoeye", + "zone": "PS4_11" + }, + { + "id": "PS4_11_VFD", + "svg": "conveyor", + "zone": "PS4_11" + }, + { + "id": "PS4_12_TPE1", + "svg": "photoeye", + "zone": "PS4_12" + }, + { + "id": "PS4_12_VFD", + "svg": "conveyor", + "zone": "PS4_12" + }, + { + "id": "PS4_13_DPM1", + "svg": "dpm", + "zone": "PS4_13" + }, + { + "id": "PS4_13_TPE1", + "svg": "photoeye", + "zone": "PS4_13" + }, + { + "id": "PS4_13_VFD", + "svg": "conveyor", + "zone": "PS4_13" + }, + { + "id": "PS4_14_TPE1", + "svg": "photoeye", + "zone": "PS4_14" + }, + { + "id": "PS4_14_VFD", + "svg": "conveyor", + "zone": "PS4_14" + }, + { + "id": "PS4_15_BCN1", + "svg": "beacon", + "zone": "PS4_15" + }, + { + "id": "PS4_15_JR1_PB", + "svg": "jam_reset", + "zone": "PS4_15" + }, + { + "id": "PS4_15_TPE1", + "svg": "photoeye", + "zone": "PS4_15" + }, + { + "id": "PS4_15_VFD", + "svg": "conveyor", + "zone": "PS4_15" + }, + { + "id": "PS4_16_TPE1", + "svg": "photoeye", + "zone": "PS4_16" + }, + { + "id": "PS4_16_VFD", + "svg": "conveyor", + "zone": "PS4_16" + }, + { + "id": "PS4_17_BCN1", + "svg": "beacon", + "zone": "PS4_17" + }, + { + "id": "PS4_17_JR1_PB", + "svg": "jam_reset", + "zone": "PS4_17" + }, + { + "id": "PS4_17_TPE1", + "svg": "photoeye", + "zone": "PS4_17" + }, + { + "id": "PS4_17_VFD", + "svg": "conveyor", + "zone": "PS4_17" + }, + { + "id": "PS4_18_TPE1", + "svg": "photoeye", + "zone": "PS4_18" + }, + { + "id": "PS4_18_VFD", + "svg": "conveyor", + "zone": "PS4_18" + }, + { + "id": "PS4_19_BCN1", + "svg": "beacon", + "zone": "PS4_19" + }, + { + "id": "PS4_19_BCN2", + "svg": "beacon", + "zone": "PS4_19" + }, + { + "id": "PS4_19_EPC1", + "svg": "epc", + "zone": "PS4_19" + }, + { + "id": "PS4_19_EPC2", + "svg": "epc", + "zone": "PS4_19" + }, + { + "id": "PS4_19_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS4_19" + }, + { + "id": "PS4_19_S1_PB", + "svg": "start", + "zone": "PS4_19" + }, + { + "id": "PS4_19_S2_PB", + "svg": "start", + "zone": "PS4_19" + }, + { + "id": "PS4_19_TPE1", + "svg": "photoeye", + "zone": "PS4_19" + }, + { + "id": "PS4_19_VFD", + "svg": "conveyor", + "zone": "PS4_19" + }, + { + "id": "PS4_2_TPE1", + "svg": "photoeye", + "zone": "PS4_2" + }, + { + "id": "PS4_2_VFD", + "svg": "conveyor", + "zone": "PS4_2" + }, + { + "id": "PS4_3_BCN1", + "svg": "beacon", + "zone": "PS4_3" + }, + { + "id": "PS4_3_JR1_PB", + "svg": "jam_reset", + "zone": "PS4_3" + }, + { + "id": "PS4_3_TPE1", + "svg": "photoeye", + "zone": "PS4_3" + }, + { + "id": "PS4_3_VFD", + "svg": "conveyor", + "zone": "PS4_3" + }, + { + "id": "PS4_4_TPE1", + "svg": "photoeye", + "zone": "PS4_4" + }, + { + "id": "PS4_4_VFD", + "svg": "conveyor", + "zone": "PS4_4" + }, + { + "id": "PS4_5_BCN1", + "svg": "beacon", + "zone": "PS4_5" + }, + { + "id": "PS4_5_DPM1", + "svg": "dpm", + "zone": "PS4_5" + }, + { + "id": "PS4_5_EPC1", + "svg": "epc", + "zone": "PS4_5" + }, + { + "id": "PS4_5_S1_PB", + "svg": "start", + "zone": "PS4_5" + }, + { + "id": "PS4_5_TPE1", + "svg": "photoeye", + "zone": "PS4_5" + }, + { + "id": "PS4_5_VFD", + "svg": "conveyor", + "zone": "PS4_5" + }, + { + "id": "PS4_6_BCN1", + "svg": "beacon", + "zone": "PS4_6" + }, + { + "id": "PS4_6_JR1_PB", + "svg": "jam_reset", + "zone": "PS4_6" + }, + { + "id": "PS4_6_TPE1", + "svg": "photoeye", + "zone": "PS4_6" + }, + { + "id": "PS4_6_VFD", + "svg": "conveyor", + "zone": "PS4_6" + }, + { + "id": "PS4_7_TPE1", + "svg": "photoeye", + "zone": "PS4_7" + }, + { + "id": "PS4_7_VFD", + "svg": "conveyor", + "zone": "PS4_7" + }, + { + "id": "PS4_8_BCN1", + "svg": "beacon", + "zone": "PS4_8" + }, + { + "id": "PS4_8_DPM1", + "svg": "dpm", + "zone": "PS4_8" + }, + { + "id": "PS4_8_JR1_PB", + "svg": "jam_reset", + "zone": "PS4_8" + }, + { + "id": "PS4_8_TPE1", + "svg": "photoeye", + "zone": "PS4_8" + }, + { + "id": "PS4_8_VFD", + "svg": "conveyor", + "zone": "PS4_8" + }, + { + "id": "PS4_9_TPE1", + "svg": "photoeye", + "zone": "PS4_9" + }, + { + "id": "PS4_9_VFD", + "svg": "conveyor", + "zone": "PS4_9" + }, + { + "id": "PS5_1_VFD", + "svg": "conveyor", + "zone": "PS5_1" + }, + { + "id": "PS5_10_TPE1", + "svg": "photoeye", + "zone": "PS5_10" + }, + { + "id": "PS5_10_VFD", + "svg": "conveyor", + "zone": "PS5_10" + }, + { + "id": "PS5_11_TPE1", + "svg": "photoeye", + "zone": "PS5_11" + }, + { + "id": "PS5_11_VFD", + "svg": "conveyor", + "zone": "PS5_11" + }, + { + "id": "PS5_12_BCN1", + "svg": "beacon", + "zone": "PS5_12" + }, + { + "id": "PS5_12_BCN2", + "svg": "beacon", + "zone": "PS5_12" + }, + { + "id": "PS5_12_EPC1", + "svg": "epc", + "zone": "PS5_12" + }, + { + "id": "PS5_12_EPC2", + "svg": "epc", + "zone": "PS5_12" + }, + { + "id": "PS5_12_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS5_12" + }, + { + "id": "PS5_12_S1_PB", + "svg": "start", + "zone": "PS5_12" + }, + { + "id": "PS5_12_S2_PB", + "svg": "start", + "zone": "PS5_12" + }, + { + "id": "PS5_12_TPE1", + "svg": "photoeye", + "zone": "PS5_12" + }, + { + "id": "PS5_12_VFD", + "svg": "conveyor", + "zone": "PS5_12" + }, + { + "id": "PS5_2_TPE1", + "svg": "photoeye", + "zone": "PS5_2" + }, + { + "id": "PS5_2_VFD", + "svg": "conveyor", + "zone": "PS5_2" + }, + { + "id": "PS5_3_TPE1", + "svg": "photoeye", + "zone": "PS5_3" + }, + { + "id": "PS5_3_VFD", + "svg": "conveyor", + "zone": "PS5_3" + }, + { + "id": "PS5_4_BCN1", + "svg": "beacon", + "zone": "PS5_4" + }, + { + "id": "PS5_4_BCN2", + "svg": "beacon", + "zone": "PS5_4" + }, + { + "id": "PS5_4_EPC1", + "svg": "epc", + "zone": "PS5_4" + }, + { + "id": "PS5_4_EPC2", + "svg": "epc", + "zone": "PS5_4" + }, + { + "id": "PS5_4_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS5_4" + }, + { + "id": "PS5_4_S1_PB", + "svg": "start", + "zone": "PS5_4" + }, + { + "id": "PS5_4_S2_PB", + "svg": "start", + "zone": "PS5_4" + }, + { + "id": "PS5_4_TPE1", + "svg": "photoeye", + "zone": "PS5_4" + }, + { + "id": "PS5_4_VFD", + "svg": "conveyor", + "zone": "PS5_4" + }, + { + "id": "PS5_5_BCN1", + "svg": "beacon", + "zone": "PS5_5" + }, + { + "id": "PS5_5_BCN2", + "svg": "beacon", + "zone": "PS5_5" + }, + { + "id": "PS5_5_EPC1", + "svg": "epc", + "zone": "PS5_5" + }, + { + "id": "PS5_5_EPC2", + "svg": "epc", + "zone": "PS5_5" + }, + { + "id": "PS5_5_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS5_5" + }, + { + "id": "PS5_5_S1_PB", + "svg": "start", + "zone": "PS5_5" + }, + { + "id": "PS5_5_S2_PB", + "svg": "start", + "zone": "PS5_5" + }, + { + "id": "PS5_5_TPE1", + "svg": "photoeye", + "zone": "PS5_5" + }, + { + "id": "PS5_5_VFD", + "svg": "conveyor", + "zone": "PS5_5" + }, + { + "id": "PS5_6_TPE1", + "svg": "photoeye", + "zone": "PS5_6" + }, + { + "id": "PS5_6_VFD", + "svg": "conveyor", + "zone": "PS5_6" + }, + { + "id": "PS5_7_TPE1", + "svg": "photoeye", + "zone": "PS5_7" + }, + { + "id": "PS5_7_VFD", + "svg": "conveyor", + "zone": "PS5_7" + }, + { + "id": "PS5_8_TPE1", + "svg": "photoeye", + "zone": "PS5_8" + }, + { + "id": "PS5_8_VFD", + "svg": "conveyor", + "zone": "PS5_8" + }, + { + "id": "PS5_9_BCN1", + "svg": "beacon", + "zone": "PS5_9" + }, + { + "id": "PS5_9_BCN2", + "svg": "beacon", + "zone": "PS5_9" + }, + { + "id": "PS5_9_DPM1", + "svg": "dpm", + "zone": "PS5_9" + }, + { + "id": "PS5_9_EPC1", + "svg": "epc", + "zone": "PS5_9" + }, + { + "id": "PS5_9_EPC2", + "svg": "epc", + "zone": "PS5_9" + }, + { + "id": "PS5_9_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS5_9" + }, + { + "id": "PS5_9_S1_PB", + "svg": "start", + "zone": "PS5_9" + }, + { + "id": "PS5_9_S2_PB", + "svg": "start", + "zone": "PS5_9" + }, + { + "id": "PS5_9_TPE1", + "svg": "photoeye", + "zone": "PS5_9" + }, + { + "id": "PS5_9_VFD", + "svg": "conveyor", + "zone": "PS5_9" + } + ], + "MCM09": [ + { + "id": "NCP1_1_BCN1", + "svg": "beacon", + "zone": "NCP1_1" + }, + { + "id": "NCP1_1_DPM1", + "svg": "dpm", + "zone": "NCP1_1" + }, + { + "id": "NCP1_1_JR1_PB", + "svg": "jam_reset", + "zone": "NCP1_1" + }, + { + "id": "NCP1_1_TPE1", + "svg": "photoeye", + "zone": "NCP1_1" + }, + { + "id": "NCP1_1_TPE2", + "svg": "photoeye", + "zone": "NCP1_1" + }, + { + "id": "NCP1_1_TPE3", + "svg": "photoeye", + "zone": "NCP1_1" + }, + { + "id": "NCP1_1_VFD", + "svg": "conveyor", + "zone": "NCP1_1" + }, + { + "id": "NCP1_2_BCN1", + "svg": "beacon", + "zone": "NCP1_2" + }, + { + "id": "NCP1_2_DPM1", + "svg": "dpm", + "zone": "NCP1_2" + }, + { + "id": "NCP1_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "NCP1_2" + }, + { + "id": "NCP1_2_JR1_PB", + "svg": "jam_reset", + "zone": "NCP1_2" + }, + { + "id": "NCP1_2_TPE1", + "svg": "photoeye", + "zone": "NCP1_2" + }, + { + "id": "NCP1_2_TPE2", + "svg": "photoeye", + "zone": "NCP1_2" + }, + { + "id": "NCP1_2_TPE3", + "svg": "photoeye", + "zone": "NCP1_2" + }, + { + "id": "NCP1_2_VFD", + "svg": "conveyor", + "zone": "NCP1_2" + }, + { + "id": "NCP1_3_BCN1", + "svg": "beacon", + "zone": "NCP1_3" + }, + { + "id": "NCP1_3_BCN2", + "svg": "beacon", + "zone": "NCP1_3" + }, + { + "id": "NCP1_3_DPM1", + "svg": "dpm", + "zone": "NCP1_3" + }, + { + "id": "NCP1_3_FIOM1", + "svg": "fio_sio_fioh", + "zone": "NCP1_3" + }, + { + "id": "NCP1_3_JR1_PB", + "svg": "jam_reset", + "zone": "NCP1_3" + }, + { + "id": "NCP1_3_JR2_PB", + "svg": "jam_reset", + "zone": "NCP1_3" + }, + { + "id": "NCP1_3_TPE1", + "svg": "photoeye", + "zone": "NCP1_3" + }, + { + "id": "NCP1_3_TPE2", + "svg": "photoeye", + "zone": "NCP1_3" + }, + { + "id": "NCP1_3_TPE3", + "svg": "photoeye", + "zone": "NCP1_3" + }, + { + "id": "NCP1_3_TPE4", + "svg": "photoeye", + "zone": "NCP1_3" + }, + { + "id": "NCP1_3_TPE5", + "svg": "photoeye", + "zone": "NCP1_3" + }, + { + "id": "NCP1_3_VFD", + "svg": "conveyor", + "zone": "NCP1_3" + }, + { + "id": "NCP1_4A_VFD", + "svg": "conveyor", + "zone": "NCP1_4A" + }, + { + "id": "NCP1_4B_VFD", + "svg": "conveyor", + "zone": "NCP1_4B" + }, + { + "id": "NCP1_5_TPE1", + "svg": "photoeye", + "zone": "NCP1_5" + }, + { + "id": "PDP04", + "svg": "pdp", + "zone": "PDP04" + }, + { + "id": "PDP04_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP04" + }, + { + "id": "PDP04_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP04" + }, + { + "id": "UL17_19_BCN1", + "svg": "beacon", + "zone": "UL17_19" + }, + { + "id": "UL17_19_EPC1", + "svg": "epc", + "zone": "UL17_19" + }, + { + "id": "UL17_19_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL17_19" + }, + { + "id": "UL17_19_S1_PB", + "svg": "start", + "zone": "UL17_19" + }, + { + "id": "UL17_19_TPE1", + "svg": "photoeye", + "zone": "UL17_19" + }, + { + "id": "UL17_19_VFD", + "svg": "conveyor", + "zone": "UL17_19" + }, + { + "id": "UL17_20_TPE1", + "svg": "photoeye", + "zone": "UL17_20" + }, + { + "id": "UL17_20_VFD", + "svg": "conveyor", + "zone": "UL17_20" + }, + { + "id": "UL17_21_TPE1", + "svg": "photoeye", + "zone": "UL17_21" + }, + { + "id": "UL17_21_VFD", + "svg": "conveyor", + "zone": "UL17_21" + }, + { + "id": "UL17_22_BCN1", + "svg": "beacon", + "zone": "UL17_22" + }, + { + "id": "UL17_22_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL17_22" + }, + { + "id": "UL17_22_JR1_PB", + "svg": "jam_reset", + "zone": "UL17_22" + }, + { + "id": "UL17_22_TPE1", + "svg": "photoeye", + "zone": "UL17_22" + }, + { + "id": "UL17_22_VFD", + "svg": "conveyor", + "zone": "UL17_22" + }, + { + "id": "UL17_23_TPE1", + "svg": "photoeye", + "zone": "UL17_23" + }, + { + "id": "UL17_23_VFD", + "svg": "conveyor", + "zone": "UL17_23" + }, + { + "id": "UL17_24_LPE1", + "svg": "photoeye", + "zone": "UL17_24" + }, + { + "id": "UL17_24_LPE2", + "svg": "photoeye", + "zone": "UL17_24" + }, + { + "id": "UL17_24_TPE1", + "svg": "photoeye", + "zone": "UL17_24" + }, + { + "id": "UL17_24_VFD", + "svg": "conveyor", + "zone": "UL17_24" + }, + { + "id": "UL17_25_VFD", + "svg": "conveyor", + "zone": "UL17_25" + }, + { + "id": "UL20_19_BCN1", + "svg": "beacon", + "zone": "UL20_19" + }, + { + "id": "UL20_19_EPC1", + "svg": "epc", + "zone": "UL20_19" + }, + { + "id": "UL20_19_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL20_19" + }, + { + "id": "UL20_19_S1_PB", + "svg": "start", + "zone": "UL20_19" + }, + { + "id": "UL20_19_TPE1", + "svg": "photoeye", + "zone": "UL20_19" + }, + { + "id": "UL20_19_VFD", + "svg": "conveyor", + "zone": "UL20_19" + }, + { + "id": "UL20_20_TPE1", + "svg": "photoeye", + "zone": "UL20_20" + }, + { + "id": "UL20_20_VFD", + "svg": "conveyor", + "zone": "UL20_20" + }, + { + "id": "UL20_21_TPE1", + "svg": "photoeye", + "zone": "UL20_21" + }, + { + "id": "UL20_21_VFD", + "svg": "conveyor", + "zone": "UL20_21" + }, + { + "id": "UL20_22_BCN1", + "svg": "beacon", + "zone": "UL20_22" + }, + { + "id": "UL20_22_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL20_22" + }, + { + "id": "UL20_22_JR1_PB", + "svg": "jam_reset", + "zone": "UL20_22" + }, + { + "id": "UL20_22_TPE1", + "svg": "photoeye", + "zone": "UL20_22" + }, + { + "id": "UL20_22_VFD", + "svg": "conveyor", + "zone": "UL20_22" + }, + { + "id": "UL20_23_TPE1", + "svg": "photoeye", + "zone": "UL20_23" + }, + { + "id": "UL20_23_VFD", + "svg": "conveyor", + "zone": "UL20_23" + }, + { + "id": "UL20_24_LPE1", + "svg": "photoeye", + "zone": "UL20_24" + }, + { + "id": "UL20_24_LPE2", + "svg": "photoeye", + "zone": "UL20_24" + }, + { + "id": "UL20_24_TPE1", + "svg": "photoeye", + "zone": "UL20_24" + }, + { + "id": "UL20_24_VFD", + "svg": "conveyor", + "zone": "UL20_24" + }, + { + "id": "UL20_25_VFD", + "svg": "conveyor", + "zone": "UL20_25" + }, + { + "id": "UL23_19_BCN1", + "svg": "beacon", + "zone": "UL23_19" + }, + { + "id": "UL23_19_EPC1", + "svg": "epc", + "zone": "UL23_19" + }, + { + "id": "UL23_19_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL23_19" + }, + { + "id": "UL23_19_S1_PB", + "svg": "start", + "zone": "UL23_19" + }, + { + "id": "UL23_19_TPE1", + "svg": "photoeye", + "zone": "UL23_19" + }, + { + "id": "UL23_19_VFD", + "svg": "conveyor", + "zone": "UL23_19" + }, + { + "id": "UL23_20_TPE1", + "svg": "photoeye", + "zone": "UL23_20" + }, + { + "id": "UL23_20_VFD", + "svg": "conveyor", + "zone": "UL23_20" + }, + { + "id": "UL23_21_TPE1", + "svg": "photoeye", + "zone": "UL23_21" + }, + { + "id": "UL23_21_VFD", + "svg": "conveyor", + "zone": "UL23_21" + }, + { + "id": "UL23_22_BCN1", + "svg": "beacon", + "zone": "UL23_22" + }, + { + "id": "UL23_22_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL23_22" + }, + { + "id": "UL23_22_JR1_PB", + "svg": "jam_reset", + "zone": "UL23_22" + }, + { + "id": "UL23_22_TPE1", + "svg": "photoeye", + "zone": "UL23_22" + }, + { + "id": "UL23_22_VFD", + "svg": "conveyor", + "zone": "UL23_22" + }, + { + "id": "UL23_23_TPE1", + "svg": "photoeye", + "zone": "UL23_23" + }, + { + "id": "UL23_23_VFD", + "svg": "conveyor", + "zone": "UL23_23" + }, + { + "id": "UL23_24_LPE1", + "svg": "photoeye", + "zone": "UL23_24" + }, + { + "id": "UL23_24_LPE2", + "svg": "photoeye", + "zone": "UL23_24" + }, + { + "id": "UL23_24_TPE1", + "svg": "photoeye", + "zone": "UL23_24" + }, + { + "id": "UL23_24_VFD", + "svg": "conveyor", + "zone": "UL23_24" + }, + { + "id": "UL23_25_VFD", + "svg": "conveyor", + "zone": "UL23_25" + }, + { + "id": "UL26_19_BCN1", + "svg": "beacon", + "zone": "UL26_19" + }, + { + "id": "UL26_19_EPC1", + "svg": "epc", + "zone": "UL26_19" + }, + { + "id": "UL26_19_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL26_19" + }, + { + "id": "UL26_19_S1_PB", + "svg": "start", + "zone": "UL26_19" + }, + { + "id": "UL26_19_TPE1", + "svg": "photoeye", + "zone": "UL26_19" + }, + { + "id": "UL26_19_VFD", + "svg": "conveyor", + "zone": "UL26_19" + }, + { + "id": "UL26_20_TPE1", + "svg": "photoeye", + "zone": "UL26_20" + }, + { + "id": "UL26_20_VFD", + "svg": "conveyor", + "zone": "UL26_20" + }, + { + "id": "UL26_21_TPE1", + "svg": "photoeye", + "zone": "UL26_21" + }, + { + "id": "UL26_21_VFD", + "svg": "conveyor", + "zone": "UL26_21" + }, + { + "id": "UL26_22_BCN1", + "svg": "beacon", + "zone": "UL26_22" + }, + { + "id": "UL26_22_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL26_22" + }, + { + "id": "UL26_22_JR1_PB", + "svg": "jam_reset", + "zone": "UL26_22" + }, + { + "id": "UL26_22_TPE1", + "svg": "photoeye", + "zone": "UL26_22" + }, + { + "id": "UL26_22_VFD", + "svg": "conveyor", + "zone": "UL26_22" + }, + { + "id": "UL26_23_TPE1", + "svg": "photoeye", + "zone": "UL26_23" + }, + { + "id": "UL26_23_VFD", + "svg": "conveyor", + "zone": "UL26_23" + }, + { + "id": "UL26_24_LPE1", + "svg": "photoeye", + "zone": "UL26_24" + }, + { + "id": "UL26_24_LPE2", + "svg": "photoeye", + "zone": "UL26_24" + }, + { + "id": "UL26_24_TPE1", + "svg": "photoeye", + "zone": "UL26_24" + }, + { + "id": "UL26_24_VFD", + "svg": "conveyor", + "zone": "UL26_24" + }, + { + "id": "UL26_25_VFD", + "svg": "conveyor", + "zone": "UL26_25" + }, + { + "id": "UL29_19_BCN1", + "svg": "beacon", + "zone": "UL29_19" + }, + { + "id": "UL29_19_EPC1", + "svg": "epc", + "zone": "UL29_19" + }, + { + "id": "UL29_19_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL29_19" + }, + { + "id": "UL29_19_S1_PB", + "svg": "start", + "zone": "UL29_19" + }, + { + "id": "UL29_19_TPE1", + "svg": "photoeye", + "zone": "UL29_19" + }, + { + "id": "UL29_19_VFD", + "svg": "conveyor", + "zone": "UL29_19" + }, + { + "id": "UL29_20_TPE1", + "svg": "photoeye", + "zone": "UL29_20" + }, + { + "id": "UL29_20_VFD", + "svg": "conveyor", + "zone": "UL29_20" + }, + { + "id": "UL29_21_TPE1", + "svg": "photoeye", + "zone": "UL29_21" + }, + { + "id": "UL29_21_VFD", + "svg": "conveyor", + "zone": "UL29_21" + }, + { + "id": "UL29_22_BCN1", + "svg": "beacon", + "zone": "UL29_22" + }, + { + "id": "UL29_22_JR1_PB", + "svg": "jam_reset", + "zone": "UL29_22" + }, + { + "id": "UL29_22_TPE1", + "svg": "photoeye", + "zone": "UL29_22" + }, + { + "id": "UL29_22_VFD", + "svg": "conveyor", + "zone": "UL29_22" + }, + { + "id": "UL29_23_TPE1", + "svg": "photoeye", + "zone": "UL29_23" + }, + { + "id": "UL29_23_VFD", + "svg": "conveyor", + "zone": "UL29_23" + } + ], + "MCM10": [ + { + "id": "NCP2_1_BCN1", + "svg": "beacon", + "zone": "NCP2_1" + }, + { + "id": "NCP2_1_DPM1", + "svg": "dpm", + "zone": "NCP2_1" + }, + { + "id": "NCP2_1_JR1_PB", + "svg": "jam_reset", + "zone": "NCP2_1" + }, + { + "id": "NCP2_1_TPE1", + "svg": "photoeye", + "zone": "NCP2_1" + }, + { + "id": "NCP2_1_TPE2", + "svg": "photoeye", + "zone": "NCP2_1" + }, + { + "id": "NCP2_1_TPE3", + "svg": "photoeye", + "zone": "NCP2_1" + }, + { + "id": "NCP2_1_VFD", + "svg": "conveyor", + "zone": "NCP2_1" + }, + { + "id": "NCP2_10_TPE1", + "svg": "photoeye", + "zone": "NCP2_10" + }, + { + "id": "NCP2_10_VFD", + "svg": "conveyor", + "zone": "NCP2_10" + }, + { + "id": "NCP2_2_BCN1", + "svg": "beacon", + "zone": "NCP2_2" + }, + { + "id": "NCP2_2_DPM1", + "svg": "dpm", + "zone": "NCP2_2" + }, + { + "id": "NCP2_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "NCP2_2" + }, + { + "id": "NCP2_2_JR1_PB", + "svg": "jam_reset", + "zone": "NCP2_2" + }, + { + "id": "NCP2_2_TPE1", + "svg": "photoeye", + "zone": "NCP2_2" + }, + { + "id": "NCP2_2_TPE2", + "svg": "photoeye", + "zone": "NCP2_2" + }, + { + "id": "NCP2_2_TPE3", + "svg": "photoeye", + "zone": "NCP2_2" + }, + { + "id": "NCP2_2_VFD", + "svg": "conveyor", + "zone": "NCP2_2" + }, + { + "id": "NCP2_3_BCN1", + "svg": "beacon", + "zone": "NCP2_3" + }, + { + "id": "NCP2_3_BCN2", + "svg": "beacon", + "zone": "NCP2_3" + }, + { + "id": "NCP2_3_FIOM1", + "svg": "fio_sio_fioh", + "zone": "NCP2_3" + }, + { + "id": "NCP2_3_JR1_PB", + "svg": "jam_reset", + "zone": "NCP2_3" + }, + { + "id": "NCP2_3_JR2_PB", + "svg": "jam_reset", + "zone": "NCP2_3" + }, + { + "id": "NCP2_3_TPE1", + "svg": "photoeye", + "zone": "NCP2_3" + }, + { + "id": "NCP2_3_TPE2", + "svg": "photoeye", + "zone": "NCP2_3" + }, + { + "id": "NCP2_3_TPE3", + "svg": "photoeye", + "zone": "NCP2_3" + }, + { + "id": "NCP2_3_TPE4", + "svg": "photoeye", + "zone": "NCP2_3" + }, + { + "id": "NCP2_3_TPE5", + "svg": "photoeye", + "zone": "NCP2_3" + }, + { + "id": "NCP2_3_VFD", + "svg": "conveyor", + "zone": "NCP2_3" + }, + { + "id": "NCP2_4A_TPE1", + "svg": "photoeye", + "zone": "NCP2_4A" + }, + { + "id": "NCP2_4A_VFD", + "svg": "conveyor", + "zone": "NCP2_4A" + }, + { + "id": "NCP2_4B_VFD", + "svg": "conveyor", + "zone": "NCP2_4B" + }, + { + "id": "NCP2_5_BCN1", + "svg": "beacon", + "zone": "NCP2_5" + }, + { + "id": "NCP2_5_JR1_PB", + "svg": "jam_reset", + "zone": "NCP2_5" + }, + { + "id": "NCP2_5_TPE1", + "svg": "photoeye", + "zone": "NCP2_5" + }, + { + "id": "NCP2_5_VFD", + "svg": "conveyor", + "zone": "NCP2_5" + }, + { + "id": "NCP2_6_DPM1", + "svg": "dpm", + "zone": "NCP2_6" + }, + { + "id": "NCP2_6_TPE1", + "svg": "photoeye", + "zone": "NCP2_6" + }, + { + "id": "NCP2_6_VFD", + "svg": "conveyor", + "zone": "NCP2_6" + }, + { + "id": "NCP2_7_TPE1", + "svg": "photoeye", + "zone": "NCP2_7" + }, + { + "id": "NCP2_7_VFD", + "svg": "conveyor", + "zone": "NCP2_7" + }, + { + "id": "NCP2_8_BCN1", + "svg": "beacon", + "zone": "NCP2_8" + }, + { + "id": "NCP2_8_JR1_PB", + "svg": "jam_reset", + "zone": "NCP2_8" + }, + { + "id": "NCP2_8_TPE1", + "svg": "photoeye", + "zone": "NCP2_8" + }, + { + "id": "NCP2_8_VFD", + "svg": "conveyor", + "zone": "NCP2_8" + }, + { + "id": "NCP2_9_TPE1", + "svg": "photoeye", + "zone": "NCP2_9" + }, + { + "id": "NCP2_9_VFD", + "svg": "conveyor", + "zone": "NCP2_9" + }, + { + "id": "PDP12", + "svg": "pdp", + "zone": "PDP12" + }, + { + "id": "PDP12_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP12" + }, + { + "id": "PDP12_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP12" + }, + { + "id": "UL11_19_TPE1", + "svg": "photoeye", + "zone": "UL11_19" + }, + { + "id": "UL11_19_VFD", + "svg": "conveyor", + "zone": "UL11_19" + }, + { + "id": "UL11_20_BCN1", + "svg": "beacon", + "zone": "UL11_20" + }, + { + "id": "UL11_20_EPC1", + "svg": "epc", + "zone": "UL11_20" + }, + { + "id": "UL11_20_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL11_20" + }, + { + "id": "UL11_20_S1_PB", + "svg": "start", + "zone": "UL11_20" + }, + { + "id": "UL11_20_TPE1", + "svg": "photoeye", + "zone": "UL11_20" + }, + { + "id": "UL11_20_VFD", + "svg": "conveyor", + "zone": "UL11_20" + }, + { + "id": "UL11_21_BCN1", + "svg": "beacon", + "zone": "UL11_21" + }, + { + "id": "UL11_21_JR1_PB", + "svg": "jam_reset", + "zone": "UL11_21" + }, + { + "id": "UL11_21_TPE1", + "svg": "photoeye", + "zone": "UL11_21" + }, + { + "id": "UL11_21_VFD", + "svg": "conveyor", + "zone": "UL11_21" + }, + { + "id": "UL11_22_TPE1", + "svg": "photoeye", + "zone": "UL11_22" + }, + { + "id": "UL11_22_VFD", + "svg": "conveyor", + "zone": "UL11_22" + }, + { + "id": "UL11_23_LPE1", + "svg": "photoeye", + "zone": "UL11_23" + }, + { + "id": "UL11_23_LPE2", + "svg": "photoeye", + "zone": "UL11_23" + }, + { + "id": "UL11_23_TPE1", + "svg": "photoeye", + "zone": "UL11_23" + }, + { + "id": "UL11_23_VFD", + "svg": "conveyor", + "zone": "UL11_23" + }, + { + "id": "UL11_24_VFD", + "svg": "conveyor", + "zone": "UL11_24" + }, + { + "id": "UL14_19_TPE1", + "svg": "photoeye", + "zone": "UL14_19" + }, + { + "id": "UL14_19_VFD", + "svg": "conveyor", + "zone": "UL14_19" + }, + { + "id": "UL14_20_BCN1", + "svg": "beacon", + "zone": "UL14_20" + }, + { + "id": "UL14_20_EPC1", + "svg": "epc", + "zone": "UL14_20" + }, + { + "id": "UL14_20_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL14_20" + }, + { + "id": "UL14_20_S1_PB", + "svg": "start", + "zone": "UL14_20" + }, + { + "id": "UL14_20_TPE1", + "svg": "photoeye", + "zone": "UL14_20" + }, + { + "id": "UL14_20_VFD", + "svg": "conveyor", + "zone": "UL14_20" + }, + { + "id": "UL14_21_TPE1", + "svg": "photoeye", + "zone": "UL14_21" + }, + { + "id": "UL14_21_VFD", + "svg": "conveyor", + "zone": "UL14_21" + }, + { + "id": "UL14_22_BCN1", + "svg": "beacon", + "zone": "UL14_22" + }, + { + "id": "UL14_22_JR1_PB", + "svg": "jam_reset", + "zone": "UL14_22" + }, + { + "id": "UL14_22_TPE1", + "svg": "photoeye", + "zone": "UL14_22" + }, + { + "id": "UL14_22_VFD", + "svg": "conveyor", + "zone": "UL14_22" + }, + { + "id": "UL14_23_TPE1", + "svg": "photoeye", + "zone": "UL14_23" + }, + { + "id": "UL14_23_VFD", + "svg": "conveyor", + "zone": "UL14_23" + }, + { + "id": "UL3_19_TPE1", + "svg": "photoeye", + "zone": "UL3_19" + }, + { + "id": "UL3_19_VFD", + "svg": "conveyor", + "zone": "UL3_19" + }, + { + "id": "UL3_20_BCN1", + "svg": "beacon", + "zone": "UL3_20" + }, + { + "id": "UL3_20_EPC1", + "svg": "epc", + "zone": "UL3_20" + }, + { + "id": "UL3_20_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL3_20" + }, + { + "id": "UL3_20_S1_PB", + "svg": "start", + "zone": "UL3_20" + }, + { + "id": "UL3_20_TPE1", + "svg": "photoeye", + "zone": "UL3_20" + }, + { + "id": "UL3_20_VFD", + "svg": "conveyor", + "zone": "UL3_20" + }, + { + "id": "UL3_21_BCN1", + "svg": "beacon", + "zone": "UL3_21" + }, + { + "id": "UL3_21_JR1_PB", + "svg": "jam_reset", + "zone": "UL3_21" + }, + { + "id": "UL3_21_TPE1", + "svg": "photoeye", + "zone": "UL3_21" + }, + { + "id": "UL3_21_VFD", + "svg": "conveyor", + "zone": "UL3_21" + }, + { + "id": "UL3_22_TPE1", + "svg": "photoeye", + "zone": "UL3_22" + }, + { + "id": "UL3_22_VFD", + "svg": "conveyor", + "zone": "UL3_22" + }, + { + "id": "UL3_23_LPE1", + "svg": "photoeye", + "zone": "UL3_23" + }, + { + "id": "UL3_23_LPE2", + "svg": "photoeye", + "zone": "UL3_23" + }, + { + "id": "UL3_23_TPE1", + "svg": "photoeye", + "zone": "UL3_23" + }, + { + "id": "UL3_23_VFD", + "svg": "conveyor", + "zone": "UL3_23" + }, + { + "id": "UL3_24_BCN1", + "svg": "beacon", + "zone": "UL3_24" + }, + { + "id": "UL3_24_EPC1", + "svg": "epc", + "zone": "UL3_24" + }, + { + "id": "UL3_24_S1_PB", + "svg": "start", + "zone": "UL3_24" + }, + { + "id": "UL3_24_VFD", + "svg": "conveyor", + "zone": "UL3_24" + }, + { + "id": "UL6_19_TPE1", + "svg": "photoeye", + "zone": "UL6_19" + }, + { + "id": "UL6_19_VFD", + "svg": "conveyor", + "zone": "UL6_19" + }, + { + "id": "UL6_20_BCN1", + "svg": "beacon", + "zone": "UL6_20" + }, + { + "id": "UL6_20_EPC1", + "svg": "epc", + "zone": "UL6_20" + }, + { + "id": "UL6_20_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL6_20" + }, + { + "id": "UL6_20_S1_PB", + "svg": "start", + "zone": "UL6_20" + }, + { + "id": "UL6_20_TPE1", + "svg": "photoeye", + "zone": "UL6_20" + }, + { + "id": "UL6_20_VFD", + "svg": "conveyor", + "zone": "UL6_20" + }, + { + "id": "UL6_21_BCN1", + "svg": "beacon", + "zone": "UL6_21" + }, + { + "id": "UL6_21_JR1_PB", + "svg": "jam_reset", + "zone": "UL6_21" + }, + { + "id": "UL6_21_TPE1", + "svg": "photoeye", + "zone": "UL6_21" + }, + { + "id": "UL6_21_VFD", + "svg": "conveyor", + "zone": "UL6_21" + }, + { + "id": "UL6_22_TPE1", + "svg": "photoeye", + "zone": "UL6_22" + }, + { + "id": "UL6_22_VFD", + "svg": "conveyor", + "zone": "UL6_22" + }, + { + "id": "UL6_23_LPE1", + "svg": "photoeye", + "zone": "UL6_23" + }, + { + "id": "UL6_23_LPE2", + "svg": "photoeye", + "zone": "UL6_23" + }, + { + "id": "UL6_23_TPE1", + "svg": "photoeye", + "zone": "UL6_23" + }, + { + "id": "UL6_23_VFD", + "svg": "conveyor", + "zone": "UL6_23" + }, + { + "id": "UL6_24_VFD", + "svg": "conveyor", + "zone": "UL6_24" + }, + { + "id": "UL8_19_TPE1", + "svg": "photoeye", + "zone": "UL8_19" + }, + { + "id": "UL8_19_VFD", + "svg": "conveyor", + "zone": "UL8_19" + }, + { + "id": "UL8_20_BCN1", + "svg": "beacon", + "zone": "UL8_20" + }, + { + "id": "UL8_20_EPC1", + "svg": "epc", + "zone": "UL8_20" + }, + { + "id": "UL8_20_FIOM1", + "svg": "fio_sio_fioh", + "zone": "UL8_20" + }, + { + "id": "UL8_20_S1_PB", + "svg": "start", + "zone": "UL8_20" + }, + { + "id": "UL8_20_TPE1", + "svg": "photoeye", + "zone": "UL8_20" + }, + { + "id": "UL8_20_VFD", + "svg": "conveyor", + "zone": "UL8_20" + }, + { + "id": "UL8_21_BCN1", + "svg": "beacon", + "zone": "UL8_21" + }, + { + "id": "UL8_21_JR1_PB", + "svg": "jam_reset", + "zone": "UL8_21" + }, + { + "id": "UL8_21_TPE1", + "svg": "photoeye", + "zone": "UL8_21" + }, + { + "id": "UL8_21_VFD", + "svg": "conveyor", + "zone": "UL8_21" + }, + { + "id": "UL8_22_TPE1", + "svg": "photoeye", + "zone": "UL8_22" + }, + { + "id": "UL8_22_VFD", + "svg": "conveyor", + "zone": "UL8_22" + }, + { + "id": "UL8_23_LPE1", + "svg": "photoeye", + "zone": "UL8_23" + }, + { + "id": "UL8_23_LPE2", + "svg": "photoeye", + "zone": "UL8_23" + }, + { + "id": "UL8_23_TPE1", + "svg": "photoeye", + "zone": "UL8_23" + }, + { + "id": "UL8_23_VFD", + "svg": "conveyor", + "zone": "UL8_23" + }, + { + "id": "UL8_24_VFD", + "svg": "conveyor", + "zone": "UL8_24" + } + ], + "MCM11": [ + { + "id": "NCP1_10_BCN1", + "svg": "beacon", + "zone": "NCP1_10" + }, + { + "id": "NCP1_10_DPM1", + "svg": "dpm", + "zone": "NCP1_10" + }, + { + "id": "NCP1_10_EPC1", + "svg": "epc", + "zone": "NCP1_10" + }, + { + "id": "NCP1_10_S1_PB", + "svg": "start", + "zone": "NCP1_10" + }, + { + "id": "NCP1_10_TPE1", + "svg": "photoeye", + "zone": "NCP1_10" + }, + { + "id": "NCP1_10_TPE2", + "svg": "photoeye", + "zone": "NCP1_10" + }, + { + "id": "NCP1_10_TPE3", + "svg": "photoeye", + "zone": "NCP1_10" + }, + { + "id": "NCP1_10_VFD", + "svg": "conveyor", + "zone": "NCP1_10" + }, + { + "id": "NCP1_11A_VFD", + "svg": "conveyor", + "zone": "NCP1_11A" + }, + { + "id": "NCP1_11B_VFD", + "svg": "conveyor", + "zone": "NCP1_11B" + }, + { + "id": "NCP1_12_BCN1", + "svg": "beacon", + "zone": "NCP1_12" + }, + { + "id": "NCP1_12_EPC1", + "svg": "epc", + "zone": "NCP1_12" + }, + { + "id": "NCP1_12_EPC2", + "svg": "epc", + "zone": "NCP1_12" + }, + { + "id": "NCP1_12_S1_PB", + "svg": "start", + "zone": "NCP1_12" + }, + { + "id": "NCP1_12_TPE1", + "svg": "photoeye", + "zone": "NCP1_12" + }, + { + "id": "NCP1_12_TPE2", + "svg": "photoeye", + "zone": "NCP1_12" + }, + { + "id": "NCP1_12_VFD", + "svg": "conveyor", + "zone": "NCP1_12" + }, + { + "id": "NCP1_13A_VFD", + "svg": "conveyor", + "zone": "NCP1_13A" + }, + { + "id": "NCP1_13B_VFD", + "svg": "conveyor", + "zone": "NCP1_13B" + }, + { + "id": "NCP1_13C_VFD", + "svg": "conveyor", + "zone": "NCP1_13C" + }, + { + "id": "NCP1_13D_VFD", + "svg": "conveyor", + "zone": "NCP1_13D" + }, + { + "id": "NCP1_14_BCN1", + "svg": "beacon", + "zone": "NCP1_14" + }, + { + "id": "NCP1_14_JR1_PB", + "svg": "jam_reset", + "zone": "NCP1_14" + }, + { + "id": "NCP1_14_JR2_PB", + "svg": "jam_reset", + "zone": "NCP1_14" + }, + { + "id": "NCP1_14_TPE1", + "svg": "photoeye", + "zone": "NCP1_14" + }, + { + "id": "NCP1_14_TPE2", + "svg": "photoeye", + "zone": "NCP1_14" + }, + { + "id": "NCP1_14_VFD", + "svg": "conveyor", + "zone": "NCP1_14" + }, + { + "id": "NCP1_15_TPE1", + "svg": "photoeye", + "zone": "NCP1_15" + }, + { + "id": "NCP1_15_VFD", + "svg": "conveyor", + "zone": "NCP1_15" + }, + { + "id": "NCP1_17_FIOM1", + "svg": "fio_sio_fioh", + "zone": "NCP1_17" + }, + { + "id": "NCP1_18_TPE1", + "svg": "photoeye", + "zone": "NCP1_18" + }, + { + "id": "NCP1_18_VFD", + "svg": "conveyor", + "zone": "NCP1_18" + }, + { + "id": "NCP1_5_TPE2", + "svg": "photoeye", + "zone": "NCP1_5" + }, + { + "id": "NCP1_5_VFD", + "svg": "conveyor", + "zone": "NCP1_5" + }, + { + "id": "NCP1_6_TPE1", + "svg": "photoeye", + "zone": "NCP1_6" + }, + { + "id": "NCP1_6_VFD", + "svg": "conveyor", + "zone": "NCP1_6" + }, + { + "id": "NCP1_7_TPE1", + "svg": "photoeye", + "zone": "NCP1_7" + }, + { + "id": "NCP1_7_VFD", + "svg": "conveyor", + "zone": "NCP1_7" + }, + { + "id": "NCP1_8_TPE1", + "svg": "photoeye", + "zone": "NCP1_8" + }, + { + "id": "NCP1_8_VFD", + "svg": "conveyor", + "zone": "NCP1_8" + }, + { + "id": "NCP1_9_BCN1", + "svg": "beacon", + "zone": "NCP1_9" + }, + { + "id": "NCP1_9_EPC1", + "svg": "epc", + "zone": "NCP1_9" + }, + { + "id": "NCP1_9_S1_PB", + "svg": "start", + "zone": "NCP1_9" + }, + { + "id": "NCP1_9_TPE1", + "svg": "photoeye", + "zone": "NCP1_9" + }, + { + "id": "NCP1_9_VFD", + "svg": "conveyor", + "zone": "NCP1_9" + }, + { + "id": "NCR1_10_EPC1", + "svg": "epc", + "zone": "NCR1_10" + }, + { + "id": "NCR1_10_LPE1", + "svg": "photoeye", + "zone": "NCR1_10" + }, + { + "id": "NCR1_10_TPE1", + "svg": "photoeye", + "zone": "NCR1_10" + }, + { + "id": "NCR1_10_VFD", + "svg": "conveyor", + "zone": "NCR1_10" + }, + { + "id": "NCR1_11_EPC1", + "svg": "epc", + "zone": "NCR1_11" + }, + { + "id": "NCR1_11_FIOM1", + "svg": "fio_sio_fioh", + "zone": "NCR1_11" + }, + { + "id": "NCR1_11_VFD", + "svg": "conveyor", + "zone": "NCR1_11" + }, + { + "id": "NCR1_2_BCN1", + "svg": "beacon", + "zone": "NCR1_2" + }, + { + "id": "NCR1_2_BCN2", + "svg": "beacon", + "zone": "NCR1_2" + }, + { + "id": "NCR1_2_EPC1", + "svg": "epc", + "zone": "NCR1_2" + }, + { + "id": "NCR1_2_EPC2", + "svg": "epc", + "zone": "NCR1_2" + }, + { + "id": "NCR1_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "NCR1_2" + }, + { + "id": "NCR1_2_SS1_SPB", + "svg": "start_stop", + "zone": "NCR1_2" + }, + { + "id": "NCR1_2_SS1_STPB", + "svg": "start_stop", + "zone": "NCR1_2" + }, + { + "id": "NCR1_2_SS2_SPB", + "svg": "start_stop", + "zone": "NCR1_2" + }, + { + "id": "NCR1_2_SS2_STPB", + "svg": "start_stop", + "zone": "NCR1_2" + }, + { + "id": "NCR1_2_TPE1", + "svg": "photoeye", + "zone": "NCR1_2" + }, + { + "id": "NCR1_2_TPE2", + "svg": "photoeye", + "zone": "NCR1_2" + }, + { + "id": "NCR1_2_VFD", + "svg": "conveyor", + "zone": "NCR1_2" + }, + { + "id": "NCR1_3_TPE1", + "svg": "photoeye", + "zone": "NCR1_3" + }, + { + "id": "NCR1_3_VFD", + "svg": "conveyor", + "zone": "NCR1_3" + }, + { + "id": "NCR1_4_TPE1", + "svg": "photoeye", + "zone": "NCR1_4" + }, + { + "id": "NCR1_4_VFD", + "svg": "conveyor", + "zone": "NCR1_4" + }, + { + "id": "NCR1_5_BCN1", + "svg": "beacon", + "zone": "NCR1_5" + }, + { + "id": "NCR1_5_JR1_PB", + "svg": "jam_reset", + "zone": "NCR1_5" + }, + { + "id": "NCR1_5_JR2_PB", + "svg": "jam_reset", + "zone": "NCR1_5" + }, + { + "id": "NCR1_5_TPE1", + "svg": "photoeye", + "zone": "NCR1_5" + }, + { + "id": "NCR1_5_VFD", + "svg": "conveyor", + "zone": "NCR1_5" + }, + { + "id": "NCR1_6A_VFD", + "svg": "conveyor", + "zone": "NCR1_6A" + }, + { + "id": "NCR1_6B_VFD", + "svg": "conveyor", + "zone": "NCR1_6B" + }, + { + "id": "NCR1_7_TPE1", + "svg": "photoeye", + "zone": "NCR1_7" + }, + { + "id": "NCR1_7_VFD", + "svg": "conveyor", + "zone": "NCR1_7" + }, + { + "id": "NCR1_8_TPE1", + "svg": "photoeye", + "zone": "NCR1_8" + }, + { + "id": "NCR1_8_VFD", + "svg": "conveyor", + "zone": "NCR1_8" + }, + { + "id": "NCR1_9_TPE1", + "svg": "photoeye", + "zone": "NCR1_9" + }, + { + "id": "NCR1_9_VFD", + "svg": "conveyor", + "zone": "NCR1_9" + }, + { + "id": "NCS1_1_BCN1", + "svg": "beacon", + "zone": "NCS1_1" + }, + { + "id": "NCS1_1_EPC1", + "svg": "epc", + "zone": "NCS1_1" + }, + { + "id": "NCS1_1_S1_PB", + "svg": "start", + "zone": "NCS1_1" + }, + { + "id": "NCS1_1_TPE1", + "svg": "photoeye", + "zone": "NCS1_1" + }, + { + "id": "NCS1_1_VFD", + "svg": "conveyor", + "zone": "NCS1_1" + }, + { + "id": "NCS1_2_TPE1", + "svg": "photoeye", + "zone": "NCS1_2" + }, + { + "id": "NCS1_2_VFD", + "svg": "conveyor", + "zone": "NCS1_2" + }, + { + "id": "NCS1_3_DPM1", + "svg": "dpm", + "zone": "NCS1_3" + }, + { + "id": "NCS1_3_TPE1", + "svg": "photoeye", + "zone": "NCS1_3" + }, + { + "id": "NCS1_3_VFD", + "svg": "conveyor", + "zone": "NCS1_3" + }, + { + "id": "NCS1_4_BCN1", + "svg": "beacon", + "zone": "NCS1_4" + }, + { + "id": "NCS1_4_BCN2", + "svg": "beacon", + "zone": "NCS1_4" + }, + { + "id": "NCS1_4_EPC1", + "svg": "epc", + "zone": "NCS1_4" + }, + { + "id": "NCS1_4_EPC2", + "svg": "epc", + "zone": "NCS1_4" + }, + { + "id": "NCS1_4_EPC3", + "svg": "epc", + "zone": "NCS1_4" + }, + { + "id": "NCS1_4_EPC4", + "svg": "epc", + "zone": "NCS1_4" + }, + { + "id": "NCS1_4_SS1_SPB", + "svg": "start_stop", + "zone": "NCS1_4" + }, + { + "id": "NCS1_4_SS1_STPB", + "svg": "start_stop", + "zone": "NCS1_4" + }, + { + "id": "NCS1_4_SS2_SPB", + "svg": "start_stop", + "zone": "NCS1_4" + }, + { + "id": "NCS1_4_SS2_STPB", + "svg": "start_stop", + "zone": "NCS1_4" + }, + { + "id": "NCS1_4_TPE1", + "svg": "photoeye", + "zone": "NCS1_4" + }, + { + "id": "NCS1_4_VFD", + "svg": "conveyor", + "zone": "NCS1_4" + }, + { + "id": "NCS1_5_FIOM1", + "svg": "fio_sio_fioh", + "zone": "NCS1_5" + }, + { + "id": "NCS1_5_TPE1", + "svg": "photoeye", + "zone": "NCS1_5" + }, + { + "id": "NCS1_5_VFD", + "svg": "conveyor", + "zone": "NCS1_5" + }, + { + "id": "NCS1_6_BCN1", + "svg": "beacon", + "zone": "NCS1_6" + }, + { + "id": "NCS1_6_BCN2", + "svg": "beacon", + "zone": "NCS1_6" + }, + { + "id": "NCS1_6_EPC1", + "svg": "epc", + "zone": "NCS1_6" + }, + { + "id": "NCS1_6_EPC2", + "svg": "epc", + "zone": "NCS1_6" + }, + { + "id": "NCS1_6_SS1_SPB", + "svg": "start_stop", + "zone": "NCS1_6" + }, + { + "id": "NCS1_6_SS1_STPB", + "svg": "start_stop", + "zone": "NCS1_6" + }, + { + "id": "NCS1_6_SS2_SPB", + "svg": "start_stop", + "zone": "NCS1_6" + }, + { + "id": "NCS1_6_SS2_STPB", + "svg": "start_stop", + "zone": "NCS1_6" + }, + { + "id": "NCS1_6_TPE1", + "svg": "photoeye", + "zone": "NCS1_6" + }, + { + "id": "NCS1_6_VFD", + "svg": "conveyor", + "zone": "NCS1_6" + }, + { + "id": "NCS1_7_TPE1", + "svg": "photoeye", + "zone": "NCS1_7" + }, + { + "id": "NCS2_1_TPE1", + "svg": "photoeye", + "zone": "NCS2_1" + }, + { + "id": "NCS2_1_VFD", + "svg": "conveyor", + "zone": "NCS2_1" + }, + { + "id": "NCS2_10_BCN1", + "svg": "beacon", + "zone": "NCS2_10" + }, + { + "id": "NCS2_10_BCN2", + "svg": "beacon", + "zone": "NCS2_10" + }, + { + "id": "NCS2_10_EPC1", + "svg": "epc", + "zone": "NCS2_10" + }, + { + "id": "NCS2_10_EPC2", + "svg": "epc", + "zone": "NCS2_10" + }, + { + "id": "NCS2_10_SS1_SPB", + "svg": "start_stop", + "zone": "NCS2_10" + }, + { + "id": "NCS2_10_SS1_STPB", + "svg": "start_stop", + "zone": "NCS2_10" + }, + { + "id": "NCS2_10_SS2_SPB", + "svg": "start_stop", + "zone": "NCS2_10" + }, + { + "id": "NCS2_10_SS2_STPB", + "svg": "start_stop", + "zone": "NCS2_10" + }, + { + "id": "NCS2_10_TPE1", + "svg": "photoeye", + "zone": "NCS2_10" + }, + { + "id": "NCS2_10_VFD", + "svg": "conveyor", + "zone": "NCS2_10" + }, + { + "id": "NCS2_11_FIOM1", + "svg": "fio_sio_fioh", + "zone": "NCS2_11" + }, + { + "id": "NCS2_11_TPE1", + "svg": "photoeye", + "zone": "NCS2_11" + }, + { + "id": "NCS2_11_VFD", + "svg": "conveyor", + "zone": "NCS2_11" + }, + { + "id": "NCS2_12_BCN1", + "svg": "beacon", + "zone": "NCS2_12" + }, + { + "id": "NCS2_12_BCN2", + "svg": "beacon", + "zone": "NCS2_12" + }, + { + "id": "NCS2_12_EPC1", + "svg": "epc", + "zone": "NCS2_12" + }, + { + "id": "NCS2_12_EPC2", + "svg": "epc", + "zone": "NCS2_12" + }, + { + "id": "NCS2_12_SS1_SPB", + "svg": "start_stop", + "zone": "NCS2_12" + }, + { + "id": "NCS2_12_SS1_STPB", + "svg": "start_stop", + "zone": "NCS2_12" + }, + { + "id": "NCS2_12_SS2_SPB", + "svg": "start_stop", + "zone": "NCS2_12" + }, + { + "id": "NCS2_12_SS2_STPB", + "svg": "start_stop", + "zone": "NCS2_12" + }, + { + "id": "NCS2_12_TPE1", + "svg": "photoeye", + "zone": "NCS2_12" + }, + { + "id": "NCS2_12_VFD", + "svg": "conveyor", + "zone": "NCS2_12" + }, + { + "id": "NCS2_13_TPE1", + "svg": "photoeye", + "zone": "NCS2_13" + }, + { + "id": "NCS2_2_EPC1", + "svg": "epc", + "zone": "NCS2_2" + }, + { + "id": "NCS2_2_TPE1", + "svg": "photoeye", + "zone": "NCS2_2" + }, + { + "id": "NCS2_2_VFD", + "svg": "conveyor", + "zone": "NCS2_2" + }, + { + "id": "NCS2_3_TPE1", + "svg": "photoeye", + "zone": "NCS2_3" + }, + { + "id": "NCS2_3_VFD", + "svg": "conveyor", + "zone": "NCS2_3" + }, + { + "id": "NCS2_4_BCN1", + "svg": "beacon", + "zone": "NCS2_4" + }, + { + "id": "NCS2_4_JR1_PB", + "svg": "jam_reset", + "zone": "NCS2_4" + }, + { + "id": "NCS2_4_JR2_PB", + "svg": "jam_reset", + "zone": "NCS2_4" + }, + { + "id": "NCS2_4_TPE1", + "svg": "photoeye", + "zone": "NCS2_4" + }, + { + "id": "NCS2_4_VFD", + "svg": "conveyor", + "zone": "NCS2_4" + }, + { + "id": "NCS2_5_TPE1", + "svg": "photoeye", + "zone": "NCS2_5" + }, + { + "id": "NCS2_5_VFD", + "svg": "conveyor", + "zone": "NCS2_5" + }, + { + "id": "NCS2_6_TPE1", + "svg": "photoeye", + "zone": "NCS2_6" + }, + { + "id": "NCS2_6_VFD", + "svg": "conveyor", + "zone": "NCS2_6" + }, + { + "id": "NCS2_7A_VFD", + "svg": "conveyor", + "zone": "NCS2_7A" + }, + { + "id": "NCS2_7B_VFD", + "svg": "conveyor", + "zone": "NCS2_7B" + }, + { + "id": "NCS2_8_BCN1", + "svg": "beacon", + "zone": "NCS2_8" + }, + { + "id": "NCS2_8_DPM1", + "svg": "dpm", + "zone": "NCS2_8" + }, + { + "id": "NCS2_8_JR1_PB", + "svg": "jam_reset", + "zone": "NCS2_8" + }, + { + "id": "NCS2_8_JR2_PB", + "svg": "jam_reset", + "zone": "NCS2_8" + }, + { + "id": "NCS2_8_TPE1", + "svg": "photoeye", + "zone": "NCS2_8" + }, + { + "id": "NCS2_8_TPE2", + "svg": "photoeye", + "zone": "NCS2_8" + }, + { + "id": "NCS2_8_VFD", + "svg": "conveyor", + "zone": "NCS2_8" + }, + { + "id": "NCS2_9_EPC1", + "svg": "epc", + "zone": "NCS2_9" + }, + { + "id": "NCS2_9_EPC2", + "svg": "epc", + "zone": "NCS2_9" + }, + { + "id": "NCS2_9_TPE1", + "svg": "photoeye", + "zone": "NCS2_9" + }, + { + "id": "NCS2_9_VFD", + "svg": "conveyor", + "zone": "NCS2_9" + }, + { + "id": "PDP05", + "svg": "pdp", + "zone": "PDP05" + }, + { + "id": "PDP05_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP05" + }, + { + "id": "PDP05_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP05" + }, + { + "id": "S02_1_BDS1_R", + "svg": "photoeye", + "zone": "S02_1" + }, + { + "id": "S02_1_BDS1_S", + "svg": "photoeye", + "zone": "S02_1" + }, + { + "id": "S02_1_BDS2_R", + "svg": "photoeye", + "zone": "S02_1" + }, + { + "id": "S02_1_BDS2_S", + "svg": "photoeye", + "zone": "S02_1" + }, + { + "id": "S02_1_DPM1", + "svg": "dpm", + "zone": "S02_1" + }, + { + "id": "S02_1_DPM2", + "svg": "dpm", + "zone": "S02_1" + }, + { + "id": "S02_1_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_1" + }, + { + "id": "S02_1_FIOM10", + "svg": "fio_sio_fioh", + "zone": "S02_1" + }, + { + "id": "S02_1_FIOM11", + "svg": "fio_sio_fioh", + "zone": "S02_1" + }, + { + "id": "S02_1_FIOM12", + "svg": "fio_sio_fioh", + "zone": "S02_1" + }, + { + "id": "S02_1_FIOM13", + "svg": "fio_sio_fioh", + "zone": "S02_1" + }, + { + "id": "S02_1_FIOM14", + "svg": "fio_sio_fioh", + "zone": "S02_1" + }, + { + "id": "S02_1_FIOM2", + "svg": "fio_sio_fioh", + "zone": "S02_1" + }, + { + "id": "S02_1_FIOM3", + "svg": "fio_sio_fioh", + "zone": "S02_1" + }, + { + "id": "S02_1_FIOM4", + "svg": "fio_sio_fioh", + "zone": "S02_1" + }, + { + "id": "S02_1_FIOM5", + "svg": "fio_sio_fioh", + "zone": "S02_1" + }, + { + "id": "S02_1_FIOM6", + "svg": "fio_sio_fioh", + "zone": "S02_1" + }, + { + "id": "S02_1_FIOM7", + "svg": "fio_sio_fioh", + "zone": "S02_1" + }, + { + "id": "S02_1_FIOM8", + "svg": "fio_sio_fioh", + "zone": "S02_1" + }, + { + "id": "S02_1_FIOM9", + "svg": "fio_sio_fioh", + "zone": "S02_1" + }, + { + "id": "S02_1_JR1_PB", + "svg": "jam_reset", + "zone": "S02_1" + }, + { + "id": "S02_1_JR10_PB", + "svg": "jam_reset", + "zone": "S02_1" + }, + { + "id": "S02_1_JR2_PB", + "svg": "jam_reset", + "zone": "S02_1" + }, + { + "id": "S02_1_JR3_PB", + "svg": "jam_reset", + "zone": "S02_1" + }, + { + "id": "S02_1_JR4_PB", + "svg": "jam_reset", + "zone": "S02_1" + }, + { + "id": "S02_1_JR5_PB", + "svg": "jam_reset", + "zone": "S02_1" + }, + { + "id": "S02_1_JR6_PB", + "svg": "jam_reset", + "zone": "S02_1" + }, + { + "id": "S02_1_JR7_PB", + "svg": "jam_reset", + "zone": "S02_1" + }, + { + "id": "S02_1_JR8_PB", + "svg": "jam_reset", + "zone": "S02_1" + }, + { + "id": "S02_1_JR9_PB", + "svg": "jam_reset", + "zone": "S02_1" + }, + { + "id": "S02_1_PS1", + "svg": "pressure_sensor", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL1", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL10", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL11", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL12", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL13", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL14", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL15", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL16", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL17", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL18", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL19", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL2", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL20", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL21", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL22", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL23", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL24", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL25", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL26", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL27", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL28", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL29", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL3", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL30", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL31", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL32", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL33", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL34", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL35", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL36", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL37", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL38", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL39", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL4", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL40", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL41", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL42", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL43", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL44", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL45", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL46", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL47", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL48", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL49", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL5", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL50", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL51", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL52", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL53", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL54", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL55", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL56", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL57", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL58", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL59", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL6", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL60", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL61", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL62", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL63", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL64", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL65", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL66", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL67", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL68", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL69", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL7", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL70", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL71", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL72", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL73", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL74", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL75", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL76", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL77", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL78", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL79", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL8", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL80", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL81", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL82", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL83", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL84", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL85", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL86", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL87", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL88", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL89", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL9", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL90", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL91", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL92", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL93", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL94", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL95", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL96", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL97", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL98", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_SOL99", + "svg": "solenoid", + "zone": "S02_1" + }, + { + "id": "S02_1_TPE1", + "svg": "photoeye", + "zone": "S02_1" + }, + { + "id": "S02_1_TPE2", + "svg": "photoeye", + "zone": "S02_1" + }, + { + "id": "S02_1_TS1_R", + "svg": "photoeye", + "zone": "S02_1" + }, + { + "id": "S02_1_TS1_S", + "svg": "photoeye", + "zone": "S02_1" + }, + { + "id": "S02_1_VFD", + "svg": "conveyor", + "zone": "S02_1" + }, + { + "id": "S02_101CH_BCN1", + "svg": "beacon", + "zone": "S02_101C" + }, + { + "id": "S02_101CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_101C" + }, + { + "id": "S02_101CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_101C" + }, + { + "id": "S02_101CH_FPE1", + "svg": "photoeye", + "zone": "S02_101C" + }, + { + "id": "S02_101CH_FPE2", + "svg": "photoeye", + "zone": "S02_101C" + }, + { + "id": "S02_102CH_BCN1", + "svg": "beacon", + "zone": "S02_102C" + }, + { + "id": "S02_102CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_102C" + }, + { + "id": "S02_102CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_102C" + }, + { + "id": "S02_102CH_FPE1", + "svg": "photoeye", + "zone": "S02_102C" + }, + { + "id": "S02_102CH_FPE2", + "svg": "photoeye", + "zone": "S02_102C" + }, + { + "id": "S02_103CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_103C" + }, + { + "id": "S02_103CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_103C" + }, + { + "id": "S02_103CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_103C" + }, + { + "id": "S02_103CH_FPE1", + "svg": "photoeye", + "zone": "S02_103C" + }, + { + "id": "S02_103CH_FPE2", + "svg": "photoeye", + "zone": "S02_103C" + }, + { + "id": "S02_104CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_104C" + }, + { + "id": "S02_104CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_104C" + }, + { + "id": "S02_104CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_104C" + }, + { + "id": "S02_104CH_FPE1", + "svg": "photoeye", + "zone": "S02_104C" + }, + { + "id": "S02_104CH_FPE2", + "svg": "photoeye", + "zone": "S02_104C" + }, + { + "id": "S02_105CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_105C" + }, + { + "id": "S02_105CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_105C" + }, + { + "id": "S02_105CH_FPE1", + "svg": "photoeye", + "zone": "S02_105C" + }, + { + "id": "S02_105CH_FPE2", + "svg": "photoeye", + "zone": "S02_105C" + }, + { + "id": "S02_106CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_106C" + }, + { + "id": "S02_106CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_106C" + }, + { + "id": "S02_106CH_FPE1", + "svg": "photoeye", + "zone": "S02_106C" + }, + { + "id": "S02_106CH_FPE2", + "svg": "photoeye", + "zone": "S02_106C" + }, + { + "id": "S02_107CH_BCN1", + "svg": "beacon", + "zone": "S02_107C" + }, + { + "id": "S02_107CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_107C" + }, + { + "id": "S02_107CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_107C" + }, + { + "id": "S02_107CH_FPE1", + "svg": "photoeye", + "zone": "S02_107C" + }, + { + "id": "S02_107CH_FPE2", + "svg": "photoeye", + "zone": "S02_107C" + }, + { + "id": "S02_108CH_BCN1", + "svg": "beacon", + "zone": "S02_108C" + }, + { + "id": "S02_108CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_108C" + }, + { + "id": "S02_108CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_108C" + }, + { + "id": "S02_108CH_FPE1", + "svg": "photoeye", + "zone": "S02_108C" + }, + { + "id": "S02_108CH_FPE2", + "svg": "photoeye", + "zone": "S02_108C" + }, + { + "id": "S02_109CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_109C" + }, + { + "id": "S02_109CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_109C" + }, + { + "id": "S02_109CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_109C" + }, + { + "id": "S02_109CH_FPE1", + "svg": "photoeye", + "zone": "S02_109C" + }, + { + "id": "S02_109CH_FPE2", + "svg": "photoeye", + "zone": "S02_109C" + }, + { + "id": "S02_110CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_110C" + }, + { + "id": "S02_110CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_110C" + }, + { + "id": "S02_110CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_110C" + }, + { + "id": "S02_110CH_FPE1", + "svg": "photoeye", + "zone": "S02_110C" + }, + { + "id": "S02_110CH_FPE2", + "svg": "photoeye", + "zone": "S02_110C" + }, + { + "id": "S02_111CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_111C" + }, + { + "id": "S02_111CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_111C" + }, + { + "id": "S02_111CH_FPE1", + "svg": "photoeye", + "zone": "S02_111C" + }, + { + "id": "S02_111CH_FPE2", + "svg": "photoeye", + "zone": "S02_111C" + }, + { + "id": "S02_112CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_112C" + }, + { + "id": "S02_112CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_112C" + }, + { + "id": "S02_112CH_FPE1", + "svg": "photoeye", + "zone": "S02_112C" + }, + { + "id": "S02_112CH_FPE2", + "svg": "photoeye", + "zone": "S02_112C" + }, + { + "id": "S02_113CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_113C" + }, + { + "id": "S02_113CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_113C" + }, + { + "id": "S02_113CH_FPE1", + "svg": "photoeye", + "zone": "S02_113C" + }, + { + "id": "S02_113CH_FPE2", + "svg": "photoeye", + "zone": "S02_113C" + }, + { + "id": "S02_114CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_114C" + }, + { + "id": "S02_114CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_114C" + }, + { + "id": "S02_114CH_FPE1", + "svg": "photoeye", + "zone": "S02_114C" + }, + { + "id": "S02_114CH_FPE2", + "svg": "photoeye", + "zone": "S02_114C" + }, + { + "id": "S02_115CH_BCN1", + "svg": "beacon", + "zone": "S02_115C" + }, + { + "id": "S02_115CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_115C" + }, + { + "id": "S02_115CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_115C" + }, + { + "id": "S02_115CH_FPE1", + "svg": "photoeye", + "zone": "S02_115C" + }, + { + "id": "S02_115CH_FPE2", + "svg": "photoeye", + "zone": "S02_115C" + }, + { + "id": "S02_116CH_BCN1", + "svg": "beacon", + "zone": "S02_116C" + }, + { + "id": "S02_116CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_116C" + }, + { + "id": "S02_116CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_116C" + }, + { + "id": "S02_116CH_FPE1", + "svg": "photoeye", + "zone": "S02_116C" + }, + { + "id": "S02_116CH_FPE2", + "svg": "photoeye", + "zone": "S02_116C" + }, + { + "id": "S02_117CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_117C" + }, + { + "id": "S02_117CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_117C" + }, + { + "id": "S02_117CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_117C" + }, + { + "id": "S02_117CH_FPE1", + "svg": "photoeye", + "zone": "S02_117C" + }, + { + "id": "S02_117CH_FPE2", + "svg": "photoeye", + "zone": "S02_117C" + }, + { + "id": "S02_118CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_118C" + }, + { + "id": "S02_118CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_118C" + }, + { + "id": "S02_118CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_118C" + }, + { + "id": "S02_118CH_FPE1", + "svg": "photoeye", + "zone": "S02_118C" + }, + { + "id": "S02_118CH_FPE2", + "svg": "photoeye", + "zone": "S02_118C" + }, + { + "id": "S02_119CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_119C" + }, + { + "id": "S02_119CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_119C" + }, + { + "id": "S02_119CH_FPE1", + "svg": "photoeye", + "zone": "S02_119C" + }, + { + "id": "S02_119CH_FPE2", + "svg": "photoeye", + "zone": "S02_119C" + }, + { + "id": "S02_120CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_120C" + }, + { + "id": "S02_120CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_120C" + }, + { + "id": "S02_120CH_FPE1", + "svg": "photoeye", + "zone": "S02_120C" + }, + { + "id": "S02_120CH_FPE2", + "svg": "photoeye", + "zone": "S02_120C" + }, + { + "id": "S02_121CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_121C" + }, + { + "id": "S02_121CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_121C" + }, + { + "id": "S02_121CH_FPE1", + "svg": "photoeye", + "zone": "S02_121C" + }, + { + "id": "S02_121CH_FPE2", + "svg": "photoeye", + "zone": "S02_121C" + }, + { + "id": "S02_122CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_122C" + }, + { + "id": "S02_122CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_122C" + }, + { + "id": "S02_122CH_FPE1", + "svg": "photoeye", + "zone": "S02_122C" + }, + { + "id": "S02_122CH_FPE2", + "svg": "photoeye", + "zone": "S02_122C" + }, + { + "id": "S02_123CH_BCN1", + "svg": "beacon", + "zone": "S02_123C" + }, + { + "id": "S02_123CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_123C" + }, + { + "id": "S02_123CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_123C" + }, + { + "id": "S02_123CH_FPE1", + "svg": "photoeye", + "zone": "S02_123C" + }, + { + "id": "S02_123CH_FPE2", + "svg": "photoeye", + "zone": "S02_123C" + }, + { + "id": "S02_124CH_BCN1", + "svg": "beacon", + "zone": "S02_124C" + }, + { + "id": "S02_124CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_124C" + }, + { + "id": "S02_124CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_124C" + }, + { + "id": "S02_124CH_FPE1", + "svg": "photoeye", + "zone": "S02_124C" + }, + { + "id": "S02_124CH_FPE2", + "svg": "photoeye", + "zone": "S02_124C" + }, + { + "id": "S02_125CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_125C" + }, + { + "id": "S02_125CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_125C" + }, + { + "id": "S02_125CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_125C" + }, + { + "id": "S02_125CH_FPE1", + "svg": "photoeye", + "zone": "S02_125C" + }, + { + "id": "S02_125CH_FPE2", + "svg": "photoeye", + "zone": "S02_125C" + }, + { + "id": "S02_126CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_126C" + }, + { + "id": "S02_126CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_126C" + }, + { + "id": "S02_126CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_126C" + }, + { + "id": "S02_126CH_FPE1", + "svg": "photoeye", + "zone": "S02_126C" + }, + { + "id": "S02_126CH_FPE2", + "svg": "photoeye", + "zone": "S02_126C" + }, + { + "id": "S02_127CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_127C" + }, + { + "id": "S02_127CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_127C" + }, + { + "id": "S02_127CH_FPE1", + "svg": "photoeye", + "zone": "S02_127C" + }, + { + "id": "S02_127CH_FPE2", + "svg": "photoeye", + "zone": "S02_127C" + }, + { + "id": "S02_128CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_128C" + }, + { + "id": "S02_128CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_128C" + }, + { + "id": "S02_128CH_FPE1", + "svg": "photoeye", + "zone": "S02_128C" + }, + { + "id": "S02_128CH_FPE2", + "svg": "photoeye", + "zone": "S02_128C" + }, + { + "id": "S02_129CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_129C" + }, + { + "id": "S02_129CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_129C" + }, + { + "id": "S02_129CH_FPE1", + "svg": "photoeye", + "zone": "S02_129C" + }, + { + "id": "S02_129CH_FPE2", + "svg": "photoeye", + "zone": "S02_129C" + }, + { + "id": "S02_130CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_130C" + }, + { + "id": "S02_130CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_130C" + }, + { + "id": "S02_130CH_FPE1", + "svg": "photoeye", + "zone": "S02_130C" + }, + { + "id": "S02_130CH_FPE2", + "svg": "photoeye", + "zone": "S02_130C" + }, + { + "id": "S02_131CH_BCN1", + "svg": "beacon", + "zone": "S02_131C" + }, + { + "id": "S02_131CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_131C" + }, + { + "id": "S02_131CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_131C" + }, + { + "id": "S02_131CH_FPE1", + "svg": "photoeye", + "zone": "S02_131C" + }, + { + "id": "S02_131CH_FPE2", + "svg": "photoeye", + "zone": "S02_131C" + }, + { + "id": "S02_132CH_BCN1", + "svg": "beacon", + "zone": "S02_132C" + }, + { + "id": "S02_132CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_132C" + }, + { + "id": "S02_132CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_132C" + }, + { + "id": "S02_132CH_FPE1", + "svg": "photoeye", + "zone": "S02_132C" + }, + { + "id": "S02_132CH_FPE2", + "svg": "photoeye", + "zone": "S02_132C" + }, + { + "id": "S02_133CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_133C" + }, + { + "id": "S02_133CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_133C" + }, + { + "id": "S02_133CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_133C" + }, + { + "id": "S02_133CH_FPE1", + "svg": "photoeye", + "zone": "S02_133C" + }, + { + "id": "S02_133CH_FPE2", + "svg": "photoeye", + "zone": "S02_133C" + }, + { + "id": "S02_134CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_134C" + }, + { + "id": "S02_134CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_134C" + }, + { + "id": "S02_134CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_134C" + }, + { + "id": "S02_134CH_FPE1", + "svg": "photoeye", + "zone": "S02_134C" + }, + { + "id": "S02_134CH_FPE2", + "svg": "photoeye", + "zone": "S02_134C" + }, + { + "id": "S02_135CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_135C" + }, + { + "id": "S02_135CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_135C" + }, + { + "id": "S02_135CH_FPE1", + "svg": "photoeye", + "zone": "S02_135C" + }, + { + "id": "S02_135CH_FPE2", + "svg": "photoeye", + "zone": "S02_135C" + }, + { + "id": "S02_136CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_136C" + }, + { + "id": "S02_136CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_136C" + }, + { + "id": "S02_136CH_FPE1", + "svg": "photoeye", + "zone": "S02_136C" + }, + { + "id": "S02_136CH_FPE2", + "svg": "photoeye", + "zone": "S02_136C" + }, + { + "id": "S02_2_BDS1_R", + "svg": "photoeye", + "zone": "S02_2" + }, + { + "id": "S02_2_BDS1_S", + "svg": "photoeye", + "zone": "S02_2" + }, + { + "id": "S02_2_BDS2_R", + "svg": "photoeye", + "zone": "S02_2" + }, + { + "id": "S02_2_BDS2_S", + "svg": "photoeye", + "zone": "S02_2" + }, + { + "id": "S02_2_DPM1", + "svg": "dpm", + "zone": "S02_2" + }, + { + "id": "S02_2_DPM2", + "svg": "dpm", + "zone": "S02_2" + }, + { + "id": "S02_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_2" + }, + { + "id": "S02_2_FIOM10", + "svg": "fio_sio_fioh", + "zone": "S02_2" + }, + { + "id": "S02_2_FIOM11", + "svg": "fio_sio_fioh", + "zone": "S02_2" + }, + { + "id": "S02_2_FIOM12", + "svg": "fio_sio_fioh", + "zone": "S02_2" + }, + { + "id": "S02_2_FIOM13", + "svg": "fio_sio_fioh", + "zone": "S02_2" + }, + { + "id": "S02_2_FIOM14", + "svg": "fio_sio_fioh", + "zone": "S02_2" + }, + { + "id": "S02_2_FIOM2", + "svg": "fio_sio_fioh", + "zone": "S02_2" + }, + { + "id": "S02_2_FIOM3", + "svg": "fio_sio_fioh", + "zone": "S02_2" + }, + { + "id": "S02_2_FIOM4", + "svg": "fio_sio_fioh", + "zone": "S02_2" + }, + { + "id": "S02_2_FIOM5", + "svg": "fio_sio_fioh", + "zone": "S02_2" + }, + { + "id": "S02_2_FIOM6", + "svg": "fio_sio_fioh", + "zone": "S02_2" + }, + { + "id": "S02_2_FIOM7", + "svg": "fio_sio_fioh", + "zone": "S02_2" + }, + { + "id": "S02_2_FIOM8", + "svg": "fio_sio_fioh", + "zone": "S02_2" + }, + { + "id": "S02_2_FIOM9", + "svg": "fio_sio_fioh", + "zone": "S02_2" + }, + { + "id": "S02_2_JR1_PB", + "svg": "jam_reset", + "zone": "S02_2" + }, + { + "id": "S02_2_JR10_PB", + "svg": "jam_reset", + "zone": "S02_2" + }, + { + "id": "S02_2_JR2_PB", + "svg": "jam_reset", + "zone": "S02_2" + }, + { + "id": "S02_2_JR3_PB", + "svg": "jam_reset", + "zone": "S02_2" + }, + { + "id": "S02_2_JR4_PB", + "svg": "jam_reset", + "zone": "S02_2" + }, + { + "id": "S02_2_JR5_PB", + "svg": "jam_reset", + "zone": "S02_2" + }, + { + "id": "S02_2_JR6_PB", + "svg": "jam_reset", + "zone": "S02_2" + }, + { + "id": "S02_2_JR7_PB", + "svg": "jam_reset", + "zone": "S02_2" + }, + { + "id": "S02_2_JR8_PB", + "svg": "jam_reset", + "zone": "S02_2" + }, + { + "id": "S02_2_JR9_PB", + "svg": "jam_reset", + "zone": "S02_2" + }, + { + "id": "S02_2_PS1", + "svg": "pressure_sensor", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL1", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL10", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL11", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL12", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL13", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL14", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL15", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL16", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL17", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL18", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL19", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL2", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL20", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL21", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL22", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL23", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL24", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL25", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL26", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL27", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL28", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL29", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL3", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL30", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL31", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL32", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL33", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL34", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL35", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL36", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL37", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL38", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL39", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL4", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL40", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL41", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL42", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL43", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL44", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL45", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL46", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL47", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL48", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL49", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL5", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL50", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL51", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL52", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL53", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL54", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL55", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL56", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL57", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL58", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL59", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL6", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL60", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL61", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL62", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL63", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL64", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL65", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL66", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL67", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL68", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL69", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL7", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL70", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL71", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL72", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL73", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL74", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL75", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL76", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL77", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL78", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL79", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL8", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL80", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL81", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL82", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL83", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL84", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL85", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL86", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL87", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL88", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL89", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL9", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL90", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL91", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL92", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL93", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL94", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL95", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL96", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL97", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL98", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_SOL99", + "svg": "solenoid", + "zone": "S02_2" + }, + { + "id": "S02_2_TPE1", + "svg": "photoeye", + "zone": "S02_2" + }, + { + "id": "S02_2_TPE2", + "svg": "photoeye", + "zone": "S02_2" + }, + { + "id": "S02_2_TS1_R", + "svg": "photoeye", + "zone": "S02_2" + }, + { + "id": "S02_2_TS1_S", + "svg": "photoeye", + "zone": "S02_2" + }, + { + "id": "S02_2_VFD", + "svg": "conveyor", + "zone": "S02_2" + }, + { + "id": "S02_201CH_BCN1", + "svg": "beacon", + "zone": "S02_201C" + }, + { + "id": "S02_201CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_201C" + }, + { + "id": "S02_201CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_201C" + }, + { + "id": "S02_201CH_FPE1", + "svg": "photoeye", + "zone": "S02_201C" + }, + { + "id": "S02_201CH_FPE2", + "svg": "photoeye", + "zone": "S02_201C" + }, + { + "id": "S02_202CH_BCN1", + "svg": "beacon", + "zone": "S02_202C" + }, + { + "id": "S02_202CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_202C" + }, + { + "id": "S02_202CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_202C" + }, + { + "id": "S02_202CH_FPE1", + "svg": "photoeye", + "zone": "S02_202C" + }, + { + "id": "S02_202CH_FPE2", + "svg": "photoeye", + "zone": "S02_202C" + }, + { + "id": "S02_203CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_203C" + }, + { + "id": "S02_203CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_203C" + }, + { + "id": "S02_203CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_203C" + }, + { + "id": "S02_203CH_FPE1", + "svg": "photoeye", + "zone": "S02_203C" + }, + { + "id": "S02_203CH_FPE2", + "svg": "photoeye", + "zone": "S02_203C" + }, + { + "id": "S02_204CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_204C" + }, + { + "id": "S02_204CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_204C" + }, + { + "id": "S02_204CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_204C" + }, + { + "id": "S02_204CH_FPE1", + "svg": "photoeye", + "zone": "S02_204C" + }, + { + "id": "S02_204CH_FPE2", + "svg": "photoeye", + "zone": "S02_204C" + }, + { + "id": "S02_205CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_205C" + }, + { + "id": "S02_205CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_205C" + }, + { + "id": "S02_205CH_FPE1", + "svg": "photoeye", + "zone": "S02_205C" + }, + { + "id": "S02_205CH_FPE2", + "svg": "photoeye", + "zone": "S02_205C" + }, + { + "id": "S02_206CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_206C" + }, + { + "id": "S02_206CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_206C" + }, + { + "id": "S02_206CH_FPE1", + "svg": "photoeye", + "zone": "S02_206C" + }, + { + "id": "S02_206CH_FPE2", + "svg": "photoeye", + "zone": "S02_206C" + }, + { + "id": "S02_207CH_BCN1", + "svg": "beacon", + "zone": "S02_207C" + }, + { + "id": "S02_207CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_207C" + }, + { + "id": "S02_207CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_207C" + }, + { + "id": "S02_207CH_FPE1", + "svg": "photoeye", + "zone": "S02_207C" + }, + { + "id": "S02_207CH_FPE2", + "svg": "photoeye", + "zone": "S02_207C" + }, + { + "id": "S02_208CH_BCN1", + "svg": "beacon", + "zone": "S02_208C" + }, + { + "id": "S02_208CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_208C" + }, + { + "id": "S02_208CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_208C" + }, + { + "id": "S02_208CH_FPE1", + "svg": "photoeye", + "zone": "S02_208C" + }, + { + "id": "S02_208CH_FPE2", + "svg": "photoeye", + "zone": "S02_208C" + }, + { + "id": "S02_209CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_209C" + }, + { + "id": "S02_209CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_209C" + }, + { + "id": "S02_209CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_209C" + }, + { + "id": "S02_209CH_FPE1", + "svg": "photoeye", + "zone": "S02_209C" + }, + { + "id": "S02_209CH_FPE2", + "svg": "photoeye", + "zone": "S02_209C" + }, + { + "id": "S02_210CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_210C" + }, + { + "id": "S02_210CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_210C" + }, + { + "id": "S02_210CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_210C" + }, + { + "id": "S02_210CH_FPE1", + "svg": "photoeye", + "zone": "S02_210C" + }, + { + "id": "S02_210CH_FPE2", + "svg": "photoeye", + "zone": "S02_210C" + }, + { + "id": "S02_211CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_211C" + }, + { + "id": "S02_211CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_211C" + }, + { + "id": "S02_211CH_FPE1", + "svg": "photoeye", + "zone": "S02_211C" + }, + { + "id": "S02_211CH_FPE2", + "svg": "photoeye", + "zone": "S02_211C" + }, + { + "id": "S02_212CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_212C" + }, + { + "id": "S02_212CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_212C" + }, + { + "id": "S02_212CH_FPE1", + "svg": "photoeye", + "zone": "S02_212C" + }, + { + "id": "S02_212CH_FPE2", + "svg": "photoeye", + "zone": "S02_212C" + }, + { + "id": "S02_213CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_213C" + }, + { + "id": "S02_213CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_213C" + }, + { + "id": "S02_213CH_FPE1", + "svg": "photoeye", + "zone": "S02_213C" + }, + { + "id": "S02_213CH_FPE2", + "svg": "photoeye", + "zone": "S02_213C" + }, + { + "id": "S02_214CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_214C" + }, + { + "id": "S02_214CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_214C" + }, + { + "id": "S02_214CH_FPE1", + "svg": "photoeye", + "zone": "S02_214C" + }, + { + "id": "S02_214CH_FPE2", + "svg": "photoeye", + "zone": "S02_214C" + }, + { + "id": "S02_215CH_BCN1", + "svg": "beacon", + "zone": "S02_215C" + }, + { + "id": "S02_215CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_215C" + }, + { + "id": "S02_215CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_215C" + }, + { + "id": "S02_215CH_FPE1", + "svg": "photoeye", + "zone": "S02_215C" + }, + { + "id": "S02_215CH_FPE2", + "svg": "photoeye", + "zone": "S02_215C" + }, + { + "id": "S02_216CH_BCN1", + "svg": "beacon", + "zone": "S02_216C" + }, + { + "id": "S02_216CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_216C" + }, + { + "id": "S02_216CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_216C" + }, + { + "id": "S02_216CH_FPE1", + "svg": "photoeye", + "zone": "S02_216C" + }, + { + "id": "S02_216CH_FPE2", + "svg": "photoeye", + "zone": "S02_216C" + }, + { + "id": "S02_217CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_217C" + }, + { + "id": "S02_217CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_217C" + }, + { + "id": "S02_217CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_217C" + }, + { + "id": "S02_217CH_FPE1", + "svg": "photoeye", + "zone": "S02_217C" + }, + { + "id": "S02_217CH_FPE2", + "svg": "photoeye", + "zone": "S02_217C" + }, + { + "id": "S02_218CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_218C" + }, + { + "id": "S02_218CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_218C" + }, + { + "id": "S02_218CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_218C" + }, + { + "id": "S02_218CH_FPE1", + "svg": "photoeye", + "zone": "S02_218C" + }, + { + "id": "S02_218CH_FPE2", + "svg": "photoeye", + "zone": "S02_218C" + }, + { + "id": "S02_219CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_219C" + }, + { + "id": "S02_219CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_219C" + }, + { + "id": "S02_219CH_FPE1", + "svg": "photoeye", + "zone": "S02_219C" + }, + { + "id": "S02_219CH_FPE2", + "svg": "photoeye", + "zone": "S02_219C" + }, + { + "id": "S02_220CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_220C" + }, + { + "id": "S02_220CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_220C" + }, + { + "id": "S02_220CH_FPE1", + "svg": "photoeye", + "zone": "S02_220C" + }, + { + "id": "S02_220CH_FPE2", + "svg": "photoeye", + "zone": "S02_220C" + }, + { + "id": "S02_221CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_221C" + }, + { + "id": "S02_221CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_221C" + }, + { + "id": "S02_221CH_FPE1", + "svg": "photoeye", + "zone": "S02_221C" + }, + { + "id": "S02_221CH_FPE2", + "svg": "photoeye", + "zone": "S02_221C" + }, + { + "id": "S02_222CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_222C" + }, + { + "id": "S02_222CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_222C" + }, + { + "id": "S02_222CH_FPE1", + "svg": "photoeye", + "zone": "S02_222C" + }, + { + "id": "S02_222CH_FPE2", + "svg": "photoeye", + "zone": "S02_222C" + }, + { + "id": "S02_223CH_BCN1", + "svg": "beacon", + "zone": "S02_223C" + }, + { + "id": "S02_223CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_223C" + }, + { + "id": "S02_223CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_223C" + }, + { + "id": "S02_223CH_FPE1", + "svg": "photoeye", + "zone": "S02_223C" + }, + { + "id": "S02_223CH_FPE2", + "svg": "photoeye", + "zone": "S02_223C" + }, + { + "id": "S02_224CH_BCN1", + "svg": "beacon", + "zone": "S02_224C" + }, + { + "id": "S02_224CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_224C" + }, + { + "id": "S02_224CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_224C" + }, + { + "id": "S02_224CH_FPE1", + "svg": "photoeye", + "zone": "S02_224C" + }, + { + "id": "S02_224CH_FPE2", + "svg": "photoeye", + "zone": "S02_224C" + }, + { + "id": "S02_225CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_225C" + }, + { + "id": "S02_225CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_225C" + }, + { + "id": "S02_225CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_225C" + }, + { + "id": "S02_225CH_FPE1", + "svg": "photoeye", + "zone": "S02_225C" + }, + { + "id": "S02_225CH_FPE2", + "svg": "photoeye", + "zone": "S02_225C" + }, + { + "id": "S02_226CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_226C" + }, + { + "id": "S02_226CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_226C" + }, + { + "id": "S02_226CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_226C" + }, + { + "id": "S02_226CH_FPE1", + "svg": "photoeye", + "zone": "S02_226C" + }, + { + "id": "S02_226CH_FPE2", + "svg": "photoeye", + "zone": "S02_226C" + }, + { + "id": "S02_227CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_227C" + }, + { + "id": "S02_227CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_227C" + }, + { + "id": "S02_227CH_FPE1", + "svg": "photoeye", + "zone": "S02_227C" + }, + { + "id": "S02_227CH_FPE2", + "svg": "photoeye", + "zone": "S02_227C" + }, + { + "id": "S02_228CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_228C" + }, + { + "id": "S02_228CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_228C" + }, + { + "id": "S02_228CH_FPE1", + "svg": "photoeye", + "zone": "S02_228C" + }, + { + "id": "S02_228CH_FPE2", + "svg": "photoeye", + "zone": "S02_228C" + }, + { + "id": "S02_229CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_229C" + }, + { + "id": "S02_229CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_229C" + }, + { + "id": "S02_229CH_FPE1", + "svg": "photoeye", + "zone": "S02_229C" + }, + { + "id": "S02_229CH_FPE2", + "svg": "photoeye", + "zone": "S02_229C" + }, + { + "id": "S02_230CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_230C" + }, + { + "id": "S02_230CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_230C" + }, + { + "id": "S02_230CH_FPE1", + "svg": "photoeye", + "zone": "S02_230C" + }, + { + "id": "S02_230CH_FPE2", + "svg": "photoeye", + "zone": "S02_230C" + }, + { + "id": "S02_231CH_BCN1", + "svg": "beacon", + "zone": "S02_231C" + }, + { + "id": "S02_231CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_231C" + }, + { + "id": "S02_231CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_231C" + }, + { + "id": "S02_231CH_FPE1", + "svg": "photoeye", + "zone": "S02_231C" + }, + { + "id": "S02_231CH_FPE2", + "svg": "photoeye", + "zone": "S02_231C" + }, + { + "id": "S02_232CH_BCN1", + "svg": "beacon", + "zone": "S02_232C" + }, + { + "id": "S02_232CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_232C" + }, + { + "id": "S02_232CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_232C" + }, + { + "id": "S02_232CH_FPE1", + "svg": "photoeye", + "zone": "S02_232C" + }, + { + "id": "S02_232CH_FPE2", + "svg": "photoeye", + "zone": "S02_232C" + }, + { + "id": "S02_233CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_233C" + }, + { + "id": "S02_233CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_233C" + }, + { + "id": "S02_233CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_233C" + }, + { + "id": "S02_233CH_FPE1", + "svg": "photoeye", + "zone": "S02_233C" + }, + { + "id": "S02_233CH_FPE2", + "svg": "photoeye", + "zone": "S02_233C" + }, + { + "id": "S02_234CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_234C" + }, + { + "id": "S02_234CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_234C" + }, + { + "id": "S02_234CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S02_234C" + }, + { + "id": "S02_234CH_FPE1", + "svg": "photoeye", + "zone": "S02_234C" + }, + { + "id": "S02_234CH_FPE2", + "svg": "photoeye", + "zone": "S02_234C" + }, + { + "id": "S02_235CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_235C" + }, + { + "id": "S02_235CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_235C" + }, + { + "id": "S02_235CH_FPE1", + "svg": "photoeye", + "zone": "S02_235C" + }, + { + "id": "S02_235CH_FPE2", + "svg": "photoeye", + "zone": "S02_235C" + }, + { + "id": "S02_236CH_EN1_PB", + "svg": "chute_enable", + "zone": "S02_236C" + }, + { + "id": "S02_236CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S02_236C" + }, + { + "id": "S02_236CH_FPE1", + "svg": "photoeye", + "zone": "S02_236C" + }, + { + "id": "S02_236CH_FPE2", + "svg": "photoeye", + "zone": "S02_236C" + } + ], + "MCM12": [ + { + "id": "NCP2_11_TPE1", + "svg": "photoeye", + "zone": "NCP2_11" + }, + { + "id": "NCP2_11_VFD", + "svg": "conveyor", + "zone": "NCP2_11" + }, + { + "id": "NCP2_12_TPE1", + "svg": "photoeye", + "zone": "NCP2_12" + }, + { + "id": "NCP2_12_VFD", + "svg": "conveyor", + "zone": "NCP2_12" + }, + { + "id": "NCP2_13_TPE1", + "svg": "photoeye", + "zone": "NCP2_13" + }, + { + "id": "NCP2_13_VFD", + "svg": "conveyor", + "zone": "NCP2_13" + }, + { + "id": "NCP2_14_BCN1", + "svg": "beacon", + "zone": "NCP2_14" + }, + { + "id": "NCP2_14_DPM1", + "svg": "dpm", + "zone": "NCP2_14" + }, + { + "id": "NCP2_14_EPC1", + "svg": "epc", + "zone": "NCP2_14" + }, + { + "id": "NCP2_14_S1_PB", + "svg": "start", + "zone": "NCP2_14" + }, + { + "id": "NCP2_14_TPE1", + "svg": "photoeye", + "zone": "NCP2_14" + }, + { + "id": "NCP2_14_VFD", + "svg": "conveyor", + "zone": "NCP2_14" + }, + { + "id": "NCP2_15_TPE1", + "svg": "photoeye", + "zone": "NCP2_15" + }, + { + "id": "NCP2_15_VFD", + "svg": "conveyor", + "zone": "NCP2_15" + }, + { + "id": "NCP2_16_DPM1", + "svg": "dpm", + "zone": "NCP2_16" + }, + { + "id": "NCP2_16_TPE1", + "svg": "photoeye", + "zone": "NCP2_16" + }, + { + "id": "NCP2_16_TPE2", + "svg": "photoeye", + "zone": "NCP2_16" + }, + { + "id": "NCP2_16_VFD", + "svg": "conveyor", + "zone": "NCP2_16" + }, + { + "id": "NCP2_17_BCN1", + "svg": "beacon", + "zone": "NCP2_17" + }, + { + "id": "NCP2_17_JR1_PB", + "svg": "jam_reset", + "zone": "NCP2_17" + }, + { + "id": "NCP2_17_TPE1", + "svg": "photoeye", + "zone": "NCP2_17" + }, + { + "id": "NCP2_17_VFD", + "svg": "conveyor", + "zone": "NCP2_17" + }, + { + "id": "NCP2_18_TPE1", + "svg": "photoeye", + "zone": "NCP2_18" + }, + { + "id": "NCP2_18A_VFD", + "svg": "conveyor", + "zone": "NCP2_18A" + }, + { + "id": "NCP2_18B_VFD", + "svg": "conveyor", + "zone": "NCP2_18B" + }, + { + "id": "NCP2_19_EPC1", + "svg": "epc", + "zone": "NCP2_19" + }, + { + "id": "NCP2_19_EPC2", + "svg": "epc", + "zone": "NCP2_19" + }, + { + "id": "NCP2_19_TPE1", + "svg": "photoeye", + "zone": "NCP2_19" + }, + { + "id": "NCP2_19_VFD", + "svg": "conveyor", + "zone": "NCP2_19" + }, + { + "id": "NCP2_20_BCN1", + "svg": "beacon", + "zone": "NCP2_20" + }, + { + "id": "NCP2_20_BCN2", + "svg": "beacon", + "zone": "NCP2_20" + }, + { + "id": "NCP2_20_FIOM1", + "svg": "fio_sio_fioh", + "zone": "NCP2_20" + }, + { + "id": "NCP2_20_S1_PB", + "svg": "start", + "zone": "NCP2_20" + }, + { + "id": "NCP2_20_S2_PB", + "svg": "start", + "zone": "NCP2_20" + }, + { + "id": "NCP2_20_TPE1", + "svg": "photoeye", + "zone": "NCP2_20" + }, + { + "id": "NCP2_20_VFD", + "svg": "conveyor", + "zone": "NCP2_20" + }, + { + "id": "NCP2_21A_VFD", + "svg": "conveyor", + "zone": "NCP2_21A" + }, + { + "id": "NCP2_21B_VFD", + "svg": "conveyor", + "zone": "NCP2_21B" + }, + { + "id": "NCP2_21C_VFD", + "svg": "conveyor", + "zone": "NCP2_21C" + }, + { + "id": "NCP2_21D_VFD", + "svg": "conveyor", + "zone": "NCP2_21D" + }, + { + "id": "NCP2_22_TPE1", + "svg": "photoeye", + "zone": "NCP2_22" + }, + { + "id": "NCP2_22_TPE2", + "svg": "photoeye", + "zone": "NCP2_22" + }, + { + "id": "NCP2_22_VFD", + "svg": "conveyor", + "zone": "NCP2_22" + }, + { + "id": "NCP2_23_BCN1", + "svg": "beacon", + "zone": "NCP2_23" + }, + { + "id": "NCP2_23_EPC1", + "svg": "epc", + "zone": "NCP2_23" + }, + { + "id": "NCP2_23_FIOM1", + "svg": "fio_sio_fioh", + "zone": "NCP2_23" + }, + { + "id": "NCP2_23_S1_PB", + "svg": "start", + "zone": "NCP2_23" + }, + { + "id": "NCP2_23_TPE1", + "svg": "photoeye", + "zone": "NCP2_23" + }, + { + "id": "NCP2_23_VFD", + "svg": "conveyor", + "zone": "NCP2_23" + }, + { + "id": "NCP2_26_TPE1", + "svg": "photoeye", + "zone": "NCP2_26" + }, + { + "id": "NCP2_26_VFD", + "svg": "conveyor", + "zone": "NCP2_26" + }, + { + "id": "NCR4_10_BCN1", + "svg": "beacon", + "zone": "NCR4_10" + }, + { + "id": "NCR4_10_EPC1", + "svg": "epc", + "zone": "NCR4_10" + }, + { + "id": "NCR4_10_S1_PB", + "svg": "start", + "zone": "NCR4_10" + }, + { + "id": "NCR4_10_TPE1", + "svg": "photoeye", + "zone": "NCR4_10" + }, + { + "id": "NCR4_10_VFD", + "svg": "conveyor", + "zone": "NCR4_10" + }, + { + "id": "NCR4_11_TPE1", + "svg": "photoeye", + "zone": "NCR4_11" + }, + { + "id": "NCR4_11_VFD", + "svg": "conveyor", + "zone": "NCR4_11" + }, + { + "id": "NCR4_12_TPE1", + "svg": "photoeye", + "zone": "NCR4_12" + }, + { + "id": "NCR4_12_VFD", + "svg": "conveyor", + "zone": "NCR4_12" + }, + { + "id": "NCR4_13_BCN1", + "svg": "beacon", + "zone": "NCR4_13" + }, + { + "id": "NCR4_13_EPC1", + "svg": "epc", + "zone": "NCR4_13" + }, + { + "id": "NCR4_13_EPC2", + "svg": "epc", + "zone": "NCR4_13" + }, + { + "id": "NCR4_13_FIOM1", + "svg": "fio_sio_fioh", + "zone": "NCR4_13" + }, + { + "id": "NCR4_13_S1_PB", + "svg": "start", + "zone": "NCR4_13" + }, + { + "id": "NCR4_13_TPE1", + "svg": "photoeye", + "zone": "NCR4_13" + }, + { + "id": "NCR4_13_VFD", + "svg": "conveyor", + "zone": "NCR4_13" + }, + { + "id": "NCR4_14_TPE1", + "svg": "photoeye", + "zone": "NCR4_14" + }, + { + "id": "NCR4_14_VFD", + "svg": "conveyor", + "zone": "NCR4_14" + }, + { + "id": "NCR4_15_VFD", + "svg": "conveyor", + "zone": "NCR4_15" + }, + { + "id": "NCR4_2_BCN1", + "svg": "beacon", + "zone": "NCR4_2" + }, + { + "id": "NCR4_2_BCN2", + "svg": "beacon", + "zone": "NCR4_2" + }, + { + "id": "NCR4_2_EPC1", + "svg": "epc", + "zone": "NCR4_2" + }, + { + "id": "NCR4_2_EPC2", + "svg": "epc", + "zone": "NCR4_2" + }, + { + "id": "NCR4_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "NCR4_2" + }, + { + "id": "NCR4_2_SS1_SPB", + "svg": "start_stop", + "zone": "NCR4_2" + }, + { + "id": "NCR4_2_SS1_STPB", + "svg": "start_stop", + "zone": "NCR4_2" + }, + { + "id": "NCR4_2_SS2_SPB", + "svg": "start_stop", + "zone": "NCR4_2" + }, + { + "id": "NCR4_2_SS2_STPB", + "svg": "start_stop", + "zone": "NCR4_2" + }, + { + "id": "NCR4_2_TPE1", + "svg": "photoeye", + "zone": "NCR4_2" + }, + { + "id": "NCR4_2_VFD", + "svg": "conveyor", + "zone": "NCR4_2" + }, + { + "id": "NCR4_3_TPE1", + "svg": "photoeye", + "zone": "NCR4_3" + }, + { + "id": "NCR4_3_VFD", + "svg": "conveyor", + "zone": "NCR4_3" + }, + { + "id": "NCR4_4A_VFD", + "svg": "conveyor", + "zone": "NCR4_4A" + }, + { + "id": "NCR4_4B_VFD", + "svg": "conveyor", + "zone": "NCR4_4B" + }, + { + "id": "NCR4_5_TPE1", + "svg": "photoeye", + "zone": "NCR4_5" + }, + { + "id": "NCR4_5_TPE2", + "svg": "photoeye", + "zone": "NCR4_5" + }, + { + "id": "NCR4_5_VFD", + "svg": "conveyor", + "zone": "NCR4_5" + }, + { + "id": "NCR4_6_TPE1", + "svg": "photoeye", + "zone": "NCR4_6" + }, + { + "id": "NCR4_6_VFD", + "svg": "conveyor", + "zone": "NCR4_6" + }, + { + "id": "NCR4_7_BCN1", + "svg": "beacon", + "zone": "NCR4_7" + }, + { + "id": "NCR4_7_BCN2", + "svg": "beacon", + "zone": "NCR4_7" + }, + { + "id": "NCR4_7_S1_PB", + "svg": "start", + "zone": "NCR4_7" + }, + { + "id": "NCR4_7_S2_PB", + "svg": "start", + "zone": "NCR4_7" + }, + { + "id": "NCR4_7_TPE1", + "svg": "photoeye", + "zone": "NCR4_7" + }, + { + "id": "NCR4_7_VFD", + "svg": "conveyor", + "zone": "NCR4_7" + }, + { + "id": "NCR4_8_DPM1", + "svg": "dpm", + "zone": "NCR4_8" + }, + { + "id": "NCR4_8_EPC1", + "svg": "epc", + "zone": "NCR4_8" + }, + { + "id": "NCR4_8_EPC2", + "svg": "epc", + "zone": "NCR4_8" + }, + { + "id": "NCR4_8_EPC3", + "svg": "epc", + "zone": "NCR4_8" + }, + { + "id": "NCR4_8_EPC4", + "svg": "epc", + "zone": "NCR4_8" + }, + { + "id": "NCR4_8_TPE1", + "svg": "photoeye", + "zone": "NCR4_8" + }, + { + "id": "NCR4_8_VFD", + "svg": "conveyor", + "zone": "NCR4_8" + }, + { + "id": "NCR4_9_TPE1", + "svg": "photoeye", + "zone": "NCR4_9" + }, + { + "id": "NCR4_9_VFD", + "svg": "conveyor", + "zone": "NCR4_9" + }, + { + "id": "NCS3_1_DPM1", + "svg": "dpm", + "zone": "NCS3_1" + }, + { + "id": "NCS3_1_TPE1", + "svg": "photoeye", + "zone": "NCS3_1" + }, + { + "id": "NCS3_1_VFD", + "svg": "conveyor", + "zone": "NCS3_1" + }, + { + "id": "NCS3_2_TPE1", + "svg": "photoeye", + "zone": "NCS3_2" + }, + { + "id": "NCS3_2_VFD", + "svg": "conveyor", + "zone": "NCS3_2" + }, + { + "id": "NCS3_3_BCN1", + "svg": "beacon", + "zone": "NCS3_3" + }, + { + "id": "NCS3_3_DPM1", + "svg": "dpm", + "zone": "NCS3_3" + }, + { + "id": "NCS3_3_JR1_PB", + "svg": "jam_reset", + "zone": "NCS3_3" + }, + { + "id": "NCS3_3_TPE1", + "svg": "photoeye", + "zone": "NCS3_3" + }, + { + "id": "NCS3_3_VFD", + "svg": "conveyor", + "zone": "NCS3_3" + }, + { + "id": "NCS3_4_TPE1", + "svg": "photoeye", + "zone": "NCS3_4" + }, + { + "id": "NCS3_4_VFD", + "svg": "conveyor", + "zone": "NCS3_4" + }, + { + "id": "NCS3_5_BCN1", + "svg": "beacon", + "zone": "NCS3_5" + }, + { + "id": "NCS3_5_BCN2", + "svg": "beacon", + "zone": "NCS3_5" + }, + { + "id": "NCS3_5_EPC1", + "svg": "epc", + "zone": "NCS3_5" + }, + { + "id": "NCS3_5_EPC2", + "svg": "epc", + "zone": "NCS3_5" + }, + { + "id": "NCS3_5_EPC3", + "svg": "epc", + "zone": "NCS3_5" + }, + { + "id": "NCS3_5_EPC4", + "svg": "epc", + "zone": "NCS3_5" + }, + { + "id": "NCS3_5_FIOM1", + "svg": "fio_sio_fioh", + "zone": "NCS3_5" + }, + { + "id": "NCS3_5_SS1_SPB", + "svg": "start_stop", + "zone": "NCS3_5" + }, + { + "id": "NCS3_5_SS1_STPB", + "svg": "start_stop", + "zone": "NCS3_5" + }, + { + "id": "NCS3_5_SS2_SPB", + "svg": "start_stop", + "zone": "NCS3_5" + }, + { + "id": "NCS3_5_SS2_STPB", + "svg": "start_stop", + "zone": "NCS3_5" + }, + { + "id": "NCS3_5_TPE1", + "svg": "photoeye", + "zone": "NCS3_5" + }, + { + "id": "NCS3_5_VFD", + "svg": "conveyor", + "zone": "NCS3_5" + }, + { + "id": "NCS3_6_FIOM1", + "svg": "fio_sio_fioh", + "zone": "NCS3_6" + }, + { + "id": "NCS3_6_TPE1", + "svg": "photoeye", + "zone": "NCS3_6" + }, + { + "id": "NCS3_6_VFD", + "svg": "conveyor", + "zone": "NCS3_6" + }, + { + "id": "NCS3_7_BCN1", + "svg": "beacon", + "zone": "NCS3_7" + }, + { + "id": "NCS3_7_BCN2", + "svg": "beacon", + "zone": "NCS3_7" + }, + { + "id": "NCS3_7_EPC1", + "svg": "epc", + "zone": "NCS3_7" + }, + { + "id": "NCS3_7_EPC2", + "svg": "epc", + "zone": "NCS3_7" + }, + { + "id": "NCS3_7_SS1_SPB", + "svg": "start_stop", + "zone": "NCS3_7" + }, + { + "id": "NCS3_7_SS1_STPB", + "svg": "start_stop", + "zone": "NCS3_7" + }, + { + "id": "NCS3_7_SS2_SPB", + "svg": "start_stop", + "zone": "NCS3_7" + }, + { + "id": "NCS3_7_SS2_STPB", + "svg": "start_stop", + "zone": "NCS3_7" + }, + { + "id": "NCS3_7_TPE1", + "svg": "photoeye", + "zone": "NCS3_7" + }, + { + "id": "NCS3_7_VFD", + "svg": "conveyor", + "zone": "NCS3_7" + }, + { + "id": "NCS3_8_TPE1", + "svg": "photoeye", + "zone": "NCS3_8" + }, + { + "id": "NCS4_1_TPE1", + "svg": "photoeye", + "zone": "NCS4_1" + }, + { + "id": "NCS4_1_VFD", + "svg": "conveyor", + "zone": "NCS4_1" + }, + { + "id": "NCS4_2_BCN1", + "svg": "beacon", + "zone": "NCS4_2" + }, + { + "id": "NCS4_2_BCN2", + "svg": "beacon", + "zone": "NCS4_2" + }, + { + "id": "NCS4_2_EPC1", + "svg": "epc", + "zone": "NCS4_2" + }, + { + "id": "NCS4_2_EPC2", + "svg": "epc", + "zone": "NCS4_2" + }, + { + "id": "NCS4_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "NCS4_2" + }, + { + "id": "NCS4_2_S1_PB", + "svg": "start", + "zone": "NCS4_2" + }, + { + "id": "NCS4_2_S2_PB", + "svg": "start", + "zone": "NCS4_2" + }, + { + "id": "NCS4_2_TPE1", + "svg": "photoeye", + "zone": "NCS4_2" + }, + { + "id": "NCS4_2_VFD", + "svg": "conveyor", + "zone": "NCS4_2" + }, + { + "id": "NCS4_3_TPE1", + "svg": "photoeye", + "zone": "NCS4_3" + }, + { + "id": "NCS4_3_VFD", + "svg": "conveyor", + "zone": "NCS4_3" + }, + { + "id": "NCS4_4A_VFD", + "svg": "conveyor", + "zone": "NCS4_4A" + }, + { + "id": "NCS4_4B_VFD", + "svg": "conveyor", + "zone": "NCS4_4B" + }, + { + "id": "NCS4_5_BCN1", + "svg": "beacon", + "zone": "NCS4_5" + }, + { + "id": "NCS4_5_BCN2", + "svg": "beacon", + "zone": "NCS4_5" + }, + { + "id": "NCS4_5_EPC1", + "svg": "epc", + "zone": "NCS4_5" + }, + { + "id": "NCS4_5_EPC2", + "svg": "epc", + "zone": "NCS4_5" + }, + { + "id": "NCS4_5_EPC3", + "svg": "epc", + "zone": "NCS4_5" + }, + { + "id": "NCS4_5_EPC4", + "svg": "epc", + "zone": "NCS4_5" + }, + { + "id": "NCS4_5_FIOM1", + "svg": "fio_sio_fioh", + "zone": "NCS4_5" + }, + { + "id": "NCS4_5_SS1_SPB", + "svg": "start_stop", + "zone": "NCS4_5" + }, + { + "id": "NCS4_5_SS1_STPB", + "svg": "start_stop", + "zone": "NCS4_5" + }, + { + "id": "NCS4_5_SS2_SPB", + "svg": "start_stop", + "zone": "NCS4_5" + }, + { + "id": "NCS4_5_SS2_STPB", + "svg": "start_stop", + "zone": "NCS4_5" + }, + { + "id": "NCS4_5_TPE1", + "svg": "photoeye", + "zone": "NCS4_5" + }, + { + "id": "NCS4_5_TPE2", + "svg": "photoeye", + "zone": "NCS4_5" + }, + { + "id": "NCS4_5_VFD", + "svg": "conveyor", + "zone": "NCS4_5" + }, + { + "id": "NCS4_6_FIOM1", + "svg": "fio_sio_fioh", + "zone": "NCS4_6" + }, + { + "id": "NCS4_6_TPE1", + "svg": "photoeye", + "zone": "NCS4_6" + }, + { + "id": "NCS4_6_VFD", + "svg": "conveyor", + "zone": "NCS4_6" + }, + { + "id": "NCS4_7_BCN1", + "svg": "beacon", + "zone": "NCS4_7" + }, + { + "id": "NCS4_7_BCN2", + "svg": "beacon", + "zone": "NCS4_7" + }, + { + "id": "NCS4_7_EPC1", + "svg": "epc", + "zone": "NCS4_7" + }, + { + "id": "NCS4_7_EPC2", + "svg": "epc", + "zone": "NCS4_7" + }, + { + "id": "NCS4_7_FIOM1", + "svg": "fio_sio_fioh", + "zone": "NCS4_7" + }, + { + "id": "NCS4_7_SS1_SPB", + "svg": "start_stop", + "zone": "NCS4_7" + }, + { + "id": "NCS4_7_SS1_STPB", + "svg": "start_stop", + "zone": "NCS4_7" + }, + { + "id": "NCS4_7_SS2_SPB", + "svg": "start_stop", + "zone": "NCS4_7" + }, + { + "id": "NCS4_7_SS2_STPB", + "svg": "start_stop", + "zone": "NCS4_7" + }, + { + "id": "NCS4_7_TPE1", + "svg": "photoeye", + "zone": "NCS4_7" + }, + { + "id": "NCS4_7_VFD", + "svg": "conveyor", + "zone": "NCS4_7" + }, + { + "id": "NCS4_8_TPE1", + "svg": "photoeye", + "zone": "NCS4_8" + }, + { + "id": "PDP13", + "svg": "pdp", + "zone": "PDP13" + }, + { + "id": "PDP13_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP13" + }, + { + "id": "PDP13_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP13" + }, + { + "id": "PDP14", + "svg": "pdp", + "zone": "PDP14" + }, + { + "id": "PDP14_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP14" + }, + { + "id": "PDP14_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP14" + }, + { + "id": "S03_1_BDS1_R", + "svg": "photoeye", + "zone": "S03_1" + }, + { + "id": "S03_1_BDS1_S", + "svg": "photoeye", + "zone": "S03_1" + }, + { + "id": "S03_1_BDS2_R", + "svg": "photoeye", + "zone": "S03_1" + }, + { + "id": "S03_1_BDS2_S", + "svg": "photoeye", + "zone": "S03_1" + }, + { + "id": "S03_1_DPM1", + "svg": "dpm", + "zone": "S03_1" + }, + { + "id": "S03_1_DPM2", + "svg": "dpm", + "zone": "S03_1" + }, + { + "id": "S03_1_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_1" + }, + { + "id": "S03_1_FIOM10", + "svg": "fio_sio_fioh", + "zone": "S03_1" + }, + { + "id": "S03_1_FIOM11", + "svg": "fio_sio_fioh", + "zone": "S03_1" + }, + { + "id": "S03_1_FIOM12", + "svg": "fio_sio_fioh", + "zone": "S03_1" + }, + { + "id": "S03_1_FIOM13", + "svg": "fio_sio_fioh", + "zone": "S03_1" + }, + { + "id": "S03_1_FIOM14", + "svg": "fio_sio_fioh", + "zone": "S03_1" + }, + { + "id": "S03_1_FIOM2", + "svg": "fio_sio_fioh", + "zone": "S03_1" + }, + { + "id": "S03_1_FIOM3", + "svg": "fio_sio_fioh", + "zone": "S03_1" + }, + { + "id": "S03_1_FIOM4", + "svg": "fio_sio_fioh", + "zone": "S03_1" + }, + { + "id": "S03_1_FIOM5", + "svg": "fio_sio_fioh", + "zone": "S03_1" + }, + { + "id": "S03_1_FIOM6", + "svg": "fio_sio_fioh", + "zone": "S03_1" + }, + { + "id": "S03_1_FIOM7", + "svg": "fio_sio_fioh", + "zone": "S03_1" + }, + { + "id": "S03_1_FIOM8", + "svg": "fio_sio_fioh", + "zone": "S03_1" + }, + { + "id": "S03_1_FIOM9", + "svg": "fio_sio_fioh", + "zone": "S03_1" + }, + { + "id": "S03_1_JR1_PB", + "svg": "jam_reset", + "zone": "S03_1" + }, + { + "id": "S03_1_JR10_PB", + "svg": "jam_reset", + "zone": "S03_1" + }, + { + "id": "S03_1_JR2_PB", + "svg": "jam_reset", + "zone": "S03_1" + }, + { + "id": "S03_1_JR3_PB", + "svg": "jam_reset", + "zone": "S03_1" + }, + { + "id": "S03_1_JR4_PB", + "svg": "jam_reset", + "zone": "S03_1" + }, + { + "id": "S03_1_JR5_PB", + "svg": "jam_reset", + "zone": "S03_1" + }, + { + "id": "S03_1_JR6_PB", + "svg": "jam_reset", + "zone": "S03_1" + }, + { + "id": "S03_1_JR7_PB", + "svg": "jam_reset", + "zone": "S03_1" + }, + { + "id": "S03_1_JR8_PB", + "svg": "jam_reset", + "zone": "S03_1" + }, + { + "id": "S03_1_JR9_PB", + "svg": "jam_reset", + "zone": "S03_1" + }, + { + "id": "S03_1_PS1", + "svg": "pressure_sensor", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL1", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL10", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL11", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL12", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL13", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL14", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL15", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL16", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL17", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL18", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL19", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL2", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL20", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL21", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL22", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL23", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL24", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL25", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL26", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL27", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL28", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL29", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL3", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL30", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL31", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL32", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL33", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL34", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL35", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL36", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL37", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL38", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL39", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL4", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL40", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL41", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL42", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL43", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL44", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL45", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL46", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL47", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL48", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL49", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL5", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL50", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL51", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL52", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL53", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL54", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL55", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL56", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL57", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL58", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL59", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL6", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL60", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL61", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL62", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL63", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL64", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL65", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL66", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL67", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL68", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL69", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL7", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL70", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL71", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL72", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL73", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL74", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL75", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL76", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL77", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL78", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL79", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL8", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL80", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL81", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL82", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL83", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL84", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL85", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL86", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL87", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL88", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL89", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL9", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL90", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL91", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL92", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL93", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL94", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL95", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL96", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_SOL97", + "svg": "solenoid", + "zone": "S03_1" + }, + { + "id": "S03_1_TPE1", + "svg": "photoeye", + "zone": "S03_1" + }, + { + "id": "S03_1_TPE2", + "svg": "photoeye", + "zone": "S03_1" + }, + { + "id": "S03_1_TS1_R", + "svg": "photoeye", + "zone": "S03_1" + }, + { + "id": "S03_1_TS1_S", + "svg": "photoeye", + "zone": "S03_1" + }, + { + "id": "S03_1_VFD", + "svg": "conveyor", + "zone": "S03_1" + }, + { + "id": "S03_101CH_BCN1", + "svg": "beacon", + "zone": "S03_101C" + }, + { + "id": "S03_101CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_101C" + }, + { + "id": "S03_101CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_101C" + }, + { + "id": "S03_101CH_FPE1", + "svg": "photoeye", + "zone": "S03_101C" + }, + { + "id": "S03_101CH_FPE2", + "svg": "photoeye", + "zone": "S03_101C" + }, + { + "id": "S03_102CH_BCN1", + "svg": "beacon", + "zone": "S03_102C" + }, + { + "id": "S03_102CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_102C" + }, + { + "id": "S03_102CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_102C" + }, + { + "id": "S03_102CH_FPE1", + "svg": "photoeye", + "zone": "S03_102C" + }, + { + "id": "S03_102CH_FPE2", + "svg": "photoeye", + "zone": "S03_102C" + }, + { + "id": "S03_103CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_103C" + }, + { + "id": "S03_103CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_103C" + }, + { + "id": "S03_103CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_103C" + }, + { + "id": "S03_103CH_FPE1", + "svg": "photoeye", + "zone": "S03_103C" + }, + { + "id": "S03_103CH_FPE2", + "svg": "photoeye", + "zone": "S03_103C" + }, + { + "id": "S03_104CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_104C" + }, + { + "id": "S03_104CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_104C" + }, + { + "id": "S03_104CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_104C" + }, + { + "id": "S03_104CH_FPE1", + "svg": "photoeye", + "zone": "S03_104C" + }, + { + "id": "S03_104CH_FPE2", + "svg": "photoeye", + "zone": "S03_104C" + }, + { + "id": "S03_105CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_105C" + }, + { + "id": "S03_105CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_105C" + }, + { + "id": "S03_105CH_FPE1", + "svg": "photoeye", + "zone": "S03_105C" + }, + { + "id": "S03_105CH_FPE2", + "svg": "photoeye", + "zone": "S03_105C" + }, + { + "id": "S03_106CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_106C" + }, + { + "id": "S03_106CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_106C" + }, + { + "id": "S03_106CH_FPE1", + "svg": "photoeye", + "zone": "S03_106C" + }, + { + "id": "S03_106CH_FPE2", + "svg": "photoeye", + "zone": "S03_106C" + }, + { + "id": "S03_107CH_BCN1", + "svg": "beacon", + "zone": "S03_107C" + }, + { + "id": "S03_107CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_107C" + }, + { + "id": "S03_107CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_107C" + }, + { + "id": "S03_107CH_FPE1", + "svg": "photoeye", + "zone": "S03_107C" + }, + { + "id": "S03_107CH_FPE2", + "svg": "photoeye", + "zone": "S03_107C" + }, + { + "id": "S03_108CH_BCN1", + "svg": "beacon", + "zone": "S03_108C" + }, + { + "id": "S03_108CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_108C" + }, + { + "id": "S03_108CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_108C" + }, + { + "id": "S03_108CH_FPE1", + "svg": "photoeye", + "zone": "S03_108C" + }, + { + "id": "S03_108CH_FPE2", + "svg": "photoeye", + "zone": "S03_108C" + }, + { + "id": "S03_109CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_109C" + }, + { + "id": "S03_109CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_109C" + }, + { + "id": "S03_109CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_109C" + }, + { + "id": "S03_109CH_FPE1", + "svg": "photoeye", + "zone": "S03_109C" + }, + { + "id": "S03_109CH_FPE2", + "svg": "photoeye", + "zone": "S03_109C" + }, + { + "id": "S03_110CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_110C" + }, + { + "id": "S03_110CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_110C" + }, + { + "id": "S03_110CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_110C" + }, + { + "id": "S03_110CH_FPE1", + "svg": "photoeye", + "zone": "S03_110C" + }, + { + "id": "S03_110CH_FPE2", + "svg": "photoeye", + "zone": "S03_110C" + }, + { + "id": "S03_111CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_111C" + }, + { + "id": "S03_111CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_111C" + }, + { + "id": "S03_111CH_FPE1", + "svg": "photoeye", + "zone": "S03_111C" + }, + { + "id": "S03_111CH_FPE2", + "svg": "photoeye", + "zone": "S03_111C" + }, + { + "id": "S03_112CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_112C" + }, + { + "id": "S03_112CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_112C" + }, + { + "id": "S03_112CH_FPE1", + "svg": "photoeye", + "zone": "S03_112C" + }, + { + "id": "S03_112CH_FPE2", + "svg": "photoeye", + "zone": "S03_112C" + }, + { + "id": "S03_113CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_113C" + }, + { + "id": "S03_113CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_113C" + }, + { + "id": "S03_113CH_FPE1", + "svg": "photoeye", + "zone": "S03_113C" + }, + { + "id": "S03_113CH_FPE2", + "svg": "photoeye", + "zone": "S03_113C" + }, + { + "id": "S03_114CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_114C" + }, + { + "id": "S03_114CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_114C" + }, + { + "id": "S03_114CH_FPE1", + "svg": "photoeye", + "zone": "S03_114C" + }, + { + "id": "S03_114CH_FPE2", + "svg": "photoeye", + "zone": "S03_114C" + }, + { + "id": "S03_115CH_BCN1", + "svg": "beacon", + "zone": "S03_115C" + }, + { + "id": "S03_115CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_115C" + }, + { + "id": "S03_115CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_115C" + }, + { + "id": "S03_115CH_FPE1", + "svg": "photoeye", + "zone": "S03_115C" + }, + { + "id": "S03_115CH_FPE2", + "svg": "photoeye", + "zone": "S03_115C" + }, + { + "id": "S03_116CH_BCN1", + "svg": "beacon", + "zone": "S03_116C" + }, + { + "id": "S03_116CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_116C" + }, + { + "id": "S03_116CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_116C" + }, + { + "id": "S03_116CH_FPE1", + "svg": "photoeye", + "zone": "S03_116C" + }, + { + "id": "S03_116CH_FPE2", + "svg": "photoeye", + "zone": "S03_116C" + }, + { + "id": "S03_117CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_117C" + }, + { + "id": "S03_117CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_117C" + }, + { + "id": "S03_117CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_117C" + }, + { + "id": "S03_117CH_FPE1", + "svg": "photoeye", + "zone": "S03_117C" + }, + { + "id": "S03_117CH_FPE2", + "svg": "photoeye", + "zone": "S03_117C" + }, + { + "id": "S03_118CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_118C" + }, + { + "id": "S03_118CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_118C" + }, + { + "id": "S03_118CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_118C" + }, + { + "id": "S03_118CH_FPE1", + "svg": "photoeye", + "zone": "S03_118C" + }, + { + "id": "S03_118CH_FPE2", + "svg": "photoeye", + "zone": "S03_118C" + }, + { + "id": "S03_119CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_119C" + }, + { + "id": "S03_119CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_119C" + }, + { + "id": "S03_119CH_FPE1", + "svg": "photoeye", + "zone": "S03_119C" + }, + { + "id": "S03_119CH_FPE2", + "svg": "photoeye", + "zone": "S03_119C" + }, + { + "id": "S03_120CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_120C" + }, + { + "id": "S03_120CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_120C" + }, + { + "id": "S03_120CH_FPE1", + "svg": "photoeye", + "zone": "S03_120C" + }, + { + "id": "S03_120CH_FPE2", + "svg": "photoeye", + "zone": "S03_120C" + }, + { + "id": "S03_121CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_121C" + }, + { + "id": "S03_121CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_121C" + }, + { + "id": "S03_121CH_FPE1", + "svg": "photoeye", + "zone": "S03_121C" + }, + { + "id": "S03_121CH_FPE2", + "svg": "photoeye", + "zone": "S03_121C" + }, + { + "id": "S03_122CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_122C" + }, + { + "id": "S03_122CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_122C" + }, + { + "id": "S03_122CH_FPE1", + "svg": "photoeye", + "zone": "S03_122C" + }, + { + "id": "S03_122CH_FPE2", + "svg": "photoeye", + "zone": "S03_122C" + }, + { + "id": "S03_123CH_BCN1", + "svg": "beacon", + "zone": "S03_123C" + }, + { + "id": "S03_123CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_123C" + }, + { + "id": "S03_123CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_123C" + }, + { + "id": "S03_123CH_FPE1", + "svg": "photoeye", + "zone": "S03_123C" + }, + { + "id": "S03_123CH_FPE2", + "svg": "photoeye", + "zone": "S03_123C" + }, + { + "id": "S03_124CH_BCN1", + "svg": "beacon", + "zone": "S03_124C" + }, + { + "id": "S03_124CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_124C" + }, + { + "id": "S03_124CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_124C" + }, + { + "id": "S03_124CH_FPE1", + "svg": "photoeye", + "zone": "S03_124C" + }, + { + "id": "S03_124CH_FPE2", + "svg": "photoeye", + "zone": "S03_124C" + }, + { + "id": "S03_125CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_125C" + }, + { + "id": "S03_125CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_125C" + }, + { + "id": "S03_125CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_125C" + }, + { + "id": "S03_125CH_FPE1", + "svg": "photoeye", + "zone": "S03_125C" + }, + { + "id": "S03_125CH_FPE2", + "svg": "photoeye", + "zone": "S03_125C" + }, + { + "id": "S03_126CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_126C" + }, + { + "id": "S03_126CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_126C" + }, + { + "id": "S03_126CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_126C" + }, + { + "id": "S03_126CH_FPE1", + "svg": "photoeye", + "zone": "S03_126C" + }, + { + "id": "S03_126CH_FPE2", + "svg": "photoeye", + "zone": "S03_126C" + }, + { + "id": "S03_127CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_127C" + }, + { + "id": "S03_127CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_127C" + }, + { + "id": "S03_127CH_FPE1", + "svg": "photoeye", + "zone": "S03_127C" + }, + { + "id": "S03_127CH_FPE2", + "svg": "photoeye", + "zone": "S03_127C" + }, + { + "id": "S03_128CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_128C" + }, + { + "id": "S03_128CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_128C" + }, + { + "id": "S03_128CH_FPE1", + "svg": "photoeye", + "zone": "S03_128C" + }, + { + "id": "S03_128CH_FPE2", + "svg": "photoeye", + "zone": "S03_128C" + }, + { + "id": "S03_129CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_129C" + }, + { + "id": "S03_129CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_129C" + }, + { + "id": "S03_129CH_FPE1", + "svg": "photoeye", + "zone": "S03_129C" + }, + { + "id": "S03_129CH_FPE2", + "svg": "photoeye", + "zone": "S03_129C" + }, + { + "id": "S03_130CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_130C" + }, + { + "id": "S03_130CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_130C" + }, + { + "id": "S03_130CH_FPE1", + "svg": "photoeye", + "zone": "S03_130C" + }, + { + "id": "S03_130CH_FPE2", + "svg": "photoeye", + "zone": "S03_130C" + }, + { + "id": "S03_131CH_BCN1", + "svg": "beacon", + "zone": "S03_131C" + }, + { + "id": "S03_131CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_131C" + }, + { + "id": "S03_131CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_131C" + }, + { + "id": "S03_131CH_FPE1", + "svg": "photoeye", + "zone": "S03_131C" + }, + { + "id": "S03_131CH_FPE2", + "svg": "photoeye", + "zone": "S03_131C" + }, + { + "id": "S03_132CH_BCN1", + "svg": "beacon", + "zone": "S03_132C" + }, + { + "id": "S03_132CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_132C" + }, + { + "id": "S03_132CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_132C" + }, + { + "id": "S03_132CH_FPE1", + "svg": "photoeye", + "zone": "S03_132C" + }, + { + "id": "S03_132CH_FPE2", + "svg": "photoeye", + "zone": "S03_132C" + }, + { + "id": "S03_133CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_133C" + }, + { + "id": "S03_133CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_133C" + }, + { + "id": "S03_133CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_133C" + }, + { + "id": "S03_133CH_FPE1", + "svg": "photoeye", + "zone": "S03_133C" + }, + { + "id": "S03_133CH_FPE2", + "svg": "photoeye", + "zone": "S03_133C" + }, + { + "id": "S03_134CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_134C" + }, + { + "id": "S03_134CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_134C" + }, + { + "id": "S03_134CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_134C" + }, + { + "id": "S03_134CH_FPE1", + "svg": "photoeye", + "zone": "S03_134C" + }, + { + "id": "S03_134CH_FPE2", + "svg": "photoeye", + "zone": "S03_134C" + }, + { + "id": "S03_135CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_135C" + }, + { + "id": "S03_135CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_135C" + }, + { + "id": "S03_135CH_FPE1", + "svg": "photoeye", + "zone": "S03_135C" + }, + { + "id": "S03_135CH_FPE2", + "svg": "photoeye", + "zone": "S03_135C" + }, + { + "id": "S03_136CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_136C" + }, + { + "id": "S03_136CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_136C" + }, + { + "id": "S03_136CH_FPE1", + "svg": "photoeye", + "zone": "S03_136C" + }, + { + "id": "S03_136CH_FPE2", + "svg": "photoeye", + "zone": "S03_136C" + }, + { + "id": "S03_2_BDS1_R", + "svg": "photoeye", + "zone": "S03_2" + }, + { + "id": "S03_2_BDS1_S", + "svg": "photoeye", + "zone": "S03_2" + }, + { + "id": "S03_2_BDS2_R", + "svg": "photoeye", + "zone": "S03_2" + }, + { + "id": "S03_2_BDS2_S", + "svg": "photoeye", + "zone": "S03_2" + }, + { + "id": "S03_2_DPM1", + "svg": "dpm", + "zone": "S03_2" + }, + { + "id": "S03_2_DPM2", + "svg": "dpm", + "zone": "S03_2" + }, + { + "id": "S03_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_2" + }, + { + "id": "S03_2_FIOM10", + "svg": "fio_sio_fioh", + "zone": "S03_2" + }, + { + "id": "S03_2_FIOM11", + "svg": "fio_sio_fioh", + "zone": "S03_2" + }, + { + "id": "S03_2_FIOM12", + "svg": "fio_sio_fioh", + "zone": "S03_2" + }, + { + "id": "S03_2_FIOM13", + "svg": "fio_sio_fioh", + "zone": "S03_2" + }, + { + "id": "S03_2_FIOM14", + "svg": "fio_sio_fioh", + "zone": "S03_2" + }, + { + "id": "S03_2_FIOM2", + "svg": "fio_sio_fioh", + "zone": "S03_2" + }, + { + "id": "S03_2_FIOM3", + "svg": "fio_sio_fioh", + "zone": "S03_2" + }, + { + "id": "S03_2_FIOM4", + "svg": "fio_sio_fioh", + "zone": "S03_2" + }, + { + "id": "S03_2_FIOM5", + "svg": "fio_sio_fioh", + "zone": "S03_2" + }, + { + "id": "S03_2_FIOM6", + "svg": "fio_sio_fioh", + "zone": "S03_2" + }, + { + "id": "S03_2_FIOM7", + "svg": "fio_sio_fioh", + "zone": "S03_2" + }, + { + "id": "S03_2_FIOM8", + "svg": "fio_sio_fioh", + "zone": "S03_2" + }, + { + "id": "S03_2_FIOM9", + "svg": "fio_sio_fioh", + "zone": "S03_2" + }, + { + "id": "S03_2_JR1_PB", + "svg": "jam_reset", + "zone": "S03_2" + }, + { + "id": "S03_2_JR10_PB", + "svg": "jam_reset", + "zone": "S03_2" + }, + { + "id": "S03_2_JR2_PB", + "svg": "jam_reset", + "zone": "S03_2" + }, + { + "id": "S03_2_JR3_PB", + "svg": "jam_reset", + "zone": "S03_2" + }, + { + "id": "S03_2_JR4_PB", + "svg": "jam_reset", + "zone": "S03_2" + }, + { + "id": "S03_2_JR5_PB", + "svg": "jam_reset", + "zone": "S03_2" + }, + { + "id": "S03_2_JR6_PB", + "svg": "jam_reset", + "zone": "S03_2" + }, + { + "id": "S03_2_JR7_PB", + "svg": "jam_reset", + "zone": "S03_2" + }, + { + "id": "S03_2_JR8_PB", + "svg": "jam_reset", + "zone": "S03_2" + }, + { + "id": "S03_2_JR9_PB", + "svg": "jam_reset", + "zone": "S03_2" + }, + { + "id": "S03_2_PS1", + "svg": "pressure_sensor", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL1", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL10", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL11", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL12", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL13", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL14", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL15", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL16", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL17", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL18", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL19", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL2", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL20", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL21", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL22", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL23", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL24", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL25", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL26", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL27", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL28", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL29", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL3", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL30", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL31", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL32", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL33", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL34", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL35", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL36", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL37", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL38", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL39", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL4", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL40", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL41", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL42", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL43", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL44", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL45", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL46", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL47", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL48", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL49", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL5", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL50", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL51", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL52", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL53", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL54", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL55", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL56", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL57", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL58", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL59", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL6", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL60", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL61", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL62", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL63", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL64", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL65", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL66", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL67", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL68", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL69", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL7", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL70", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL71", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL72", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL73", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL74", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL75", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL76", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL77", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL78", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL79", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL8", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL80", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL81", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL82", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL83", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL84", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL85", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL86", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL87", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL88", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL89", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL9", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL90", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL91", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL92", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL93", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL94", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL95", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL96", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_SOL97", + "svg": "solenoid", + "zone": "S03_2" + }, + { + "id": "S03_2_TPE1", + "svg": "photoeye", + "zone": "S03_2" + }, + { + "id": "S03_2_TPE2", + "svg": "photoeye", + "zone": "S03_2" + }, + { + "id": "S03_2_TS1_R", + "svg": "photoeye", + "zone": "S03_2" + }, + { + "id": "S03_2_TS1_S", + "svg": "photoeye", + "zone": "S03_2" + }, + { + "id": "S03_2_VFD", + "svg": "conveyor", + "zone": "S03_2" + }, + { + "id": "S03_201CH_BCN1", + "svg": "beacon", + "zone": "S03_201C" + }, + { + "id": "S03_201CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_201C" + }, + { + "id": "S03_201CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_201C" + }, + { + "id": "S03_201CH_FPE1", + "svg": "photoeye", + "zone": "S03_201C" + }, + { + "id": "S03_201CH_FPE2", + "svg": "photoeye", + "zone": "S03_201C" + }, + { + "id": "S03_202CH_BCN1", + "svg": "beacon", + "zone": "S03_202C" + }, + { + "id": "S03_202CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_202C" + }, + { + "id": "S03_202CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_202C" + }, + { + "id": "S03_202CH_FPE1", + "svg": "photoeye", + "zone": "S03_202C" + }, + { + "id": "S03_202CH_FPE2", + "svg": "photoeye", + "zone": "S03_202C" + }, + { + "id": "S03_203CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_203C" + }, + { + "id": "S03_203CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_203C" + }, + { + "id": "S03_203CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_203C" + }, + { + "id": "S03_203CH_FPE1", + "svg": "photoeye", + "zone": "S03_203C" + }, + { + "id": "S03_203CH_FPE2", + "svg": "photoeye", + "zone": "S03_203C" + }, + { + "id": "S03_204CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_204C" + }, + { + "id": "S03_204CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_204C" + }, + { + "id": "S03_204CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_204C" + }, + { + "id": "S03_204CH_FPE1", + "svg": "photoeye", + "zone": "S03_204C" + }, + { + "id": "S03_204CH_FPE2", + "svg": "photoeye", + "zone": "S03_204C" + }, + { + "id": "S03_205CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_205C" + }, + { + "id": "S03_205CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_205C" + }, + { + "id": "S03_205CH_FPE1", + "svg": "photoeye", + "zone": "S03_205C" + }, + { + "id": "S03_205CH_FPE2", + "svg": "photoeye", + "zone": "S03_205C" + }, + { + "id": "S03_206CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_206C" + }, + { + "id": "S03_206CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_206C" + }, + { + "id": "S03_206CH_FPE1", + "svg": "photoeye", + "zone": "S03_206C" + }, + { + "id": "S03_206CH_FPE2", + "svg": "photoeye", + "zone": "S03_206C" + }, + { + "id": "S03_207CH_BCN1", + "svg": "beacon", + "zone": "S03_207C" + }, + { + "id": "S03_207CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_207C" + }, + { + "id": "S03_207CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_207C" + }, + { + "id": "S03_207CH_FPE1", + "svg": "photoeye", + "zone": "S03_207C" + }, + { + "id": "S03_207CH_FPE2", + "svg": "photoeye", + "zone": "S03_207C" + }, + { + "id": "S03_208CH_BCN1", + "svg": "beacon", + "zone": "S03_208C" + }, + { + "id": "S03_208CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_208C" + }, + { + "id": "S03_208CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_208C" + }, + { + "id": "S03_208CH_FPE1", + "svg": "photoeye", + "zone": "S03_208C" + }, + { + "id": "S03_208CH_FPE2", + "svg": "photoeye", + "zone": "S03_208C" + }, + { + "id": "S03_209CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_209C" + }, + { + "id": "S03_209CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_209C" + }, + { + "id": "S03_209CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_209C" + }, + { + "id": "S03_209CH_FPE1", + "svg": "photoeye", + "zone": "S03_209C" + }, + { + "id": "S03_209CH_FPE2", + "svg": "photoeye", + "zone": "S03_209C" + }, + { + "id": "S03_210CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_210C" + }, + { + "id": "S03_210CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_210C" + }, + { + "id": "S03_210CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_210C" + }, + { + "id": "S03_210CH_FPE1", + "svg": "photoeye", + "zone": "S03_210C" + }, + { + "id": "S03_210CH_FPE2", + "svg": "photoeye", + "zone": "S03_210C" + }, + { + "id": "S03_211CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_211C" + }, + { + "id": "S03_211CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_211C" + }, + { + "id": "S03_211CH_FPE1", + "svg": "photoeye", + "zone": "S03_211C" + }, + { + "id": "S03_211CH_FPE2", + "svg": "photoeye", + "zone": "S03_211C" + }, + { + "id": "S03_212CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_212C" + }, + { + "id": "S03_212CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_212C" + }, + { + "id": "S03_212CH_FPE1", + "svg": "photoeye", + "zone": "S03_212C" + }, + { + "id": "S03_212CH_FPE2", + "svg": "photoeye", + "zone": "S03_212C" + }, + { + "id": "S03_213CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_213C" + }, + { + "id": "S03_213CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_213C" + }, + { + "id": "S03_213CH_FPE1", + "svg": "photoeye", + "zone": "S03_213C" + }, + { + "id": "S03_213CH_FPE2", + "svg": "photoeye", + "zone": "S03_213C" + }, + { + "id": "S03_214CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_214C" + }, + { + "id": "S03_214CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_214C" + }, + { + "id": "S03_214CH_FPE1", + "svg": "photoeye", + "zone": "S03_214C" + }, + { + "id": "S03_214CH_FPE2", + "svg": "photoeye", + "zone": "S03_214C" + }, + { + "id": "S03_215CH_BCN1", + "svg": "beacon", + "zone": "S03_215C" + }, + { + "id": "S03_215CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_215C" + }, + { + "id": "S03_215CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_215C" + }, + { + "id": "S03_215CH_FPE1", + "svg": "photoeye", + "zone": "S03_215C" + }, + { + "id": "S03_215CH_FPE2", + "svg": "photoeye", + "zone": "S03_215C" + }, + { + "id": "S03_216CH_BCN1", + "svg": "beacon", + "zone": "S03_216C" + }, + { + "id": "S03_216CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_216C" + }, + { + "id": "S03_216CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_216C" + }, + { + "id": "S03_216CH_FPE1", + "svg": "photoeye", + "zone": "S03_216C" + }, + { + "id": "S03_216CH_FPE2", + "svg": "photoeye", + "zone": "S03_216C" + }, + { + "id": "S03_217CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_217C" + }, + { + "id": "S03_217CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_217C" + }, + { + "id": "S03_217CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_217C" + }, + { + "id": "S03_217CH_FPE1", + "svg": "photoeye", + "zone": "S03_217C" + }, + { + "id": "S03_217CH_FPE2", + "svg": "photoeye", + "zone": "S03_217C" + }, + { + "id": "S03_218CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_218C" + }, + { + "id": "S03_218CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_218C" + }, + { + "id": "S03_218CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_218C" + }, + { + "id": "S03_218CH_FPE1", + "svg": "photoeye", + "zone": "S03_218C" + }, + { + "id": "S03_218CH_FPE2", + "svg": "photoeye", + "zone": "S03_218C" + }, + { + "id": "S03_219CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_219C" + }, + { + "id": "S03_219CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_219C" + }, + { + "id": "S03_219CH_FPE1", + "svg": "photoeye", + "zone": "S03_219C" + }, + { + "id": "S03_219CH_FPE2", + "svg": "photoeye", + "zone": "S03_219C" + }, + { + "id": "S03_220CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_220C" + }, + { + "id": "S03_220CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_220C" + }, + { + "id": "S03_220CH_FPE1", + "svg": "photoeye", + "zone": "S03_220C" + }, + { + "id": "S03_220CH_FPE2", + "svg": "photoeye", + "zone": "S03_220C" + }, + { + "id": "S03_221CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_221C" + }, + { + "id": "S03_221CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_221C" + }, + { + "id": "S03_221CH_FPE1", + "svg": "photoeye", + "zone": "S03_221C" + }, + { + "id": "S03_221CH_FPE2", + "svg": "photoeye", + "zone": "S03_221C" + }, + { + "id": "S03_222CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_222C" + }, + { + "id": "S03_222CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_222C" + }, + { + "id": "S03_222CH_FPE1", + "svg": "photoeye", + "zone": "S03_222C" + }, + { + "id": "S03_222CH_FPE2", + "svg": "photoeye", + "zone": "S03_222C" + }, + { + "id": "S03_223CH_BCN1", + "svg": "beacon", + "zone": "S03_223C" + }, + { + "id": "S03_223CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_223C" + }, + { + "id": "S03_223CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_223C" + }, + { + "id": "S03_223CH_FPE1", + "svg": "photoeye", + "zone": "S03_223C" + }, + { + "id": "S03_223CH_FPE2", + "svg": "photoeye", + "zone": "S03_223C" + }, + { + "id": "S03_224CH_BCN1", + "svg": "beacon", + "zone": "S03_224C" + }, + { + "id": "S03_224CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_224C" + }, + { + "id": "S03_224CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_224C" + }, + { + "id": "S03_224CH_FPE1", + "svg": "photoeye", + "zone": "S03_224C" + }, + { + "id": "S03_224CH_FPE2", + "svg": "photoeye", + "zone": "S03_224C" + }, + { + "id": "S03_225CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_225C" + }, + { + "id": "S03_225CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_225C" + }, + { + "id": "S03_225CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_225C" + }, + { + "id": "S03_225CH_FPE1", + "svg": "photoeye", + "zone": "S03_225C" + }, + { + "id": "S03_225CH_FPE2", + "svg": "photoeye", + "zone": "S03_225C" + }, + { + "id": "S03_226CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_226C" + }, + { + "id": "S03_226CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_226C" + }, + { + "id": "S03_226CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_226C" + }, + { + "id": "S03_226CH_FPE1", + "svg": "photoeye", + "zone": "S03_226C" + }, + { + "id": "S03_226CH_FPE2", + "svg": "photoeye", + "zone": "S03_226C" + }, + { + "id": "S03_227CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_227C" + }, + { + "id": "S03_227CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_227C" + }, + { + "id": "S03_227CH_FPE1", + "svg": "photoeye", + "zone": "S03_227C" + }, + { + "id": "S03_227CH_FPE2", + "svg": "photoeye", + "zone": "S03_227C" + }, + { + "id": "S03_228CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_228C" + }, + { + "id": "S03_228CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_228C" + }, + { + "id": "S03_228CH_FPE1", + "svg": "photoeye", + "zone": "S03_228C" + }, + { + "id": "S03_228CH_FPE2", + "svg": "photoeye", + "zone": "S03_228C" + }, + { + "id": "S03_229CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_229C" + }, + { + "id": "S03_229CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_229C" + }, + { + "id": "S03_229CH_FPE1", + "svg": "photoeye", + "zone": "S03_229C" + }, + { + "id": "S03_229CH_FPE2", + "svg": "photoeye", + "zone": "S03_229C" + }, + { + "id": "S03_230CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_230C" + }, + { + "id": "S03_230CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_230C" + }, + { + "id": "S03_230CH_FPE1", + "svg": "photoeye", + "zone": "S03_230C" + }, + { + "id": "S03_230CH_FPE2", + "svg": "photoeye", + "zone": "S03_230C" + }, + { + "id": "S03_231CH_BCN1", + "svg": "beacon", + "zone": "S03_231C" + }, + { + "id": "S03_231CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_231C" + }, + { + "id": "S03_231CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_231C" + }, + { + "id": "S03_231CH_FPE1", + "svg": "photoeye", + "zone": "S03_231C" + }, + { + "id": "S03_231CH_FPE2", + "svg": "photoeye", + "zone": "S03_231C" + }, + { + "id": "S03_232CH_BCN1", + "svg": "beacon", + "zone": "S03_232C" + }, + { + "id": "S03_232CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_232C" + }, + { + "id": "S03_232CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_232C" + }, + { + "id": "S03_232CH_FPE1", + "svg": "photoeye", + "zone": "S03_232C" + }, + { + "id": "S03_232CH_FPE2", + "svg": "photoeye", + "zone": "S03_232C" + }, + { + "id": "S03_233CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_233C" + }, + { + "id": "S03_233CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_233C" + }, + { + "id": "S03_233CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_233C" + }, + { + "id": "S03_233CH_FPE1", + "svg": "photoeye", + "zone": "S03_233C" + }, + { + "id": "S03_233CH_FPE2", + "svg": "photoeye", + "zone": "S03_233C" + }, + { + "id": "S03_234CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_234C" + }, + { + "id": "S03_234CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_234C" + }, + { + "id": "S03_234CH_FIOM1", + "svg": "fio_sio_fioh", + "zone": "S03_234C" + }, + { + "id": "S03_234CH_FPE1", + "svg": "photoeye", + "zone": "S03_234C" + }, + { + "id": "S03_234CH_FPE2", + "svg": "photoeye", + "zone": "S03_234C" + }, + { + "id": "S03_235CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_235C" + }, + { + "id": "S03_235CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_235C" + }, + { + "id": "S03_235CH_FPE1", + "svg": "photoeye", + "zone": "S03_235C" + }, + { + "id": "S03_235CH_FPE2", + "svg": "photoeye", + "zone": "S03_235C" + }, + { + "id": "S03_236CH_EN1_PB", + "svg": "chute_enable", + "zone": "S03_236C" + }, + { + "id": "S03_236CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "S03_236C" + }, + { + "id": "S03_236CH_FPE1", + "svg": "photoeye", + "zone": "S03_236C" + }, + { + "id": "S03_236CH_FPE2", + "svg": "photoeye", + "zone": "S03_236C" + } + ], + "MCM13": [ + { + "id": "PDP01", + "svg": "pdp", + "zone": "PDP01" + }, + { + "id": "PDP21", + "svg": "pdp", + "zone": "PDP21" + }, + { + "id": "PDP21_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP21" + }, + { + "id": "PDP21_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP21" + }, + { + "id": "PDP22", + "svg": "pdp", + "zone": "PDP22" + }, + { + "id": "PDP22_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP22" + }, + { + "id": "PDP22_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP22" + }, + { + "id": "PDP23", + "svg": "pdp", + "zone": "PDP23" + }, + { + "id": "PDP23_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP23" + }, + { + "id": "PDP23_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP23" + }, + { + "id": "PDP24", + "svg": "pdp", + "zone": "PDP24" + }, + { + "id": "PDP24_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP24" + }, + { + "id": "PDP24_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP24" + }, + { + "id": "PDP25", + "svg": "pdp", + "zone": "PDP25" + }, + { + "id": "PDP25_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP25" + }, + { + "id": "PDP25_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP25" + }, + { + "id": "PRSA_1_BCN1", + "svg": "beacon", + "zone": "PRSA_1" + }, + { + "id": "PRSA_1_EPC1", + "svg": "epc", + "zone": "PRSA_1" + }, + { + "id": "PRSA_1_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PRSA_1" + }, + { + "id": "PRSA_1_S1_PB", + "svg": "start", + "zone": "PRSA_1" + }, + { + "id": "PRSA_1_TPE1", + "svg": "photoeye", + "zone": "PRSA_1" + }, + { + "id": "PRSA_1_VFD", + "svg": "conveyor", + "zone": "PRSA_1" + }, + { + "id": "PRSA_2_BCN1", + "svg": "beacon", + "zone": "PRSA_2" + }, + { + "id": "PRSA_2_EPC1", + "svg": "epc", + "zone": "PRSA_2" + }, + { + "id": "PRSA_2_S1_PB", + "svg": "start", + "zone": "PRSA_2" + }, + { + "id": "PRSA_2_TPE1", + "svg": "photoeye", + "zone": "PRSA_2" + }, + { + "id": "PRSA_2_VFD", + "svg": "conveyor", + "zone": "PRSA_2" + }, + { + "id": "PRSA_3_DPM1", + "svg": "dpm", + "zone": "PRSA_3" + }, + { + "id": "PRSA_3_TPE1", + "svg": "photoeye", + "zone": "PRSA_3" + }, + { + "id": "PRSA_3_VFD", + "svg": "conveyor", + "zone": "PRSA_3" + }, + { + "id": "PRSB_10_CH_FPE1", + "svg": "photoeye", + "zone": "PRSB_10" + }, + { + "id": "PRSB_11_BCN1", + "svg": "beacon", + "zone": "PRSB_11" + }, + { + "id": "PRSB_11_BCN2", + "svg": "beacon", + "zone": "PRSB_11" + }, + { + "id": "PRSB_11_EPC1", + "svg": "epc", + "zone": "PRSB_11" + }, + { + "id": "PRSB_11_EPC2", + "svg": "epc", + "zone": "PRSB_11" + }, + { + "id": "PRSB_11_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PRSB_11" + }, + { + "id": "PRSB_11_SS1_SPB", + "svg": "start_stop", + "zone": "PRSB_11" + }, + { + "id": "PRSB_11_SS1_STPB", + "svg": "start_stop", + "zone": "PRSB_11" + }, + { + "id": "PRSB_11_SS2_SPB", + "svg": "start_stop", + "zone": "PRSB_11" + }, + { + "id": "PRSB_11_SS2_STPB", + "svg": "start_stop", + "zone": "PRSB_11" + }, + { + "id": "PRSB_11_TPE1", + "svg": "photoeye", + "zone": "PRSB_11" + }, + { + "id": "PRSB_11_VFD", + "svg": "conveyor", + "zone": "PRSB_11" + }, + { + "id": "PRSB_2_DPM1", + "svg": "dpm", + "zone": "PRSB_2" + }, + { + "id": "PRSB_3_TPE1", + "svg": "photoeye", + "zone": "PRSB_3" + }, + { + "id": "PRSB_3_TPE2", + "svg": "photoeye", + "zone": "PRSB_3" + }, + { + "id": "PRSB_3_VFD", + "svg": "conveyor", + "zone": "PRSB_3" + }, + { + "id": "PRSB_5_BCN1", + "svg": "beacon", + "zone": "PRSB_5" + }, + { + "id": "PRSB_5_BCN2", + "svg": "beacon", + "zone": "PRSB_5" + }, + { + "id": "PRSB_5_EPC1", + "svg": "epc", + "zone": "PRSB_5" + }, + { + "id": "PRSB_5_EPC2", + "svg": "epc", + "zone": "PRSB_5" + }, + { + "id": "PRSB_5_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PRSB_5" + }, + { + "id": "PRSB_5_S1_PB", + "svg": "start", + "zone": "PRSB_5" + }, + { + "id": "PRSB_5_S2_PB", + "svg": "start", + "zone": "PRSB_5" + }, + { + "id": "PRSB_5_TPE1", + "svg": "photoeye", + "zone": "PRSB_5" + }, + { + "id": "PRSB_5_TPE2", + "svg": "photoeye", + "zone": "PRSB_5" + }, + { + "id": "PRSB_5_VFD", + "svg": "conveyor", + "zone": "PRSB_5" + }, + { + "id": "PRSB_6_TPE1", + "svg": "photoeye", + "zone": "PRSB_6" + }, + { + "id": "PRSB_6_VFD", + "svg": "conveyor", + "zone": "PRSB_6" + }, + { + "id": "PRSB_7_BCN1", + "svg": "beacon", + "zone": "PRSB_7" + }, + { + "id": "PRSB_7_JR1_PB", + "svg": "jam_reset", + "zone": "PRSB_7" + }, + { + "id": "PRSB_7_TPE1", + "svg": "photoeye", + "zone": "PRSB_7" + }, + { + "id": "PRSB_7_VFD", + "svg": "conveyor", + "zone": "PRSB_7" + }, + { + "id": "PRSB_9_TPE1", + "svg": "photoeye", + "zone": "PRSB_9" + }, + { + "id": "PRSB_9_TPE2", + "svg": "photoeye", + "zone": "PRSB_9" + }, + { + "id": "PRSB_9_TPE3", + "svg": "photoeye", + "zone": "PRSB_9" + }, + { + "id": "PRSB_9_VFD", + "svg": "conveyor", + "zone": "PRSB_9" + }, + { + "id": "PRSC_1_TPE1", + "svg": "photoeye", + "zone": "PRSC_1" + }, + { + "id": "PRSC_1_VFD", + "svg": "conveyor", + "zone": "PRSC_1" + }, + { + "id": "PRSC_2_BCN1", + "svg": "beacon", + "zone": "PRSC_2" + }, + { + "id": "PRSC_2_BCN2", + "svg": "beacon", + "zone": "PRSC_2" + }, + { + "id": "PRSC_2_EPC1", + "svg": "epc", + "zone": "PRSC_2" + }, + { + "id": "PRSC_2_EPC2", + "svg": "epc", + "zone": "PRSC_2" + }, + { + "id": "PRSC_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PRSC_2" + }, + { + "id": "PRSC_2_S1_PB", + "svg": "start", + "zone": "PRSC_2" + }, + { + "id": "PRSC_2_S2_PB", + "svg": "start", + "zone": "PRSC_2" + }, + { + "id": "PRSC_2_TPE1", + "svg": "photoeye", + "zone": "PRSC_2" + }, + { + "id": "PRSC_2_VFD", + "svg": "conveyor", + "zone": "PRSC_2" + }, + { + "id": "PRSC_3_TPE1", + "svg": "photoeye", + "zone": "PRSC_3" + }, + { + "id": "PRSC_3_VFD", + "svg": "conveyor", + "zone": "PRSC_3" + }, + { + "id": "PRSD_1_BCN1", + "svg": "beacon", + "zone": "PRSD_1" + }, + { + "id": "PRSD_1_EPC1", + "svg": "epc", + "zone": "PRSD_1" + }, + { + "id": "PRSD_1_S1_PB", + "svg": "start", + "zone": "PRSD_1" + }, + { + "id": "PRSD_1_TPE1", + "svg": "photoeye", + "zone": "PRSD_1" + }, + { + "id": "PRSD_1_VFD", + "svg": "conveyor", + "zone": "PRSD_1" + }, + { + "id": "PRSD_10_BCN1", + "svg": "beacon", + "zone": "PRSD_10" + }, + { + "id": "PRSD_10_JR1_PB", + "svg": "jam_reset", + "zone": "PRSD_10" + }, + { + "id": "PRSD_10_TPE1", + "svg": "photoeye", + "zone": "PRSD_10" + }, + { + "id": "PRSD_10_TPE2", + "svg": "photoeye", + "zone": "PRSD_10" + }, + { + "id": "PRSD_10_TPE3", + "svg": "photoeye", + "zone": "PRSD_10" + }, + { + "id": "PRSD_10_VFD", + "svg": "conveyor", + "zone": "PRSD_10" + }, + { + "id": "PRSD_12_TPE1", + "svg": "photoeye", + "zone": "PRSD_12" + }, + { + "id": "PRSD_12_TPE2", + "svg": "photoeye", + "zone": "PRSD_12" + }, + { + "id": "PRSD_12_VFD", + "svg": "conveyor", + "zone": "PRSD_12" + }, + { + "id": "PRSD_13CH_FPE1", + "svg": "photoeye", + "zone": "PRSD_13C" + }, + { + "id": "PRSD_14_BCN1", + "svg": "beacon", + "zone": "PRSD_14" + }, + { + "id": "PRSD_14_BCN2", + "svg": "beacon", + "zone": "PRSD_14" + }, + { + "id": "PRSD_14_EPC1", + "svg": "epc", + "zone": "PRSD_14" + }, + { + "id": "PRSD_14_EPC2", + "svg": "epc", + "zone": "PRSD_14" + }, + { + "id": "PRSD_14_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PRSD_14" + }, + { + "id": "PRSD_14_SS1_SPB", + "svg": "start_stop", + "zone": "PRSD_14" + }, + { + "id": "PRSD_14_SS1_STPB", + "svg": "start_stop", + "zone": "PRSD_14" + }, + { + "id": "PRSD_14_SS2_SPB", + "svg": "start_stop", + "zone": "PRSD_14" + }, + { + "id": "PRSD_14_SS2_STPB", + "svg": "start_stop", + "zone": "PRSD_14" + }, + { + "id": "PRSD_14_TPE1", + "svg": "photoeye", + "zone": "PRSD_14" + }, + { + "id": "PRSD_14_VFD", + "svg": "conveyor", + "zone": "PRSD_14" + }, + { + "id": "PRSD_2_BCN1", + "svg": "beacon", + "zone": "PRSD_2" + }, + { + "id": "PRSD_2_EPC1", + "svg": "epc", + "zone": "PRSD_2" + }, + { + "id": "PRSD_2_S1_PB", + "svg": "start", + "zone": "PRSD_2" + }, + { + "id": "PRSD_2_TPE1", + "svg": "photoeye", + "zone": "PRSD_2" + }, + { + "id": "PRSD_2_VFD", + "svg": "conveyor", + "zone": "PRSD_2" + }, + { + "id": "PRSD_3_TPE1", + "svg": "photoeye", + "zone": "PRSD_3" + }, + { + "id": "PRSD_3_VFD", + "svg": "conveyor", + "zone": "PRSD_3" + }, + { + "id": "PRSD_4_TPE1", + "svg": "photoeye", + "zone": "PRSD_4" + }, + { + "id": "PRSD_4_VFD", + "svg": "conveyor", + "zone": "PRSD_4" + }, + { + "id": "PRSD_5_TPE1", + "svg": "photoeye", + "zone": "PRSD_5" + }, + { + "id": "PRSD_5_VFD", + "svg": "conveyor", + "zone": "PRSD_5" + }, + { + "id": "PRSD_6_TPE1", + "svg": "photoeye", + "zone": "PRSD_6" + }, + { + "id": "PRSD_6_VFD", + "svg": "conveyor", + "zone": "PRSD_6" + }, + { + "id": "PRSD_7_DPM1", + "svg": "dpm", + "zone": "PRSD_7" + }, + { + "id": "PRSD_7_TPE1", + "svg": "photoeye", + "zone": "PRSD_7" + }, + { + "id": "PRSD_7_VFD", + "svg": "conveyor", + "zone": "PRSD_7" + }, + { + "id": "PRSD_8_BCN1", + "svg": "beacon", + "zone": "PRSD_8" + }, + { + "id": "PRSD_8_JR1_PB", + "svg": "jam_reset", + "zone": "PRSD_8" + }, + { + "id": "PRSD_8_TPE1", + "svg": "photoeye", + "zone": "PRSD_8" + }, + { + "id": "PRSD_8_VFD", + "svg": "conveyor", + "zone": "PRSD_8" + }, + { + "id": "PRSOB_10_TPE1", + "svg": "photoeye", + "zone": "PRSOB_10" + }, + { + "id": "PRSOB_10_VFD", + "svg": "conveyor", + "zone": "PRSOB_10" + }, + { + "id": "PRSOB_11_BCN1", + "svg": "beacon", + "zone": "PRSOB_11" + }, + { + "id": "PRSOB_11_JR1_PB", + "svg": "jam_reset", + "zone": "PRSOB_11" + }, + { + "id": "PRSOB_11_TPE1", + "svg": "photoeye", + "zone": "PRSOB_11" + }, + { + "id": "PRSOB_11_VFD", + "svg": "conveyor", + "zone": "PRSOB_11" + }, + { + "id": "PRSOB_12_TPE1", + "svg": "photoeye", + "zone": "PRSOB_12" + }, + { + "id": "PRSOB_12_VFD", + "svg": "conveyor", + "zone": "PRSOB_12" + }, + { + "id": "PRSOB_13_TPE1", + "svg": "photoeye", + "zone": "PRSOB_13" + }, + { + "id": "PRSOB_13_VFD", + "svg": "conveyor", + "zone": "PRSOB_13" + }, + { + "id": "PRSOB_14_TPE1", + "svg": "photoeye", + "zone": "PRSOB_14" + }, + { + "id": "PRSOB_14_VFD", + "svg": "conveyor", + "zone": "PRSOB_14" + }, + { + "id": "PRSOB_16_BCN1", + "svg": "beacon", + "zone": "PRSOB_16" + }, + { + "id": "PRSOB_16_DPM1", + "svg": "dpm", + "zone": "PRSOB_16" + }, + { + "id": "PRSOB_16_JR1_PB", + "svg": "jam_reset", + "zone": "PRSOB_16" + }, + { + "id": "PRSOB_16_TPE1", + "svg": "photoeye", + "zone": "PRSOB_16" + }, + { + "id": "PRSOB_16_VFD", + "svg": "conveyor", + "zone": "PRSOB_16" + }, + { + "id": "PRSOB_2_DPM1", + "svg": "dpm", + "zone": "PRSOB_2" + }, + { + "id": "PRSOB_2_EPC1", + "svg": "epc", + "zone": "PRSOB_2" + }, + { + "id": "PRSOB_2_EPC2", + "svg": "epc", + "zone": "PRSOB_2" + }, + { + "id": "PRSOB_2_TPE1", + "svg": "photoeye", + "zone": "PRSOB_2" + }, + { + "id": "PRSOB_2_VFD", + "svg": "conveyor", + "zone": "PRSOB_2" + }, + { + "id": "PRSOB_3_TPE1", + "svg": "photoeye", + "zone": "PRSOB_3" + }, + { + "id": "PRSOB_3_VFD", + "svg": "conveyor", + "zone": "PRSOB_3" + }, + { + "id": "PRSOB_4_TPE1", + "svg": "photoeye", + "zone": "PRSOB_4" + }, + { + "id": "PRSOB_4_VFD", + "svg": "conveyor", + "zone": "PRSOB_4" + }, + { + "id": "PRSOB_5_TPE1", + "svg": "photoeye", + "zone": "PRSOB_5" + }, + { + "id": "PRSOB_5_VFD", + "svg": "conveyor", + "zone": "PRSOB_5" + }, + { + "id": "PRSOB_6_BCN1", + "svg": "beacon", + "zone": "PRSOB_6" + }, + { + "id": "PRSOB_6_JR1_PB", + "svg": "jam_reset", + "zone": "PRSOB_6" + }, + { + "id": "PRSOB_6_TPE1", + "svg": "photoeye", + "zone": "PRSOB_6" + }, + { + "id": "PRSOB_6_VFD", + "svg": "conveyor", + "zone": "PRSOB_6" + }, + { + "id": "PRSOB_7_TPE1", + "svg": "photoeye", + "zone": "PRSOB_7" + }, + { + "id": "PRSOB_7_VFD", + "svg": "conveyor", + "zone": "PRSOB_7" + }, + { + "id": "PRSOB_8_DPM1", + "svg": "dpm", + "zone": "PRSOB_8" + }, + { + "id": "PRSOB_8_TPE1", + "svg": "photoeye", + "zone": "PRSOB_8" + }, + { + "id": "PRSOB_8_VFD", + "svg": "conveyor", + "zone": "PRSOB_8" + }, + { + "id": "PRSOB_9_BCN1", + "svg": "beacon", + "zone": "PRSOB_9" + }, + { + "id": "PRSOB_9_BCN2", + "svg": "beacon", + "zone": "PRSOB_9" + }, + { + "id": "PRSOB_9_EPC1", + "svg": "epc", + "zone": "PRSOB_9" + }, + { + "id": "PRSOB_9_EPC2", + "svg": "epc", + "zone": "PRSOB_9" + }, + { + "id": "PRSOB_9_EPC3", + "svg": "epc", + "zone": "PRSOB_9" + }, + { + "id": "PRSOB_9_EPC4", + "svg": "epc", + "zone": "PRSOB_9" + }, + { + "id": "PRSOB_9_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PRSOB_9" + }, + { + "id": "PRSOB_9_S1_PB", + "svg": "start", + "zone": "PRSOB_9" + }, + { + "id": "PRSOB_9_S2_PB", + "svg": "start", + "zone": "PRSOB_9" + }, + { + "id": "PRSOB_9_TPE1", + "svg": "photoeye", + "zone": "PRSOB_9" + }, + { + "id": "PRSOB_9_VFD", + "svg": "conveyor", + "zone": "PRSOB_9" + }, + { + "id": "PRSOC_4_BCN1", + "svg": "beacon", + "zone": "PRSOC_4" + }, + { + "id": "PRSOC_4_BCN2", + "svg": "beacon", + "zone": "PRSOC_4" + }, + { + "id": "PRSOC_4_EPC1", + "svg": "epc", + "zone": "PRSOC_4" + }, + { + "id": "PRSOC_4_EPC2", + "svg": "epc", + "zone": "PRSOC_4" + }, + { + "id": "PRSOC_4_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PRSOC_4" + }, + { + "id": "PRSOC_4_S1_PB", + "svg": "start", + "zone": "PRSOC_4" + }, + { + "id": "PRSOC_4_S2_PB", + "svg": "start", + "zone": "PRSOC_4" + }, + { + "id": "PRSOC_4_TPE1", + "svg": "photoeye", + "zone": "PRSOC_4" + }, + { + "id": "PRSOC_4_VFD", + "svg": "conveyor", + "zone": "PRSOC_4" + }, + { + "id": "PRSOC_5_TPE1", + "svg": "photoeye", + "zone": "PRSOC_5" + }, + { + "id": "PRSOC_5_VFD", + "svg": "conveyor", + "zone": "PRSOC_5" + }, + { + "id": "PS11_1_BCN1", + "svg": "beacon", + "zone": "PS11_1" + }, + { + "id": "PS11_1_EPC1", + "svg": "epc", + "zone": "PS11_1" + }, + { + "id": "PS11_1_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PS11_1" + }, + { + "id": "PS11_1_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS11_1" + }, + { + "id": "PS11_1_JPE1", + "svg": "photoeye", + "zone": "PS11_1" + }, + { + "id": "PS11_1_JPE2", + "svg": "photoeye", + "zone": "PS11_1" + }, + { + "id": "PS11_1_JPE3", + "svg": "photoeye", + "zone": "PS11_1" + }, + { + "id": "PS11_1_S1_PB", + "svg": "start", + "zone": "PS11_1" + }, + { + "id": "PS11_1_VFD", + "svg": "conveyor", + "zone": "PS11_1" + }, + { + "id": "PS11_10_JPE1", + "svg": "photoeye", + "zone": "PS11_10" + }, + { + "id": "PS11_10_VFD", + "svg": "conveyor", + "zone": "PS11_10" + }, + { + "id": "PS11_11_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PS11_11" + }, + { + "id": "PS11_11_JPE1", + "svg": "photoeye", + "zone": "PS11_11" + }, + { + "id": "PS11_11_JPE2", + "svg": "photoeye", + "zone": "PS11_11" + }, + { + "id": "PS11_11_SIO1", + "svg": "fio_sio_fioh", + "zone": "PS11_11" + }, + { + "id": "PS11_11_VFD", + "svg": "conveyor", + "zone": "PS11_11" + }, + { + "id": "PS11_12_DPM1", + "svg": "dpm", + "zone": "PS11_12" + }, + { + "id": "PS11_12_JPE1", + "svg": "photoeye", + "zone": "PS11_12" + }, + { + "id": "PS11_12_VFD", + "svg": "conveyor", + "zone": "PS11_12" + }, + { + "id": "PS11_13_JPE1", + "svg": "photoeye", + "zone": "PS11_13" + }, + { + "id": "PS11_13_JPE2", + "svg": "photoeye", + "zone": "PS11_13" + }, + { + "id": "PS11_13_VFD", + "svg": "conveyor", + "zone": "PS11_13" + }, + { + "id": "PS11_14_BCN1", + "svg": "beacon", + "zone": "PS11_14" + }, + { + "id": "PS11_14_BCN2", + "svg": "beacon", + "zone": "PS11_14" + }, + { + "id": "PS11_14_EPC1", + "svg": "epc", + "zone": "PS11_14" + }, + { + "id": "PS11_14_EPC2", + "svg": "epc", + "zone": "PS11_14" + }, + { + "id": "PS11_14_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PS11_14" + }, + { + "id": "PS11_14_JPE1", + "svg": "photoeye", + "zone": "PS11_14" + }, + { + "id": "PS11_14_S1_PB", + "svg": "start", + "zone": "PS11_14" + }, + { + "id": "PS11_14_S2_PB", + "svg": "start", + "zone": "PS11_14" + }, + { + "id": "PS11_14_SIO1", + "svg": "fio_sio_fioh", + "zone": "PS11_14" + }, + { + "id": "PS11_14_VFD", + "svg": "conveyor", + "zone": "PS11_14" + }, + { + "id": "PS11_15_JPE1", + "svg": "photoeye", + "zone": "PS11_15" + }, + { + "id": "PS11_15_VFD", + "svg": "conveyor", + "zone": "PS11_15" + }, + { + "id": "PS11_16_BCN2", + "svg": "beacon", + "zone": "PS11_16" + }, + { + "id": "PS11_16_BCN3", + "svg": "beacon", + "zone": "PS11_16" + }, + { + "id": "PS11_16_DPM1", + "svg": "dpm", + "zone": "PS11_16" + }, + { + "id": "PS11_16_EPC1", + "svg": "epc", + "zone": "PS11_16" + }, + { + "id": "PS11_16_EPC2", + "svg": "epc", + "zone": "PS11_16" + }, + { + "id": "PS11_16_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS11_16" + }, + { + "id": "PS11_16_JPE1", + "svg": "photoeye", + "zone": "PS11_16" + }, + { + "id": "PS11_16_S1_PB", + "svg": "start", + "zone": "PS11_16" + }, + { + "id": "PS11_16_S2_PB", + "svg": "start", + "zone": "PS11_16" + }, + { + "id": "PS11_16_VFD", + "svg": "conveyor", + "zone": "PS11_16" + }, + { + "id": "PS11_17_JPE1", + "svg": "photoeye", + "zone": "PS11_17" + }, + { + "id": "PS11_17_VFD", + "svg": "conveyor", + "zone": "PS11_17" + }, + { + "id": "PS11_18_JPE1", + "svg": "photoeye", + "zone": "PS11_18" + }, + { + "id": "PS11_18_VFD", + "svg": "conveyor", + "zone": "PS11_18" + }, + { + "id": "PS11_2_BCN1", + "svg": "beacon", + "zone": "PS11_2" + }, + { + "id": "PS11_2_DPM1", + "svg": "dpm", + "zone": "PS11_2" + }, + { + "id": "PS11_2_EPC1", + "svg": "epc", + "zone": "PS11_2" + }, + { + "id": "PS11_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PS11_2" + }, + { + "id": "PS11_2_JPE1", + "svg": "photoeye", + "zone": "PS11_2" + }, + { + "id": "PS11_2_JPE2", + "svg": "photoeye", + "zone": "PS11_2" + }, + { + "id": "PS11_2_JR1_PB", + "svg": "jam_reset", + "zone": "PS11_2" + }, + { + "id": "PS11_2_VFD", + "svg": "conveyor", + "zone": "PS11_2" + }, + { + "id": "PS11_20_BCN1", + "svg": "beacon", + "zone": "PS11_20" + }, + { + "id": "PS11_20_DPM1", + "svg": "dpm", + "zone": "PS11_20" + }, + { + "id": "PS11_20_JPE1", + "svg": "photoeye", + "zone": "PS11_20" + }, + { + "id": "PS11_20_JPE2", + "svg": "photoeye", + "zone": "PS11_20" + }, + { + "id": "PS11_20_JR1_PB", + "svg": "jam_reset", + "zone": "PS11_20" + }, + { + "id": "PS11_20_VFD", + "svg": "conveyor", + "zone": "PS11_20" + }, + { + "id": "PS11_22_BCN1", + "svg": "beacon", + "zone": "PS11_22" + }, + { + "id": "PS11_22_BCN2", + "svg": "beacon", + "zone": "PS11_22" + }, + { + "id": "PS11_22_EPC1", + "svg": "epc", + "zone": "PS11_22" + }, + { + "id": "PS11_22_EPC2", + "svg": "epc", + "zone": "PS11_22" + }, + { + "id": "PS11_22_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS11_22" + }, + { + "id": "PS11_22_JPE1", + "svg": "photoeye", + "zone": "PS11_22" + }, + { + "id": "PS11_22_JPE2", + "svg": "photoeye", + "zone": "PS11_22" + }, + { + "id": "PS11_22_S1_PB", + "svg": "start", + "zone": "PS11_22" + }, + { + "id": "PS11_22_S2_PB", + "svg": "start", + "zone": "PS11_22" + }, + { + "id": "PS11_22_VFD", + "svg": "conveyor", + "zone": "PS11_22" + }, + { + "id": "PS11_24_BCN1", + "svg": "beacon", + "zone": "PS11_24" + }, + { + "id": "PS11_24_BCN2", + "svg": "beacon", + "zone": "PS11_24" + }, + { + "id": "PS11_24_CH1_EN1_PB", + "svg": "chute_enable", + "zone": "PS11_24" + }, + { + "id": "PS11_24_CH1_FPE1", + "svg": "photoeye", + "zone": "PS11_24" + }, + { + "id": "PS11_24_CH1_FPE2", + "svg": "photoeye", + "zone": "PS11_24" + }, + { + "id": "PS11_24_CH2_EN1_PB", + "svg": "chute_enable", + "zone": "PS11_24" + }, + { + "id": "PS11_24_CH2_FPE1", + "svg": "photoeye", + "zone": "PS11_24" + }, + { + "id": "PS11_24_CH2_FPE2", + "svg": "photoeye", + "zone": "PS11_24" + }, + { + "id": "PS11_24_CH3_EN1_PB", + "svg": "chute_enable", + "zone": "PS11_24" + }, + { + "id": "PS11_24_CH3_FPE1", + "svg": "photoeye", + "zone": "PS11_24" + }, + { + "id": "PS11_24_CH3_FPE2", + "svg": "photoeye", + "zone": "PS11_24" + }, + { + "id": "PS11_24_CH4_EN1_PB", + "svg": "chute_enable", + "zone": "PS11_24" + }, + { + "id": "PS11_24_CH4_FPE1", + "svg": "photoeye", + "zone": "PS11_24" + }, + { + "id": "PS11_24_CH4_FPE2", + "svg": "photoeye", + "zone": "PS11_24" + }, + { + "id": "PS11_24_DIV1_LS1", + "svg": "diverter", + "zone": "PS11_24" + }, + { + "id": "PS11_24_DIV1_LS2", + "svg": "diverter", + "zone": "PS11_24" + }, + { + "id": "PS11_24_DIV1_SOL1", + "svg": "solenoid", + "zone": "PS11_24" + }, + { + "id": "PS11_24_DIV1_SOL2", + "svg": "solenoid", + "zone": "PS11_24" + }, + { + "id": "PS11_24_DIV2_LS1", + "svg": "diverter", + "zone": "PS11_24" + }, + { + "id": "PS11_24_DIV2_LS2", + "svg": "diverter", + "zone": "PS11_24" + }, + { + "id": "PS11_24_DIV2_SOL1", + "svg": "solenoid", + "zone": "PS11_24" + }, + { + "id": "PS11_24_DIV2_SOL2", + "svg": "solenoid", + "zone": "PS11_24" + }, + { + "id": "PS11_24_DIV3_LS1", + "svg": "diverter", + "zone": "PS11_24" + }, + { + "id": "PS11_24_DIV3_LS2", + "svg": "diverter", + "zone": "PS11_24" + }, + { + "id": "PS11_24_DIV3_SOL1", + "svg": "solenoid", + "zone": "PS11_24" + }, + { + "id": "PS11_24_DIV3_SOL2", + "svg": "solenoid", + "zone": "PS11_24" + }, + { + "id": "PS11_24_DIV4_LS1", + "svg": "diverter", + "zone": "PS11_24" + }, + { + "id": "PS11_24_DIV4_LS2", + "svg": "diverter", + "zone": "PS11_24" + }, + { + "id": "PS11_24_DIV4_SOL1", + "svg": "solenoid", + "zone": "PS11_24" + }, + { + "id": "PS11_24_DIV4_SOL2", + "svg": "solenoid", + "zone": "PS11_24" + }, + { + "id": "PS11_24_DPM1", + "svg": "dpm", + "zone": "PS11_24" + }, + { + "id": "PS11_24_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PS11_24" + }, + { + "id": "PS11_24_FIOH2", + "svg": "fio_sio_fioh", + "zone": "PS11_24" + }, + { + "id": "PS11_24_FIOH3", + "svg": "fio_sio_fioh", + "zone": "PS11_24" + }, + { + "id": "PS11_24_FIOH4", + "svg": "fio_sio_fioh", + "zone": "PS11_24" + }, + { + "id": "PS11_24_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS11_24" + }, + { + "id": "PS11_24_FIOM2", + "svg": "fio_sio_fioh", + "zone": "PS11_24" + }, + { + "id": "PS11_24_JPE1", + "svg": "photoeye", + "zone": "PS11_24" + }, + { + "id": "PS11_24_JPE2", + "svg": "photoeye", + "zone": "PS11_24" + }, + { + "id": "PS11_24_JPE3", + "svg": "photoeye", + "zone": "PS11_24" + }, + { + "id": "PS11_24_JPE4", + "svg": "photoeye", + "zone": "PS11_24" + }, + { + "id": "PS11_24_JPE5", + "svg": "photoeye", + "zone": "PS11_24" + }, + { + "id": "PS11_24_JR1_PB", + "svg": "jam_reset", + "zone": "PS11_24" + }, + { + "id": "PS11_24_JR2_PB", + "svg": "jam_reset", + "zone": "PS11_24" + }, + { + "id": "PS11_24_VFD", + "svg": "conveyor", + "zone": "PS11_24" + }, + { + "id": "PS11_25CH_FPE1", + "svg": "photoeye", + "zone": "PS11_25C" + }, + { + "id": "PS11_3_JPE1", + "svg": "photoeye", + "zone": "PS11_3" + }, + { + "id": "PS11_3_VFD", + "svg": "conveyor", + "zone": "PS11_3" + }, + { + "id": "PS11_30_BCN1", + "svg": "beacon", + "zone": "PS11_30" + }, + { + "id": "PS11_30_DPM1", + "svg": "dpm", + "zone": "PS11_30" + }, + { + "id": "PS11_30_JPE1", + "svg": "photoeye", + "zone": "PS11_30" + }, + { + "id": "PS11_30_JPE2", + "svg": "photoeye", + "zone": "PS11_30" + }, + { + "id": "PS11_30_JR1_PB", + "svg": "jam_reset", + "zone": "PS11_30" + }, + { + "id": "PS11_30_VFD", + "svg": "conveyor", + "zone": "PS11_30" + }, + { + "id": "PS11_4_BCN1", + "svg": "beacon", + "zone": "PS11_4" + }, + { + "id": "PS11_4_BCN2", + "svg": "beacon", + "zone": "PS11_4" + }, + { + "id": "PS11_4_EPC1", + "svg": "epc", + "zone": "PS11_4" + }, + { + "id": "PS11_4_EPC2", + "svg": "epc", + "zone": "PS11_4" + }, + { + "id": "PS11_4_JPE1", + "svg": "photoeye", + "zone": "PS11_4" + }, + { + "id": "PS11_4_S1_PB", + "svg": "start", + "zone": "PS11_4" + }, + { + "id": "PS11_4_S2_PB", + "svg": "start", + "zone": "PS11_4" + }, + { + "id": "PS11_4_VFD", + "svg": "conveyor", + "zone": "PS11_4" + }, + { + "id": "PS11_6_BCN1", + "svg": "beacon", + "zone": "PS11_6" + }, + { + "id": "PS11_6_BCN2", + "svg": "beacon", + "zone": "PS11_6" + }, + { + "id": "PS11_6_DPM1", + "svg": "dpm", + "zone": "PS11_6" + }, + { + "id": "PS11_6_EPC1", + "svg": "epc", + "zone": "PS11_6" + }, + { + "id": "PS11_6_EPC2", + "svg": "epc", + "zone": "PS11_6" + }, + { + "id": "PS11_6_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PS11_6" + }, + { + "id": "PS11_6_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS11_6" + }, + { + "id": "PS11_6_JPE1", + "svg": "photoeye", + "zone": "PS11_6" + }, + { + "id": "PS11_6_JPE2", + "svg": "photoeye", + "zone": "PS11_6" + }, + { + "id": "PS11_6_S1_PB", + "svg": "start", + "zone": "PS11_6" + }, + { + "id": "PS11_6_S2_PB", + "svg": "start", + "zone": "PS11_6" + }, + { + "id": "PS11_6_VFD", + "svg": "conveyor", + "zone": "PS11_6" + }, + { + "id": "PS11_7_BCN1", + "svg": "beacon", + "zone": "PS11_7" + }, + { + "id": "PS11_7_BCN2", + "svg": "beacon", + "zone": "PS11_7" + }, + { + "id": "PS11_7_CH1_EN1_PB", + "svg": "chute_enable", + "zone": "PS11_7" + }, + { + "id": "PS11_7_CH1_FPE1", + "svg": "photoeye", + "zone": "PS11_7" + }, + { + "id": "PS11_7_CH1_FPE2", + "svg": "photoeye", + "zone": "PS11_7" + }, + { + "id": "PS11_7_CH2_EN1_PB", + "svg": "chute_enable", + "zone": "PS11_7" + }, + { + "id": "PS11_7_CH2_FPE1", + "svg": "photoeye", + "zone": "PS11_7" + }, + { + "id": "PS11_7_CH2_FPE2", + "svg": "photoeye", + "zone": "PS11_7" + }, + { + "id": "PS11_7_DIV1_LS1", + "svg": "diverter", + "zone": "PS11_7" + }, + { + "id": "PS11_7_DIV1_LS2", + "svg": "diverter", + "zone": "PS11_7" + }, + { + "id": "PS11_7_DIV1_SOL1", + "svg": "solenoid", + "zone": "PS11_7" + }, + { + "id": "PS11_7_DIV1_SOL2", + "svg": "solenoid", + "zone": "PS11_7" + }, + { + "id": "PS11_7_DIV2_LS1", + "svg": "diverter", + "zone": "PS11_7" + }, + { + "id": "PS11_7_DIV2_LS2", + "svg": "diverter", + "zone": "PS11_7" + }, + { + "id": "PS11_7_DIV2_SOL1", + "svg": "solenoid", + "zone": "PS11_7" + }, + { + "id": "PS11_7_DIV2_SOL2", + "svg": "solenoid", + "zone": "PS11_7" + }, + { + "id": "PS11_7_EPC1", + "svg": "epc", + "zone": "PS11_7" + }, + { + "id": "PS11_7_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PS11_7" + }, + { + "id": "PS11_7_FIOH2", + "svg": "fio_sio_fioh", + "zone": "PS11_7" + }, + { + "id": "PS11_7_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS11_7" + }, + { + "id": "PS11_7_JPE1", + "svg": "photoeye", + "zone": "PS11_7" + }, + { + "id": "PS11_7_JPE2", + "svg": "photoeye", + "zone": "PS11_7" + }, + { + "id": "PS11_7_JPE3", + "svg": "photoeye", + "zone": "PS11_7" + }, + { + "id": "PS11_7_JPE4", + "svg": "photoeye", + "zone": "PS11_7" + }, + { + "id": "PS11_7_JR1_PB", + "svg": "jam_reset", + "zone": "PS11_7" + }, + { + "id": "PS11_7_S1_PB", + "svg": "start", + "zone": "PS11_7" + }, + { + "id": "PS11_7_VFD", + "svg": "conveyor", + "zone": "PS11_7" + }, + { + "id": "PS11_9_DPM1", + "svg": "dpm", + "zone": "PS11_9" + }, + { + "id": "PS11_9_JPE1", + "svg": "photoeye", + "zone": "PS11_9" + }, + { + "id": "PS11_9_JPE2", + "svg": "photoeye", + "zone": "PS11_9" + }, + { + "id": "PS11_9_VFD", + "svg": "conveyor", + "zone": "PS11_9" + }, + { + "id": "PS12_1_BCN1", + "svg": "beacon", + "zone": "PS12_1" + }, + { + "id": "PS12_1_DPM1", + "svg": "dpm", + "zone": "PS12_1" + }, + { + "id": "PS12_1_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PS12_1" + }, + { + "id": "PS12_1_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS12_1" + }, + { + "id": "PS12_1_JPE1", + "svg": "photoeye", + "zone": "PS12_1" + }, + { + "id": "PS12_1_JPE2", + "svg": "photoeye", + "zone": "PS12_1" + }, + { + "id": "PS12_1_JR1_PB", + "svg": "jam_reset", + "zone": "PS12_1" + }, + { + "id": "PS12_1_VFD", + "svg": "conveyor", + "zone": "PS12_1" + }, + { + "id": "PS12_10_JPE1", + "svg": "photoeye", + "zone": "PS12_10" + }, + { + "id": "PS12_10_VFD", + "svg": "conveyor", + "zone": "PS12_10" + }, + { + "id": "PS12_11_DPM1", + "svg": "dpm", + "zone": "PS12_11" + }, + { + "id": "PS12_11_JPE1", + "svg": "photoeye", + "zone": "PS12_11" + }, + { + "id": "PS12_11_VFD", + "svg": "conveyor", + "zone": "PS12_11" + }, + { + "id": "PS12_13_BCN1", + "svg": "beacon", + "zone": "PS12_13" + }, + { + "id": "PS12_13_BCN2", + "svg": "beacon", + "zone": "PS12_13" + }, + { + "id": "PS12_13_BCN3", + "svg": "beacon", + "zone": "PS12_13" + }, + { + "id": "PS12_13_CH1_EN1_PB", + "svg": "chute_enable", + "zone": "PS12_13" + }, + { + "id": "PS12_13_CH1_FPE1", + "svg": "photoeye", + "zone": "PS12_13" + }, + { + "id": "PS12_13_CH1_FPE2", + "svg": "photoeye", + "zone": "PS12_13" + }, + { + "id": "PS12_13_CH2_EN1_PB", + "svg": "chute_enable", + "zone": "PS12_13" + }, + { + "id": "PS12_13_CH2_FPE1", + "svg": "photoeye", + "zone": "PS12_13" + }, + { + "id": "PS12_13_CH2_FPE2", + "svg": "photoeye", + "zone": "PS12_13" + }, + { + "id": "PS12_13_CH3_EN1_PB", + "svg": "chute_enable", + "zone": "PS12_13" + }, + { + "id": "PS12_13_CH3_FPE1", + "svg": "photoeye", + "zone": "PS12_13" + }, + { + "id": "PS12_13_CH3_FPE2", + "svg": "photoeye", + "zone": "PS12_13" + }, + { + "id": "PS12_13_CH4_EN1_PB", + "svg": "chute_enable", + "zone": "PS12_13" + }, + { + "id": "PS12_13_CH4_FPE1", + "svg": "photoeye", + "zone": "PS12_13" + }, + { + "id": "PS12_13_CH4_FPE2", + "svg": "photoeye", + "zone": "PS12_13" + }, + { + "id": "PS12_13_DIV1_LS1", + "svg": "diverter", + "zone": "PS12_13" + }, + { + "id": "PS12_13_DIV1_LS2", + "svg": "diverter", + "zone": "PS12_13" + }, + { + "id": "PS12_13_DIV1_SOL1", + "svg": "solenoid", + "zone": "PS12_13" + }, + { + "id": "PS12_13_DIV1_SOL2", + "svg": "solenoid", + "zone": "PS12_13" + }, + { + "id": "PS12_13_DIV2_LS1", + "svg": "diverter", + "zone": "PS12_13" + }, + { + "id": "PS12_13_DIV2_LS2", + "svg": "diverter", + "zone": "PS12_13" + }, + { + "id": "PS12_13_DIV2_SOL1", + "svg": "solenoid", + "zone": "PS12_13" + }, + { + "id": "PS12_13_DIV2_SOL2", + "svg": "solenoid", + "zone": "PS12_13" + }, + { + "id": "PS12_13_DIV3_LS1", + "svg": "diverter", + "zone": "PS12_13" + }, + { + "id": "PS12_13_DIV3_LS2", + "svg": "diverter", + "zone": "PS12_13" + }, + { + "id": "PS12_13_DIV3_SOL1", + "svg": "solenoid", + "zone": "PS12_13" + }, + { + "id": "PS12_13_DIV3_SOL2", + "svg": "solenoid", + "zone": "PS12_13" + }, + { + "id": "PS12_13_DIV4_LS1", + "svg": "diverter", + "zone": "PS12_13" + }, + { + "id": "PS12_13_DIV4_LS2", + "svg": "diverter", + "zone": "PS12_13" + }, + { + "id": "PS12_13_DIV4_SOL1", + "svg": "solenoid", + "zone": "PS12_13" + }, + { + "id": "PS12_13_DIV4_SOL2", + "svg": "solenoid", + "zone": "PS12_13" + }, + { + "id": "PS12_13_EPC1", + "svg": "epc", + "zone": "PS12_13" + }, + { + "id": "PS12_13_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PS12_13" + }, + { + "id": "PS12_13_FIOH2", + "svg": "fio_sio_fioh", + "zone": "PS12_13" + }, + { + "id": "PS12_13_FIOH3", + "svg": "fio_sio_fioh", + "zone": "PS12_13" + }, + { + "id": "PS12_13_FIOH4", + "svg": "fio_sio_fioh", + "zone": "PS12_13" + }, + { + "id": "PS12_13_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS12_13" + }, + { + "id": "PS12_13_FIOM2", + "svg": "fio_sio_fioh", + "zone": "PS12_13" + }, + { + "id": "PS12_13_JPE1", + "svg": "photoeye", + "zone": "PS12_13" + }, + { + "id": "PS12_13_JPE2", + "svg": "photoeye", + "zone": "PS12_13" + }, + { + "id": "PS12_13_JPE3", + "svg": "photoeye", + "zone": "PS12_13" + }, + { + "id": "PS12_13_JPE4", + "svg": "photoeye", + "zone": "PS12_13" + }, + { + "id": "PS12_13_JPE5", + "svg": "photoeye", + "zone": "PS12_13" + }, + { + "id": "PS12_13_JPE6", + "svg": "photoeye", + "zone": "PS12_13" + }, + { + "id": "PS12_13_JPE7", + "svg": "photoeye", + "zone": "PS12_13" + }, + { + "id": "PS12_13_JPE8", + "svg": "photoeye", + "zone": "PS12_13" + }, + { + "id": "PS12_13_JR1_PB", + "svg": "jam_reset", + "zone": "PS12_13" + }, + { + "id": "PS12_13_JR2_PB", + "svg": "jam_reset", + "zone": "PS12_13" + }, + { + "id": "PS12_13_S1_PB", + "svg": "start", + "zone": "PS12_13" + }, + { + "id": "PS12_13_VFD", + "svg": "conveyor", + "zone": "PS12_13" + }, + { + "id": "PS12_14CH_FPE1", + "svg": "photoeye", + "zone": "PS12_14C" + }, + { + "id": "PS12_2_BCN1", + "svg": "beacon", + "zone": "PS12_2" + }, + { + "id": "PS12_2_JPE1", + "svg": "photoeye", + "zone": "PS12_2" + }, + { + "id": "PS12_2_JPE2", + "svg": "photoeye", + "zone": "PS12_2" + }, + { + "id": "PS12_2_JR1_PB", + "svg": "jam_reset", + "zone": "PS12_2" + }, + { + "id": "PS12_2_JR2_PB", + "svg": "jam_reset", + "zone": "PS12_2" + }, + { + "id": "PS12_2_VFD", + "svg": "conveyor", + "zone": "PS12_2" + }, + { + "id": "PS12_3_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS12_3" + }, + { + "id": "PS12_3_JPE1", + "svg": "photoeye", + "zone": "PS12_3" + }, + { + "id": "PS12_3_VFD", + "svg": "conveyor", + "zone": "PS12_3" + }, + { + "id": "PS12_4_DPM1", + "svg": "dpm", + "zone": "PS12_4" + }, + { + "id": "PS12_4_JPE1", + "svg": "photoeye", + "zone": "PS12_4" + }, + { + "id": "PS12_4_VFD", + "svg": "conveyor", + "zone": "PS12_4" + }, + { + "id": "PS12_5_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PS12_5" + }, + { + "id": "PS12_5_JPE1", + "svg": "photoeye", + "zone": "PS12_5" + }, + { + "id": "PS12_5_SIO1", + "svg": "fio_sio_fioh", + "zone": "PS12_5" + }, + { + "id": "PS12_5_VFD", + "svg": "conveyor", + "zone": "PS12_5" + }, + { + "id": "PS12_6_DPM1", + "svg": "dpm", + "zone": "PS12_6" + }, + { + "id": "PS12_6_JPE1", + "svg": "photoeye", + "zone": "PS12_6" + }, + { + "id": "PS12_6_VFD", + "svg": "conveyor", + "zone": "PS12_6" + }, + { + "id": "PS12_7_BCN1", + "svg": "beacon", + "zone": "PS12_7" + }, + { + "id": "PS12_7_BCN2", + "svg": "beacon", + "zone": "PS12_7" + }, + { + "id": "PS12_7_BCN3", + "svg": "beacon", + "zone": "PS12_7" + }, + { + "id": "PS12_7_CH1_EN1_PB", + "svg": "chute_enable", + "zone": "PS12_7" + }, + { + "id": "PS12_7_CH1_FPE1", + "svg": "photoeye", + "zone": "PS12_7" + }, + { + "id": "PS12_7_CH1_FPE2", + "svg": "photoeye", + "zone": "PS12_7" + }, + { + "id": "PS12_7_CH2_EN1_PB", + "svg": "chute_enable", + "zone": "PS12_7" + }, + { + "id": "PS12_7_CH2_FPE1", + "svg": "photoeye", + "zone": "PS12_7" + }, + { + "id": "PS12_7_CH2_FPE2", + "svg": "photoeye", + "zone": "PS12_7" + }, + { + "id": "PS12_7_DIV1_LS1", + "svg": "diverter", + "zone": "PS12_7" + }, + { + "id": "PS12_7_DIV1_LS2", + "svg": "diverter", + "zone": "PS12_7" + }, + { + "id": "PS12_7_DIV1_SOL1", + "svg": "solenoid", + "zone": "PS12_7" + }, + { + "id": "PS12_7_DIV1_SOL2", + "svg": "solenoid", + "zone": "PS12_7" + }, + { + "id": "PS12_7_DIV2_LS1", + "svg": "diverter", + "zone": "PS12_7" + }, + { + "id": "PS12_7_DIV2_LS2", + "svg": "diverter", + "zone": "PS12_7" + }, + { + "id": "PS12_7_DIV2_SOL1", + "svg": "solenoid", + "zone": "PS12_7" + }, + { + "id": "PS12_7_DIV2_SOL2", + "svg": "solenoid", + "zone": "PS12_7" + }, + { + "id": "PS12_7_EPC1", + "svg": "epc", + "zone": "PS12_7" + }, + { + "id": "PS12_7_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PS12_7" + }, + { + "id": "PS12_7_FIOH2", + "svg": "fio_sio_fioh", + "zone": "PS12_7" + }, + { + "id": "PS12_7_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PS12_7" + }, + { + "id": "PS12_7_JPE1", + "svg": "photoeye", + "zone": "PS12_7" + }, + { + "id": "PS12_7_JPE2", + "svg": "photoeye", + "zone": "PS12_7" + }, + { + "id": "PS12_7_JPE3", + "svg": "photoeye", + "zone": "PS12_7" + }, + { + "id": "PS12_7_JR1_PB", + "svg": "jam_reset", + "zone": "PS12_7" + }, + { + "id": "PS12_7_JR2_PB", + "svg": "jam_reset", + "zone": "PS12_7" + }, + { + "id": "PS12_7_S1_PB", + "svg": "start", + "zone": "PS12_7" + }, + { + "id": "PS12_7_VFD", + "svg": "conveyor", + "zone": "PS12_7" + }, + { + "id": "PS12_9_JPE1", + "svg": "photoeye", + "zone": "PS12_9" + }, + { + "id": "PS12_9_JPE2", + "svg": "photoeye", + "zone": "PS12_9" + }, + { + "id": "PS12_9_VFD", + "svg": "conveyor", + "zone": "PS12_9" + }, + { + "id": "SMLD_1CH_FPE1", + "svg": "photoeye", + "zone": "SMLD_1C" + }, + { + "id": "SMLD_2_BCN1", + "svg": "beacon", + "zone": "SMLD_2" + }, + { + "id": "SMLD_2_BCN2", + "svg": "beacon", + "zone": "SMLD_2" + }, + { + "id": "SMLD_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "SMLD_2" + }, + { + "id": "SMLD_2_JR1_PB", + "svg": "jam_reset", + "zone": "SMLD_2" + }, + { + "id": "SMLD_2_JR2_PB", + "svg": "jam_reset", + "zone": "SMLD_2" + }, + { + "id": "SMLD_2_TPE1", + "svg": "photoeye", + "zone": "SMLD_2" + }, + { + "id": "SMLD_2_TPE2", + "svg": "photoeye", + "zone": "SMLD_2" + }, + { + "id": "SMLD_2_VFD", + "svg": "conveyor", + "zone": "SMLD_2" + }, + { + "id": "SMLD_4_BCN1", + "svg": "beacon", + "zone": "SMLD_4" + }, + { + "id": "SMLD_4_BCN2", + "svg": "beacon", + "zone": "SMLD_4" + }, + { + "id": "SMLD_4_EPC1", + "svg": "epc", + "zone": "SMLD_4" + }, + { + "id": "SMLD_4_EPC2", + "svg": "epc", + "zone": "SMLD_4" + }, + { + "id": "SMLD_4_SS1_SPB", + "svg": "start_stop", + "zone": "SMLD_4" + }, + { + "id": "SMLD_4_SS1_STPB", + "svg": "start_stop", + "zone": "SMLD_4" + }, + { + "id": "SMLD_4_SS2_SPB", + "svg": "start_stop", + "zone": "SMLD_4" + }, + { + "id": "SMLD_4_SS2_STPB", + "svg": "start_stop", + "zone": "SMLD_4" + }, + { + "id": "SMLD_4_TPE1", + "svg": "photoeye", + "zone": "SMLD_4" + }, + { + "id": "SMLD_4_TPE2", + "svg": "photoeye", + "zone": "SMLD_4" + }, + { + "id": "SMLD_4_VFD", + "svg": "conveyor", + "zone": "SMLD_4" + }, + { + "id": "SMLD_5_BCN1", + "svg": "beacon", + "zone": "SMLD_5" + }, + { + "id": "SMLD_5_EPC1", + "svg": "epc", + "zone": "SMLD_5" + }, + { + "id": "SMLD_5_FIOM1", + "svg": "fio_sio_fioh", + "zone": "SMLD_5" + }, + { + "id": "SMLD_5_SS1_SPB", + "svg": "start_stop", + "zone": "SMLD_5" + }, + { + "id": "SMLD_5_SS1_STPB", + "svg": "start_stop", + "zone": "SMLD_5" + }, + { + "id": "SMLD_5_TPE1", + "svg": "photoeye", + "zone": "SMLD_5" + }, + { + "id": "SMLD_5_VFD", + "svg": "conveyor", + "zone": "SMLD_5" + }, + { + "id": "ULC1_3_BCN1", + "svg": "beacon", + "zone": "ULC1_3" + }, + { + "id": "ULC1_3_EPC1", + "svg": "epc", + "zone": "ULC1_3" + }, + { + "id": "ULC1_3_JPE1", + "svg": "photoeye", + "zone": "ULC1_3" + }, + { + "id": "ULC1_3_SS1_SPB", + "svg": "start_stop", + "zone": "ULC1_3" + }, + { + "id": "ULC1_3_SS1_STPB", + "svg": "start_stop", + "zone": "ULC1_3" + }, + { + "id": "ULC1_3_VFD", + "svg": "conveyor", + "zone": "ULC1_3" + }, + { + "id": "ULC2_3_BCN1", + "svg": "beacon", + "zone": "ULC2_3" + }, + { + "id": "ULC2_3_EPC1", + "svg": "epc", + "zone": "ULC2_3" + }, + { + "id": "ULC2_3_JPE1", + "svg": "photoeye", + "zone": "ULC2_3" + }, + { + "id": "ULC2_3_SS1_SPB", + "svg": "start_stop", + "zone": "ULC2_3" + }, + { + "id": "ULC2_3_SS1_STPB", + "svg": "start_stop", + "zone": "ULC2_3" + }, + { + "id": "ULC2_3_VFD", + "svg": "conveyor", + "zone": "ULC2_3" + }, + { + "id": "ULC3_3_BCN1", + "svg": "beacon", + "zone": "ULC3_3" + }, + { + "id": "ULC3_3_EPC1", + "svg": "epc", + "zone": "ULC3_3" + }, + { + "id": "ULC3_3_JPE1", + "svg": "photoeye", + "zone": "ULC3_3" + }, + { + "id": "ULC3_3_SS1_SPB", + "svg": "start_stop", + "zone": "ULC3_3" + }, + { + "id": "ULC3_3_SS1_STPB", + "svg": "start_stop", + "zone": "ULC3_3" + }, + { + "id": "ULC3_3_VFD", + "svg": "conveyor", + "zone": "ULC3_3" + }, + { + "id": "ULC4_3_BCN1", + "svg": "beacon", + "zone": "ULC4_3" + }, + { + "id": "ULC4_3_EPC1", + "svg": "epc", + "zone": "ULC4_3" + }, + { + "id": "ULC4_3_JPE1", + "svg": "photoeye", + "zone": "ULC4_3" + }, + { + "id": "ULC4_3_SS1_SPB", + "svg": "start_stop", + "zone": "ULC4_3" + }, + { + "id": "ULC4_3_SS1_STPB", + "svg": "start_stop", + "zone": "ULC4_3" + }, + { + "id": "ULC4_3_VFD", + "svg": "conveyor", + "zone": "ULC4_3" + }, + { + "id": "ULC5_3_BCN1", + "svg": "beacon", + "zone": "ULC5_3" + }, + { + "id": "ULC5_3_EPC1", + "svg": "epc", + "zone": "ULC5_3" + }, + { + "id": "ULC5_3_JPE1", + "svg": "photoeye", + "zone": "ULC5_3" + }, + { + "id": "ULC5_3_SS1_SPB", + "svg": "start_stop", + "zone": "ULC5_3" + }, + { + "id": "ULC5_3_SS1_STPB", + "svg": "start_stop", + "zone": "ULC5_3" + }, + { + "id": "ULC5_3_VFD", + "svg": "conveyor", + "zone": "ULC5_3" + }, + { + "id": "ULC6_3_BCN1", + "svg": "beacon", + "zone": "ULC6_3" + }, + { + "id": "ULC6_3_BCN2", + "svg": "beacon", + "zone": "ULC6_3" + }, + { + "id": "ULC6_3_EPC1", + "svg": "epc", + "zone": "ULC6_3" + }, + { + "id": "ULC6_3_EPC2", + "svg": "epc", + "zone": "ULC6_3" + }, + { + "id": "ULC6_3_JPE1", + "svg": "photoeye", + "zone": "ULC6_3" + }, + { + "id": "ULC6_3_SS1_SPB", + "svg": "start_stop", + "zone": "ULC6_3" + }, + { + "id": "ULC6_3_SS1_STPB", + "svg": "start_stop", + "zone": "ULC6_3" + }, + { + "id": "ULC6_3_SS2_SPB", + "svg": "start_stop", + "zone": "ULC6_3" + }, + { + "id": "ULC6_3_SS2_STPB", + "svg": "start_stop", + "zone": "ULC6_3" + }, + { + "id": "ULC6_3_VFD", + "svg": "conveyor", + "zone": "ULC6_3" + } + ], + "MCM14": [ + { + "id": "BYAB_1_TPE1", + "svg": "photoeye", + "zone": "BYAB_1" + }, + { + "id": "BYAB_1_VFD", + "svg": "conveyor", + "zone": "BYAB_1" + }, + { + "id": "BYAB_2_BCN1", + "svg": "beacon", + "zone": "BYAB_2" + }, + { + "id": "BYAB_2_BCN2", + "svg": "beacon", + "zone": "BYAB_2" + }, + { + "id": "BYAB_2_EPC1", + "svg": "epc", + "zone": "BYAB_2" + }, + { + "id": "BYAB_2_EPC2", + "svg": "epc", + "zone": "BYAB_2" + }, + { + "id": "BYAB_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYAB_2" + }, + { + "id": "BYAB_2_S1_PB", + "svg": "start", + "zone": "BYAB_2" + }, + { + "id": "BYAB_2_S2_PB", + "svg": "start", + "zone": "BYAB_2" + }, + { + "id": "BYAB_2_TPE1", + "svg": "photoeye", + "zone": "BYAB_2" + }, + { + "id": "BYAB_2_VFD", + "svg": "conveyor", + "zone": "BYAB_2" + }, + { + "id": "BYAB_3_BCN1", + "svg": "beacon", + "zone": "BYAB_3" + }, + { + "id": "BYAB_3_BCN2", + "svg": "beacon", + "zone": "BYAB_3" + }, + { + "id": "BYAB_3_DPM1", + "svg": "dpm", + "zone": "BYAB_3" + }, + { + "id": "BYAB_3_EPC1", + "svg": "epc", + "zone": "BYAB_3" + }, + { + "id": "BYAB_3_EPC2", + "svg": "epc", + "zone": "BYAB_3" + }, + { + "id": "BYAB_3_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYAB_3" + }, + { + "id": "BYAB_3_S1_PB", + "svg": "start", + "zone": "BYAB_3" + }, + { + "id": "BYAB_3_S2_PB", + "svg": "start", + "zone": "BYAB_3" + }, + { + "id": "BYAB_3_TPE1", + "svg": "photoeye", + "zone": "BYAB_3" + }, + { + "id": "BYAB_3_VFD", + "svg": "conveyor", + "zone": "BYAB_3" + }, + { + "id": "BYAB_4_VFD", + "svg": "conveyor", + "zone": "BYAB_4" + }, + { + "id": "BYAB_5_TPE1", + "svg": "photoeye", + "zone": "BYAB_5" + }, + { + "id": "BYAB_5_VFD", + "svg": "conveyor", + "zone": "BYAB_5" + }, + { + "id": "BYAB_6_TPE1", + "svg": "photoeye", + "zone": "BYAB_6" + }, + { + "id": "BYAB_6_VFD", + "svg": "conveyor", + "zone": "BYAB_6" + }, + { + "id": "BYAB_7_TPE1", + "svg": "photoeye", + "zone": "BYAB_7" + }, + { + "id": "BYAB_7_VFD", + "svg": "conveyor", + "zone": "BYAB_7" + }, + { + "id": "BYAB_8_TPE1", + "svg": "photoeye", + "zone": "BYAB_8" + }, + { + "id": "BYAB_8_VFD", + "svg": "conveyor", + "zone": "BYAB_8" + }, + { + "id": "BYAB_9_TPE1", + "svg": "photoeye", + "zone": "BYAB_9" + }, + { + "id": "BYAB_9_VFD", + "svg": "conveyor", + "zone": "BYAB_9" + }, + { + "id": "BYAC_1_TPE1", + "svg": "photoeye", + "zone": "BYAC_1" + }, + { + "id": "BYAC_1_VFD", + "svg": "conveyor", + "zone": "BYAC_1" + }, + { + "id": "BYAC_2_BCN1", + "svg": "beacon", + "zone": "BYAC_2" + }, + { + "id": "BYAC_2_BCN2", + "svg": "beacon", + "zone": "BYAC_2" + }, + { + "id": "BYAC_2_EPC1", + "svg": "epc", + "zone": "BYAC_2" + }, + { + "id": "BYAC_2_EPC2", + "svg": "epc", + "zone": "BYAC_2" + }, + { + "id": "BYAC_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYAC_2" + }, + { + "id": "BYAC_2_S1_PB", + "svg": "start", + "zone": "BYAC_2" + }, + { + "id": "BYAC_2_S2_PB", + "svg": "start", + "zone": "BYAC_2" + }, + { + "id": "BYAC_2_TPE1", + "svg": "photoeye", + "zone": "BYAC_2" + }, + { + "id": "BYAC_2_VFD", + "svg": "conveyor", + "zone": "BYAC_2" + }, + { + "id": "BYAC_3_TPE1", + "svg": "photoeye", + "zone": "BYAC_3" + }, + { + "id": "BYAC_3_VFD", + "svg": "conveyor", + "zone": "BYAC_3" + }, + { + "id": "BYAC_4_TPE1", + "svg": "photoeye", + "zone": "BYAC_4" + }, + { + "id": "BYAC_4_VFD", + "svg": "conveyor", + "zone": "BYAC_4" + }, + { + "id": "BYAC_5_TPE1", + "svg": "photoeye", + "zone": "BYAC_5" + }, + { + "id": "BYAC_5_VFD", + "svg": "conveyor", + "zone": "BYAC_5" + }, + { + "id": "BYAC_6_BCN1", + "svg": "beacon", + "zone": "BYAC_6" + }, + { + "id": "BYAC_6_JR1_PB", + "svg": "jam_reset", + "zone": "BYAC_6" + }, + { + "id": "BYAC_6_JR2_PB", + "svg": "jam_reset", + "zone": "BYAC_6" + }, + { + "id": "BYAC_6_TPE1", + "svg": "photoeye", + "zone": "BYAC_6" + }, + { + "id": "BYAC_6_VFD", + "svg": "conveyor", + "zone": "BYAC_6" + }, + { + "id": "BYAC_7_TPE1", + "svg": "photoeye", + "zone": "BYAC_7" + }, + { + "id": "BYAC_7_VFD", + "svg": "conveyor", + "zone": "BYAC_7" + }, + { + "id": "BYAC_8_BCN1", + "svg": "beacon", + "zone": "BYAC_8" + }, + { + "id": "BYAC_8_JR1_PB", + "svg": "jam_reset", + "zone": "BYAC_8" + }, + { + "id": "BYAC_8_JR2_PB", + "svg": "jam_reset", + "zone": "BYAC_8" + }, + { + "id": "BYAC_8_TPE1", + "svg": "photoeye", + "zone": "BYAC_8" + }, + { + "id": "BYAC_8_VFD", + "svg": "conveyor", + "zone": "BYAC_8" + }, + { + "id": "BYAC_9_TPE1", + "svg": "photoeye", + "zone": "BYAC_9" + }, + { + "id": "BYAC_9_VFD", + "svg": "conveyor", + "zone": "BYAC_9" + }, + { + "id": "BYAD_1_TPE1", + "svg": "photoeye", + "zone": "BYAD_1" + }, + { + "id": "BYAD_1_VFD", + "svg": "conveyor", + "zone": "BYAD_1" + }, + { + "id": "BYAD_10_TPE1", + "svg": "photoeye", + "zone": "BYAD_10" + }, + { + "id": "BYAD_10_VFD", + "svg": "conveyor", + "zone": "BYAD_10" + }, + { + "id": "BYAD_11_TPE1", + "svg": "photoeye", + "zone": "BYAD_11" + }, + { + "id": "BYAD_11_VFD", + "svg": "conveyor", + "zone": "BYAD_11" + }, + { + "id": "BYAD_12_TPE1", + "svg": "photoeye", + "zone": "BYAD_12" + }, + { + "id": "BYAD_12_VFD", + "svg": "conveyor", + "zone": "BYAD_12" + }, + { + "id": "BYAD_13_BCN1", + "svg": "beacon", + "zone": "BYAD_13" + }, + { + "id": "BYAD_13_JR1_PB", + "svg": "jam_reset", + "zone": "BYAD_13" + }, + { + "id": "BYAD_13_JR2_PB", + "svg": "jam_reset", + "zone": "BYAD_13" + }, + { + "id": "BYAD_13_TPE1", + "svg": "photoeye", + "zone": "BYAD_13" + }, + { + "id": "BYAD_13_VFD", + "svg": "conveyor", + "zone": "BYAD_13" + }, + { + "id": "BYAD_14_TPE1", + "svg": "photoeye", + "zone": "BYAD_14" + }, + { + "id": "BYAD_14_VFD", + "svg": "conveyor", + "zone": "BYAD_14" + }, + { + "id": "BYAD_15_BCN1", + "svg": "beacon", + "zone": "BYAD_15" + }, + { + "id": "BYAD_15_BCN2", + "svg": "beacon", + "zone": "BYAD_15" + }, + { + "id": "BYAD_15_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYAD_15" + }, + { + "id": "BYAD_15_S1_PB", + "svg": "start", + "zone": "BYAD_15" + }, + { + "id": "BYAD_15_S2_PB", + "svg": "start", + "zone": "BYAD_15" + }, + { + "id": "BYAD_15_TPE1", + "svg": "photoeye", + "zone": "BYAD_15" + }, + { + "id": "BYAD_15_VFD", + "svg": "conveyor", + "zone": "BYAD_15" + }, + { + "id": "BYAD_16_EPC1", + "svg": "epc", + "zone": "BYAD_16" + }, + { + "id": "BYAD_16_EPC2", + "svg": "epc", + "zone": "BYAD_16" + }, + { + "id": "BYAD_16_TPE1", + "svg": "photoeye", + "zone": "BYAD_16" + }, + { + "id": "BYAD_16_VFD", + "svg": "conveyor", + "zone": "BYAD_16" + }, + { + "id": "BYAD_2_BCN1", + "svg": "beacon", + "zone": "BYAD_2" + }, + { + "id": "BYAD_2_BCN2", + "svg": "beacon", + "zone": "BYAD_2" + }, + { + "id": "BYAD_2_EPC1", + "svg": "epc", + "zone": "BYAD_2" + }, + { + "id": "BYAD_2_EPC2", + "svg": "epc", + "zone": "BYAD_2" + }, + { + "id": "BYAD_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYAD_2" + }, + { + "id": "BYAD_2_S1_PB", + "svg": "start", + "zone": "BYAD_2" + }, + { + "id": "BYAD_2_S2_PB", + "svg": "start", + "zone": "BYAD_2" + }, + { + "id": "BYAD_2_TPE1", + "svg": "photoeye", + "zone": "BYAD_2" + }, + { + "id": "BYAD_2_VFD", + "svg": "conveyor", + "zone": "BYAD_2" + }, + { + "id": "BYAD_3_TPE1", + "svg": "photoeye", + "zone": "BYAD_3" + }, + { + "id": "BYAD_3_VFD", + "svg": "conveyor", + "zone": "BYAD_3" + }, + { + "id": "BYAD_4_TPE1", + "svg": "photoeye", + "zone": "BYAD_4" + }, + { + "id": "BYAD_4_VFD", + "svg": "conveyor", + "zone": "BYAD_4" + }, + { + "id": "BYAD_5_TPE1", + "svg": "photoeye", + "zone": "BYAD_5" + }, + { + "id": "BYAD_5_VFD", + "svg": "conveyor", + "zone": "BYAD_5" + }, + { + "id": "BYAD_6_DPM1", + "svg": "dpm", + "zone": "BYAD_6" + }, + { + "id": "BYAD_6_TPE1", + "svg": "photoeye", + "zone": "BYAD_6" + }, + { + "id": "BYAD_6_VFD", + "svg": "conveyor", + "zone": "BYAD_6" + }, + { + "id": "BYAD_7_TPE1", + "svg": "photoeye", + "zone": "BYAD_7" + }, + { + "id": "BYAD_7_VFD", + "svg": "conveyor", + "zone": "BYAD_7" + }, + { + "id": "BYAD_8_BCN1", + "svg": "beacon", + "zone": "BYAD_8" + }, + { + "id": "BYAD_8_JR1_PB", + "svg": "jam_reset", + "zone": "BYAD_8" + }, + { + "id": "BYAD_8_JR2_PB", + "svg": "jam_reset", + "zone": "BYAD_8" + }, + { + "id": "BYAD_8_TPE1", + "svg": "photoeye", + "zone": "BYAD_8" + }, + { + "id": "BYAD_8_VFD", + "svg": "conveyor", + "zone": "BYAD_8" + }, + { + "id": "BYAD_9_TPE1", + "svg": "photoeye", + "zone": "BYAD_9" + }, + { + "id": "BYAD_9_VFD", + "svg": "conveyor", + "zone": "BYAD_9" + }, + { + "id": "BYBA_14_DPM1", + "svg": "dpm", + "zone": "BYBA_14" + }, + { + "id": "BYBA_14_TPE1", + "svg": "photoeye", + "zone": "BYBA_14" + }, + { + "id": "BYBA_14_VFD", + "svg": "conveyor", + "zone": "BYBA_14" + }, + { + "id": "BYBA_15_VFD", + "svg": "conveyor", + "zone": "BYBA_15" + }, + { + "id": "BYBA_16_TPE1", + "svg": "photoeye", + "zone": "BYBA_16" + }, + { + "id": "BYBA_16_VFD", + "svg": "conveyor", + "zone": "BYBA_16" + }, + { + "id": "BYBA_17_BCN1", + "svg": "beacon", + "zone": "BYBA_17" + }, + { + "id": "BYBA_17_BCN2", + "svg": "beacon", + "zone": "BYBA_17" + }, + { + "id": "BYBA_17_EPC1", + "svg": "epc", + "zone": "BYBA_17" + }, + { + "id": "BYBA_17_EPC2", + "svg": "epc", + "zone": "BYBA_17" + }, + { + "id": "BYBA_17_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYBA_17" + }, + { + "id": "BYBA_17_S1_PB", + "svg": "start", + "zone": "BYBA_17" + }, + { + "id": "BYBA_17_S2_PB", + "svg": "start", + "zone": "BYBA_17" + }, + { + "id": "BYBA_17_TPE1", + "svg": "photoeye", + "zone": "BYBA_17" + }, + { + "id": "BYBA_17_VFD", + "svg": "conveyor", + "zone": "BYBA_17" + }, + { + "id": "BYBD_11_TPE1", + "svg": "photoeye", + "zone": "BYBD_11" + }, + { + "id": "BYBD_11_VFD", + "svg": "conveyor", + "zone": "BYBD_11" + }, + { + "id": "BYBD_12_BCN1", + "svg": "beacon", + "zone": "BYBD_12" + }, + { + "id": "BYBD_12_BCN2", + "svg": "beacon", + "zone": "BYBD_12" + }, + { + "id": "BYBD_12_EPC1", + "svg": "epc", + "zone": "BYBD_12" + }, + { + "id": "BYBD_12_EPC2", + "svg": "epc", + "zone": "BYBD_12" + }, + { + "id": "BYBD_12_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYBD_12" + }, + { + "id": "BYBD_12_S1_PB", + "svg": "start", + "zone": "BYBD_12" + }, + { + "id": "BYBD_12_S2_PB", + "svg": "start", + "zone": "BYBD_12" + }, + { + "id": "BYBD_12_TPE1", + "svg": "photoeye", + "zone": "BYBD_12" + }, + { + "id": "BYBD_12_VFD", + "svg": "conveyor", + "zone": "BYBD_12" + }, + { + "id": "BYBD_13_TPE1", + "svg": "photoeye", + "zone": "BYBD_13" + }, + { + "id": "BYBD_13_VFD", + "svg": "conveyor", + "zone": "BYBD_13" + }, + { + "id": "BYBD_14_TPE1", + "svg": "photoeye", + "zone": "BYBD_14" + }, + { + "id": "BYBD_14_VFD", + "svg": "conveyor", + "zone": "BYBD_14" + }, + { + "id": "BYBD_15_TPE1", + "svg": "photoeye", + "zone": "BYBD_15" + }, + { + "id": "BYBD_15_VFD", + "svg": "conveyor", + "zone": "BYBD_15" + }, + { + "id": "BYBD_16_TPE1", + "svg": "photoeye", + "zone": "BYBD_16" + }, + { + "id": "BYBD_16_VFD", + "svg": "conveyor", + "zone": "BYBD_16" + }, + { + "id": "BYBD_17_BCN1", + "svg": "beacon", + "zone": "BYBD_17" + }, + { + "id": "BYBD_17_JR1_PB", + "svg": "jam_reset", + "zone": "BYBD_17" + }, + { + "id": "BYBD_17_JR2_PB", + "svg": "jam_reset", + "zone": "BYBD_17" + }, + { + "id": "BYBD_17_TPE1", + "svg": "photoeye", + "zone": "BYBD_17" + }, + { + "id": "BYBD_17_VFD", + "svg": "conveyor", + "zone": "BYBD_17" + }, + { + "id": "BYBD_18_TPE1", + "svg": "photoeye", + "zone": "BYBD_18" + }, + { + "id": "BYBD_18_VFD", + "svg": "conveyor", + "zone": "BYBD_18" + }, + { + "id": "BYBD_19_BCN1", + "svg": "beacon", + "zone": "BYBD_19" + }, + { + "id": "BYBD_19_BCN2", + "svg": "beacon", + "zone": "BYBD_19" + }, + { + "id": "BYBD_19_EPC1", + "svg": "epc", + "zone": "BYBD_19" + }, + { + "id": "BYBD_19_EPC2", + "svg": "epc", + "zone": "BYBD_19" + }, + { + "id": "BYBD_19_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYBD_19" + }, + { + "id": "BYBD_19_S1_PB", + "svg": "start", + "zone": "BYBD_19" + }, + { + "id": "BYBD_19_S2_PB", + "svg": "start", + "zone": "BYBD_19" + }, + { + "id": "BYBD_19_TPE1", + "svg": "photoeye", + "zone": "BYBD_19" + }, + { + "id": "BYBD_19_VFD", + "svg": "conveyor", + "zone": "BYBD_19" + }, + { + "id": "BYCA_10_VFD", + "svg": "conveyor", + "zone": "BYCA_10" + }, + { + "id": "BYCA_11_TPE1", + "svg": "photoeye", + "zone": "BYCA_11" + }, + { + "id": "BYCA_11_VFD", + "svg": "conveyor", + "zone": "BYCA_11" + }, + { + "id": "BYCA_12_BCN1", + "svg": "beacon", + "zone": "BYCA_12" + }, + { + "id": "BYCA_12_BCN2", + "svg": "beacon", + "zone": "BYCA_12" + }, + { + "id": "BYCA_12_EPC1", + "svg": "epc", + "zone": "BYCA_12" + }, + { + "id": "BYCA_12_EPC2", + "svg": "epc", + "zone": "BYCA_12" + }, + { + "id": "BYCA_12_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYCA_12" + }, + { + "id": "BYCA_12_S1_PB", + "svg": "start", + "zone": "BYCA_12" + }, + { + "id": "BYCA_12_S2_PB", + "svg": "start", + "zone": "BYCA_12" + }, + { + "id": "BYCA_12_TPE1", + "svg": "photoeye", + "zone": "BYCA_12" + }, + { + "id": "BYCA_12_VFD", + "svg": "conveyor", + "zone": "BYCA_12" + }, + { + "id": "BYCA_8_TPE1", + "svg": "photoeye", + "zone": "BYCA_8" + }, + { + "id": "BYCA_8_VFD", + "svg": "conveyor", + "zone": "BYCA_8" + }, + { + "id": "BYCA_9_TPE1", + "svg": "photoeye", + "zone": "BYCA_9" + }, + { + "id": "BYCA_9_VFD", + "svg": "conveyor", + "zone": "BYCA_9" + }, + { + "id": "BYCD_11_TPE1", + "svg": "photoeye", + "zone": "BYCD_11" + }, + { + "id": "BYCD_11_VFD", + "svg": "conveyor", + "zone": "BYCD_11" + }, + { + "id": "BYCD_12_BCN1", + "svg": "beacon", + "zone": "BYCD_12" + }, + { + "id": "BYCD_12_EPC1", + "svg": "epc", + "zone": "BYCD_12" + }, + { + "id": "BYCD_12_S1_PB", + "svg": "start", + "zone": "BYCD_12" + }, + { + "id": "BYCD_12_TPE1", + "svg": "photoeye", + "zone": "BYCD_12" + }, + { + "id": "BYCD_12_VFD", + "svg": "conveyor", + "zone": "BYCD_12" + }, + { + "id": "BYCD_13_TPE1", + "svg": "photoeye", + "zone": "BYCD_13" + }, + { + "id": "BYCD_13_VFD", + "svg": "conveyor", + "zone": "BYCD_13" + }, + { + "id": "BYCD_14_DPM1", + "svg": "dpm", + "zone": "BYCD_14" + }, + { + "id": "BYCD_14_TPE1", + "svg": "photoeye", + "zone": "BYCD_14" + }, + { + "id": "BYCD_14_VFD", + "svg": "conveyor", + "zone": "BYCD_14" + }, + { + "id": "BYCD_15_TPE1", + "svg": "photoeye", + "zone": "BYCD_15" + }, + { + "id": "BYCD_15_VFD", + "svg": "conveyor", + "zone": "BYCD_15" + }, + { + "id": "BYCD_16_BCN1", + "svg": "beacon", + "zone": "BYCD_16" + }, + { + "id": "BYCD_16_JR1_PB", + "svg": "jam_reset", + "zone": "BYCD_16" + }, + { + "id": "BYCD_16_JR2_PB", + "svg": "jam_reset", + "zone": "BYCD_16" + }, + { + "id": "BYCD_16_TPE1", + "svg": "photoeye", + "zone": "BYCD_16" + }, + { + "id": "BYCD_16_VFD", + "svg": "conveyor", + "zone": "BYCD_16" + }, + { + "id": "BYCD_17_TPE1", + "svg": "photoeye", + "zone": "BYCD_17" + }, + { + "id": "BYCD_17_VFD", + "svg": "conveyor", + "zone": "BYCD_17" + }, + { + "id": "BYCD_18_TPE1", + "svg": "photoeye", + "zone": "BYCD_18" + }, + { + "id": "BYCD_18_VFD", + "svg": "conveyor", + "zone": "BYCD_18" + }, + { + "id": "BYCD_19_TPE1", + "svg": "photoeye", + "zone": "BYCD_19" + }, + { + "id": "BYCD_19_VFD", + "svg": "conveyor", + "zone": "BYCD_19" + }, + { + "id": "BYCD_20_BCN1", + "svg": "beacon", + "zone": "BYCD_20" + }, + { + "id": "BYCD_20_BCN2", + "svg": "beacon", + "zone": "BYCD_20" + }, + { + "id": "BYCD_20_EPC1", + "svg": "epc", + "zone": "BYCD_20" + }, + { + "id": "BYCD_20_EPC2", + "svg": "epc", + "zone": "BYCD_20" + }, + { + "id": "BYCD_20_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYCD_20" + }, + { + "id": "BYCD_20_S1_PB", + "svg": "start", + "zone": "BYCD_20" + }, + { + "id": "BYCD_20_S2_PB", + "svg": "start", + "zone": "BYCD_20" + }, + { + "id": "BYCD_20_TPE1", + "svg": "photoeye", + "zone": "BYCD_20" + }, + { + "id": "BYCD_20_VFD", + "svg": "conveyor", + "zone": "BYCD_20" + }, + { + "id": "BYDA_1_TPE1", + "svg": "photoeye", + "zone": "BYDA_1" + }, + { + "id": "BYDA_1_VFD", + "svg": "conveyor", + "zone": "BYDA_1" + }, + { + "id": "BYDA_10_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYDA_10" + }, + { + "id": "BYDA_10_TPE1", + "svg": "photoeye", + "zone": "BYDA_10" + }, + { + "id": "BYDA_10_VFD", + "svg": "conveyor", + "zone": "BYDA_10" + }, + { + "id": "BYDA_11_TPE1", + "svg": "photoeye", + "zone": "BYDA_11" + }, + { + "id": "BYDA_11_VFD", + "svg": "conveyor", + "zone": "BYDA_11" + }, + { + "id": "BYDA_12_TPE1", + "svg": "photoeye", + "zone": "BYDA_12" + }, + { + "id": "BYDA_12_VFD", + "svg": "conveyor", + "zone": "BYDA_12" + }, + { + "id": "BYDA_13_BCN1", + "svg": "beacon", + "zone": "BYDA_13" + }, + { + "id": "BYDA_13_BCN2", + "svg": "beacon", + "zone": "BYDA_13" + }, + { + "id": "BYDA_13_EPC1", + "svg": "epc", + "zone": "BYDA_13" + }, + { + "id": "BYDA_13_EPC2", + "svg": "epc", + "zone": "BYDA_13" + }, + { + "id": "BYDA_13_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYDA_13" + }, + { + "id": "BYDA_13_S1_PB", + "svg": "start", + "zone": "BYDA_13" + }, + { + "id": "BYDA_13_S2_PB", + "svg": "start", + "zone": "BYDA_13" + }, + { + "id": "BYDA_13_TPE1", + "svg": "photoeye", + "zone": "BYDA_13" + }, + { + "id": "BYDA_13_VFD", + "svg": "conveyor", + "zone": "BYDA_13" + }, + { + "id": "BYDA_2_BCN1", + "svg": "beacon", + "zone": "BYDA_2" + }, + { + "id": "BYDA_2_BCN2", + "svg": "beacon", + "zone": "BYDA_2" + }, + { + "id": "BYDA_2_EPC1", + "svg": "epc", + "zone": "BYDA_2" + }, + { + "id": "BYDA_2_EPC2", + "svg": "epc", + "zone": "BYDA_2" + }, + { + "id": "BYDA_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYDA_2" + }, + { + "id": "BYDA_2_S1_PB", + "svg": "start", + "zone": "BYDA_2" + }, + { + "id": "BYDA_2_S2_PB", + "svg": "start", + "zone": "BYDA_2" + }, + { + "id": "BYDA_2_TPE1", + "svg": "photoeye", + "zone": "BYDA_2" + }, + { + "id": "BYDA_2_VFD", + "svg": "conveyor", + "zone": "BYDA_2" + }, + { + "id": "BYDA_3_TPE1", + "svg": "photoeye", + "zone": "BYDA_3" + }, + { + "id": "BYDA_3_VFD", + "svg": "conveyor", + "zone": "BYDA_3" + }, + { + "id": "BYDA_4_TPE1", + "svg": "photoeye", + "zone": "BYDA_4" + }, + { + "id": "BYDA_4_VFD", + "svg": "conveyor", + "zone": "BYDA_4" + }, + { + "id": "BYDA_5_TPE1", + "svg": "photoeye", + "zone": "BYDA_5" + }, + { + "id": "BYDA_5_VFD", + "svg": "conveyor", + "zone": "BYDA_5" + }, + { + "id": "BYDA_6_TPE1", + "svg": "photoeye", + "zone": "BYDA_6" + }, + { + "id": "BYDA_6_VFD", + "svg": "conveyor", + "zone": "BYDA_6" + }, + { + "id": "BYDA_7_TPE1", + "svg": "photoeye", + "zone": "BYDA_7" + }, + { + "id": "BYDA_7_VFD", + "svg": "conveyor", + "zone": "BYDA_7" + }, + { + "id": "BYDA_8_TPE1", + "svg": "photoeye", + "zone": "BYDA_8" + }, + { + "id": "BYDA_8_VFD", + "svg": "conveyor", + "zone": "BYDA_8" + }, + { + "id": "BYDA_9_BCN1", + "svg": "beacon", + "zone": "BYDA_9" + }, + { + "id": "BYDA_9_BCN2", + "svg": "beacon", + "zone": "BYDA_9" + }, + { + "id": "BYDA_9_EPC1", + "svg": "epc", + "zone": "BYDA_9" + }, + { + "id": "BYDA_9_EPC2", + "svg": "epc", + "zone": "BYDA_9" + }, + { + "id": "BYDA_9_S1_PB", + "svg": "start", + "zone": "BYDA_9" + }, + { + "id": "BYDA_9_S2_PB", + "svg": "start", + "zone": "BYDA_9" + }, + { + "id": "BYDA_9_TPE1", + "svg": "photoeye", + "zone": "BYDA_9" + }, + { + "id": "BYDA_9_VFD", + "svg": "conveyor", + "zone": "BYDA_9" + }, + { + "id": "BYDB_1_TPE1", + "svg": "photoeye", + "zone": "BYDB_1" + }, + { + "id": "BYDB_1_VFD", + "svg": "conveyor", + "zone": "BYDB_1" + }, + { + "id": "BYDB_10_BCN1", + "svg": "beacon", + "zone": "BYDB_10" + }, + { + "id": "BYDB_10_EPC1", + "svg": "epc", + "zone": "BYDB_10" + }, + { + "id": "BYDB_10_S1_PB", + "svg": "start", + "zone": "BYDB_10" + }, + { + "id": "BYDB_10_TPE1", + "svg": "photoeye", + "zone": "BYDB_10" + }, + { + "id": "BYDB_10_VFD", + "svg": "conveyor", + "zone": "BYDB_10" + }, + { + "id": "BYDB_11_TPE1", + "svg": "photoeye", + "zone": "BYDB_11" + }, + { + "id": "BYDB_11_VFD", + "svg": "conveyor", + "zone": "BYDB_11" + }, + { + "id": "BYDB_2_BCN1", + "svg": "beacon", + "zone": "BYDB_2" + }, + { + "id": "BYDB_2_BCN2", + "svg": "beacon", + "zone": "BYDB_2" + }, + { + "id": "BYDB_2_EPC1", + "svg": "epc", + "zone": "BYDB_2" + }, + { + "id": "BYDB_2_EPC2", + "svg": "epc", + "zone": "BYDB_2" + }, + { + "id": "BYDB_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYDB_2" + }, + { + "id": "BYDB_2_S1_PB", + "svg": "start", + "zone": "BYDB_2" + }, + { + "id": "BYDB_2_S2_PB", + "svg": "start", + "zone": "BYDB_2" + }, + { + "id": "BYDB_2_TPE1", + "svg": "photoeye", + "zone": "BYDB_2" + }, + { + "id": "BYDB_2_VFD", + "svg": "conveyor", + "zone": "BYDB_2" + }, + { + "id": "BYDB_3_TPE1", + "svg": "photoeye", + "zone": "BYDB_3" + }, + { + "id": "BYDB_3_VFD", + "svg": "conveyor", + "zone": "BYDB_3" + }, + { + "id": "BYDB_4_TPE1", + "svg": "photoeye", + "zone": "BYDB_4" + }, + { + "id": "BYDB_4_VFD", + "svg": "conveyor", + "zone": "BYDB_4" + }, + { + "id": "BYDB_5_DPM1", + "svg": "dpm", + "zone": "BYDB_5" + }, + { + "id": "BYDB_5_TPE1", + "svg": "photoeye", + "zone": "BYDB_5" + }, + { + "id": "BYDB_5_VFD", + "svg": "conveyor", + "zone": "BYDB_5" + }, + { + "id": "BYDB_6_DPM1", + "svg": "dpm", + "zone": "BYDB_6" + }, + { + "id": "BYDB_6_TPE1", + "svg": "photoeye", + "zone": "BYDB_6" + }, + { + "id": "BYDB_6_VFD", + "svg": "conveyor", + "zone": "BYDB_6" + }, + { + "id": "BYDB_7_TPE1", + "svg": "photoeye", + "zone": "BYDB_7" + }, + { + "id": "BYDB_7_VFD", + "svg": "conveyor", + "zone": "BYDB_7" + }, + { + "id": "BYDB_8_TPE1", + "svg": "photoeye", + "zone": "BYDB_8" + }, + { + "id": "BYDB_8_VFD", + "svg": "conveyor", + "zone": "BYDB_8" + }, + { + "id": "BYDB_9_BCN1", + "svg": "beacon", + "zone": "BYDB_9" + }, + { + "id": "BYDB_9_BCN2", + "svg": "beacon", + "zone": "BYDB_9" + }, + { + "id": "BYDB_9_EPC1", + "svg": "epc", + "zone": "BYDB_9" + }, + { + "id": "BYDB_9_EPC2", + "svg": "epc", + "zone": "BYDB_9" + }, + { + "id": "BYDB_9_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYDB_9" + }, + { + "id": "BYDB_9_S1_PB", + "svg": "start", + "zone": "BYDB_9" + }, + { + "id": "BYDB_9_S2_PB", + "svg": "start", + "zone": "BYDB_9" + }, + { + "id": "BYDB_9_TPE1", + "svg": "photoeye", + "zone": "BYDB_9" + }, + { + "id": "BYDB_9_VFD", + "svg": "conveyor", + "zone": "BYDB_9" + }, + { + "id": "BYDC_1_TPE1", + "svg": "photoeye", + "zone": "BYDC_1" + }, + { + "id": "BYDC_1_VFD", + "svg": "conveyor", + "zone": "BYDC_1" + }, + { + "id": "BYDC_10_TPE1", + "svg": "photoeye", + "zone": "BYDC_10" + }, + { + "id": "BYDC_10_VFD", + "svg": "conveyor", + "zone": "BYDC_10" + }, + { + "id": "BYDC_11_TPE1", + "svg": "photoeye", + "zone": "BYDC_11" + }, + { + "id": "BYDC_11_VFD", + "svg": "conveyor", + "zone": "BYDC_11" + }, + { + "id": "BYDC_12_BCN1", + "svg": "beacon", + "zone": "BYDC_12" + }, + { + "id": "BYDC_12_BCN2", + "svg": "beacon", + "zone": "BYDC_12" + }, + { + "id": "BYDC_12_EPC1", + "svg": "epc", + "zone": "BYDC_12" + }, + { + "id": "BYDC_12_EPC2", + "svg": "epc", + "zone": "BYDC_12" + }, + { + "id": "BYDC_12_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYDC_12" + }, + { + "id": "BYDC_12_S1_PB", + "svg": "start", + "zone": "BYDC_12" + }, + { + "id": "BYDC_12_S2_PB", + "svg": "start", + "zone": "BYDC_12" + }, + { + "id": "BYDC_12_TPE1", + "svg": "photoeye", + "zone": "BYDC_12" + }, + { + "id": "BYDC_12_VFD", + "svg": "conveyor", + "zone": "BYDC_12" + }, + { + "id": "BYDC_13_TPE1", + "svg": "photoeye", + "zone": "BYDC_13" + }, + { + "id": "BYDC_13_VFD", + "svg": "conveyor", + "zone": "BYDC_13" + }, + { + "id": "BYDC_14_TPE1", + "svg": "photoeye", + "zone": "BYDC_14" + }, + { + "id": "BYDC_14_VFD", + "svg": "conveyor", + "zone": "BYDC_14" + }, + { + "id": "BYDC_15_BCN1", + "svg": "beacon", + "zone": "BYDC_15" + }, + { + "id": "BYDC_15_BCN2", + "svg": "beacon", + "zone": "BYDC_15" + }, + { + "id": "BYDC_15_EPC1", + "svg": "epc", + "zone": "BYDC_15" + }, + { + "id": "BYDC_15_EPC2", + "svg": "epc", + "zone": "BYDC_15" + }, + { + "id": "BYDC_15_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYDC_15" + }, + { + "id": "BYDC_15_S1_PB", + "svg": "start", + "zone": "BYDC_15" + }, + { + "id": "BYDC_15_S2_PB", + "svg": "start", + "zone": "BYDC_15" + }, + { + "id": "BYDC_15_TPE1", + "svg": "photoeye", + "zone": "BYDC_15" + }, + { + "id": "BYDC_15_VFD", + "svg": "conveyor", + "zone": "BYDC_15" + }, + { + "id": "BYDC_2_BCN1", + "svg": "beacon", + "zone": "BYDC_2" + }, + { + "id": "BYDC_2_BCN2", + "svg": "beacon", + "zone": "BYDC_2" + }, + { + "id": "BYDC_2_EPC1", + "svg": "epc", + "zone": "BYDC_2" + }, + { + "id": "BYDC_2_EPC2", + "svg": "epc", + "zone": "BYDC_2" + }, + { + "id": "BYDC_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYDC_2" + }, + { + "id": "BYDC_2_S1_PB", + "svg": "start", + "zone": "BYDC_2" + }, + { + "id": "BYDC_2_S2_PB", + "svg": "start", + "zone": "BYDC_2" + }, + { + "id": "BYDC_2_TPE1", + "svg": "photoeye", + "zone": "BYDC_2" + }, + { + "id": "BYDC_2_VFD", + "svg": "conveyor", + "zone": "BYDC_2" + }, + { + "id": "BYDC_3_TPE1", + "svg": "photoeye", + "zone": "BYDC_3" + }, + { + "id": "BYDC_3_VFD", + "svg": "conveyor", + "zone": "BYDC_3" + }, + { + "id": "BYDC_4_TPE1", + "svg": "photoeye", + "zone": "BYDC_4" + }, + { + "id": "BYDC_4_VFD", + "svg": "conveyor", + "zone": "BYDC_4" + }, + { + "id": "BYDC_5_TPE1", + "svg": "photoeye", + "zone": "BYDC_5" + }, + { + "id": "BYDC_5_VFD", + "svg": "conveyor", + "zone": "BYDC_5" + }, + { + "id": "BYDC_6_BCN1", + "svg": "beacon", + "zone": "BYDC_6" + }, + { + "id": "BYDC_6_JR1_PB", + "svg": "jam_reset", + "zone": "BYDC_6" + }, + { + "id": "BYDC_6_JR2_PB", + "svg": "jam_reset", + "zone": "BYDC_6" + }, + { + "id": "BYDC_6_TPE1", + "svg": "photoeye", + "zone": "BYDC_6" + }, + { + "id": "BYDC_6_VFD", + "svg": "conveyor", + "zone": "BYDC_6" + }, + { + "id": "BYDC_7_TPE1", + "svg": "photoeye", + "zone": "BYDC_7" + }, + { + "id": "BYDC_7_VFD", + "svg": "conveyor", + "zone": "BYDC_7" + }, + { + "id": "BYDC_8_TPE1", + "svg": "photoeye", + "zone": "BYDC_8" + }, + { + "id": "BYDC_8_VFD", + "svg": "conveyor", + "zone": "BYDC_8" + }, + { + "id": "BYDC_9_TPE1", + "svg": "photoeye", + "zone": "BYDC_9" + }, + { + "id": "BYDC_9_VFD", + "svg": "conveyor", + "zone": "BYDC_9" + }, + { + "id": "PDP17", + "svg": "pdp", + "zone": "PDP17" + }, + { + "id": "PDP17_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP17" + }, + { + "id": "PDP17_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP17" + }, + { + "id": "PDP18", + "svg": "pdp", + "zone": "PDP18" + }, + { + "id": "PDP18_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP18" + }, + { + "id": "PDP18_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP18" + } + ], + "MCM15": [ + { + "id": "BYAB_10_TPE1", + "svg": "photoeye", + "zone": "BYAB_10" + }, + { + "id": "BYAB_10_VFD", + "svg": "conveyor", + "zone": "BYAB_10" + }, + { + "id": "BYAB_11_TPE1", + "svg": "photoeye", + "zone": "BYAB_11" + }, + { + "id": "BYAB_11_VFD", + "svg": "conveyor", + "zone": "BYAB_11" + }, + { + "id": "BYAB_12_BCN1", + "svg": "beacon", + "zone": "BYAB_12" + }, + { + "id": "BYAB_12_BCN2", + "svg": "beacon", + "zone": "BYAB_12" + }, + { + "id": "BYAB_12_DPM1", + "svg": "dpm", + "zone": "BYAB_12" + }, + { + "id": "BYAB_12_EPC1", + "svg": "epc", + "zone": "BYAB_12" + }, + { + "id": "BYAB_12_EPC2", + "svg": "epc", + "zone": "BYAB_12" + }, + { + "id": "BYAB_12_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYAB_12" + }, + { + "id": "BYAB_12_S1_PB", + "svg": "start", + "zone": "BYAB_12" + }, + { + "id": "BYAB_12_S2_PB", + "svg": "start", + "zone": "BYAB_12" + }, + { + "id": "BYAB_12_TPE1", + "svg": "photoeye", + "zone": "BYAB_12" + }, + { + "id": "BYAB_12_VFD", + "svg": "conveyor", + "zone": "BYAB_12" + }, + { + "id": "BYAB_13_TPE1", + "svg": "photoeye", + "zone": "BYAB_13" + }, + { + "id": "BYAB_13_VFD", + "svg": "conveyor", + "zone": "BYAB_13" + }, + { + "id": "BYAB_14_TPE1", + "svg": "photoeye", + "zone": "BYAB_14" + }, + { + "id": "BYAB_14_VFD", + "svg": "conveyor", + "zone": "BYAB_14" + }, + { + "id": "BYAB_15_BCN1", + "svg": "beacon", + "zone": "BYAB_15" + }, + { + "id": "BYAB_15_BCN2", + "svg": "beacon", + "zone": "BYAB_15" + }, + { + "id": "BYAB_15_EPC1", + "svg": "epc", + "zone": "BYAB_15" + }, + { + "id": "BYAB_15_EPC2", + "svg": "epc", + "zone": "BYAB_15" + }, + { + "id": "BYAB_15_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYAB_15" + }, + { + "id": "BYAB_15_S1_PB", + "svg": "start", + "zone": "BYAB_15" + }, + { + "id": "BYAB_15_S2_PB", + "svg": "start", + "zone": "BYAB_15" + }, + { + "id": "BYAB_15_TPE1", + "svg": "photoeye", + "zone": "BYAB_15" + }, + { + "id": "BYAB_15_VFD", + "svg": "conveyor", + "zone": "BYAB_15" + }, + { + "id": "BYAB_16_TPE1", + "svg": "photoeye", + "zone": "BYAB_16" + }, + { + "id": "BYAB_16_VFD", + "svg": "conveyor", + "zone": "BYAB_16" + }, + { + "id": "BYAB_17_TPE1", + "svg": "photoeye", + "zone": "BYAB_17" + }, + { + "id": "BYAB_17_VFD", + "svg": "conveyor", + "zone": "BYAB_17" + }, + { + "id": "BYAB_18_TPE1", + "svg": "photoeye", + "zone": "BYAB_18" + }, + { + "id": "BYAB_18_VFD", + "svg": "conveyor", + "zone": "BYAB_18" + }, + { + "id": "BYAB_19_BCN1", + "svg": "beacon", + "zone": "BYAB_19" + }, + { + "id": "BYAB_19_BCN2", + "svg": "beacon", + "zone": "BYAB_19" + }, + { + "id": "BYAB_19_EPC1", + "svg": "epc", + "zone": "BYAB_19" + }, + { + "id": "BYAB_19_EPC2", + "svg": "epc", + "zone": "BYAB_19" + }, + { + "id": "BYAB_19_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYAB_19" + }, + { + "id": "BYAB_19_S1_PB", + "svg": "start", + "zone": "BYAB_19" + }, + { + "id": "BYAB_19_S2_PB", + "svg": "start", + "zone": "BYAB_19" + }, + { + "id": "BYAB_19_TPE1", + "svg": "photoeye", + "zone": "BYAB_19" + }, + { + "id": "BYAB_19_VFD", + "svg": "conveyor", + "zone": "BYAB_19" + }, + { + "id": "BYAC_10_BCN1", + "svg": "beacon", + "zone": "BYAC_10" + }, + { + "id": "BYAC_10_BCN2", + "svg": "beacon", + "zone": "BYAC_10" + }, + { + "id": "BYAC_10_DPM1", + "svg": "dpm", + "zone": "BYAC_10" + }, + { + "id": "BYAC_10_EPC1", + "svg": "epc", + "zone": "BYAC_10" + }, + { + "id": "BYAC_10_EPC2", + "svg": "epc", + "zone": "BYAC_10" + }, + { + "id": "BYAC_10_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYAC_10" + }, + { + "id": "BYAC_10_S1_PB", + "svg": "start", + "zone": "BYAC_10" + }, + { + "id": "BYAC_10_S2_PB", + "svg": "start", + "zone": "BYAC_10" + }, + { + "id": "BYAC_10_TPE1", + "svg": "photoeye", + "zone": "BYAC_10" + }, + { + "id": "BYAC_10_VFD", + "svg": "conveyor", + "zone": "BYAC_10" + }, + { + "id": "BYAC_11_TPE1", + "svg": "photoeye", + "zone": "BYAC_11" + }, + { + "id": "BYAC_11_VFD", + "svg": "conveyor", + "zone": "BYAC_11" + }, + { + "id": "BYAC_12_VFD", + "svg": "conveyor", + "zone": "BYAC_12" + }, + { + "id": "BYAC_13_TPE1", + "svg": "photoeye", + "zone": "BYAC_13" + }, + { + "id": "BYAC_13_VFD", + "svg": "conveyor", + "zone": "BYAC_13" + }, + { + "id": "BYAC_14_BCN1", + "svg": "beacon", + "zone": "BYAC_14" + }, + { + "id": "BYAC_14_BCN2", + "svg": "beacon", + "zone": "BYAC_14" + }, + { + "id": "BYAC_14_EPC1", + "svg": "epc", + "zone": "BYAC_14" + }, + { + "id": "BYAC_14_EPC2", + "svg": "epc", + "zone": "BYAC_14" + }, + { + "id": "BYAC_14_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYAC_14" + }, + { + "id": "BYAC_14_S1_PB", + "svg": "start", + "zone": "BYAC_14" + }, + { + "id": "BYAC_14_S2_PB", + "svg": "start", + "zone": "BYAC_14" + }, + { + "id": "BYAC_14_TPE1", + "svg": "photoeye", + "zone": "BYAC_14" + }, + { + "id": "BYAC_14_VFD", + "svg": "conveyor", + "zone": "BYAC_14" + }, + { + "id": "BYBA_1_TPE1", + "svg": "photoeye", + "zone": "BYBA_1" + }, + { + "id": "BYBA_1_VFD", + "svg": "conveyor", + "zone": "BYBA_1" + }, + { + "id": "BYBA_10_TPE1", + "svg": "photoeye", + "zone": "BYBA_10" + }, + { + "id": "BYBA_10_VFD", + "svg": "conveyor", + "zone": "BYBA_10" + }, + { + "id": "BYBA_11_BCN1", + "svg": "beacon", + "zone": "BYBA_11" + }, + { + "id": "BYBA_11_JR1_PB", + "svg": "jam_reset", + "zone": "BYBA_11" + }, + { + "id": "BYBA_11_JR2_PB", + "svg": "jam_reset", + "zone": "BYBA_11" + }, + { + "id": "BYBA_11_TPE1", + "svg": "photoeye", + "zone": "BYBA_11" + }, + { + "id": "BYBA_11_VFD", + "svg": "conveyor", + "zone": "BYBA_11" + }, + { + "id": "BYBA_12_TPE1", + "svg": "photoeye", + "zone": "BYBA_12" + }, + { + "id": "BYBA_12_VFD", + "svg": "conveyor", + "zone": "BYBA_12" + }, + { + "id": "BYBA_13_TPE1", + "svg": "photoeye", + "zone": "BYBA_13" + }, + { + "id": "BYBA_13_VFD", + "svg": "conveyor", + "zone": "BYBA_13" + }, + { + "id": "BYBA_2_BCN1", + "svg": "beacon", + "zone": "BYBA_2" + }, + { + "id": "BYBA_2_BCN2", + "svg": "beacon", + "zone": "BYBA_2" + }, + { + "id": "BYBA_2_EPC1", + "svg": "epc", + "zone": "BYBA_2" + }, + { + "id": "BYBA_2_EPC2", + "svg": "epc", + "zone": "BYBA_2" + }, + { + "id": "BYBA_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYBA_2" + }, + { + "id": "BYBA_2_S1_PB", + "svg": "start", + "zone": "BYBA_2" + }, + { + "id": "BYBA_2_S2_PB", + "svg": "start", + "zone": "BYBA_2" + }, + { + "id": "BYBA_2_TPE1", + "svg": "photoeye", + "zone": "BYBA_2" + }, + { + "id": "BYBA_2_VFD", + "svg": "conveyor", + "zone": "BYBA_2" + }, + { + "id": "BYBA_3_TPE1", + "svg": "photoeye", + "zone": "BYBA_3" + }, + { + "id": "BYBA_3_VFD", + "svg": "conveyor", + "zone": "BYBA_3" + }, + { + "id": "BYBA_4_TPE1", + "svg": "photoeye", + "zone": "BYBA_4" + }, + { + "id": "BYBA_4_VFD", + "svg": "conveyor", + "zone": "BYBA_4" + }, + { + "id": "BYBA_5_TPE1", + "svg": "photoeye", + "zone": "BYBA_5" + }, + { + "id": "BYBA_5_VFD", + "svg": "conveyor", + "zone": "BYBA_5" + }, + { + "id": "BYBA_6_TPE1", + "svg": "photoeye", + "zone": "BYBA_6" + }, + { + "id": "BYBA_6_VFD", + "svg": "conveyor", + "zone": "BYBA_6" + }, + { + "id": "BYBA_7_TPE1", + "svg": "photoeye", + "zone": "BYBA_7" + }, + { + "id": "BYBA_7_VFD", + "svg": "conveyor", + "zone": "BYBA_7" + }, + { + "id": "BYBA_8_TPE1", + "svg": "photoeye", + "zone": "BYBA_8" + }, + { + "id": "BYBA_8_VFD", + "svg": "conveyor", + "zone": "BYBA_8" + }, + { + "id": "BYBA_9_BCN1", + "svg": "beacon", + "zone": "BYBA_9" + }, + { + "id": "BYBA_9_BCN2", + "svg": "beacon", + "zone": "BYBA_9" + }, + { + "id": "BYBA_9_EPC1", + "svg": "epc", + "zone": "BYBA_9" + }, + { + "id": "BYBA_9_EPC2", + "svg": "epc", + "zone": "BYBA_9" + }, + { + "id": "BYBA_9_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYBA_9" + }, + { + "id": "BYBA_9_S1_PB", + "svg": "start", + "zone": "BYBA_9" + }, + { + "id": "BYBA_9_S2_PB", + "svg": "start", + "zone": "BYBA_9" + }, + { + "id": "BYBA_9_TPE1", + "svg": "photoeye", + "zone": "BYBA_9" + }, + { + "id": "BYBA_9_VFD", + "svg": "conveyor", + "zone": "BYBA_9" + }, + { + "id": "BYBC_1_TPE1", + "svg": "photoeye", + "zone": "BYBC_1" + }, + { + "id": "BYBC_1_VFD", + "svg": "conveyor", + "zone": "BYBC_1" + }, + { + "id": "BYBC_10_BCN1", + "svg": "beacon", + "zone": "BYBC_10" + }, + { + "id": "BYBC_10_BCN2", + "svg": "beacon", + "zone": "BYBC_10" + }, + { + "id": "BYBC_10_DPM1", + "svg": "dpm", + "zone": "BYBC_10" + }, + { + "id": "BYBC_10_EPC1", + "svg": "epc", + "zone": "BYBC_10" + }, + { + "id": "BYBC_10_EPC2", + "svg": "epc", + "zone": "BYBC_10" + }, + { + "id": "BYBC_10_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYBC_10" + }, + { + "id": "BYBC_10_S1_PB", + "svg": "start", + "zone": "BYBC_10" + }, + { + "id": "BYBC_10_S2_PB", + "svg": "start", + "zone": "BYBC_10" + }, + { + "id": "BYBC_10_TPE1", + "svg": "photoeye", + "zone": "BYBC_10" + }, + { + "id": "BYBC_10_VFD", + "svg": "conveyor", + "zone": "BYBC_10" + }, + { + "id": "BYBC_11_TPE1", + "svg": "photoeye", + "zone": "BYBC_11" + }, + { + "id": "BYBC_11_VFD", + "svg": "conveyor", + "zone": "BYBC_11" + }, + { + "id": "BYBC_12_TPE1", + "svg": "photoeye", + "zone": "BYBC_12" + }, + { + "id": "BYBC_12_VFD", + "svg": "conveyor", + "zone": "BYBC_12" + }, + { + "id": "BYBC_13_TPE1", + "svg": "photoeye", + "zone": "BYBC_13" + }, + { + "id": "BYBC_13_VFD", + "svg": "conveyor", + "zone": "BYBC_13" + }, + { + "id": "BYBC_14_TPE1", + "svg": "photoeye", + "zone": "BYBC_14" + }, + { + "id": "BYBC_14_VFD", + "svg": "conveyor", + "zone": "BYBC_14" + }, + { + "id": "BYBC_15_BCN1", + "svg": "beacon", + "zone": "BYBC_15" + }, + { + "id": "BYBC_15_BCN2", + "svg": "beacon", + "zone": "BYBC_15" + }, + { + "id": "BYBC_15_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYBC_15" + }, + { + "id": "BYBC_15_S1_PB", + "svg": "start", + "zone": "BYBC_15" + }, + { + "id": "BYBC_15_S2_PB", + "svg": "start", + "zone": "BYBC_15" + }, + { + "id": "BYBC_15_TPE1", + "svg": "photoeye", + "zone": "BYBC_15" + }, + { + "id": "BYBC_15_VFD", + "svg": "conveyor", + "zone": "BYBC_15" + }, + { + "id": "BYBC_16_EPC1", + "svg": "epc", + "zone": "BYBC_16" + }, + { + "id": "BYBC_16_EPC2", + "svg": "epc", + "zone": "BYBC_16" + }, + { + "id": "BYBC_16_TPE1", + "svg": "photoeye", + "zone": "BYBC_16" + }, + { + "id": "BYBC_16_VFD", + "svg": "conveyor", + "zone": "BYBC_16" + }, + { + "id": "BYBC_2_BCN1", + "svg": "beacon", + "zone": "BYBC_2" + }, + { + "id": "BYBC_2_BCN2", + "svg": "beacon", + "zone": "BYBC_2" + }, + { + "id": "BYBC_2_EPC1", + "svg": "epc", + "zone": "BYBC_2" + }, + { + "id": "BYBC_2_EPC2", + "svg": "epc", + "zone": "BYBC_2" + }, + { + "id": "BYBC_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYBC_2" + }, + { + "id": "BYBC_2_S1_PB", + "svg": "start", + "zone": "BYBC_2" + }, + { + "id": "BYBC_2_S2_PB", + "svg": "start", + "zone": "BYBC_2" + }, + { + "id": "BYBC_2_TPE1", + "svg": "photoeye", + "zone": "BYBC_2" + }, + { + "id": "BYBC_2_VFD", + "svg": "conveyor", + "zone": "BYBC_2" + }, + { + "id": "BYBC_3_BCN1", + "svg": "beacon", + "zone": "BYBC_3" + }, + { + "id": "BYBC_3_JR1_PB", + "svg": "jam_reset", + "zone": "BYBC_3" + }, + { + "id": "BYBC_3_JR2_PB", + "svg": "jam_reset", + "zone": "BYBC_3" + }, + { + "id": "BYBC_3_TPE1", + "svg": "photoeye", + "zone": "BYBC_3" + }, + { + "id": "BYBC_3_VFD", + "svg": "conveyor", + "zone": "BYBC_3" + }, + { + "id": "BYBC_4_TPE1", + "svg": "photoeye", + "zone": "BYBC_4" + }, + { + "id": "BYBC_4_VFD", + "svg": "conveyor", + "zone": "BYBC_4" + }, + { + "id": "BYBC_5_TPE1", + "svg": "photoeye", + "zone": "BYBC_5" + }, + { + "id": "BYBC_5_VFD", + "svg": "conveyor", + "zone": "BYBC_5" + }, + { + "id": "BYBC_6_TPE1", + "svg": "photoeye", + "zone": "BYBC_6" + }, + { + "id": "BYBC_6_VFD", + "svg": "conveyor", + "zone": "BYBC_6" + }, + { + "id": "BYBC_7_BCN1", + "svg": "beacon", + "zone": "BYBC_7" + }, + { + "id": "BYBC_7_JR1_PB", + "svg": "jam_reset", + "zone": "BYBC_7" + }, + { + "id": "BYBC_7_JR2_PB", + "svg": "jam_reset", + "zone": "BYBC_7" + }, + { + "id": "BYBC_7_TPE1", + "svg": "photoeye", + "zone": "BYBC_7" + }, + { + "id": "BYBC_7_VFD", + "svg": "conveyor", + "zone": "BYBC_7" + }, + { + "id": "BYBC_8_TPE1", + "svg": "photoeye", + "zone": "BYBC_8" + }, + { + "id": "BYBC_8_VFD", + "svg": "conveyor", + "zone": "BYBC_8" + }, + { + "id": "BYBC_9_TPE1", + "svg": "photoeye", + "zone": "BYBC_9" + }, + { + "id": "BYBC_9_VFD", + "svg": "conveyor", + "zone": "BYBC_9" + }, + { + "id": "BYBD_1_TPE1", + "svg": "photoeye", + "zone": "BYBD_1" + }, + { + "id": "BYBD_1_VFD", + "svg": "conveyor", + "zone": "BYBD_1" + }, + { + "id": "BYBD_10_TPE1", + "svg": "photoeye", + "zone": "BYBD_10" + }, + { + "id": "BYBD_10_VFD", + "svg": "conveyor", + "zone": "BYBD_10" + }, + { + "id": "BYBD_2_BCN1", + "svg": "beacon", + "zone": "BYBD_2" + }, + { + "id": "BYBD_2_BCN2", + "svg": "beacon", + "zone": "BYBD_2" + }, + { + "id": "BYBD_2_EPC1", + "svg": "epc", + "zone": "BYBD_2" + }, + { + "id": "BYBD_2_EPC2", + "svg": "epc", + "zone": "BYBD_2" + }, + { + "id": "BYBD_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYBD_2" + }, + { + "id": "BYBD_2_S1_PB", + "svg": "start", + "zone": "BYBD_2" + }, + { + "id": "BYBD_2_S2_PB", + "svg": "start", + "zone": "BYBD_2" + }, + { + "id": "BYBD_2_TPE1", + "svg": "photoeye", + "zone": "BYBD_2" + }, + { + "id": "BYBD_2_VFD", + "svg": "conveyor", + "zone": "BYBD_2" + }, + { + "id": "BYBD_3_TPE1", + "svg": "photoeye", + "zone": "BYBD_3" + }, + { + "id": "BYBD_3_VFD", + "svg": "conveyor", + "zone": "BYBD_3" + }, + { + "id": "BYBD_4_TPE1", + "svg": "photoeye", + "zone": "BYBD_4" + }, + { + "id": "BYBD_4_VFD", + "svg": "conveyor", + "zone": "BYBD_4" + }, + { + "id": "BYBD_5_TPE1", + "svg": "photoeye", + "zone": "BYBD_5" + }, + { + "id": "BYBD_5_VFD", + "svg": "conveyor", + "zone": "BYBD_5" + }, + { + "id": "BYBD_6_TPE1", + "svg": "photoeye", + "zone": "BYBD_6" + }, + { + "id": "BYBD_6_VFD", + "svg": "conveyor", + "zone": "BYBD_6" + }, + { + "id": "BYBD_7_TPE1", + "svg": "photoeye", + "zone": "BYBD_7" + }, + { + "id": "BYBD_7_VFD", + "svg": "conveyor", + "zone": "BYBD_7" + }, + { + "id": "BYBD_8_TPE1", + "svg": "photoeye", + "zone": "BYBD_8" + }, + { + "id": "BYBD_8_VFD", + "svg": "conveyor", + "zone": "BYBD_8" + }, + { + "id": "BYBD_9_BCN1", + "svg": "beacon", + "zone": "BYBD_9" + }, + { + "id": "BYBD_9_BCN2", + "svg": "beacon", + "zone": "BYBD_9" + }, + { + "id": "BYBD_9_EPC1", + "svg": "epc", + "zone": "BYBD_9" + }, + { + "id": "BYBD_9_EPC2", + "svg": "epc", + "zone": "BYBD_9" + }, + { + "id": "BYBD_9_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYBD_9" + }, + { + "id": "BYBD_9_S1_PB", + "svg": "start", + "zone": "BYBD_9" + }, + { + "id": "BYBD_9_S2_PB", + "svg": "start", + "zone": "BYBD_9" + }, + { + "id": "BYBD_9_TPE1", + "svg": "photoeye", + "zone": "BYBD_9" + }, + { + "id": "BYBD_9_VFD", + "svg": "conveyor", + "zone": "BYBD_9" + }, + { + "id": "BYCA_1_TPE1", + "svg": "photoeye", + "zone": "BYCA_1" + }, + { + "id": "BYCA_1_VFD", + "svg": "conveyor", + "zone": "BYCA_1" + }, + { + "id": "BYCA_2_BCN1", + "svg": "beacon", + "zone": "BYCA_2" + }, + { + "id": "BYCA_2_BCN2", + "svg": "beacon", + "zone": "BYCA_2" + }, + { + "id": "BYCA_2_EPC1", + "svg": "epc", + "zone": "BYCA_2" + }, + { + "id": "BYCA_2_EPC2", + "svg": "epc", + "zone": "BYCA_2" + }, + { + "id": "BYCA_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYCA_2" + }, + { + "id": "BYCA_2_S1_PB", + "svg": "start", + "zone": "BYCA_2" + }, + { + "id": "BYCA_2_S2_PB", + "svg": "start", + "zone": "BYCA_2" + }, + { + "id": "BYCA_2_TPE1", + "svg": "photoeye", + "zone": "BYCA_2" + }, + { + "id": "BYCA_2_VFD", + "svg": "conveyor", + "zone": "BYCA_2" + }, + { + "id": "BYCA_3_TPE1", + "svg": "photoeye", + "zone": "BYCA_3" + }, + { + "id": "BYCA_3_VFD", + "svg": "conveyor", + "zone": "BYCA_3" + }, + { + "id": "BYCA_4_TPE1", + "svg": "photoeye", + "zone": "BYCA_4" + }, + { + "id": "BYCA_4_VFD", + "svg": "conveyor", + "zone": "BYCA_4" + }, + { + "id": "BYCA_5_VFD", + "svg": "conveyor", + "zone": "BYCA_5" + }, + { + "id": "BYCA_6_TPE1", + "svg": "photoeye", + "zone": "BYCA_6" + }, + { + "id": "BYCA_6_VFD", + "svg": "conveyor", + "zone": "BYCA_6" + }, + { + "id": "BYCA_7_BCN1", + "svg": "beacon", + "zone": "BYCA_7" + }, + { + "id": "BYCA_7_JR1_PB", + "svg": "jam_reset", + "zone": "BYCA_7" + }, + { + "id": "BYCA_7_JR2_PB", + "svg": "jam_reset", + "zone": "BYCA_7" + }, + { + "id": "BYCA_7_TPE1", + "svg": "photoeye", + "zone": "BYCA_7" + }, + { + "id": "BYCA_7_VFD", + "svg": "conveyor", + "zone": "BYCA_7" + }, + { + "id": "BYCB_1_TPE1", + "svg": "photoeye", + "zone": "BYCB_1" + }, + { + "id": "BYCB_1_VFD", + "svg": "conveyor", + "zone": "BYCB_1" + }, + { + "id": "BYCB_10_TPE1", + "svg": "photoeye", + "zone": "BYCB_10" + }, + { + "id": "BYCB_10_VFD", + "svg": "conveyor", + "zone": "BYCB_10" + }, + { + "id": "BYCB_11_DPM1", + "svg": "dpm", + "zone": "BYCB_11" + }, + { + "id": "BYCB_11_TPE1", + "svg": "photoeye", + "zone": "BYCB_11" + }, + { + "id": "BYCB_11_VFD", + "svg": "conveyor", + "zone": "BYCB_11" + }, + { + "id": "BYCB_12_TPE1", + "svg": "photoeye", + "zone": "BYCB_12" + }, + { + "id": "BYCB_12_VFD", + "svg": "conveyor", + "zone": "BYCB_12" + }, + { + "id": "BYCB_13_BCN1", + "svg": "beacon", + "zone": "BYCB_13" + }, + { + "id": "BYCB_13_BCN2", + "svg": "beacon", + "zone": "BYCB_13" + }, + { + "id": "BYCB_13_EPC1", + "svg": "epc", + "zone": "BYCB_13" + }, + { + "id": "BYCB_13_EPC2", + "svg": "epc", + "zone": "BYCB_13" + }, + { + "id": "BYCB_13_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYCB_13" + }, + { + "id": "BYCB_13_S1_PB", + "svg": "start", + "zone": "BYCB_13" + }, + { + "id": "BYCB_13_S2_PB", + "svg": "start", + "zone": "BYCB_13" + }, + { + "id": "BYCB_13_TPE1", + "svg": "photoeye", + "zone": "BYCB_13" + }, + { + "id": "BYCB_13_VFD", + "svg": "conveyor", + "zone": "BYCB_13" + }, + { + "id": "BYCB_16_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYCB_16" + }, + { + "id": "BYCB_2_BCN1", + "svg": "beacon", + "zone": "BYCB_2" + }, + { + "id": "BYCB_2_EPC1", + "svg": "epc", + "zone": "BYCB_2" + }, + { + "id": "BYCB_2_S1_PB", + "svg": "start", + "zone": "BYCB_2" + }, + { + "id": "BYCB_2_TPE1", + "svg": "photoeye", + "zone": "BYCB_2" + }, + { + "id": "BYCB_2_VFD", + "svg": "conveyor", + "zone": "BYCB_2" + }, + { + "id": "BYCB_3_TPE1", + "svg": "photoeye", + "zone": "BYCB_3" + }, + { + "id": "BYCB_3_VFD", + "svg": "conveyor", + "zone": "BYCB_3" + }, + { + "id": "BYCB_4_TPE1", + "svg": "photoeye", + "zone": "BYCB_4" + }, + { + "id": "BYCB_4_VFD", + "svg": "conveyor", + "zone": "BYCB_4" + }, + { + "id": "BYCB_5_TPE1", + "svg": "photoeye", + "zone": "BYCB_5" + }, + { + "id": "BYCB_5_VFD", + "svg": "conveyor", + "zone": "BYCB_5" + }, + { + "id": "BYCB_6_DPM1", + "svg": "dpm", + "zone": "BYCB_6" + }, + { + "id": "BYCB_6_TPE1", + "svg": "photoeye", + "zone": "BYCB_6" + }, + { + "id": "BYCB_6_VFD", + "svg": "conveyor", + "zone": "BYCB_6" + }, + { + "id": "BYCB_7_TPE1", + "svg": "photoeye", + "zone": "BYCB_7" + }, + { + "id": "BYCB_7_VFD", + "svg": "conveyor", + "zone": "BYCB_7" + }, + { + "id": "BYCB_8_TPE1", + "svg": "photoeye", + "zone": "BYCB_8" + }, + { + "id": "BYCB_8_VFD", + "svg": "conveyor", + "zone": "BYCB_8" + }, + { + "id": "BYCB_9_BCN1", + "svg": "beacon", + "zone": "BYCB_9" + }, + { + "id": "BYCB_9_BCN2", + "svg": "beacon", + "zone": "BYCB_9" + }, + { + "id": "BYCB_9_DPM1", + "svg": "dpm", + "zone": "BYCB_9" + }, + { + "id": "BYCB_9_EPC1", + "svg": "epc", + "zone": "BYCB_9" + }, + { + "id": "BYCB_9_EPC2", + "svg": "epc", + "zone": "BYCB_9" + }, + { + "id": "BYCB_9_S1_PB", + "svg": "start", + "zone": "BYCB_9" + }, + { + "id": "BYCB_9_S2_PB", + "svg": "start", + "zone": "BYCB_9" + }, + { + "id": "BYCB_9_TPE1", + "svg": "photoeye", + "zone": "BYCB_9" + }, + { + "id": "BYCB_9_VFD", + "svg": "conveyor", + "zone": "BYCB_9" + }, + { + "id": "BYCD_1_TPE1", + "svg": "photoeye", + "zone": "BYCD_1" + }, + { + "id": "BYCD_1_VFD", + "svg": "conveyor", + "zone": "BYCD_1" + }, + { + "id": "BYCD_10_TPE1", + "svg": "photoeye", + "zone": "BYCD_10" + }, + { + "id": "BYCD_10_VFD", + "svg": "conveyor", + "zone": "BYCD_10" + }, + { + "id": "BYCD_2_BCN1", + "svg": "beacon", + "zone": "BYCD_2" + }, + { + "id": "BYCD_2_BCN2", + "svg": "beacon", + "zone": "BYCD_2" + }, + { + "id": "BYCD_2_EPC1", + "svg": "epc", + "zone": "BYCD_2" + }, + { + "id": "BYCD_2_EPC2", + "svg": "epc", + "zone": "BYCD_2" + }, + { + "id": "BYCD_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYCD_2" + }, + { + "id": "BYCD_2_S1_PB", + "svg": "start", + "zone": "BYCD_2" + }, + { + "id": "BYCD_2_S2_PB", + "svg": "start", + "zone": "BYCD_2" + }, + { + "id": "BYCD_2_TPE1", + "svg": "photoeye", + "zone": "BYCD_2" + }, + { + "id": "BYCD_2_VFD", + "svg": "conveyor", + "zone": "BYCD_2" + }, + { + "id": "BYCD_3_BCN1", + "svg": "beacon", + "zone": "BYCD_3" + }, + { + "id": "BYCD_3_BCN2", + "svg": "beacon", + "zone": "BYCD_3" + }, + { + "id": "BYCD_3_EPC1", + "svg": "epc", + "zone": "BYCD_3" + }, + { + "id": "BYCD_3_EPC2", + "svg": "epc", + "zone": "BYCD_3" + }, + { + "id": "BYCD_3_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYCD_3" + }, + { + "id": "BYCD_3_S1_PB", + "svg": "start", + "zone": "BYCD_3" + }, + { + "id": "BYCD_3_S2_PB", + "svg": "start", + "zone": "BYCD_3" + }, + { + "id": "BYCD_3_TPE1", + "svg": "photoeye", + "zone": "BYCD_3" + }, + { + "id": "BYCD_3_VFD", + "svg": "conveyor", + "zone": "BYCD_3" + }, + { + "id": "BYCD_4_TPE1", + "svg": "photoeye", + "zone": "BYCD_4" + }, + { + "id": "BYCD_4_VFD", + "svg": "conveyor", + "zone": "BYCD_4" + }, + { + "id": "BYCD_5_TPE1", + "svg": "photoeye", + "zone": "BYCD_5" + }, + { + "id": "BYCD_5_VFD", + "svg": "conveyor", + "zone": "BYCD_5" + }, + { + "id": "BYCD_6_TPE1", + "svg": "photoeye", + "zone": "BYCD_6" + }, + { + "id": "BYCD_6_VFD", + "svg": "conveyor", + "zone": "BYCD_6" + }, + { + "id": "BYCD_7_TPE1", + "svg": "photoeye", + "zone": "BYCD_7" + }, + { + "id": "BYCD_7_VFD", + "svg": "conveyor", + "zone": "BYCD_7" + }, + { + "id": "BYCD_8_TPE1", + "svg": "photoeye", + "zone": "BYCD_8" + }, + { + "id": "BYCD_8_VFD", + "svg": "conveyor", + "zone": "BYCD_8" + }, + { + "id": "BYCD_9_TPE1", + "svg": "photoeye", + "zone": "BYCD_9" + }, + { + "id": "BYCD_9_VFD", + "svg": "conveyor", + "zone": "BYCD_9" + }, + { + "id": "BYDB_12_BCN1", + "svg": "beacon", + "zone": "BYDB_12" + }, + { + "id": "BYDB_12_EPC1", + "svg": "epc", + "zone": "BYDB_12" + }, + { + "id": "BYDB_12_S1_PB", + "svg": "start", + "zone": "BYDB_12" + }, + { + "id": "BYDB_12_TPE1", + "svg": "photoeye", + "zone": "BYDB_12" + }, + { + "id": "BYDB_12_VFD", + "svg": "conveyor", + "zone": "BYDB_12" + }, + { + "id": "BYDB_13_TPE1", + "svg": "photoeye", + "zone": "BYDB_13" + }, + { + "id": "BYDB_13_VFD", + "svg": "conveyor", + "zone": "BYDB_13" + }, + { + "id": "BYDB_14_TPE1", + "svg": "photoeye", + "zone": "BYDB_14" + }, + { + "id": "BYDB_14_VFD", + "svg": "conveyor", + "zone": "BYDB_14" + }, + { + "id": "BYDB_15_BCN1", + "svg": "beacon", + "zone": "BYDB_15" + }, + { + "id": "BYDB_15_BCN2", + "svg": "beacon", + "zone": "BYDB_15" + }, + { + "id": "BYDB_15_EPC1", + "svg": "epc", + "zone": "BYDB_15" + }, + { + "id": "BYDB_15_EPC2", + "svg": "epc", + "zone": "BYDB_15" + }, + { + "id": "BYDB_15_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYDB_15" + }, + { + "id": "BYDB_15_S1_PB", + "svg": "start", + "zone": "BYDB_15" + }, + { + "id": "BYDB_15_S2_PB", + "svg": "start", + "zone": "BYDB_15" + }, + { + "id": "BYDB_15_TPE1", + "svg": "photoeye", + "zone": "BYDB_15" + }, + { + "id": "BYDB_15_VFD", + "svg": "conveyor", + "zone": "BYDB_15" + }, + { + "id": "BYDB_16_TPE1", + "svg": "photoeye", + "zone": "BYDB_16" + }, + { + "id": "BYDB_16_VFD", + "svg": "conveyor", + "zone": "BYDB_16" + }, + { + "id": "BYDB_17_TPE1", + "svg": "photoeye", + "zone": "BYDB_17" + }, + { + "id": "BYDB_17_VFD", + "svg": "conveyor", + "zone": "BYDB_17" + }, + { + "id": "BYDB_18_TPE1", + "svg": "photoeye", + "zone": "BYDB_18" + }, + { + "id": "BYDB_18_VFD", + "svg": "conveyor", + "zone": "BYDB_18" + }, + { + "id": "BYDB_19_BCN1", + "svg": "beacon", + "zone": "BYDB_19" + }, + { + "id": "BYDB_19_BCN2", + "svg": "beacon", + "zone": "BYDB_19" + }, + { + "id": "BYDB_19_EPC1", + "svg": "epc", + "zone": "BYDB_19" + }, + { + "id": "BYDB_19_EPC2", + "svg": "epc", + "zone": "BYDB_19" + }, + { + "id": "BYDB_19_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYDB_19" + }, + { + "id": "BYDB_19_S1_PB", + "svg": "start", + "zone": "BYDB_19" + }, + { + "id": "BYDB_19_S2_PB", + "svg": "start", + "zone": "BYDB_19" + }, + { + "id": "BYDB_19_TPE1", + "svg": "photoeye", + "zone": "BYDB_19" + }, + { + "id": "BYDB_19_VFD", + "svg": "conveyor", + "zone": "BYDB_19" + }, + { + "id": "BYDC_16_TPE1", + "svg": "photoeye", + "zone": "BYDC_16" + }, + { + "id": "BYDC_16_VFD", + "svg": "conveyor", + "zone": "BYDC_16" + }, + { + "id": "BYDC_17_TPE1", + "svg": "photoeye", + "zone": "BYDC_17" + }, + { + "id": "BYDC_17_VFD", + "svg": "conveyor", + "zone": "BYDC_17" + }, + { + "id": "BYDC_18_VFD", + "svg": "conveyor", + "zone": "BYDC_18" + }, + { + "id": "BYDC_19_TPE1", + "svg": "photoeye", + "zone": "BYDC_19" + }, + { + "id": "BYDC_19_VFD", + "svg": "conveyor", + "zone": "BYDC_19" + }, + { + "id": "BYDC_20_BCN1", + "svg": "beacon", + "zone": "BYDC_20" + }, + { + "id": "BYDC_20_BCN2", + "svg": "beacon", + "zone": "BYDC_20" + }, + { + "id": "BYDC_20_EPC1", + "svg": "epc", + "zone": "BYDC_20" + }, + { + "id": "BYDC_20_EPC2", + "svg": "epc", + "zone": "BYDC_20" + }, + { + "id": "BYDC_20_FIOM1", + "svg": "fio_sio_fioh", + "zone": "BYDC_20" + }, + { + "id": "BYDC_20_S1_PB", + "svg": "start", + "zone": "BYDC_20" + }, + { + "id": "BYDC_20_S2_PB", + "svg": "start", + "zone": "BYDC_20" + }, + { + "id": "BYDC_20_TPE1", + "svg": "photoeye", + "zone": "BYDC_20" + }, + { + "id": "BYDC_20_VFD", + "svg": "conveyor", + "zone": "BYDC_20" + }, + { + "id": "PDP19", + "svg": "pdp", + "zone": "PDP19" + }, + { + "id": "PDP19_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP19" + }, + { + "id": "PDP19_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP19" + }, + { + "id": "PDP20", + "svg": "pdp", + "zone": "PDP20" + }, + { + "id": "PDP20_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP20" + }, + { + "id": "PDP20_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP20" + } + ], + "MCM16": [ + { + "id": "FL1069_2_BCN1", + "svg": "beacon", + "zone": "FL1069_2" + }, + { + "id": "FL1069_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL1069_2" + }, + { + "id": "FL1069_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL1069_2" + }, + { + "id": "FL1069_2_TPE1", + "svg": "photoeye", + "zone": "FL1069_2" + }, + { + "id": "FL1069_2_TPE2", + "svg": "photoeye", + "zone": "FL1069_2" + }, + { + "id": "FL1069_2_VFD", + "svg": "conveyor", + "zone": "FL1069_2" + }, + { + "id": "FL1069_3CH_FPE1", + "svg": "photoeye", + "zone": "FL1069_3C" + }, + { + "id": "FL1073_2_BCN1", + "svg": "beacon", + "zone": "FL1073_2" + }, + { + "id": "FL1073_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL1073_2" + }, + { + "id": "FL1073_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL1073_2" + }, + { + "id": "FL1073_2_TPE1", + "svg": "photoeye", + "zone": "FL1073_2" + }, + { + "id": "FL1073_2_TPE2", + "svg": "photoeye", + "zone": "FL1073_2" + }, + { + "id": "FL1073_2_VFD", + "svg": "conveyor", + "zone": "FL1073_2" + }, + { + "id": "FL1073_3CH_FPE1", + "svg": "photoeye", + "zone": "FL1073_3C" + }, + { + "id": "FL1077_2_BCN1", + "svg": "beacon", + "zone": "FL1077_2" + }, + { + "id": "FL1077_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL1077_2" + }, + { + "id": "FL1077_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL1077_2" + }, + { + "id": "FL1077_2_TPE1", + "svg": "photoeye", + "zone": "FL1077_2" + }, + { + "id": "FL1077_2_TPE2", + "svg": "photoeye", + "zone": "FL1077_2" + }, + { + "id": "FL1077_2_VFD", + "svg": "conveyor", + "zone": "FL1077_2" + }, + { + "id": "FL1077_3CH_FPE1", + "svg": "photoeye", + "zone": "FL1077_3C" + }, + { + "id": "FL1081_2_BCN1", + "svg": "beacon", + "zone": "FL1081_2" + }, + { + "id": "FL1081_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL1081_2" + }, + { + "id": "FL1081_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "FL1081_2" + }, + { + "id": "FL1081_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL1081_2" + }, + { + "id": "FL1081_2_TPE1", + "svg": "photoeye", + "zone": "FL1081_2" + }, + { + "id": "FL1081_2_TPE2", + "svg": "photoeye", + "zone": "FL1081_2" + }, + { + "id": "FL1081_2_VFD", + "svg": "conveyor", + "zone": "FL1081_2" + }, + { + "id": "FL1081_3CH_FPE1", + "svg": "photoeye", + "zone": "FL1081_3C" + }, + { + "id": "FL1085_2_BCN1", + "svg": "beacon", + "zone": "FL1085_2" + }, + { + "id": "FL1085_2_DPM1", + "svg": "dpm", + "zone": "FL1085_2" + }, + { + "id": "FL1085_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL1085_2" + }, + { + "id": "FL1085_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "FL1085_2" + }, + { + "id": "FL1085_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL1085_2" + }, + { + "id": "FL1085_2_TPE1", + "svg": "photoeye", + "zone": "FL1085_2" + }, + { + "id": "FL1085_2_TPE2", + "svg": "photoeye", + "zone": "FL1085_2" + }, + { + "id": "FL1085_2_VFD", + "svg": "conveyor", + "zone": "FL1085_2" + }, + { + "id": "FL1085_3CH_FPE1", + "svg": "photoeye", + "zone": "FL1085_3C" + }, + { + "id": "FL1089_2_BCN1", + "svg": "beacon", + "zone": "FL1089_2" + }, + { + "id": "FL1089_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL1089_2" + }, + { + "id": "FL1089_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL1089_2" + }, + { + "id": "FL1089_2_TPE1", + "svg": "photoeye", + "zone": "FL1089_2" + }, + { + "id": "FL1089_2_TPE2", + "svg": "photoeye", + "zone": "FL1089_2" + }, + { + "id": "FL1089_2_VFD", + "svg": "conveyor", + "zone": "FL1089_2" + }, + { + "id": "FL1089_3CH_FPE1", + "svg": "photoeye", + "zone": "FL1089_3C" + }, + { + "id": "FL1093_2_BCN1", + "svg": "beacon", + "zone": "FL1093_2" + }, + { + "id": "FL1093_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL1093_2" + }, + { + "id": "FL1093_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL1093_2" + }, + { + "id": "FL1093_2_TPE1", + "svg": "photoeye", + "zone": "FL1093_2" + }, + { + "id": "FL1093_2_TPE2", + "svg": "photoeye", + "zone": "FL1093_2" + }, + { + "id": "FL1093_2_VFD", + "svg": "conveyor", + "zone": "FL1093_2" + }, + { + "id": "FL1093_3CH_FPE1", + "svg": "photoeye", + "zone": "FL1093_3C" + }, + { + "id": "FL1097_2_BCN1", + "svg": "beacon", + "zone": "FL1097_2" + }, + { + "id": "FL1097_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL1097_2" + }, + { + "id": "FL1097_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL1097_2" + }, + { + "id": "FL1097_2_TPE1", + "svg": "photoeye", + "zone": "FL1097_2" + }, + { + "id": "FL1097_2_TPE2", + "svg": "photoeye", + "zone": "FL1097_2" + }, + { + "id": "FL1097_2_VFD", + "svg": "conveyor", + "zone": "FL1097_2" + }, + { + "id": "FL1097_3CH_FPE1", + "svg": "photoeye", + "zone": "FL1097_3C" + }, + { + "id": "JP1102_1CH_BCN1", + "svg": "beacon", + "zone": "JP1102_1C" + }, + { + "id": "JP1102_1CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "JP1102_1C" + }, + { + "id": "JP1102_1CH_FPE1", + "svg": "photoeye", + "zone": "JP1102_1C" + }, + { + "id": "JP1102_1CH_FPE2", + "svg": "photoeye", + "zone": "JP1102_1C" + }, + { + "id": "JP1102_1CH_JR1_PB", + "svg": "jam_reset", + "zone": "JP1102_1C" + }, + { + "id": "S011011_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011011_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011011_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011011_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011011_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S011011_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011011_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011012_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011012_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011012_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S011013_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011013_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S011013_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011013_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011013_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011013_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011013_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011014_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011014_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011015_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011015_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011015_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011015_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011015_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011015_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011016_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011016_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011017_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011017_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S011017_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011017_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011017_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011017_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011017_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011018_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011018_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011019_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011019_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011019_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011019_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011019_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011019_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011020_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011020_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011021_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011021_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S011021_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011021_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011021_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011021_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S011021_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011021_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011022_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011022_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011022_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S011023_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011023_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011023_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011023_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011023_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S011023_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011023_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011024_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011024_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011024_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S011025_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011025_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S011025_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011025_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011025_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011025_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011025_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011026_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011026_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011027_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011027_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011027_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011027_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011027_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011027_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011028_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011028_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011029_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011029_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S011029_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011029_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011029_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011029_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011029_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011030_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011030_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011031_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011031_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011031_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011031_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011031_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011031_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011032_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011032_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011033_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011033_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S011033_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011033_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011033_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011033_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S011033_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011033_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011034_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011034_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011034_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S011035_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011035_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011035_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011035_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011035_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S011035_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011035_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011036_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011036_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011036_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S011037_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011037_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S011037_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011037_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011037_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011037_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011037_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011038_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011038_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011039_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011039_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011039_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011039_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011039_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011039_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011040_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011040_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011041_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011041_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S011041_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011041_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011041_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011041_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011041_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011042_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011042_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011043_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011043_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011043_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011043_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011043_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011043_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011044_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011044_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011045_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011045_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S011045_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011045_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011045_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011045_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S011045_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011045_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011046_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011046_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011046_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S011047_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011047_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011047_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011047_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011047_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S011047_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011047_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011048_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011048_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011048_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S011049_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011049_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S011049_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011049_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011049_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011049_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011049_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011050_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011050_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011051_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011051_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011051_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011051_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011051_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011051_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011052_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011052_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011053_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011053_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S011053_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011053_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011053_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011053_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011053_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011054_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011054_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011055_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011055_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011055_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011055_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011055_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011055_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011056_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011056_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011057_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011057_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S011057_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011057_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011057_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011057_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S011057_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011057_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011058_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011058_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011058_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S011059_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011059_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011059_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011059_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011059_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S011059_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011059_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011060_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011060_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011060_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S011061_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011061_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S011061_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011061_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011061_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011061_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011061_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011062_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011062_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011063_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011063_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011063_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011063_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011063_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011063_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011064_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011064_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011065_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011065_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S011065_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011065_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011065_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011065_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011065_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011066_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011066_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011067_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011067_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S011067_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011067_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011067_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S011067_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S011067_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S011067_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S011068_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011068_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011070_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S011070_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S011070_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "VSA_DPM1_FIOM1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSA_DPM1_FIOM2", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSA_DPM1_FIOM3", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSA_DPM1_FIOM4", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSA_DPM1_FIOM5", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSA_DPM1_FIOM6", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSA_DPM2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSA_DPM2_FIOM2", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSA_DPM2_FIOM3", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSA_DPM2_FIOM4", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSA_DPM3_FIOM1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSA_DPM3_FIOM2", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSA_DPM3_FIOM3", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSA_DPM3_FIOM4", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSA_DPM3_FIOM5", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSA_DPM3_FIOM6", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSA_PS1", + "svg": "pressure_sensor", + "zone": "OTHER" + }, + { + "id": "PDP26", + "svg": "pdp", + "zone": "PDP26" + }, + { + "id": "PDP26_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP26" + }, + { + "id": "PDP26_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP26" + } + ], + "MCM17": [ + { + "id": "FL3011_2_BCN1", + "svg": "beacon", + "zone": "FL3011_2" + }, + { + "id": "FL3011_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL3011_2" + }, + { + "id": "FL3011_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL3011_2" + }, + { + "id": "FL3011_2_TPE1", + "svg": "photoeye", + "zone": "FL3011_2" + }, + { + "id": "FL3011_2_TPE2", + "svg": "photoeye", + "zone": "FL3011_2" + }, + { + "id": "FL3011_2_VFD", + "svg": "conveyor", + "zone": "FL3011_2" + }, + { + "id": "FL3011_3CH_FPE1", + "svg": "photoeye", + "zone": "FL3011_3C" + }, + { + "id": "FL3015_2_BCN1", + "svg": "beacon", + "zone": "FL3015_2" + }, + { + "id": "FL3015_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL3015_2" + }, + { + "id": "FL3015_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL3015_2" + }, + { + "id": "FL3015_2_TPE1", + "svg": "photoeye", + "zone": "FL3015_2" + }, + { + "id": "FL3015_2_TPE2", + "svg": "photoeye", + "zone": "FL3015_2" + }, + { + "id": "FL3015_2_VFD", + "svg": "conveyor", + "zone": "FL3015_2" + }, + { + "id": "FL3015_3CH_FPE1", + "svg": "photoeye", + "zone": "FL3015_3C" + }, + { + "id": "FL3019_2_BCN1", + "svg": "beacon", + "zone": "FL3019_2" + }, + { + "id": "FL3019_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL3019_2" + }, + { + "id": "FL3019_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL3019_2" + }, + { + "id": "FL3019_2_TPE1", + "svg": "photoeye", + "zone": "FL3019_2" + }, + { + "id": "FL3019_2_TPE2", + "svg": "photoeye", + "zone": "FL3019_2" + }, + { + "id": "FL3019_2_VFD", + "svg": "conveyor", + "zone": "FL3019_2" + }, + { + "id": "FL3019_3CH_FPE1", + "svg": "photoeye", + "zone": "FL3019_3C" + }, + { + "id": "FL3023_2_BCN1", + "svg": "beacon", + "zone": "FL3023_2" + }, + { + "id": "FL3023_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL3023_2" + }, + { + "id": "FL3023_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "FL3023_2" + }, + { + "id": "FL3023_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL3023_2" + }, + { + "id": "FL3023_2_TPE1", + "svg": "photoeye", + "zone": "FL3023_2" + }, + { + "id": "FL3023_2_TPE2", + "svg": "photoeye", + "zone": "FL3023_2" + }, + { + "id": "FL3023_2_VFD", + "svg": "conveyor", + "zone": "FL3023_2" + }, + { + "id": "FL3023_3CH_FPE1", + "svg": "photoeye", + "zone": "FL3023_3C" + }, + { + "id": "FL3027_2_BCN1", + "svg": "beacon", + "zone": "FL3027_2" + }, + { + "id": "FL3027_2_DPM1", + "svg": "dpm", + "zone": "FL3027_2" + }, + { + "id": "FL3027_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL3027_2" + }, + { + "id": "FL3027_2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "FL3027_2" + }, + { + "id": "FL3027_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL3027_2" + }, + { + "id": "FL3027_2_TPE1", + "svg": "photoeye", + "zone": "FL3027_2" + }, + { + "id": "FL3027_2_TPE2", + "svg": "photoeye", + "zone": "FL3027_2" + }, + { + "id": "FL3027_2_VFD", + "svg": "conveyor", + "zone": "FL3027_2" + }, + { + "id": "FL3027_3CH_FPE1", + "svg": "photoeye", + "zone": "FL3027_3C" + }, + { + "id": "FL3029_2_BCN1", + "svg": "beacon", + "zone": "FL3029_2" + }, + { + "id": "FL3029_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL3029_2" + }, + { + "id": "FL3029_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL3029_2" + }, + { + "id": "FL3029_2_TPE1", + "svg": "photoeye", + "zone": "FL3029_2" + }, + { + "id": "FL3029_2_TPE2", + "svg": "photoeye", + "zone": "FL3029_2" + }, + { + "id": "FL3029_2_VFD", + "svg": "conveyor", + "zone": "FL3029_2" + }, + { + "id": "FL3029_3CH_FPE1", + "svg": "photoeye", + "zone": "FL3029_3C" + }, + { + "id": "FL3033_2_BCN1", + "svg": "beacon", + "zone": "FL3033_2" + }, + { + "id": "FL3033_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL3033_2" + }, + { + "id": "FL3033_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL3033_2" + }, + { + "id": "FL3033_2_TPE1", + "svg": "photoeye", + "zone": "FL3033_2" + }, + { + "id": "FL3033_2_TPE2", + "svg": "photoeye", + "zone": "FL3033_2" + }, + { + "id": "FL3033_2_VFD", + "svg": "conveyor", + "zone": "FL3033_2" + }, + { + "id": "FL3033_3CH_FPE1", + "svg": "photoeye", + "zone": "FL3033_3C" + }, + { + "id": "JP3103_1CH_BCN1", + "svg": "beacon", + "zone": "JP3103_1C" + }, + { + "id": "JP3103_1CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "JP3103_1C" + }, + { + "id": "JP3103_1CH_FPE1", + "svg": "photoeye", + "zone": "JP3103_1C" + }, + { + "id": "JP3103_1CH_JR1_PB", + "svg": "jam_reset", + "zone": "JP3103_1C" + }, + { + "id": "S013041_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013041_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S013041_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013041_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013041_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013041_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013041_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013042_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013042_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013043_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013043_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013043_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013043_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013043_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013043_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013043_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013044_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013044_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013044_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013045_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013045_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S013045_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013045_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013045_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013045_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013045_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013045_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013046_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013046_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013046_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013047_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013047_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013047_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013047_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013047_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013047_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013048_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013048_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013049_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013049_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S013049_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013049_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013049_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013049_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013049_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013050_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013050_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013051_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013051_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013051_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013051_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013051_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013051_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013052_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013052_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013053_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013053_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S013053_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013053_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013053_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013053_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013053_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013054_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013054_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013055_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013055_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013055_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013055_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013055_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013055_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013055_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013056_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013056_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013056_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013057_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013057_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S013057_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013057_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013057_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013057_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013057_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013057_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013058_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013058_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013058_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013059_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013059_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013059_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013059_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013059_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013059_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013060_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013060_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013061_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013061_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S013061_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013061_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013061_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013061_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013061_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013062_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013062_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013063_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013063_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013063_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013063_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013063_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013063_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013064_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013064_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013065_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013065_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S013065_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013065_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013065_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013065_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013065_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013066_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013066_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013067_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013067_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013067_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013067_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013067_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013067_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013067_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013068_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013068_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013068_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013069_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013069_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S013069_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013069_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013069_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013069_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013069_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013069_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013070_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013070_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013070_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013071_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013071_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013071_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013071_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013071_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013071_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013072_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013072_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013073_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013073_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S013073_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013073_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013073_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013073_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013073_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013074_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013074_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013075_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013075_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013075_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013075_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013075_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013075_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013076_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013076_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013077_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013077_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S013077_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013077_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013077_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013077_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013077_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013078_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013078_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013079_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013079_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013079_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013079_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013079_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013079_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013079_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013080_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013080_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013080_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013081_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013081_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S013081_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013081_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013081_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013081_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013081_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013081_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013082_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013082_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013082_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013083_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013083_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013083_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013083_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013083_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013083_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013084_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013084_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013085_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013085_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S013085_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013085_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013085_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013085_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013085_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013086_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013086_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013087_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013087_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013087_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013087_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013087_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013087_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013088_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013088_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013089_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013089_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S013089_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013089_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013089_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013089_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013089_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013090_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013090_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013091_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013091_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013091_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013091_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013091_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013091_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013091_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013092_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013092_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013092_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013093_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013093_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S013093_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013093_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013093_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013093_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013093_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013093_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013094_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013094_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013094_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013095_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013095_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013095_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013095_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013095_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013095_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013096_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013096_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013097_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013097_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S013097_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013097_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013097_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013097_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013097_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013098_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013098_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013099_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013099_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013099_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013099_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S013099_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S013099_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S013099_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S013100_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S013100_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S013100_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "VSB_DPM1_FIOM1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSB_DPM1_FIOM2", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSB_DPM1_FIOM3", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSB_DPM1_FIOM4", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSB_DPM1_FIOM5", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSB_DPM1_FIOM6", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSB_DPM2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSB_DPM2_FIOM2", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSB_DPM2_FIOM3", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSB_DPM2_FIOM4", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSB_DPM3_FIOM1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSB_DPM3_FIOM2", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSB_DPM3_FIOM3", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSB_DPM3_FIOM4", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSB_DPM3_FIOM5", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSB_DPM3_FIOM6", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSB_PS1", + "svg": "pressure_sensor", + "zone": "OTHER" + } + ], + "MCM18": [ + { + "id": "FL2068_1CH_FPE1", + "svg": "photoeye", + "zone": "FL2068_1C" + }, + { + "id": "FL2068_2_BCN1", + "svg": "beacon", + "zone": "FL2068_2" + }, + { + "id": "FL2068_2_BCN2", + "svg": "beacon", + "zone": "FL2068_2" + }, + { + "id": "FL2068_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL2068_2" + }, + { + "id": "FL2068_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL2068_2" + }, + { + "id": "FL2068_2_JR2_PB", + "svg": "jam_reset", + "zone": "FL2068_2" + }, + { + "id": "FL2068_2_TPE1", + "svg": "photoeye", + "zone": "FL2068_2" + }, + { + "id": "FL2068_2_VFD", + "svg": "conveyor", + "zone": "FL2068_2" + }, + { + "id": "FL2068_3CH_FPE1", + "svg": "photoeye", + "zone": "FL2068_3C" + }, + { + "id": "FL2072_1CH_FPE1", + "svg": "photoeye", + "zone": "FL2072_1C" + }, + { + "id": "FL2072_2_BCN1", + "svg": "beacon", + "zone": "FL2072_2" + }, + { + "id": "FL2072_2_BCN2", + "svg": "beacon", + "zone": "FL2072_2" + }, + { + "id": "FL2072_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL2072_2" + }, + { + "id": "FL2072_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL2072_2" + }, + { + "id": "FL2072_2_JR2_PB", + "svg": "jam_reset", + "zone": "FL2072_2" + }, + { + "id": "FL2072_2_TPE1", + "svg": "photoeye", + "zone": "FL2072_2" + }, + { + "id": "FL2072_2_VFD", + "svg": "conveyor", + "zone": "FL2072_2" + }, + { + "id": "FL2072_3CH_FPE1", + "svg": "photoeye", + "zone": "FL2072_3C" + }, + { + "id": "FL2076_1CH_FPE1", + "svg": "photoeye", + "zone": "FL2076_1C" + }, + { + "id": "FL2076_2_BCN1", + "svg": "beacon", + "zone": "FL2076_2" + }, + { + "id": "FL2076_2_BCN2", + "svg": "beacon", + "zone": "FL2076_2" + }, + { + "id": "FL2076_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL2076_2" + }, + { + "id": "FL2076_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL2076_2" + }, + { + "id": "FL2076_2_JR2_PB", + "svg": "jam_reset", + "zone": "FL2076_2" + }, + { + "id": "FL2076_2_TPE1", + "svg": "photoeye", + "zone": "FL2076_2" + }, + { + "id": "FL2076_2_VFD", + "svg": "conveyor", + "zone": "FL2076_2" + }, + { + "id": "FL2076_3CH_FPE1", + "svg": "photoeye", + "zone": "FL2076_3C" + }, + { + "id": "FL2080_1CH_FPE1", + "svg": "photoeye", + "zone": "FL2080_1C" + }, + { + "id": "FL2080_2_BCN1", + "svg": "beacon", + "zone": "FL2080_2" + }, + { + "id": "FL2080_2_BCN2", + "svg": "beacon", + "zone": "FL2080_2" + }, + { + "id": "FL2080_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL2080_2" + }, + { + "id": "FL2080_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL2080_2" + }, + { + "id": "FL2080_2_JR2_PB", + "svg": "jam_reset", + "zone": "FL2080_2" + }, + { + "id": "FL2080_2_TPE1", + "svg": "photoeye", + "zone": "FL2080_2" + }, + { + "id": "FL2080_2_VFD", + "svg": "conveyor", + "zone": "FL2080_2" + }, + { + "id": "FL2080_3CH_FPE1", + "svg": "photoeye", + "zone": "FL2080_3C" + }, + { + "id": "FL2084_1CH_FPE1", + "svg": "photoeye", + "zone": "FL2084_1C" + }, + { + "id": "FL2084_2_BCN1", + "svg": "beacon", + "zone": "FL2084_2" + }, + { + "id": "FL2084_2_BCN2", + "svg": "beacon", + "zone": "FL2084_2" + }, + { + "id": "FL2084_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL2084_2" + }, + { + "id": "FL2084_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL2084_2" + }, + { + "id": "FL2084_2_JR2_PB", + "svg": "jam_reset", + "zone": "FL2084_2" + }, + { + "id": "FL2084_2_TPE1", + "svg": "photoeye", + "zone": "FL2084_2" + }, + { + "id": "FL2084_2_VFD", + "svg": "conveyor", + "zone": "FL2084_2" + }, + { + "id": "FL2084_3CH_FPE1", + "svg": "photoeye", + "zone": "FL2084_3C" + }, + { + "id": "FL2088_1CH_FPE1", + "svg": "photoeye", + "zone": "FL2088_1C" + }, + { + "id": "FL2088_2_BCN1", + "svg": "beacon", + "zone": "FL2088_2" + }, + { + "id": "FL2088_2_BCN2", + "svg": "beacon", + "zone": "FL2088_2" + }, + { + "id": "FL2088_2_DPM1", + "svg": "dpm", + "zone": "FL2088_2" + }, + { + "id": "FL2088_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL2088_2" + }, + { + "id": "FL2088_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL2088_2" + }, + { + "id": "FL2088_2_JR2_PB", + "svg": "jam_reset", + "zone": "FL2088_2" + }, + { + "id": "FL2088_2_TPE1", + "svg": "photoeye", + "zone": "FL2088_2" + }, + { + "id": "FL2088_2_VFD", + "svg": "conveyor", + "zone": "FL2088_2" + }, + { + "id": "FL2088_3CH_FPE1", + "svg": "photoeye", + "zone": "FL2088_3C" + }, + { + "id": "FL2092_1CH_FPE1", + "svg": "photoeye", + "zone": "FL2092_1C" + }, + { + "id": "FL2092_2_BCN1", + "svg": "beacon", + "zone": "FL2092_2" + }, + { + "id": "FL2092_2_BCN2", + "svg": "beacon", + "zone": "FL2092_2" + }, + { + "id": "FL2092_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL2092_2" + }, + { + "id": "FL2092_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL2092_2" + }, + { + "id": "FL2092_2_JR2_PB", + "svg": "jam_reset", + "zone": "FL2092_2" + }, + { + "id": "FL2092_2_TPE1", + "svg": "photoeye", + "zone": "FL2092_2" + }, + { + "id": "FL2092_2_VFD", + "svg": "conveyor", + "zone": "FL2092_2" + }, + { + "id": "FL2092_3CH_FPE1", + "svg": "photoeye", + "zone": "FL2092_3C" + }, + { + "id": "FL2100_1CH_FPE1", + "svg": "photoeye", + "zone": "FL2100_1C" + }, + { + "id": "FL2100_2_BCN1", + "svg": "beacon", + "zone": "FL2100_2" + }, + { + "id": "FL2100_2_BCN2", + "svg": "beacon", + "zone": "FL2100_2" + }, + { + "id": "FL2100_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL2100_2" + }, + { + "id": "FL2100_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL2100_2" + }, + { + "id": "FL2100_2_JR2_PB", + "svg": "jam_reset", + "zone": "FL2100_2" + }, + { + "id": "FL2100_2_TPE1", + "svg": "photoeye", + "zone": "FL2100_2" + }, + { + "id": "FL2100_2_VFD", + "svg": "conveyor", + "zone": "FL2100_2" + }, + { + "id": "FL2100_3CH_FPE1", + "svg": "photoeye", + "zone": "FL2100_3C" + }, + { + "id": "FL2104_1CH_FPE1", + "svg": "photoeye", + "zone": "FL2104_1C" + }, + { + "id": "FL2104_2_BCN1", + "svg": "beacon", + "zone": "FL2104_2" + }, + { + "id": "FL2104_2_BCN2", + "svg": "beacon", + "zone": "FL2104_2" + }, + { + "id": "FL2104_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL2104_2" + }, + { + "id": "FL2104_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL2104_2" + }, + { + "id": "FL2104_2_JR2_PB", + "svg": "jam_reset", + "zone": "FL2104_2" + }, + { + "id": "FL2104_2_TPE1", + "svg": "photoeye", + "zone": "FL2104_2" + }, + { + "id": "FL2104_2_VFD", + "svg": "conveyor", + "zone": "FL2104_2" + }, + { + "id": "FL2104_3CH_FPE1", + "svg": "photoeye", + "zone": "FL2104_3C" + }, + { + "id": "FL2108_1CH_FPE1", + "svg": "photoeye", + "zone": "FL2108_1C" + }, + { + "id": "FL2108_2_BCN1", + "svg": "beacon", + "zone": "FL2108_2" + }, + { + "id": "FL2108_2_BCN2", + "svg": "beacon", + "zone": "FL2108_2" + }, + { + "id": "FL2108_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL2108_2" + }, + { + "id": "FL2108_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL2108_2" + }, + { + "id": "FL2108_2_JR2_PB", + "svg": "jam_reset", + "zone": "FL2108_2" + }, + { + "id": "FL2108_2_TPE1", + "svg": "photoeye", + "zone": "FL2108_2" + }, + { + "id": "FL2108_2_VFD", + "svg": "conveyor", + "zone": "FL2108_2" + }, + { + "id": "FL2108_3CH_FPE1", + "svg": "photoeye", + "zone": "FL2108_3C" + }, + { + "id": "JP2098_1CH_BCN1", + "svg": "beacon", + "zone": "JP2098_1C" + }, + { + "id": "JP2098_1CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "JP2098_1C" + }, + { + "id": "JP2098_1CH_FPE1", + "svg": "photoeye", + "zone": "JP2098_1C" + }, + { + "id": "JP2098_1CH_FPE2", + "svg": "photoeye", + "zone": "JP2098_1C" + }, + { + "id": "JP2098_1CH_JR1_PB", + "svg": "jam_reset", + "zone": "JP2098_1C" + }, + { + "id": "S012011_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012011_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012011_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012012_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012012_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012012_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012013_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012013_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012014_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012014_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012015_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012015_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012016_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012016_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012017_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012017_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012018_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012018_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012019_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012019_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012020_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012020_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012021_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012021_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012021_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012022_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012022_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012022_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012023_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012023_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012023_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012024_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012024_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S012024_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012024_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012024_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012024_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012024_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012024_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012025_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012025_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012026_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012026_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012026_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012026_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012026_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012026_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012027_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012027_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012028_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012028_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S012028_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012028_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012028_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012028_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012028_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012029_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012029_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012030_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012030_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012030_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012030_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012030_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012030_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012031_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012031_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012031_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012031_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012031_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012031_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012032_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012032_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S012032_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012032_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012032_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012032_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012032_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012033_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012033_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S012033_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012033_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012033_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012033_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012033_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012033_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012034_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012034_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012034_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012034_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012034_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012034_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012034_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012035_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012035_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012035_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012035_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012035_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012035_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012035_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012036_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012036_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S012036_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012036_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012036_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012036_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012036_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012036_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012037_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012037_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S012037_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012037_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012037_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012037_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012037_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012038_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012038_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012038_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012038_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012038_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012038_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012039_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012039_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012039_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012039_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012039_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012039_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012040_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012040_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S012040_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012040_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012040_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012040_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012040_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012041_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012041_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S012041_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012041_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012041_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012041_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012041_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012042_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012042_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012042_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012042_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012042_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012042_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012043_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012043_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012043_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012043_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012043_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012043_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012044_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012044_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S012044_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012044_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012044_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012044_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012044_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012045_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012045_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S012045_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012045_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012045_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012045_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012045_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012045_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012046_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012046_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012046_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012046_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012046_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012046_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012046_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012047_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012047_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012047_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012047_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012047_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012047_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012047_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012048_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012048_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S012048_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012048_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012048_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012048_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012048_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012048_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012049_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012049_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S012049_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012049_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012049_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012049_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012049_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012050_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012050_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012050_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012050_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012050_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012050_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012051_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012051_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012051_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012051_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012051_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012051_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012052_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012052_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S012052_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012052_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012052_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012052_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012052_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012053_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012053_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S012053_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012053_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012053_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012053_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012053_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012054_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012054_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012054_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012054_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012054_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012054_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012055_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012055_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012055_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012055_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012055_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012055_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012056_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012056_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S012056_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012056_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012056_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012056_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012056_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012057_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012057_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S012057_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012057_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012057_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012057_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012057_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012057_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012058_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012058_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012058_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012058_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012058_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012058_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012058_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012059_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012059_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012059_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012060_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012060_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S012060_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012060_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012060_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012060_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012060_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012060_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012061_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012061_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012062_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012062_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012062_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012062_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012062_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012062_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012063_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012063_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012064_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012064_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S012064_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012064_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012064_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012064_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012064_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012065_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012065_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012066_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012066_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012066_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012066_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S012066_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012066_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S012066_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S012067_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012067_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012069_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012069_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012069_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012071_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012071_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012071_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S012073 _EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012073_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012075 _EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012075_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012077 _EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012077_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012079 _EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012079_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012081_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S012081_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S012081_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "VSC_DPM1_FIOM1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_DPM1_FIOM2", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_DPM1_FIOM3", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_DPM1_FIOM4", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_DPM1_FIOM5", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_DPM2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_DPM2_FIOM2", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_DPM2_FIOM3", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_DPM2_FIOM4", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_DPM3_FIOM1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_DPM3_FIOM2", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_DPM3_FIOM3", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_DPM3_FIOM5", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_DPM3_FIOM6", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_DPM3_FIOM7", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_DPM3_FIOM8", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_DPM4_FIOM1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_DPM4_FIOM2", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_DPM4_FIOM3", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_DPM4_FIOM4", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_DPM4_FIOM5", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSC_PS1", + "svg": "pressure_sensor", + "zone": "OTHER" + } + ], + "MCM19": [ + { + "id": "FL4018_1CH_FPE1", + "svg": "photoeye", + "zone": "FL4018_1C" + }, + { + "id": "FL4018_2_BCN1", + "svg": "beacon", + "zone": "FL4018_2" + }, + { + "id": "FL4018_2_BCN2", + "svg": "beacon", + "zone": "FL4018_2" + }, + { + "id": "FL4018_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL4018_2" + }, + { + "id": "FL4018_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL4018_2" + }, + { + "id": "FL4018_2_JR2_PB", + "svg": "jam_reset", + "zone": "FL4018_2" + }, + { + "id": "FL4018_2_TPE1", + "svg": "photoeye", + "zone": "FL4018_2" + }, + { + "id": "FL4018_2_VFD", + "svg": "conveyor", + "zone": "FL4018_2" + }, + { + "id": "FL4018_3CH_FPE1", + "svg": "photoeye", + "zone": "FL4018_3C" + }, + { + "id": "FL4020_1CH_FPE1", + "svg": "photoeye", + "zone": "FL4020_1C" + }, + { + "id": "FL4020_2_BCN1", + "svg": "beacon", + "zone": "FL4020_2" + }, + { + "id": "FL4020_2_BCN2", + "svg": "beacon", + "zone": "FL4020_2" + }, + { + "id": "FL4020_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL4020_2" + }, + { + "id": "FL4020_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL4020_2" + }, + { + "id": "FL4020_2_JR2_PB", + "svg": "jam_reset", + "zone": "FL4020_2" + }, + { + "id": "FL4020_2_TPE1", + "svg": "photoeye", + "zone": "FL4020_2" + }, + { + "id": "FL4020_2_VFD", + "svg": "conveyor", + "zone": "FL4020_2" + }, + { + "id": "FL4020_3CH_FPE1", + "svg": "photoeye", + "zone": "FL4020_3C" + }, + { + "id": "FL4024_1CH_FPE1", + "svg": "photoeye", + "zone": "FL4024_1C" + }, + { + "id": "FL4024_2_BCN1", + "svg": "beacon", + "zone": "FL4024_2" + }, + { + "id": "FL4024_2_BCN2", + "svg": "beacon", + "zone": "FL4024_2" + }, + { + "id": "FL4024_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL4024_2" + }, + { + "id": "FL4024_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL4024_2" + }, + { + "id": "FL4024_2_JR2_PB", + "svg": "jam_reset", + "zone": "FL4024_2" + }, + { + "id": "FL4024_2_TPE1", + "svg": "photoeye", + "zone": "FL4024_2" + }, + { + "id": "FL4024_2_VFD", + "svg": "conveyor", + "zone": "FL4024_2" + }, + { + "id": "FL4024_3CH_FPE1", + "svg": "photoeye", + "zone": "FL4024_3C" + }, + { + "id": "FL4030_1CH_FPE1", + "svg": "photoeye", + "zone": "FL4030_1C" + }, + { + "id": "FL4030_2_BCN1", + "svg": "beacon", + "zone": "FL4030_2" + }, + { + "id": "FL4030_2_BCN2", + "svg": "beacon", + "zone": "FL4030_2" + }, + { + "id": "FL4030_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL4030_2" + }, + { + "id": "FL4030_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL4030_2" + }, + { + "id": "FL4030_2_JR2_PB", + "svg": "jam_reset", + "zone": "FL4030_2" + }, + { + "id": "FL4030_2_TPE1", + "svg": "photoeye", + "zone": "FL4030_2" + }, + { + "id": "FL4030_2_VFD", + "svg": "conveyor", + "zone": "FL4030_2" + }, + { + "id": "FL4030_3CH_FPE1", + "svg": "photoeye", + "zone": "FL4030_3C" + }, + { + "id": "FL4032_1CH_FPE1", + "svg": "photoeye", + "zone": "FL4032_1C" + }, + { + "id": "FL4032_2_BCN1", + "svg": "beacon", + "zone": "FL4032_2" + }, + { + "id": "FL4032_2_BCN2", + "svg": "beacon", + "zone": "FL4032_2" + }, + { + "id": "FL4032_2_DPM1", + "svg": "dpm", + "zone": "FL4032_2" + }, + { + "id": "FL4032_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL4032_2" + }, + { + "id": "FL4032_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL4032_2" + }, + { + "id": "FL4032_2_JR2_PB", + "svg": "jam_reset", + "zone": "FL4032_2" + }, + { + "id": "FL4032_2_TPE1", + "svg": "photoeye", + "zone": "FL4032_2" + }, + { + "id": "FL4032_2_VFD", + "svg": "conveyor", + "zone": "FL4032_2" + }, + { + "id": "FL4032_3CH_FPE1", + "svg": "photoeye", + "zone": "FL4032_3C" + }, + { + "id": "FL4042_1CH_FPE1", + "svg": "photoeye", + "zone": "FL4042_1C" + }, + { + "id": "FL4042_2_BCN1", + "svg": "beacon", + "zone": "FL4042_2" + }, + { + "id": "FL4042_2_BCN2", + "svg": "beacon", + "zone": "FL4042_2" + }, + { + "id": "FL4042_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL4042_2" + }, + { + "id": "FL4042_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL4042_2" + }, + { + "id": "FL4042_2_JR2_PB", + "svg": "jam_reset", + "zone": "FL4042_2" + }, + { + "id": "FL4042_2_TPE1", + "svg": "photoeye", + "zone": "FL4042_2" + }, + { + "id": "FL4042_2_VFD", + "svg": "conveyor", + "zone": "FL4042_2" + }, + { + "id": "FL4042_3CH_FPE1", + "svg": "photoeye", + "zone": "FL4042_3C" + }, + { + "id": "FL4044_1CH_FPE1", + "svg": "photoeye", + "zone": "FL4044_1C" + }, + { + "id": "FL4044_2_BCN1", + "svg": "beacon", + "zone": "FL4044_2" + }, + { + "id": "FL4044_2_BCN2", + "svg": "beacon", + "zone": "FL4044_2" + }, + { + "id": "FL4044_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL4044_2" + }, + { + "id": "FL4044_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL4044_2" + }, + { + "id": "FL4044_2_JR2_PB", + "svg": "jam_reset", + "zone": "FL4044_2" + }, + { + "id": "FL4044_2_TPE1", + "svg": "photoeye", + "zone": "FL4044_2" + }, + { + "id": "FL4044_2_VFD", + "svg": "conveyor", + "zone": "FL4044_2" + }, + { + "id": "FL4044_3CH_FPE1", + "svg": "photoeye", + "zone": "FL4044_3C" + }, + { + "id": "FL4048_1CH_FPE1", + "svg": "photoeye", + "zone": "FL4048_1C" + }, + { + "id": "FL4048_2_BCN1", + "svg": "beacon", + "zone": "FL4048_2" + }, + { + "id": "FL4048_2_BCN2", + "svg": "beacon", + "zone": "FL4048_2" + }, + { + "id": "FL4048_2_FIOH1", + "svg": "fio_sio_fioh", + "zone": "FL4048_2" + }, + { + "id": "FL4048_2_JR1_PB", + "svg": "jam_reset", + "zone": "FL4048_2" + }, + { + "id": "FL4048_2_JR2_PB", + "svg": "jam_reset", + "zone": "FL4048_2" + }, + { + "id": "FL4048_2_TPE1", + "svg": "photoeye", + "zone": "FL4048_2" + }, + { + "id": "FL4048_2_VFD", + "svg": "conveyor", + "zone": "FL4048_2" + }, + { + "id": "FL4048_3CH_FPE1", + "svg": "photoeye", + "zone": "FL4048_3C" + }, + { + "id": "JP4108_1CH_BCN1", + "svg": "beacon", + "zone": "JP4108_1C" + }, + { + "id": "JP4108_1CH_FIOH1", + "svg": "fio_sio_fioh", + "zone": "JP4108_1C" + }, + { + "id": "JP4108_1CH_FPE1", + "svg": "photoeye", + "zone": "JP4108_1C" + }, + { + "id": "JP4108_1CH_FPE2", + "svg": "photoeye", + "zone": "JP4108_1C" + }, + { + "id": "JP4108_1CH_JR1_PB", + "svg": "jam_reset", + "zone": "JP4108_1C" + }, + { + "id": "S014015_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014015_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014017_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014017_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014017_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014019_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014019_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014019_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014021_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014021_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014023_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014023_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014025_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014025_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014027_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014027_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014029_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014029_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014029_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014031_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014031_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014031_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014033_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014033_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014039_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014039_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014041_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014041_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014041_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014043_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014043_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014043_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014045_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014045_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014047_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014047_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014049_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014049_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014051_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014051_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014052_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014052_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014052_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014052_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014052_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014052_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014053_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014053_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014053_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014054_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014054_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S014054_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014054_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014054_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014054_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014054_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014054_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014055_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014055_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014055_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014056_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014056_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014056_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014056_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014056_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014056_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014056_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014057_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014057_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014058_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014058_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S014058_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014058_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014058_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014058_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014058_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014059_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014059_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014060_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014060_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014060_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014060_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014060_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014060_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014061_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014061_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014062_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014062_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S014062_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014062_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014062_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014062_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014062_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014063_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014063_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014064_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014064_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014064_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014064_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014064_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014064_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014065_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014065_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014065_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014066_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014066_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S014066_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014066_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014066_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014066_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014066_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014066_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014067_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014067_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014067_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014068_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014068_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014068_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014068_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014068_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014068_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014068_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014069_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014069_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014070_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014070_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S014070_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014070_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014070_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014070_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014070_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014071_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014071_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014072_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014072_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014072_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014072_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014072_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014072_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014073_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014073_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014074_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014074_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S014074_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014074_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014074_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014074_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014074_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014075_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014075_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014076_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014076_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014076_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014076_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014076_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014076_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014077_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014077_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014077_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014078_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014078_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S014078_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014078_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014078_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014078_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014078_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014078_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014079_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014079_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014079_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014080_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014080_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014080_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014080_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014080_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014080_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014080_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014081_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014081_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014082_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014082_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S014082_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014082_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014082_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014082_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014082_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014083_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014083_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014084_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014084_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014084_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014084_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014084_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014084_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014085_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014085_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014086_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014086_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S014086_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014086_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014086_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014086_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014086_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014087_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014087_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014088_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014088_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014088_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014088_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014088_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014088_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014089_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014089_EN1_PB", + "svg": "chute_enable", + "zone": "OTHER" + }, + { + "id": "S014089_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014090_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014090_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S014090_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014090_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014090_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014090_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014090_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014090_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014092_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014092_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014092_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014092_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014092_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014092_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014092_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014094_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014094_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S014094_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014094_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014094_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014094_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014094_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014096_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014096_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014096_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014096_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014096_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014096_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014098_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014098_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S014098_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014098_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014098_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014098_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014098_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014100_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014100_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014100_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014100_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014100_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014100_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014102_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014102_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S014102_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014102_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014102_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014102_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014102_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014102_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014104_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014104_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014104_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014104_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014104_JR1_PB", + "svg": "jam_reset", + "zone": "OTHER" + }, + { + "id": "S014104_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014104_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "S014106_BCN1", + "svg": "beacon", + "zone": "OTHER" + }, + { + "id": "S014106_FIOH1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "S014106_FPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014106_FPE2", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014106_JPE1", + "svg": "photoeye", + "zone": "OTHER" + }, + { + "id": "S014106_PR1_PB", + "svg": "package_release", + "zone": "OTHER" + }, + { + "id": "S014106_SOL1", + "svg": "solenoid", + "zone": "OTHER" + }, + { + "id": "VSD_DPM1_FIOM1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM1_FIOM2", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM1_FIOM3", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM1_FIOM4", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM1_FIOM5", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM1_FIOM6", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM1_FIOM7", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM1_FIOM8", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM2_FIOM1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM2_FIOM2", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM2_FIOM3", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM2_FIOM4", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM2_FIOM5", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM2_FIOM6", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM2_FIOM7", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM2_FIOM8", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM3_FIOM1", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM3_FIOM2", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM3_FIOM3", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM3_FIOM4", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM3_FIOM5", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_DPM3_FIOM6", + "svg": "fio_sio_fioh", + "zone": "OTHER" + }, + { + "id": "VSD_PS1", + "svg": "pressure_sensor", + "zone": "OTHER" + }, + { + "id": "PDP27", + "svg": "pdp", + "zone": "PDP27" + }, + { + "id": "PDP27_FIOH1", + "svg": "fio_sio_fioh", + "zone": "PDP27" + }, + { + "id": "PDP27_FIOM1", + "svg": "fio_sio_fioh", + "zone": "PDP27" + } + ] +} \ No newline at end of file diff --git a/svelte-app/static/projectes/manifest.json b/svelte-app/static/projectes/manifest.json new file mode 100644 index 0000000..c4a1c4a --- /dev/null +++ b/svelte-app/static/projectes/manifest.json @@ -0,0 +1,102 @@ +[ + { + "name": "CDW5", + "mcms": [ + { + "name": "MCM01", + "excelPath": "/projectes/CDW5/excel/CDW5_SYSDL_MCM01.xlsx", + "pdfPath": null + }, + { + "name": "MCM02", + "excelPath": "/projectes/CDW5/excel/CDW5_SYSDL_MCM02.xlsx", + "pdfPath": null + }, + { + "name": "MCM03", + "excelPath": "/projectes/CDW5/excel/CDW5_SYSDL_MCM03.xlsx", + "pdfPath": null + }, + { + "name": "MCM04", + "excelPath": "/projectes/CDW5/excel/CDW5_SYSDL_MCM04.xlsx", + "pdfPath": null + }, + { + "name": "MCM05", + "excelPath": "/projectes/CDW5/excel/CDW5_SYSDL_MCM05.xlsx", + "pdfPath": null + }, + { + "name": "MCM06", + "excelPath": "/projectes/CDW5/excel/CDW5_SYSDL_MCM06.xlsx", + "pdfPath": null + }, + { + "name": "MCM07", + "excelPath": "/projectes/CDW5/excel/CDW5_SYSDL_MCM07.xlsx", + "pdfPath": null + }, + { + "name": "MCM08", + "excelPath": "/projectes/CDW5/excel/CDW5_SYSDL_MCM08.xlsx", + "pdfPath": null + }, + { + "name": "MCM09", + "excelPath": "/projectes/CDW5/excel/CDW5_SYSDL_MCM09 Non Con PH1.xlsx", + "pdfPath": "/projectes/CDW5/pdf/CDW5_SYSDL_MCM09 Non Con PH1-SYSDL.pdf" + }, + { + "name": "MCM10", + "excelPath": "/projectes/CDW5/excel/CDW5_SYSDL_MCM10.xlsx", + "pdfPath": null + }, + { + "name": "MCM11", + "excelPath": "/projectes/CDW5/excel/CDW5_SYSDL_MCM11.xlsx", + "pdfPath": null + }, + { + "name": "MCM12", + "excelPath": "/projectes/CDW5/excel/CDW5_SYSDL_MCM12.xlsx", + "pdfPath": null + }, + { + "name": "MCM13", + "excelPath": "/projectes/CDW5/excel/CDW5_SYSDL_MCM13.xlsx", + "pdfPath": null + }, + { + "name": "MCM14", + "excelPath": "/projectes/CDW5/excel/CDW5_SYSDL_MCM14.xlsx", + "pdfPath": null + }, + { + "name": "MCM15", + "excelPath": "/projectes/CDW5/excel/CDW5_SYSDL_MCM15.xlsx", + "pdfPath": null + }, + { + "name": "MCM16", + "excelPath": "/projectes/CDW5/excel/CDW5_SYSDL_MCM16.xlsx", + "pdfPath": null + }, + { + "name": "MCM17", + "excelPath": "/projectes/CDW5/excel/CDW5_SYSDL_MCM17.xlsx", + "pdfPath": null + }, + { + "name": "MCM18", + "excelPath": "/projectes/CDW5/excel/CDW5_SYSDL_MCM18.xlsx", + "pdfPath": null + }, + { + "name": "MCM19", + "excelPath": "/projectes/CDW5/excel/CDW5_SYSDL_MCM19.xlsx", + "pdfPath": null + } + ] + } +] \ No newline at end of file diff --git a/svelte-app/static/robots.txt b/svelte-app/static/robots.txt new file mode 100644 index 0000000..b6dd667 --- /dev/null +++ b/svelte-app/static/robots.txt @@ -0,0 +1,3 @@ +# allow crawling everything by default +User-agent: * +Disallow: diff --git a/svelte-app/static/symbols/beacon.svg b/svelte-app/static/symbols/beacon.svg new file mode 100644 index 0000000..4d45299 Binary files /dev/null and b/svelte-app/static/symbols/beacon.svg differ diff --git a/svelte-app/static/symbols/chute.svg b/svelte-app/static/symbols/chute.svg new file mode 100644 index 0000000..96117c4 Binary files /dev/null and b/svelte-app/static/symbols/chute.svg differ diff --git a/svelte-app/static/symbols/chute_enable.svg b/svelte-app/static/symbols/chute_enable.svg new file mode 100644 index 0000000..a56515c Binary files /dev/null and b/svelte-app/static/symbols/chute_enable.svg differ diff --git a/svelte-app/static/symbols/conveyor.svg b/svelte-app/static/symbols/conveyor.svg new file mode 100644 index 0000000..9c8e36b Binary files /dev/null and b/svelte-app/static/symbols/conveyor.svg differ diff --git a/svelte-app/static/symbols/curved_chute_30.svg b/svelte-app/static/symbols/curved_chute_30.svg new file mode 100644 index 0000000..f445eab Binary files /dev/null and b/svelte-app/static/symbols/curved_chute_30.svg differ diff --git a/svelte-app/static/symbols/curved_chute_45.svg b/svelte-app/static/symbols/curved_chute_45.svg new file mode 100644 index 0000000..600e74e Binary files /dev/null and b/svelte-app/static/symbols/curved_chute_45.svg differ diff --git a/svelte-app/static/symbols/curved_chute_60.svg b/svelte-app/static/symbols/curved_chute_60.svg new file mode 100644 index 0000000..db87314 Binary files /dev/null and b/svelte-app/static/symbols/curved_chute_60.svg differ diff --git a/svelte-app/static/symbols/curved_chute_90.svg b/svelte-app/static/symbols/curved_chute_90.svg new file mode 100644 index 0000000..f69e0ad Binary files /dev/null and b/svelte-app/static/symbols/curved_chute_90.svg differ diff --git a/svelte-app/static/symbols/curved_conveyor_30.svg b/svelte-app/static/symbols/curved_conveyor_30.svg new file mode 100644 index 0000000..91f5a8b Binary files /dev/null and b/svelte-app/static/symbols/curved_conveyor_30.svg differ diff --git a/svelte-app/static/symbols/curved_conveyor_45.svg b/svelte-app/static/symbols/curved_conveyor_45.svg new file mode 100644 index 0000000..3bddf9d Binary files /dev/null and b/svelte-app/static/symbols/curved_conveyor_45.svg differ diff --git a/svelte-app/static/symbols/curved_conveyor_60.svg b/svelte-app/static/symbols/curved_conveyor_60.svg new file mode 100644 index 0000000..b3a916a Binary files /dev/null and b/svelte-app/static/symbols/curved_conveyor_60.svg differ diff --git a/svelte-app/static/symbols/curved_conveyor_90.svg b/svelte-app/static/symbols/curved_conveyor_90.svg new file mode 100644 index 0000000..2d42d52 Binary files /dev/null and b/svelte-app/static/symbols/curved_conveyor_90.svg differ diff --git a/svelte-app/static/symbols/diverter.svg b/svelte-app/static/symbols/diverter.svg new file mode 100644 index 0000000..81eeb8f Binary files /dev/null and b/svelte-app/static/symbols/diverter.svg differ diff --git a/svelte-app/static/symbols/dpm.svg b/svelte-app/static/symbols/dpm.svg new file mode 100644 index 0000000..c4f5f1b Binary files /dev/null and b/svelte-app/static/symbols/dpm.svg differ diff --git a/svelte-app/static/symbols/epc.svg b/svelte-app/static/symbols/epc.svg new file mode 100644 index 0000000..e16fc48 Binary files /dev/null and b/svelte-app/static/symbols/epc.svg differ diff --git a/svelte-app/static/symbols/epc_icon.svg b/svelte-app/static/symbols/epc_icon.svg new file mode 100644 index 0000000..ad26655 Binary files /dev/null and b/svelte-app/static/symbols/epc_icon.svg differ diff --git a/svelte-app/static/symbols/extendo.svg b/svelte-app/static/symbols/extendo.svg new file mode 100644 index 0000000..a2b79ff Binary files /dev/null and b/svelte-app/static/symbols/extendo.svg differ diff --git a/svelte-app/static/symbols/fio_sio_fioh.svg b/svelte-app/static/symbols/fio_sio_fioh.svg new file mode 100644 index 0000000..47d7ad4 Binary files /dev/null and b/svelte-app/static/symbols/fio_sio_fioh.svg differ diff --git a/svelte-app/static/symbols/induction.svg b/svelte-app/static/symbols/induction.svg new file mode 100644 index 0000000..ffbb691 Binary files /dev/null and b/svelte-app/static/symbols/induction.svg differ diff --git a/svelte-app/static/symbols/ip_camera.svg b/svelte-app/static/symbols/ip_camera.svg new file mode 100644 index 0000000..2263980 Binary files /dev/null and b/svelte-app/static/symbols/ip_camera.svg differ diff --git a/svelte-app/static/symbols/jam_reset.svg b/svelte-app/static/symbols/jam_reset.svg new file mode 100644 index 0000000..d64020b Binary files /dev/null and b/svelte-app/static/symbols/jam_reset.svg differ diff --git a/svelte-app/static/symbols/mcm.svg b/svelte-app/static/symbols/mcm.svg new file mode 100644 index 0000000..586c7ee Binary files /dev/null and b/svelte-app/static/symbols/mcm.svg differ diff --git a/svelte-app/static/symbols/package_release.svg b/svelte-app/static/symbols/package_release.svg new file mode 100644 index 0000000..b16dbe8 Binary files /dev/null and b/svelte-app/static/symbols/package_release.svg differ diff --git a/svelte-app/static/symbols/pdp.svg b/svelte-app/static/symbols/pdp.svg new file mode 100644 index 0000000..bcdb0dd Binary files /dev/null and b/svelte-app/static/symbols/pdp.svg differ diff --git a/svelte-app/static/symbols/photoeye.svg b/svelte-app/static/symbols/photoeye.svg new file mode 100644 index 0000000..bc86afe Binary files /dev/null and b/svelte-app/static/symbols/photoeye.svg differ diff --git a/svelte-app/static/symbols/pressure_sensor.svg b/svelte-app/static/symbols/pressure_sensor.svg new file mode 100644 index 0000000..d7927eb Binary files /dev/null and b/svelte-app/static/symbols/pressure_sensor.svg differ diff --git a/svelte-app/static/symbols/solenoid.svg b/svelte-app/static/symbols/solenoid.svg new file mode 100644 index 0000000..259dbd2 Binary files /dev/null and b/svelte-app/static/symbols/solenoid.svg differ diff --git a/svelte-app/static/symbols/spur.svg b/svelte-app/static/symbols/spur.svg new file mode 100644 index 0000000..48c40b6 Binary files /dev/null and b/svelte-app/static/symbols/spur.svg differ diff --git a/svelte-app/static/symbols/start.svg b/svelte-app/static/symbols/start.svg new file mode 100644 index 0000000..17b622b Binary files /dev/null and b/svelte-app/static/symbols/start.svg differ diff --git a/svelte-app/static/symbols/start_stop.svg b/svelte-app/static/symbols/start_stop.svg new file mode 100644 index 0000000..b9f6f3a Binary files /dev/null and b/svelte-app/static/symbols/start_stop.svg differ diff --git a/svelte-app/static/symbols/tipper.svg b/svelte-app/static/symbols/tipper.svg new file mode 100644 index 0000000..416b1db Binary files /dev/null and b/svelte-app/static/symbols/tipper.svg differ diff --git a/svelte-app/svelte.config.js b/svelte-app/svelte.config.js new file mode 100644 index 0000000..67bf2dd --- /dev/null +++ b/svelte-app/svelte.config.js @@ -0,0 +1,12 @@ +import adapter from '@sveltejs/adapter-static'; + +/** @type {import('@sveltejs/kit').Config} */ +const config = { + kit: { + adapter: adapter({ + fallback: '200.html' + }) + } +}; + +export default config; diff --git a/svelte-app/tsconfig.json b/svelte-app/tsconfig.json new file mode 100644 index 0000000..2c2ed3c --- /dev/null +++ b/svelte-app/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "./.svelte-kit/tsconfig.json", + "compilerOptions": { + "rewriteRelativeImportExtensions": true, + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "moduleResolution": "bundler" + } + // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias + // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files + // + // To make changes to top-level options such as include and exclude, we recommend extending + // the generated config; see https://svelte.dev/docs/kit/configuration#typescript +} diff --git a/svelte-app/vite.config.ts b/svelte-app/vite.config.ts new file mode 100644 index 0000000..defa8ab --- /dev/null +++ b/svelte-app/vite.config.ts @@ -0,0 +1,253 @@ +import { sveltekit } from '@sveltejs/kit/vite'; +import { defineConfig } from 'vite'; +import fs from 'fs'; +import path from 'path'; +import XLSX from 'xlsx'; + +function generateProjectManifest() { + const staticDir = path.resolve('static'); + const projectesDir = path.join(staticDir, 'projectes'); + + if (!fs.existsSync(projectesDir)) return; + + const MCM_REGEX = /SYSDL[_ ]+(MCM\d+)/i; + const projects: { name: string; mcms: { name: string; excelPath: string; pdfPath: string | null }[] }[] = []; + + for (const projectName of fs.readdirSync(projectesDir)) { + const projectDir = path.join(projectesDir, projectName); + if (!fs.statSync(projectDir).isDirectory()) continue; + + const excelDir = path.join(projectDir, 'excel'); + const pdfDir = path.join(projectDir, 'pdf'); + const mcmMap = new Map(); + + if (fs.existsSync(excelDir)) { + for (const f of fs.readdirSync(excelDir)) { + if (!f.endsWith('.xlsx')) continue; + const match = f.match(MCM_REGEX); + if (!match) continue; + const mcm = match[1]; + mcmMap.set(mcm, { + excelPath: `/projectes/${projectName}/excel/${f}`, + pdfPath: null, + }); + } + } + + if (fs.existsSync(pdfDir)) { + for (const f of fs.readdirSync(pdfDir)) { + if (!f.endsWith('.pdf')) continue; + const match = f.match(MCM_REGEX); + if (!match) continue; + const mcm = match[1]; + if (mcmMap.has(mcm)) { + mcmMap.get(mcm)!.pdfPath = `/projectes/${projectName}/pdf/${f}`; + } else { + mcmMap.set(mcm, { + excelPath: '', + pdfPath: `/projectes/${projectName}/pdf/${f}`, + }); + } + } + } + + if (mcmMap.size > 0) { + const mcms = [...mcmMap.entries()] + .map(([name, paths]) => ({ name, ...paths })) + .sort((a, b) => a.name.localeCompare(b.name)); + projects.push({ name: projectName, mcms }); + } + } + + projects.sort((a, b) => a.name.localeCompare(b.name)); + fs.writeFileSync( + path.join(projectesDir, 'manifest.json'), + JSON.stringify(projects, null, 2) + ); +} + +/** Classify a device name to a symbol ID, or null to skip */ +function classifyDevice(dev: string): string | null { + // Skip + if (/ENSH|ENW/.test(dev)) return null; + if (/VFD_DI?SC/.test(dev)) return null; + if (/_LT$/.test(dev)) return null; + if (/EPC\d+_\d+/.test(dev)) return null; + if (/BCN\d+_[HBWG]$/.test(dev)) return null; + if (dev === 'SPARE') return null; + if (/ESTOP/.test(dev)) return null; + if (/SCALE/.test(dev)) return null; + if (/_STO\d*$/.test(dev)) return null; + if (/PRX\d*$/.test(dev)) return null; + if (/LRPE/.test(dev)) return null; + + // Match + if (/EPC\d*$/.test(dev)) return 'epc'; + if (/[TLJF]PE\d*$/.test(dev)) return 'photoeye'; + if (/BDS\d+_[RS]$/.test(dev)) return 'photoeye'; + if (/TS\d+_[RS]$/.test(dev)) return 'photoeye'; + if (/JR\d*_PB$/.test(dev)) return 'jam_reset'; + if (/SS\d+_S[TP]*PB$/.test(dev)) return 'start_stop'; + if (/S\d+_PB$/.test(dev) && !/^SS/.test(dev)) return 'start'; + if (/EN\d+_PB$/.test(dev)) return 'chute_enable'; + if (/PR\d+_PB$/.test(dev)) return 'package_release'; + if (/SOL\d*$/.test(dev)) return 'solenoid'; + if (/DIV\d+_LS/.test(dev)) return 'diverter'; + if (/BCN\d*$/.test(dev) || /BCN\d+_[AR]$/.test(dev)) return 'beacon'; + if (/^PDP\d+_CB/.test(dev)) return 'pdp'; + if (/^PDP\d+_PMM/.test(dev)) return 'pdp'; + if (/FIO[HM]?\d*$/.test(dev) || /SIO\d*$/.test(dev)) return 'fio_sio_fioh'; + if (/PS\d*$/.test(dev) && !/^PS\d/.test(dev)) return 'pressure_sensor'; + + return null; +} + +/** Extract zone prefix from device name, e.g. "NCP1_1_TPE1" -> "NCP1_1" */ +function extractZone(dev: string): string { + // PDP devices: PDP04_CB1 -> PDP04 + const pdpM = dev.match(/^(PDP\d+)/); + if (pdpM) return pdpM[1]; + // Standard: ZONE_NUM_REST + const m = dev.match(/^([A-Z]+\d*_\d+[A-Z]?)/); + return m ? m[1] : 'OTHER'; +} + +function generateDeviceManifest() { + const projectesDir = path.resolve('..', 'projectes'); + const staticDir = path.resolve('static', 'projectes'); + if (!fs.existsSync(projectesDir)) return; + + const manifest: Record = {}; + + for (const projectName of fs.readdirSync(projectesDir)) { + const projectDir = path.join(projectesDir, projectName); + if (!fs.statSync(projectDir).isDirectory()) continue; + const excelDir = path.join(projectDir, 'excel'); + if (!fs.existsSync(excelDir)) continue; + + // Find device IO file and IP addresses file + const files = fs.readdirSync(excelDir).filter(f => f.endsWith('.xlsx')); + const ioFile = files.find(f => /Devices?\s*IO/i.test(f)); + const ipFile = files.find(f => /IP\s*Address/i.test(f)); + if (!ioFile) continue; + + const ioWb = XLSX.readFile(path.join(excelDir, ioFile)); + + // Also load IP addresses for VFDs, FIOMs, DPMs + let ipWb: XLSX.WorkBook | null = null; + if (ipFile) { + try { ipWb = XLSX.readFile(path.join(excelDir, ipFile)); } catch {} + } + + for (const sheetName of ioWb.SheetNames) { + const mcmMatch = sheetName.match(/^(MCM\d+)$/); + if (!mcmMatch) continue; + const mcm = mcmMatch[1]; + + const seen = new Set(); + const devices: { id: string; svg: string; zone: string }[] = []; + + // Parse IO sheet + const ws = ioWb.Sheets[sheetName]; + const rows = XLSX.utils.sheet_to_json(ws, { header: 1, defval: '' }) as string[][]; + + // Extract FIO/SIO controllers from column 0 (controller name) + for (let i = 1; i < rows.length; i++) { + const ctrl = String(rows[i][0] || '').trim(); + if (!ctrl || seen.has(ctrl)) continue; + if (/FIO|SIO/i.test(ctrl)) { + seen.add(ctrl); + devices.push({ id: ctrl, svg: 'fio_sio_fioh', zone: extractZone(ctrl) }); + } + } + + // Extract assigned devices from column 3 + for (let i = 1; i < rows.length; i++) { + const dev = String(rows[i][3] || '').trim(); + if (!dev || seen.has(dev)) continue; + seen.add(dev); + + const svg = classifyDevice(dev); + if (!svg) continue; + + const zone = extractZone(dev); + + // Consolidate PDP: only add once per PDP number + if (svg === 'pdp') { + const pdpId = zone; // e.g. PDP04 + if (devices.some(d => d.id === pdpId)) continue; + devices.push({ id: pdpId, svg, zone }); + continue; + } + + // Consolidate beacon: BCN1_A + BCN1_H -> one BCN1 per zone + if (svg === 'beacon') { + const bcnBase = dev.replace(/_[ARHBWG]$/, ''); + if (devices.some(d => d.id === bcnBase)) continue; + devices.push({ id: bcnBase, svg, zone }); + continue; + } + + devices.push({ id: dev, svg, zone }); + } + + // Parse IP/network sheet for VFDs, FIOMs, DPMs + if (ipWb) { + const ipSheets = ipWb.SheetNames.filter(s => s.toUpperCase().includes(mcm)); + for (const ipSheet of ipSheets) { + const ipWs = ipWb.Sheets[ipSheet]; + const ipRows = XLSX.utils.sheet_to_json(ipWs, { header: 1, defval: '' }) as string[][]; + for (const row of ipRows) { + for (const cell of row) { + const val = String(cell || '').trim(); + if (!val || val.startsWith('11.') || seen.has(val)) continue; + if (/^[A-Z]+\d*_\d+.*VFD$/.test(val)) { + seen.add(val); + devices.push({ id: val, svg: 'conveyor', zone: extractZone(val) }); + } else if (/^[A-Z]+\d*_\d+.*FIOM\d*$/.test(val)) { + seen.add(val); + devices.push({ id: val, svg: 'fio_sio_fioh', zone: extractZone(val) }); + } else if (/^[A-Z]+\d*_\d+.*DPM\d*$/.test(val) && !/_P\d+$/.test(val)) { + seen.add(val); + devices.push({ id: val, svg: 'dpm', zone: extractZone(val) }); + } + } + } + } + } + + // Sort by zone then id + devices.sort((a, b) => a.zone.localeCompare(b.zone) || a.id.localeCompare(b.id)); + manifest[mcm] = devices; + } + } + + fs.writeFileSync( + path.join(staticDir, 'devices-manifest.json'), + JSON.stringify(manifest, null, 2) + ); +} + +export default defineConfig({ + plugins: [ + { + name: 'generate-project-manifest', + buildStart() { + generateProjectManifest(); + generateDeviceManifest(); + }, + configureServer(server) { + generateProjectManifest(); + generateDeviceManifest(); + // Re-generate on file changes in static/projectes + server.watcher.add(path.resolve('static/projectes')); + server.watcher.on('add', (p) => { + if (p.includes('projectes') && !p.endsWith('manifest.json')) { + generateProjectManifest(); + } + }); + }, + }, + sveltekit(), + ], +}); diff --git a/symbols/chute.svg b/symbols/chute.svg new file mode 100644 index 0000000..613f959 Binary files /dev/null and b/symbols/chute.svg differ diff --git a/symbols/chute_enable.svg b/symbols/chute_enable.svg new file mode 100644 index 0000000..36df543 Binary files /dev/null and b/symbols/chute_enable.svg differ diff --git a/symbols/conveyor.svg b/symbols/conveyor.svg new file mode 100644 index 0000000..dcd5fee Binary files /dev/null and b/symbols/conveyor.svg differ diff --git a/symbols/diverter.svg b/symbols/diverter.svg new file mode 100644 index 0000000..0d218b7 Binary files /dev/null and b/symbols/diverter.svg differ diff --git a/symbols/dpm.svg b/symbols/dpm.svg new file mode 100644 index 0000000..30f09a4 Binary files /dev/null and b/symbols/dpm.svg differ diff --git a/symbols/epc.svg b/symbols/epc.svg new file mode 100644 index 0000000..26dfad1 Binary files /dev/null and b/symbols/epc.svg differ diff --git a/symbols/extendo.svg b/symbols/extendo.svg new file mode 100644 index 0000000..b17dfa6 Binary files /dev/null and b/symbols/extendo.svg differ diff --git a/symbols/fio_sio_fioh.svg b/symbols/fio_sio_fioh.svg new file mode 100644 index 0000000..30dd751 Binary files /dev/null and b/symbols/fio_sio_fioh.svg differ diff --git a/symbols/induction.svg b/symbols/induction.svg new file mode 100644 index 0000000..5e04709 Binary files /dev/null and b/symbols/induction.svg differ diff --git a/symbols/ip_camera.svg b/symbols/ip_camera.svg new file mode 100644 index 0000000..2263980 Binary files /dev/null and b/symbols/ip_camera.svg differ diff --git a/symbols/jam_reset.svg b/symbols/jam_reset.svg new file mode 100644 index 0000000..b3601f3 Binary files /dev/null and b/symbols/jam_reset.svg differ diff --git a/symbols/mcm.svg b/symbols/mcm.svg new file mode 100644 index 0000000..e4c1b91 Binary files /dev/null and b/symbols/mcm.svg differ diff --git a/symbols/package_release.svg b/symbols/package_release.svg new file mode 100644 index 0000000..cb4769b Binary files /dev/null and b/symbols/package_release.svg differ diff --git a/symbols/photoeye.svg b/symbols/photoeye.svg new file mode 100644 index 0000000..c8fb4e8 Binary files /dev/null and b/symbols/photoeye.svg differ diff --git a/symbols/pmm.svg b/symbols/pmm.svg new file mode 100644 index 0000000..945162f Binary files /dev/null and b/symbols/pmm.svg differ diff --git a/symbols/pressure_sensor.svg b/symbols/pressure_sensor.svg new file mode 100644 index 0000000..e02597e Binary files /dev/null and b/symbols/pressure_sensor.svg differ diff --git a/symbols/start.svg b/symbols/start.svg new file mode 100644 index 0000000..26dea36 Binary files /dev/null and b/symbols/start.svg differ diff --git a/symbols/start_stop.svg b/symbols/start_stop.svg new file mode 100644 index 0000000..ec823e1 Binary files /dev/null and b/symbols/start_stop.svg differ diff --git a/symbols/tipper.svg b/symbols/tipper.svg new file mode 100644 index 0000000..ae51e45 Binary files /dev/null and b/symbols/tipper.svg differ diff --git a/update_scada_names.py b/update_scada_names.py new file mode 100644 index 0000000..a312b33 --- /dev/null +++ b/update_scada_names.py @@ -0,0 +1,1974 @@ +import json +import re +import os +import sys + +# Base Paths +BASE_OLD = r"C:\Users\beka.makharadze\Desktop\MTN6\OldDetailedViews" +BASE_NEW = r"C:\Program Files\Inductive Automation\Ignition\data\projects\MTN6_SCADA\com.inductiveautomation.perspective\views\DetailedView" + +# Binding Configurations +STATE_BINDING_TEMPLATE = { + "binding": { + "type": "tag", + "config": { + "mode": "indirect", + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/State", + "references": { + "0": "{this.%s.name}", + "fc": "{session.custom.fc}" + }, + "fallbackDelay": 2.5 + }, + "transforms": [ + { + "expression": "coalesce({value},999)", + "type": "expression" + }, + { + "inputType": "scalar", + "outputType": "scalar", + "mappings": [ + {"input": 0, "output": "Closed"}, + {"input": 1, "output": "Actuated"}, + {"input": 2, "output": "Communication Faulted"}, + {"input": 3, "output": "Running In Maintenance Mode"}, + {"input": 4, "output": "Disabled"}, + {"input": 5, "output": "Disconnected"}, + {"input": 6, "output": "Stopped"}, + {"input": 7, "output": "Enabled Not Running"}, + {"input": 8, "output": "Encoder Fault"}, + {"input": 9, "output": "Energy Management"}, + {"input": 10, "output": "ESTOP Was Actuated"}, + {"input": 11, "output": "EStopped"}, + {"input": 12, "output": "EStopped Locally"}, + {"input": 13, "output": "Extended Faulted"}, + {"input": 14, "output": "Full"}, + {"input": 15, "output": "Gaylord Start Pressed"}, + {"input": 16, "output": "Jam Fault"}, + {"input": 17, "output": "Jammed"}, + {"input": 18, "output": "Loading Allowed"}, + {"input": 19, "output": "Loading Not Allowed"}, + {"input": 20, "output": "Low Air Pressure Fault Was Present"}, + {"input": 21, "output": "Maintenance Mode"}, + {"input": 22, "output": "Stopped In Maintenance Mode"}, + {"input": 23, "output": "Motor Faulted"}, + {"input": 24, "output": "Motor Was Faulted"}, + {"input": 25, "output": "Normal"}, + {"input": 26, "output": "Off Inactive"}, + {"input": 27, "output": "Open"}, + {"input": 28, "output": "PLC Ready To Run"}, + {"input": 29, "output": "Package Release Pressed"}, + {"input": 30, "output": "Power Branch Was Faulted"}, + {"input": 31, "output": "Pressed"}, + {"input": 32, "output": "Ready To Receive"}, + {"input": 33, "output": "Running"}, + {"input": 34, "output": "Started"}, + {"input": 35, "output": "Stopped"}, + {"input": 36, "output": "System Started"}, + {"input": 37, "output": "Unknown"}, + {"input": 38, "output": "VFD Fault"}, + {"input": 39, "output": "In Power Saving Mode"}, + {"input": 40, "output": "Jogging In Maintenance Mode"}, + {"input": 41, "output": "VFD Reset Required"}, + {"input": 42, "output": "Jam Reset Push Button Pressed"}, + {"input": 43, "output": "Start Push Button Pressed"}, + {"input": 44, "output": "Stop Push Button Pressed"}, + {"input": 45, "output": "No Container"}, + {"input": 46, "output": "Ready To Be Enabled"}, + {"input": 47, "output": "Half Full"}, + {"input": 48, "output": "Enabled"}, + {"input": 49, "output": "Tipper Faulted"}, + {"input": 50, "output": "Diverted"}, + {"input": 51, "output": "Retracted"}, + {"input": 52, "output": "Diverting"}, + {"input": 53, "output": "Network Node Faulted (Field IO)"}, + {"input": 66, "output": "Inch And Store Mode"} + ], + "fallback": "Unknown", + "type": "map" + } + ] + } +} + +PRIORITY_BINDING_TEMPLATE = { + "binding": { + "type": "tag", + "config": { + "mode": "indirect", + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/Priority", + "references": { + "0": "{this.%s.name}", + "fc": "{session.custom.fc}" + }, + "fallbackDelay": 2.5 + }, + "transforms": [ + { + "expression": "coalesce({value},0)", + "type": "expression" + }, + { + "inputType": "scalar", + "outputType": "scalar", + "mappings": [ + {"input": 0, "output": "No Active Alarms"}, + {"input": 1, "output": "High"}, + {"input": 2, "output": "Medium"}, + {"input": 3, "output": "Low"}, + {"input": 4, "output": "Diagnostic"} + ], + "fallback": "No Active Alarms", + "type": "map" + } + ] + } +} + +COLOR_BINDING_TEMPLATE = { + "binding": { + "type": "tag", + "config": { + "mode": "indirect", + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/Color", + "references": { + "0": "{this.%s.name}", + "fc": "{session.custom.fc}" + }, + "fallbackDelay": 2.5 + }, + "transforms": [ + { + "expression": "coalesce({value},999)", + "type": "expression" + }, + { + "inputType": "scalar", + "outputType": "color", + "mappings": [ + {"input": 0, "output": "#C2C2C2"}, + {"input": 1, "output": "#FF0000"}, + {"input": 2, "output": "#FFA500"}, + {"input": 3, "output": "#0008FF"}, + {"input": 4, "output": "#00FF00"}, + {"input": 5, "output": "#FFF700"}, + {"input": 6, "output": "#87CEEB"}, + {"input": 7, "output": "#90EE90"}, + {"input": 8, "output": "#964B00"}, + {"input": 9, "output": "#FFFFFF"}, + {"input": 10, "output": "#000000"}, + {"input": 11, "output": "#8B0000"}, + {"input": 12, "output": "#808080"}, + {"input": 13, "output": "#8B8000"}, + {"input": 14, "output": "#006400"}, + {"input": 15, "output": "#90FF90"}, + {"input": 16, "output": "#00008B"}, + {"input": 17, "output": "#FF7276"}, + {"input": 18, "output": "#556B2F"}, + {"input": 19, "output": "#B43434"}, + {"input": 20, "output": "#4682B4"}, + {"input": 21, "output": "#FFD700"} + ], + "fallback": "#000000", + "type": "map" + } + ] + } +} + +INDUCTION_COLOR_SCRIPT = """ if value is None: + return '#000000' + + # Priority-based status determination (lower number = higher priority) + active_status = 'default' + + # Highest-priority checks first + if value.get('awInduction', 1) == 0: + active_status = 'inactive' + elif value.get('Common_Error', False): + active_status = 'common_error' + elif value.get('In_Test_Mode', False): + active_status = 'test_mode' + elif value.get('Jammed', False): + active_status = 'jammed' + elif value.get('Energy_Saving', False): + active_status = 'energy_saving' + elif value.get('Running', False): + active_status = 'running' + elif value.get('Starting', False) or value.get('Stopping', False): + active_status = 'transitional' + elif value.get('Stopped', False) or value.get('Disabled', False): + active_status = 'inactive' + elif value.get('Blocked', False): + active_status = 'blocked' + + # Dictionary-based switch (cleaner than elif chain) + color_map = { + 'common_error': '#FF0000', + 'inactive': '#C2C2C2', + 'blocked': '#C2C2C2', + 'running': '#00FF00', + 'transitional': '#90FF90', + 'jammed': '#FF8C00', + 'energy_saving': '#87CEFA', + 'test_mode': '#AC5F00', + 'default': '#000000' + } + + # Return color using dictionary lookup (switch-like behavior) + return color_map.get(active_status, '#000000')""" + +INDUCTION_PRIORITY_SCRIPT = """ + data = dict(value) if value else {} + + if data.get('Common_Error') or data.get('Jammed') : + return "High" + elif data.get('Blocked'): + return "High" + elif data.get('Test_Mode'): + return "Medium" + elif data.get('Disabled'): + return "Low" + elif data.get('Starting') or data.get('Stopping') or data.get('Running') or data.get('Energy_Saving') or data.get('Stopped') or data.get('Disabled') == False: + return "No Active Alarms" + return "No Active Alarms" """ + +INDUCTION_STATE_SCRIPT = """ data = dict(value) if value else {} + + if data.get('awInduction', 1) == 0: + return 'Not Running' + elif data.get('Common_Error'): + return 'Common Error' + elif data.get('Jammed'): + return 'Jammed' + elif data.get('Test_Mode'): + return 'In Test Mode' + elif data.get('Energy_Saving'): + return 'Energy Saving' + elif data.get('Running'): + return 'Running' + elif data.get('Starting'): + return 'Starting' + elif data.get('Stopping'): + return 'Stopping' + elif data.get('Stopped'): + return 'Stopped' + elif data.get('Disabled') == False: + return 'Enabled' + elif data.get('Blocked'): + return 'Blocked' + else: + return 'Not Running' """ + +CONVEYOR_COLOR_SCRIPT = """ if value is None: + return '#000000' + + # Determine conveyor status (priority order) + active_status = 'default' + + if value.get('E_Stop', False): + active_status = 'e_stop' + elif value.get('Technical_Fault', False): + active_status = 'technical_fault' + elif value.get('Operational_Fault', False): + active_status = 'operational_fault' + elif value.get('Dieback', False): + active_status = 'dieback' + elif value.get('Running', False): + active_status = 'running' + elif value.get('Energy_Saving', False): + active_status = 'energy_saving' + elif value.get('Stopped', False): + active_status = 'stopped' + elif value.get('awConveyor', 1) == 0: + active_status = 'stopped' + + # Color mapping + color_map = { + 'e_stop': '#FF0000', # Red — Emergency stop + 'technical_fault': '#FF0000', # Red— Technical fault + 'operational_fault': '#FF8C00',# Orange — Operational fault + 'dieback': '#90FF90', # Light green — Dieback (line full) + 'running': '#00FF00', # Green — Running + 'energy_saving': '#87CEFA', # Light blue — Energy saving + 'stopped': '#C2C2C2', # Dark gray — Inactive + 'default': '#000000' # Black — Default + } + + return color_map.get(active_status, '#000000')""" + +CONVEYOR_PRIORITY_SCRIPT = """ data = dict(value) if value else {} + + if data.get('E_Stop') or data.get('Technical_Fault') or data.get('Operational_Fault'): + return "High" + elif data.get('Running') or data.get('Energy_Saving') or data.get('Stopped') or data.get('Dieback'): + return "No Active Alarms" + + return "No Active Alarms" """ + +CONVEYOR_STATE_SCRIPT = """ + data = dict(value) if value else {} + + if data.get('E_Stop'): + return 'Estopped' + elif data.get('Technical_Fault'): + return 'Faulted' + elif data.get('Operational_Fault'): + return 'Jammed' + elif data.get('Dieback'): + return 'Dieback' + elif data.get('Running'): + return 'Running' + elif data.get('Energy_Saving'): + return 'Energy Saving' + elif data.get('Stopped'): + return 'Stopped' + elif data.get('awConveyor', 1) == 0: + return 'Not Running' + else: + return 'Not Running'""" + +# Chute scripts for Chute_{nnn} elements +CHUTE_COLOR_SCRIPT = """ data = dict(value) if value else {} + + if data.get("Jammed"): + return "#FFA500" + elif data.get("Full"): + return "#0000FF" + elif data.get("Half_Full"): + return "#FFFF00" + elif data.get("No_Container"): + return "#C2C2C2" + elif data.get("Blocked_By_Operator"): + return "#C2C2C2" + elif data.get("Blocked_From_SCADA"): + return "#C2C2C2" + elif data.get("Disabled") == False: + return "#00FF00" + else: + return "#000000" """ + +CHUTE_PRIORITY_SCRIPT = """ data = dict(value) if value else {} + + if data.get("Jammed"): + return "High" + elif data.get("Full") or data.get("Half_Full") or data.get("No_Container") or data.get("Blocked_From_SCADA") or data.get("Blocked_By_Operator"): + return "Low" + elif data.get("Disabled") == False: + return "No Active Alarms" + + return "No Active Alarms" """ + +CHUTE_STATE_SCRIPT = """ data = dict(value) if value else {} + + if data.get("Jammed"): + return "Jammed" + elif data.get("Full"): + return "Full" + elif data.get("Half_Full"): + return "Half Full" + elif data.get("No_Container"): + return "No Container" + elif data.get("Blocked_By_Operator"): + return "Blocked By Operator" + elif data.get("Blocked_From_SCADA"): + return "Blocked From SCADA" + elif data.get("Disabled") == False: + return "Enabled" + else: + return "Inactive" """ + +# Sorter scripts +SORTER_COLOR_SCRIPT = """ if value is None: + return '#000000' + + active_status = 'default' + + if value.get('awInduction', 1) == 0: + active_status = 'inactive' + elif value.get('Common_Error', False): + active_status = 'common_error' + elif value.get('In_Test_Mode', False): + active_status = 'test_mode' + elif value.get('Jammed', False): + active_status = 'jammed' + elif value.get('Energy_Saving', False): + active_status = 'energy_saving' + elif value.get('Running', False): + active_status = 'running' + elif value.get('Starting', False) or value.get('Stopping', False): + active_status = 'transitional' + elif value.get('Stopped', False) or value.get('Disabled', False): + active_status = 'inactive' + elif value.get('Blocked', False): + active_status = 'blocked' + + color_map = { + 'common_error': '#FF0000', + 'inactive': '#C2C2C2', + 'blocked': '#C2C2C2', + 'running': '#00FF00', + 'transitional': '#90FF90', + 'jammed': '#FF8C00', + 'energy_saving': '#87CEFA', + 'test_mode': '#AC5F00', + 'default': '#000000' + } + + return color_map.get(active_status, '#000000') """ + +SORTER_PRIORITY_SCRIPT = """ data = dict(value) if value else {} + + if data.get('Common_Error'): + return "High" + elif data.get('Test_Mode') or data.get('Discharge_Test_Mode') or data.get('Lamp_Test_Mode'): + return "Medium" + elif data.get('Disabled'): + return "Low" + elif data.get('Starting') or data.get('Stopping') or data.get('Running') or data.get('Energy_Saving') or data.get('Stopped'): + return "No Active Alarms" + + return "No Active Alarms" """ + +SORTER_STATE_SCRIPT = """ data = dict(value) if value else {} + + if data.get('wSorter', 1) == 0: + return 'Not Running' + + if data.get('Common_Error'): + return 'Common Error' + elif data.get('Test_Mode'): + return 'Test Mode' + elif data.get('Discharge_Test_Mode'): + return 'Discharge Test Mode' + elif data.get('Lamp_Test_Mode'): + return 'Lamp Test Mode' + elif data.get('Energy_Saving'): + return 'Energy Saving' + elif data.get('Running'): + return 'Running' + elif data.get('Starting'): + return 'Starting' + elif data.get('Stopping'): + return 'Stopping' + elif data.get('Stopped'): + return 'Stopped' + elif data.get('Disabled'): + return 'Disabled' + elif data.get('Blocked'): + return 'Blocked' + + return 'Not Running' """ + +INDUCTION_BINDING_TEMPLATE = { + "binding": { + "type": "tag", + "config": { + "mode": "indirect", + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}", + "references": { + "0": "{this.%s.name}", + "fc": "{session.custom.fc}" + }, + "fallbackDelay": 2.5 + }, + "transforms": [ + { + "code": "", + "type": "script" + } + ] + } +} + +DISPLAY_BINDING_TEMPLATE = { + "binding": { + "type": "expr", + "config": { + "expression": "" + }, + "transforms": [ + { + "inputType": "scalar", + "outputType": "scalar", + "mappings": [ + { + "input": False, + "output": "none" + } + ], + "fallback": "block", + "type": "map" + } + ] + } +} + +INDUCTION_DATA = { + "Induction_0": { + "d": "m 0,0 h 53.89 l -0.88,0.88 13.47,13.47 32.13,-32.13 -14.08,-14.08 -12.87,12.87 h -71.71 z", + "transform": "translate(1411.47,855.11) translate(-0.01,-0.05)" + }, + "Induction_1": { + "d": "m 0,0 h 53.89 l -0.88,0.88 13.47,13.47 32.13,-32.13 -14.08,-14.08 -12.87,12.87 h -71.71 z", + "transform": "translate(1413.24,784.98) translate(-0.01,-0.05)" + }, + "Induction_14": { + "d": "m 0,0 h -53.89 l 0.88,0.88 -13.47,13.47 -32.13,-32.13 14.08,-14.08 12.87,12.87 h 71.71 z", + "transform": "translate(1600.55,564.1) translate(-0.01,-0.05)" + }, + "Induction_17": { + "d": "m 0,0 h -53.89 l 0.88,0.88 -13.47,13.47 -32.13,-32.13 14.08,-14.08 12.87,12.87 h 71.71 z", + "transform": "translate(1487.17,484.1) translate(-0.01,-0.05)" + } +} + +def extract_mcm_id(folder_name): + """ + Extract MCM ID from folder name (e.g., "MCM04" from "MCM04 North Bulk Inbound...") + Uses first 5 characters or extracts MCM pattern (MCM followed by digits) + """ + # Try to extract MCM pattern (MCM followed by digits) + match = re.search(r'(MCM\d+)', folder_name, re.IGNORECASE) + if match: + return match.group(1).upper() + + # Fallback: use first 5 characters + return folder_name[:5].upper() + +def load_json(filepath): + try: + with open(filepath, 'r', encoding='utf-8') as f: + return json.load(f) + except Exception as e: + print(f"Error decoding JSON from {filepath}: {e}") + return None + +def build_tag_map(view_data): + tag_map = {} + + def traverse(node): + if isinstance(node, dict): + name = node.get('meta', {}).get('name') + tag_props = node.get('props', {}).get('params', {}).get('tagProps') + + if tag_props and isinstance(tag_props, list) and len(tag_props) > 0: + tag_path = tag_props[0] + if tag_path: + # Map based on the tag path leaf name (ID extraction) + # e.g. System/MCM01/Conveyor/VFD/UL10_2_VFD1 -> UL10_2_VFD1 + parts = tag_path.split('/') + if parts: + key = parts[-1] + tag_map[key] = { + 'name': tag_path, + } + + if name and tag_props and isinstance(tag_props, list) and len(tag_props) > 0: + tag_map[name] = { + 'name': tag_props[0], + } + + if 'root' in node: + traverse(node['root']) + if 'children' in node and isinstance(node['children'], list): + for child in node['children']: + traverse(child) + elif isinstance(node, list): + for item in node: + traverse(item) + + traverse(view_data) + return tag_map + +def find_svg_component(node): + if isinstance(node, dict): + if node.get('type') == 'ia.shapes.svg': + return node + + # Check children + if 'children' in node and isinstance(node['children'], list): + for child in node['children']: + found = find_svg_component(child) + if found: return found + + # Check root + if 'root' in node: + found = find_svg_component(node['root']) + if found: return found + + return None + +def update_scada_svg(scada_view_data, tag_map, system_name): + count_updated = 0 + prop_config = {} + + # scada_view_data is now a DICT (Full View) + svg_comp = find_svg_component(scada_view_data) + + if svg_comp: + # Clear existing propConfig to remove old/nested bindings + svg_comp['propConfig'] = {} + prop_config = svg_comp['propConfig'] + + if 'props' in svg_comp and 'elements' in svg_comp['props']: + traverse_elements(svg_comp['props']['elements'], "props.elements", prop_config, tag_map, is_top_level=True, system_name=system_name) + count_updated = len(prop_config) // 3 + + return count_updated + +def traverse_elements(elements, current_path, prop_config, tag_map, is_top_level, system_name): + for i, el in enumerate(elements): + element_path = f"{current_path}[{i}]" + + # Cleanup nested properties if they exist + if not is_top_level: + for key in ['state', 'priority', 'color']: + if key in el: + del el[key] + + # Only process bindings for TOP LEVEL items + if is_top_level: + # Skip defs + if el.get('type') == 'defs' or el.get('name') == 'defs1': + continue + + # Update Name Logic + name = el.get('name') + el_id = el.get('id') + identifier = el_id if el_id else name + + if identifier: + # Photoeye + if re.search(r'_(TPE|PE|JPE|FPE|LPE|SPAU)\d*$', identifier): + target_name = identifier + new_name = f"System/{system_name}/PE/{target_name}" + if el.get('name') != new_name: + el['name'] = new_name + + # EXTENDO + elif re.search(r'_EX\d+$', identifier): + target_name = identifier + new_name = f"System/{system_name}/Conveyor/EXTENDO/{target_name}" + if el.get('name') != new_name: + el['name'] = new_name + + # VFD (handles both _VFD and _VFD1, _VFD2, etc.) + elif re.search(r'_VFD\d*$', identifier): + target_name = identifier + new_name = f"System/{system_name}/Conveyor/VFD/{target_name}" + if el.get('name') != new_name: + el['name'] = new_name + + # Chute (Chute_001, Chute_002, etc.) + elif re.search(r'^Chute_\d+$', identifier): + target_name = identifier + new_name = f"System/SMC/Chute/{target_name}" + if el.get('name') != new_name: + el['name'] = new_name + + # Sorter (any element with "sorter" in name/id) + elif 'sorter' in identifier.lower(): + new_name = "System/SMC/Sorter" + if el.get('name') != new_name: + el['name'] = new_name + + # FIOH (Field IO Hub) - _FIOH1, _FIOH2, etc. + elif re.search(r'_FIOH\d+$', identifier): + target_name = identifier + new_name = f"System/{system_name}/IO_BLOCK/HUB/{target_name}" + if el.get('name') != new_name: + el['name'] = new_name + + # SIO (Serial IO) - _SIO1, _SIO2, etc. + elif re.search(r'_SIO\d+$', identifier): + target_name = identifier + new_name = f"System/{system_name}/IO_BLOCK/SIO/{target_name}" + if el.get('name') != new_name: + el['name'] = new_name + + # Tag Map + else: + lookup_name = identifier + if identifier.endswith('_Assembly'): + lookup_name = identifier[:-9] + + if lookup_name in tag_map: + tag_data = tag_map[lookup_name] + # Skip tag map update for PEs and VFDs (they're handled explicitly above) + if not re.search(r'_(TPE|PE|JPE|FPE|LPE|SPAU)\d*$', identifier) and not re.search(r'_VFD\d*$', identifier): + new_tag = tag_data['name'] + if el.get('name') != new_tag: + el['name'] = new_tag + + # Refresh name variable to get the updated value (after tag_map updates) + name = el.get('name') + + # Determine check name (strip _Assembly for pattern matching) + check_name = identifier + if identifier.endswith('_Assembly'): + check_name = identifier[:-9] + + # Convert Induction elements from use to path - DISABLED (keep original structure) + # if identifier in INDUCTION_DATA: + # el['type'] = 'path' + # el['d'] = INDUCTION_DATA[identifier]['d'] + # el['transform'] = INDUCTION_DATA[identifier]['transform'] + # el['fill'] = {"paint": "#ffffff", "opacity": "1"} + # el['stroke'] = {"paint": "#000000", "dasharray": "none", "opacity": "1", "width": "1"} + # for key in ['x', 'y', 'href']: + # if key in el: + # del key[key] + + # 2. Add Bindings based on Type + + # Helper to check pattern in both check_name (ID) and name + def matches_pattern(pattern): + """Check if pattern matches in either check_name or name""" + return re.search(pattern, check_name) or (name and re.search(pattern, name)) + + def name_contains(substring): + """Check if name contains a substring""" + return name and substring in name + + def name_or_id_startswith(prefix): + """Check if name or ID starts with prefix""" + name_part = name.split('/')[-1] if name else "" + return check_name.startswith(prefix) or name_part.startswith(prefix) + + def name_or_id_endswith(suffix): + """Check if name or ID ends with suffix""" + return check_name.endswith(suffix) or (name and name.endswith(suffix)) + + # Helper to create binding + def create_binding(template, subpath=""): + b = json.loads(json.dumps(template)) + ref_key = list(b['binding']['config']['references'].keys())[0] + b['binding']['config']['references'][ref_key] = b['binding']['config']['references'][ref_key] % element_path + + # If subpath provided, insert it into tagPath + # Template tagPath: "[{fc}_SCADA_TAG_PROVIDER]{0}/State" (or /Color, /Priority) + # We want to replace "/State" with "/Subpath/State" if subpath is "Start" + if subpath: + tp = b['binding']['config']['tagPath'] + # Split by last slash + base, suffix = tp.rsplit('/', 1) + b['binding']['config']['tagPath'] = f"{base}/{subpath}/{suffix}" + + return b + + # Special FL_{n}CH_PE1 elements (starts with FL and ends with _1CH_PE1, _2CH_PE1, _3CH_PE1, etc.) + # Check both ID and name + is_fl_ch_pe1 = name_or_id_startswith('FL') and matches_pattern(r'_\d+CH_PE1$') + if is_fl_ch_pe1: + # Generate name2 by adding "J" before "PE1" in the name + name2 = name.replace('_PE1', '_JPE1') if name else "" + el['name2'] = name2 + el['full'] = False + el['jammed'] = False + + # Full binding (uses name) + prop_config[f"{element_path}.full"] = { + "binding": { + "type": "tag", + "config": { + "mode": "indirect", + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/Full", + "references": { + "0": f"{{this.{element_path}.name}}", + "fc": "{session.custom.fc}" + }, + "fallbackDelay": 2.5 + }, + "transforms": [ + { + "expression": "coalesce({value},false)", + "type": "expression" + } + ] + } + } + + # Jammed binding (uses name2) + prop_config[f"{element_path}.jammed"] = { + "binding": { + "type": "tag", + "config": { + "mode": "indirect", + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/Jammed", + "references": { + "0": f"{{this.{element_path}.name2}}", + "fc": "{session.custom.fc}" + }, + "fallbackDelay": 2.5 + }, + "transforms": [ + { + "expression": "coalesce({value},false)", + "type": "expression" + } + ] + } + } + + # Color tag binding with /Full path and expression transform + color_expr = f'''if( + !isGood({{value}}), + "#000000", + if({{this.{element_path}.full}} && {{this.{element_path}.jammed}}, + "#FFA500", + if({{this.{element_path}.jammed}}, + "#FFA500", + if({{this.{element_path}.full}} , + "#0008FF", + "#FFFFFF" + ) + ) + ) +)''' + prop_config[f"{element_path}.color"] = { + "binding": { + "type": "tag", + "config": { + "mode": "indirect", + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/Full", + "references": { + "0": f"{{this.{element_path}.name}}", + "fc": "{session.custom.fc}" + }, + "fallbackDelay": 2.5 + }, + "transforms": [ + { + "expression": color_expr, + "type": "expression" + } + ] + } + } + + # Priority tag binding with /Full path and expression transform + priority_expr = f'''if( + !isGood({{value}}), + "No Active Alarms", + if({{this.{element_path}.full}} && {{this.{element_path}.jammed}}, + "High", + if({{this.{element_path}.jammed}}, + "High", + if({{this.{element_path}.full}} , + "Low", + "No Active Alarms" + ) + ) + ) +)''' + prop_config[f"{element_path}.priority"] = { + "binding": { + "type": "tag", + "config": { + "mode": "indirect", + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/Full", + "references": { + "0": f"{{this.{element_path}.name}}", + "fc": "{session.custom.fc}" + }, + "fallbackDelay": 2.5 + }, + "transforms": [ + { + "expression": priority_expr, + "type": "expression" + } + ] + } + } + + # State tag binding with /Full path and expression transform + state_expr = f'''if( + !isGood({{value}}), + "Unknown", + if({{this.{element_path}.full}} && {{this.{element_path}.jammed}}, + "Jammed and Full", + if({{this.{element_path}.jammed}}, + "Jammed", + if({{this.{element_path}.full}} , + "Full", + "Normal" + ) + ) + ) +)''' + prop_config[f"{element_path}.state"] = { + "binding": { + "type": "tag", + "config": { + "mode": "indirect", + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/Full", + "references": { + "0": f"{{this.{element_path}.name}}", + "fc": "{session.custom.fc}" + }, + "fallbackDelay": 2.5 + }, + "transforms": [ + { + "expression": state_expr, + "type": "expression" + } + ] + } + } + + el['state'] = "value" + el['priority'] = "value" + el['color'] = "value" + + elif matches_pattern(r'_SS\d+$'): + # Special SS Buttons: Start/Stop properties + + # Start + prop_config[f"{element_path}.start_state"] = create_binding(STATE_BINDING_TEMPLATE, "Start") + prop_config[f"{element_path}.start_priority"] = create_binding(PRIORITY_BINDING_TEMPLATE, "Start") + prop_config[f"{element_path}.start_color"] = create_binding(COLOR_BINDING_TEMPLATE, "Start") + + # Stop + prop_config[f"{element_path}.stop_state"] = create_binding(STATE_BINDING_TEMPLATE, "Stop") + prop_config[f"{element_path}.stop_priority"] = create_binding(PRIORITY_BINDING_TEMPLATE, "Stop") + prop_config[f"{element_path}.stop_color"] = create_binding(COLOR_BINDING_TEMPLATE, "Stop") + + add_display_binding("show_buttons", is_ss=True) + + el['start_state'] = "Normal" + el['start_priority'] = "No Active Alarms" + el['start_color'] = "#006400" + el['stop_state'] = "Normal" + el['stop_priority'] = "No Active Alarms" + el['stop_color'] = "#B43434" + + elif matches_pattern(r'_S\d+$') and name_contains('/DIV/'): + # S buttons with DIV in name -> /Enable/ tagPath + prop_config[f"{element_path}.state"] = create_binding(STATE_BINDING_TEMPLATE, "Enable") + prop_config[f"{element_path}.priority"] = create_binding(PRIORITY_BINDING_TEMPLATE, "Enable") + prop_config[f"{element_path}.color"] = create_binding(COLOR_BINDING_TEMPLATE, "Enable") + + el['state'] = "value" + el['priority'] = "value" + el['color'] = "value" + + elif matches_pattern(r'_S\d+$'): + # S buttons -> /Start/ tagPath + prop_config[f"{element_path}.state"] = create_binding(STATE_BINDING_TEMPLATE, "Start") + prop_config[f"{element_path}.priority"] = create_binding(PRIORITY_BINDING_TEMPLATE, "Start") + prop_config[f"{element_path}.color"] = create_binding(COLOR_BINDING_TEMPLATE, "Start") + add_display_binding("show_buttons", include_color=True) + + el['state'] = "value" + el['priority'] = "value" + el['color'] = "value" + + elif matches_pattern(r'_JR\d+$') and name_contains('Chute_JR'): + # JR buttons with Chute_JR in name -> /Chute_JR/ tagPath + prop_config[f"{element_path}.state"] = create_binding(STATE_BINDING_TEMPLATE, "Chute_JR") + prop_config[f"{element_path}.priority"] = create_binding(PRIORITY_BINDING_TEMPLATE, "Chute_JR") + prop_config[f"{element_path}.color"] = create_binding(COLOR_BINDING_TEMPLATE, "Chute_JR") + add_display_binding("show_buttons", include_color=True) + + el['state'] = "value" + el['priority'] = "value" + el['color'] = "value" + + elif matches_pattern(r'_JR\d+$'): + # JR buttons -> /JR/ tagPath + prop_config[f"{element_path}.state"] = create_binding(STATE_BINDING_TEMPLATE, "JR") + prop_config[f"{element_path}.priority"] = create_binding(PRIORITY_BINDING_TEMPLATE, "JR") + prop_config[f"{element_path}.color"] = create_binding(COLOR_BINDING_TEMPLATE, "JR") + add_display_binding("show_buttons", include_color=True) + + el['state'] = "value" + el['priority'] = "value" + el['color'] = "value" + + elif matches_pattern(r'_GS\d+$') and name_contains('/Chute/NC/'): + # GS buttons with /Chute/NC/ in name -> /Enable/ tagPath + prop_config[f"{element_path}.state"] = create_binding(STATE_BINDING_TEMPLATE, "Enable") + prop_config[f"{element_path}.priority"] = create_binding(PRIORITY_BINDING_TEMPLATE, "Enable") + prop_config[f"{element_path}.color"] = create_binding(COLOR_BINDING_TEMPLATE, "Enable") + + el['state'] = "value" + el['priority'] = "value" + el['color'] = "value" + + elif matches_pattern(r'_GS\d+$'): + # GS buttons -> /Commands/bBlockHost1 tagPath with custom mappings + + # Color binding + prop_config[f"{element_path}.color"] = { + "binding": { + "type": "tag", + "config": { + "mode": "indirect", + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/Commands/bBlockHost1", + "references": { + "0": f"{{this.{element_path}.name}}", + "fc": "{session.custom.fc}" + }, + "fallbackDelay": 2.5 + }, + "transforms": [ + { + "expression": "coalesce({value},\"err\")", + "type": "expression" + }, + { + "inputType": "scalar", + "outputType": "color", + "mappings": [ + {"input": True, "output": "#00FF00"}, + {"input": False, "output": "#00A700"} + ], + "fallback": "#000000", + "type": "map" + } + ] + } + } + + # Priority binding + prop_config[f"{element_path}.priority"] = { + "binding": { + "type": "tag", + "config": { + "mode": "indirect", + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/Commands/bBlockHost1", + "references": { + "0": f"{{this.{element_path}.name}}", + "fc": "{session.custom.fc}" + }, + "fallbackDelay": 2.5 + }, + "transforms": [ + { + "expression": "coalesce({value},\"err\")", + "type": "expression" + }, + { + "inputType": "scalar", + "outputType": "scalar", + "mappings": [ + {"input": True, "output": "Low"}, + {"input": False, "output": "No Active Alarms"} + ], + "fallback": "No Active Alarms", + "type": "map" + } + ] + } + } + + # State binding + prop_config[f"{element_path}.state"] = { + "binding": { + "type": "tag", + "config": { + "mode": "indirect", + "tagPath": "[{fc}_SCADA_TAG_PROVIDER]{0}/Commands/bBlockHost1", + "references": { + "0": f"{{this.{element_path}.name}}", + "fc": "{session.custom.fc}" + }, + "fallbackDelay": 2.5 + }, + "transforms": [ + { + "expression": "coalesce({value},\"err\")", + "type": "expression" + }, + { + "inputType": "scalar", + "outputType": "scalar", + "mappings": [ + {"input": True, "output": "Enable Pressed"}, + {"input": False, "output": "Enable Not Pressed"} + ], + "fallback": "Unknown", + "type": "map" + } + ] + } + } + + el['state'] = "value" + el['priority'] = "value" + el['color'] = "value" + + elif matches_pattern(r'_PR\d+$'): + # PR buttons -> /PR/ tagPath + prop_config[f"{element_path}.state"] = create_binding(STATE_BINDING_TEMPLATE, "PR") + prop_config[f"{element_path}.priority"] = create_binding(PRIORITY_BINDING_TEMPLATE, "PR") + prop_config[f"{element_path}.color"] = create_binding(COLOR_BINDING_TEMPLATE, "PR") + + el['state'] = "value" + el['priority'] = "value" + el['color'] = "value" + + elif matches_pattern(r'Induction_?\d+$'): + # Induction logic: Script Transforms on Base Tag Path + + # Color + c_bind = json.loads(json.dumps(INDUCTION_BINDING_TEMPLATE)) + ref_key = list(c_bind['binding']['config']['references'].keys())[0] + c_bind['binding']['config']['references'][ref_key] = c_bind['binding']['config']['references'][ref_key] % element_path + c_bind['binding']['transforms'][0]['code'] = INDUCTION_COLOR_SCRIPT + prop_config[f"{element_path}.color"] = c_bind + + # Priority + p_bind = json.loads(json.dumps(INDUCTION_BINDING_TEMPLATE)) + ref_key = list(p_bind['binding']['config']['references'].keys())[0] + p_bind['binding']['config']['references'][ref_key] = p_bind['binding']['config']['references'][ref_key] % element_path + p_bind['binding']['transforms'][0]['code'] = INDUCTION_PRIORITY_SCRIPT + prop_config[f"{element_path}.priority"] = p_bind + + # State + s_bind = json.loads(json.dumps(INDUCTION_BINDING_TEMPLATE)) + ref_key = list(s_bind['binding']['config']['references'].keys())[0] + s_bind['binding']['config']['references'][ref_key] = s_bind['binding']['config']['references'][ref_key] % element_path + s_bind['binding']['transforms'][0]['code'] = INDUCTION_STATE_SCRIPT + prop_config[f"{element_path}.state"] = s_bind + + el['state'] = "value" + el['priority'] = "value" + el['color'] = "value" + + elif (name_contains('/CMC/Conveyors/') or (tag_map.get(check_name) and '/CMC/Conveyors/' in tag_map[check_name]['name'])) and not matches_pattern(r'_(VFD|EX)\d*$'): + # Special Conveyor logic (System/CMC/Conveyors/...) + + # Color + c_bind = json.loads(json.dumps(INDUCTION_BINDING_TEMPLATE)) + ref_key = list(c_bind['binding']['config']['references'].keys())[0] + c_bind['binding']['config']['references'][ref_key] = c_bind['binding']['config']['references'][ref_key] % element_path + c_bind['binding']['transforms'][0]['code'] = CONVEYOR_COLOR_SCRIPT + prop_config[f"{element_path}.color"] = c_bind + + # Priority + p_bind = json.loads(json.dumps(INDUCTION_BINDING_TEMPLATE)) + ref_key = list(p_bind['binding']['config']['references'].keys())[0] + p_bind['binding']['config']['references'][ref_key] = p_bind['binding']['config']['references'][ref_key] % element_path + p_bind['binding']['transforms'][0]['code'] = CONVEYOR_PRIORITY_SCRIPT + prop_config[f"{element_path}.priority"] = p_bind + + # State + s_bind = json.loads(json.dumps(INDUCTION_BINDING_TEMPLATE)) + ref_key = list(s_bind['binding']['config']['references'].keys())[0] + s_bind['binding']['config']['references'][ref_key] = s_bind['binding']['config']['references'][ref_key] % element_path + s_bind['binding']['transforms'][0]['code'] = CONVEYOR_STATE_SCRIPT + prop_config[f"{element_path}.state"] = s_bind + + el['state'] = "value" + el['priority'] = "value" + el['color'] = "value" + + elif el_id and 'CH' in el_id.upper() and name and 'CH' in name.upper() and not re.search(r'_(FPE|JPE|TPE|PE|SPAU|LPE)\d+', el_id) and not re.search(r'^Chute_\d+$', el_id): + # CH elements where both ID and name contain "CH" (but ID has no PE pattern): chute bindings + # Excludes Chute_{nnn} elements which have their own handling + # Uses standard color expression coalesce({value},999) + prop_config[f"{element_path}.state"] = create_binding(STATE_BINDING_TEMPLATE) + prop_config[f"{element_path}.priority"] = create_binding(PRIORITY_BINDING_TEMPLATE) + prop_config[f"{element_path}.color"] = create_binding(COLOR_BINDING_TEMPLATE) + + el['state'] = "value" + el['priority'] = "value" + el['color'] = "value" + + elif el_id and 'CH' in el_id.upper() and name and (re.search(r'_(FPE|JPE|TPE|PE|SPAU|LPE)\d+', name) or '/PE/' in name) and not re.search(r'^Chute_\d+$', el_id): + # CH (Chute) elements with PE-related names + prop_config[f"{element_path}.state"] = create_binding(STATE_BINDING_TEMPLATE) + prop_config[f"{element_path}.priority"] = create_binding(PRIORITY_BINDING_TEMPLATE) + + # If ID also has PE pattern, use coalesce({value},0); otherwise use standard coalesce({value},999) + if re.search(r'_(FPE|JPE|TPE|PE|SPAU|LPE)\d+', el_id): + c_bind = create_binding(COLOR_BINDING_TEMPLATE) + c_bind['binding']['transforms'][0]['expression'] = "coalesce({value},0)" + prop_config[f"{element_path}.color"] = c_bind + else: + prop_config[f"{element_path}.color"] = create_binding(COLOR_BINDING_TEMPLATE) + + el['state'] = "value" + el['priority'] = "value" + el['color'] = "value" + + elif matches_pattern(r'_(TPE|JPE|FPE|PE|SPAU|LPE)\d+$') or matches_pattern(r'_DPM\d+$'): + # PE and DPM: Color expression coalesce({value},0) + prop_config[f"{element_path}.state"] = create_binding(STATE_BINDING_TEMPLATE) + prop_config[f"{element_path}.priority"] = create_binding(PRIORITY_BINDING_TEMPLATE) + + c_bind = create_binding(COLOR_BINDING_TEMPLATE) + c_bind['binding']['transforms'][0]['expression'] = "coalesce({value},0)" + prop_config[f"{element_path}.color"] = c_bind + + el['state'] = "value" + el['priority'] = "value" + el['color'] = "value" + + elif matches_pattern(r'Chute_\d+'): + # Chute elements: Script-based bindings with base tag path (no sub-property) + # Uses INDUCTION_BINDING_TEMPLATE which has tagPath without /State, /Priority, /Color + + # Color + c_bind = json.loads(json.dumps(INDUCTION_BINDING_TEMPLATE)) + ref_key = list(c_bind['binding']['config']['references'].keys())[0] + c_bind['binding']['config']['references'][ref_key] = c_bind['binding']['config']['references'][ref_key] % element_path + c_bind['binding']['transforms'][0]['code'] = CHUTE_COLOR_SCRIPT + prop_config[f"{element_path}.color"] = c_bind + + # Priority + p_bind = json.loads(json.dumps(INDUCTION_BINDING_TEMPLATE)) + ref_key = list(p_bind['binding']['config']['references'].keys())[0] + p_bind['binding']['config']['references'][ref_key] = p_bind['binding']['config']['references'][ref_key] % element_path + p_bind['binding']['transforms'][0]['code'] = CHUTE_PRIORITY_SCRIPT + prop_config[f"{element_path}.priority"] = p_bind + + # State + s_bind = json.loads(json.dumps(INDUCTION_BINDING_TEMPLATE)) + ref_key = list(s_bind['binding']['config']['references'].keys())[0] + s_bind['binding']['config']['references'][ref_key] = s_bind['binding']['config']['references'][ref_key] % element_path + s_bind['binding']['transforms'][0]['code'] = CHUTE_STATE_SCRIPT + prop_config[f"{element_path}.state"] = s_bind + + el['state'] = "value" + el['priority'] = "value" + el['color'] = "value" + + elif check_name and 'sorter' in check_name.lower(): + # Sorter elements: Script-based bindings with base tag path (no sub-property) + + # Color + c_bind = json.loads(json.dumps(INDUCTION_BINDING_TEMPLATE)) + ref_key = list(c_bind['binding']['config']['references'].keys())[0] + c_bind['binding']['config']['references'][ref_key] = c_bind['binding']['config']['references'][ref_key] % element_path + c_bind['binding']['transforms'][0]['code'] = SORTER_COLOR_SCRIPT + prop_config[f"{element_path}.color"] = c_bind + + # Priority + p_bind = json.loads(json.dumps(INDUCTION_BINDING_TEMPLATE)) + ref_key = list(p_bind['binding']['config']['references'].keys())[0] + p_bind['binding']['config']['references'][ref_key] = p_bind['binding']['config']['references'][ref_key] % element_path + p_bind['binding']['transforms'][0]['code'] = SORTER_PRIORITY_SCRIPT + prop_config[f"{element_path}.priority"] = p_bind + + # State + s_bind = json.loads(json.dumps(INDUCTION_BINDING_TEMPLATE)) + ref_key = list(s_bind['binding']['config']['references'].keys())[0] + s_bind['binding']['config']['references'][ref_key] = s_bind['binding']['config']['references'][ref_key] % element_path + s_bind['binding']['transforms'][0]['code'] = SORTER_STATE_SCRIPT + prop_config[f"{element_path}.state"] = s_bind + + el['state'] = "value" + el['priority'] = "value" + el['color'] = "value" + + elif matches_pattern(r'^MCM\d+$'): + # MCM elements: Color expression coalesce({value},0) + prop_config[f"{element_path}.state"] = create_binding(STATE_BINDING_TEMPLATE) + prop_config[f"{element_path}.priority"] = create_binding(PRIORITY_BINDING_TEMPLATE) + + c_bind = create_binding(COLOR_BINDING_TEMPLATE) + c_bind['binding']['transforms'][0]['expression'] = "coalesce({value},0)" + prop_config[f"{element_path}.color"] = c_bind + + el['state'] = "value" + el['priority'] = "value" + el['color'] = "value" + + else: + # Generic Devices + prop_config[f"{element_path}.state"] = create_binding(STATE_BINDING_TEMPLATE) + prop_config[f"{element_path}.priority"] = create_binding(PRIORITY_BINDING_TEMPLATE) + prop_config[f"{element_path}.color"] = create_binding(COLOR_BINDING_TEMPLATE) + + el['state'] = "value" + el['priority'] = "value" + el['color'] = "value" + + # 3. Add Specific Inner Bindings (Style/Paint bindings) AND Display Bindings + # Helper to check if a property path exists in the element + def property_exists(target_subpath): + """Check if the property path exists in the element structure""" + parts = target_subpath.split('.') + current = el + + for part in parts: + # Handle array access like elements[0] + if '[' in part: + key, index_str = part.split('[') + index = int(index_str.rstrip(']')) + if key not in current or not isinstance(current[key], list): + return False + if index >= len(current[key]): + return False + current = current[key][index] + else: + if part not in current: + return False + current = current[part] + + # Check if the final property exists and has a value + return current is not None + + # Define helper to add property binding (only if property exists) + def add_prop_binding(target_subpath, source_prop="color"): + if not property_exists(target_subpath): + return # Skip if property doesn't exist + + binding_key = f"{element_path}.{target_subpath}" + prop_config[binding_key] = { + "binding": { + "type": "property", + "config": { + "path": f"this.{element_path}.{source_prop}" + } + } + } + + # Helper to add display binding + def add_display_binding(flag_name, priority_prop="priority", is_ss=False, include_color=False): + d_bind = json.loads(json.dumps(DISPLAY_BINDING_TEMPLATE)) + + # Construct expression + path_to_elements = f"this.{element_path}" + path_to_priority = f"{{{path_to_elements}.{priority_prop}}}" + path_to_color = f"{{{path_to_elements}.color}}" + path_to_flag = f"{{session.custom.alarm_filter.{flag_name}}}" + + S_STATES = ["ESTOP Was Actuated", "Jammed", "Enabled"] + + if is_ss: + path_to_start_state = f"{{{path_to_elements}.start_state}}" + path_to_stop_color = f"{{{path_to_elements}.stop_color}}" + path_to_start_priority = f"{{{path_to_elements}.start_priority}}" + path_to_stop_priority = f"{{{path_to_elements}.stop_priority}}" + state_checks = " || ".join(f"({path_to_start_state} = '{s}')" for s in S_STATES) + expression = ( + f"{state_checks} || " + f"({path_to_stop_color} = '#FF0000') || " + f"({path_to_start_priority} = 'High' || {path_to_stop_priority} = 'High') || " + f"{path_to_flag}" + ) + elif include_color: + path_to_state = f"{{{path_to_elements}.state}}" + state_checks = " || ".join(f"({path_to_state} = '{s}')" for s in S_STATES) + expression = f"{state_checks} || ({path_to_priority} = 'High') || {path_to_flag}" + else: + expression = f"({path_to_priority} = 'High') || {path_to_flag}" + + d_bind['binding']['config']['expression'] = expression + prop_config[f"{element_path}.style.display"] = d_bind + + # Ensure style object exists and has display property + if 'style' not in el: + el['style'] = {"classes": ""} + el['style']['display'] = "block" + + # Special FL_{n}CH_PE1 elements + if is_fl_ch_pe1: + # Check if ID contains PE pattern + id_has_pe = el_id and re.search(r'PE\d*$', el_id) + + if id_has_pe: + # ID has PE - add fill.paint directly and style.display binding + add_prop_binding("fill.paint") + + # Custom style.display with show_pes + display_expr = f"({{this.{element_path}.priority}} = 'High') || {{session.custom.alarm_filter.show_pes}}" + prop_config[f"{element_path}.style.display"] = { + "binding": { + "type": "expr", + "config": { + "expression": display_expr + }, + "transforms": [ + { + "inputType": "scalar", + "outputType": "scalar", + "mappings": [ + {"input": False, "output": "none"} + ], + "fallback": "block", + "type": "map" + } + ] + } + } + if 'style' not in el: + el['style'] = {"classes": ""} + el['style']['display'] = "block" + else: + # ID has no PE but name has PE - apply VFD-like handling + # Apply fill, stroke to elements[0] and font properties to elements[1] + if 'elements' in el and isinstance(el['elements'], list) and len(el['elements']) > 0: + # Ensure elements[0] has fill.paint BEFORE adding binding + if 'fill' not in el['elements'][0]: + el['elements'][0]['fill'] = {} + el['elements'][0]['fill']['paint'] = "#aaaaaa" + + # Apply stroke to elements[0] + if 'stroke' not in el['elements'][0]: + el['elements'][0]['stroke'] = {} + el['elements'][0]['stroke']['paint'] = "#000000" + el['elements'][0]['stroke']['width'] = "1" + + # Apply font properties to elements[1] + if len(el['elements']) > 1: + el['elements'][1]['fontSize'] = 10 + el['elements'][1]['fontFamily'] = "Arial" + el['elements'][1]['fontWeight'] = "bold" + el['elements'][1]['textAnchor'] = "middle" + + # Add elements[0].fill.paint binding (no style.display binding) + add_prop_binding("elements[0].fill.paint") + + elif matches_pattern(r'_EPC\d+$'): + add_prop_binding("elements[0].stroke.paint") + add_prop_binding("elements[3].fill.paint") + add_display_binding("show_safety") + + elif name and 'Diverter' in name: + # Diverter elements - bind elements[1], [2], [3] fill.paint and custom style.display + add_prop_binding("elements[1].fill.paint") + add_prop_binding("elements[2].fill.paint") + add_prop_binding("elements[3].fill.paint") + + # Custom style.display for element[1]: hide when state is "Diverted", show otherwise + prop_config[f"{element_path}.elements[1].style.display"] = { + "binding": { + "type": "property", + "config": { + "path": f"this.{element_path}.state" + }, + "transforms": [ + { + "inputType": "scalar", + "outputType": "scalar", + "mappings": [ + {"input": "Diverted", "output": "none"} + ], + "fallback": "block", + "type": "map" + } + ] + } + } + + # Custom style.display for element[2]: show when state is "Diverted", hide otherwise + prop_config[f"{element_path}.elements[2].style.display"] = { + "binding": { + "type": "property", + "config": { + "path": f"this.{element_path}.state" + }, + "transforms": [ + { + "inputType": "scalar", + "outputType": "scalar", + "mappings": [ + {"input": "Diverted", "output": "block"} + ], + "fallback": "none", + "type": "map" + } + ] + } + } + + # Custom style.display for element[3]: show when state is "Diverted", hide otherwise + prop_config[f"{element_path}.elements[3].style.display"] = { + "binding": { + "type": "property", + "config": { + "path": f"this.{element_path}.state" + }, + "transforms": [ + { + "inputType": "scalar", + "outputType": "scalar", + "mappings": [ + {"input": "Diverted", "output": "block"} + ], + "fallback": "none", + "type": "map" + } + ] + } + } + + # Main element display binding + add_display_binding("show_gateways") + + # Set default stroke and fill for elements[0] + if 'elements' in el and isinstance(el['elements'], list) and len(el['elements']) > 0: + if 'stroke' not in el['elements'][0]: + el['elements'][0]['stroke'] = {} + el['elements'][0]['stroke']['paint'] = "#000000" + el['elements'][0]['stroke']['width'] = "1" + if 'fill' not in el['elements'][0]: + el['elements'][0]['fill'] = {} + el['elements'][0]['fill']['paint'] = "#aaaaaa" + + elif matches_pattern(r'_S\d+$') and name_contains('/DIV/'): + # S buttons with DIV in name + add_prop_binding("elements[1].fill.paint") + add_display_binding("show_buttons", include_color=True) + + elif matches_pattern(r'_S\d+$'): + add_prop_binding("elements[1].fill.paint") + add_display_binding("show_buttons", include_color=True) + + elif matches_pattern(r'_(JR|GS|PR)\d+$'): + add_prop_binding("elements[1].fill.paint") + add_display_binding("show_buttons") + + elif matches_pattern(r'_SS\d+$'): + add_prop_binding("elements[1].fill.paint", "start_color") + add_prop_binding("elements[2].fill.paint", "stop_color") + add_display_binding("show_buttons", is_ss=True) + + elif matches_pattern(r'_VFD\d*$'): + # VFD pattern: matches _VFD, _VFD1, _VFD2, etc. + # Apply fill, stroke to elements[0] and font properties to elements[1] + if 'elements' in el and isinstance(el['elements'], list) and len(el['elements']) > 0: + # Ensure elements[0] has fill.paint BEFORE adding binding + if 'fill' not in el['elements'][0]: + el['elements'][0]['fill'] = {} + el['elements'][0]['fill']['paint'] = "#aaaaaa" + + # Apply stroke to elements[0] + if 'stroke' not in el['elements'][0]: + el['elements'][0]['stroke'] = {} + el['elements'][0]['stroke']['paint'] = "#000000" + el['elements'][0]['stroke']['width'] = "1" + + # Apply font properties to elements[1] + if len(el['elements']) > 1: + el['elements'][1]['fontSize'] = 10 + el['elements'][1]['fontFamily'] = "Arial" + el['elements'][1]['fontWeight'] = "bold" + el['elements'][1]['textAnchor'] = "middle" + + # Now add bindings after property exists + add_prop_binding("elements[0].fill.paint") + # Display binding removed for VFD + + elif matches_pattern(r'_ST\d+$'): + # ST pattern: matches _ST1, _ST2, etc. in ID or name + # Apply fill, stroke to elements[0] and font properties to elements[1] + if 'elements' in el and isinstance(el['elements'], list) and len(el['elements']) > 0: + # Ensure elements[0] has fill.paint BEFORE adding binding + if 'fill' not in el['elements'][0]: + el['elements'][0]['fill'] = {} + el['elements'][0]['fill']['paint'] = "#aaaaaa" + + # Apply stroke to elements[0] + if 'stroke' not in el['elements'][0]: + el['elements'][0]['stroke'] = {} + el['elements'][0]['stroke']['paint'] = "#000000" + el['elements'][0]['stroke']['width'] = "1" + + # Apply font properties to elements[1] + if len(el['elements']) > 1: + el['elements'][1]['fontSize'] = 10 + el['elements'][1]['fontFamily'] = "Arial" + el['elements'][1]['fontWeight'] = "bold" + el['elements'][1]['textAnchor'] = "middle" + + # Now add bindings after property exists + add_prop_binding("elements[0].fill.paint") + # Display binding removed for ST + + elif matches_pattern(r'_DPM\d+$'): + add_prop_binding("elements[0].fill.paint") + add_display_binding("show_gateways") + + # CH elements where both ID and name contain "CH" (but ID has no PE pattern) + # Excludes Chute_{nnn} elements which have their own handling + elif el_id and 'CH' in el_id.upper() and name and 'CH' in name.upper() and not re.search(r'_(FPE|JPE|TPE|PE|SPAU|LPE)\d+', el_id) and not re.search(r'^Chute_\d+$', el_id): + # Both ID and name contain "CH" but ID has no PE pattern - apply chute bindings like VFD + if 'elements' in el and isinstance(el['elements'], list) and len(el['elements']) > 0: + # Ensure elements[0] has fill.paint BEFORE adding binding + if 'fill' not in el['elements'][0]: + el['elements'][0]['fill'] = {} + if 'paint' not in el['elements'][0]['fill']: + el['elements'][0]['fill']['paint'] = "#aaaaaa" + + # Apply stroke to elements[0] + if 'stroke' not in el['elements'][0]: + el['elements'][0]['stroke'] = {} + el['elements'][0]['stroke']['paint'] = "#000000" + el['elements'][0]['stroke']['width'] = "1" + + # Apply font properties to elements[1] + if len(el['elements']) > 1: + el['elements'][1]['fontSize'] = 10 + el['elements'][1]['fontFamily'] = "Arial" + el['elements'][1]['fontWeight'] = "bold" + el['elements'][1]['textAnchor'] = "middle" + + # Now add bindings after property exists + add_prop_binding("elements[0].fill.paint") + # Display binding removed for CH + + # Special handling for CH (Chute) elements with PE-related names + # Excludes Chute_{nnn} elements which have their own handling + elif el_id and 'CH' in el_id.upper() and name and (re.search(r'_(FPE|JPE|TPE|PE|SPAU|LPE)\d+', name) or '/PE/' in name) and not re.search(r'^Chute_\d+$', el_id): + # ID contains "CH" and name is PE-related (has PE pattern or /PE/ path) + # Apply bindings like VFD + if 'elements' in el and isinstance(el['elements'], list) and len(el['elements']) > 0: + # Ensure elements[0] has fill.paint BEFORE adding binding + if 'fill' not in el['elements'][0]: + el['elements'][0]['fill'] = {} + if 'paint' not in el['elements'][0]['fill']: + el['elements'][0]['fill']['paint'] = "#aaaaaa" + + # Apply stroke to elements[0] + if 'stroke' not in el['elements'][0]: + el['elements'][0]['stroke'] = {} + el['elements'][0]['stroke']['paint'] = "#000000" + el['elements'][0]['stroke']['width'] = "1" + + # Apply font properties to elements[1] + if len(el['elements']) > 1: + el['elements'][1]['fontSize'] = 10 + el['elements'][1]['fontFamily'] = "Arial" + el['elements'][1]['fontWeight'] = "bold" + el['elements'][1]['textAnchor'] = "middle" + + # Now add bindings after property exists + add_prop_binding("elements[0].fill.paint") + + # Determine display binding: + # - If ID also has PE pattern (like FL1018_3CH_PE1), use show_pes + # - If ID has only CH (like PS11_5CH), no display binding + if re.search(r'_(FPE|JPE|TPE|PE|SPAU|LPE)\d+', el_id): + add_display_binding("show_pes") + # else: Display binding removed for CH + + elif matches_pattern(r'_(TPE|JPE|FPE|PE|SPAU|LPE)\d+$') or name_contains('/PE/'): + # PE element (by ID pattern or by name containing /PE/) + add_prop_binding("fill.paint") + add_display_binding("show_pes") + + elif matches_pattern(r'_PMM\d+$'): + add_prop_binding("elements[2].fill.paint") + add_display_binding("show_gateways") + + elif matches_pattern(r'_FIO\d+$'): + add_prop_binding("fill.paint") + add_display_binding("show_fio") + + # Apply stroke directly to element + if 'stroke' not in el: + el['stroke'] = {} + el['stroke']['paint'] = "#000000" + el['stroke']['width'] = "1" + + elif matches_pattern(r'_EX\d+$'): + # Apply fill, stroke to elements[0] and font properties to elements[1] + if 'elements' in el and isinstance(el['elements'], list) and len(el['elements']) > 0: + # Ensure elements[0] has fill.paint BEFORE adding binding + if 'fill' not in el['elements'][0]: + el['elements'][0]['fill'] = {} + el['elements'][0]['fill']['paint'] = "#aaaaaa" + + # Apply stroke to elements[0] + if 'stroke' not in el['elements'][0]: + el['elements'][0]['stroke'] = {} + el['elements'][0]['stroke']['paint'] = "#000000" + el['elements'][0]['stroke']['width'] = "1" + + # Apply font properties to elements[1] + if len(el['elements']) > 1: + el['elements'][1]['fontSize'] = 10 + el['elements'][1]['fontFamily'] = "Arial" + el['elements'][1]['fontWeight'] = "bold" + el['elements'][1]['textAnchor'] = "middle" + + # Now add bindings after property exists + add_prop_binding("elements[0].fill.paint") + # Display binding removed for EX + + elif matches_pattern(r'Induction_?\d+$'): + # Induction pattern: matches Induction_1, Induction1, etc. + # Apply fill, stroke to elements[0] and font properties to elements[1] + if 'elements' in el and isinstance(el['elements'], list) and len(el['elements']) > 0: + # Ensure elements[0] has fill.paint BEFORE adding binding + if 'fill' not in el['elements'][0]: + el['elements'][0]['fill'] = {} + el['elements'][0]['fill']['paint'] = "#aaaaaa" + + # Apply stroke to elements[0] + if 'stroke' not in el['elements'][0]: + el['elements'][0]['stroke'] = {} + el['elements'][0]['stroke']['paint'] = "#000000" + el['elements'][0]['stroke']['width'] = "1" + + # Apply font properties to elements[1] + if len(el['elements']) > 1: + el['elements'][1]['fontSize'] = 10 + el['elements'][1]['fontFamily'] = "Arial" + el['elements'][1]['fontWeight'] = "bold" + el['elements'][1]['textAnchor'] = "middle" + + # Now add bindings after property exists + add_prop_binding("elements[0].fill.paint") + # Display binding removed for Induction + + elif matches_pattern(r'^IND\d+[A-Za-z]*(-\d+)?$'): + # IND pattern: matches IND1, IND1A, IND4A-4, etc. + # Apply fill, stroke to elements[0] and font properties to elements[1] + if 'elements' in el and isinstance(el['elements'], list) and len(el['elements']) > 0: + # Ensure elements[0] has fill.paint BEFORE adding binding + if 'fill' not in el['elements'][0]: + el['elements'][0]['fill'] = {} + el['elements'][0]['fill']['paint'] = "#aaaaaa" + + # Apply stroke to elements[0] + if 'stroke' not in el['elements'][0]: + el['elements'][0]['stroke'] = {} + el['elements'][0]['stroke']['paint'] = "#000000" + el['elements'][0]['stroke']['width'] = "1" + + # Apply font properties to elements[1] + if len(el['elements']) > 1: + el['elements'][1]['fontSize'] = 10 + el['elements'][1]['fontFamily'] = "Arial" + el['elements'][1]['fontWeight'] = "bold" + el['elements'][1]['textAnchor'] = "middle" + + # Now add bindings after property exists + add_prop_binding("elements[0].fill.paint") + # Display binding removed for IND + + elif matches_pattern(r'Chute_\d+') or name_contains('/SMC/Chute/') or (el_id and el_id.startswith('S01')): + # Chute elements: Apply VFD-like handling with elements[0].fill.paint and text formatting + if 'elements' in el and isinstance(el['elements'], list) and len(el['elements']) > 0: + # Ensure elements[0] has fill.paint BEFORE adding binding + if 'fill' not in el['elements'][0]: + el['elements'][0]['fill'] = {} + el['elements'][0]['fill']['paint'] = "#aaaaaa" + + # Apply stroke to elements[0] + if 'stroke' not in el['elements'][0]: + el['elements'][0]['stroke'] = {} + el['elements'][0]['stroke']['paint'] = "#000000" + el['elements'][0]['stroke']['width'] = "1" + + # Apply font properties to elements[1] + if len(el['elements']) > 1: + el['elements'][1]['fontSize'] = 10 + el['elements'][1]['fontFamily'] = "Arial" + el['elements'][1]['fontWeight'] = "bold" + el['elements'][1]['textAnchor'] = "middle" + + # Now add bindings after property exists + add_prop_binding("elements[0].fill.paint") + # Display binding removed for Chute + + elif check_name and 'sorter' in check_name.lower(): + # Sorter elements: fill.paint bound to color + add_prop_binding("fill.paint") + # Display binding removed for Sorter + + elif matches_pattern(r'_FIOH\d+$'): + # FIOH (Field IO Hub) elements: fill.paint bound to color + add_prop_binding("fill.paint") + add_display_binding("show_fio") + + # Apply stroke directly to element + if 'stroke' not in el: + el['stroke'] = {} + el['stroke']['paint'] = "#000000" + el['stroke']['width'] = "1" + + elif matches_pattern(r'_SIO\d+$'): + # SIO (Serial IO) elements: fill.paint bound to color + add_prop_binding("fill.paint") + add_display_binding("show_gateways") + + # Apply stroke directly to element + if 'stroke' not in el: + el['stroke'] = {} + el['stroke']['paint'] = "#000000" + el['stroke']['width'] = "1" + + elif matches_pattern(r'^MCM\d+$'): + add_prop_binding("elements[1].fill.paint") + add_display_binding("show_gateways") + + elif name_contains('/CMC/Conveyors/') or (tag_map.get(check_name) and '/CMC/Conveyors/' in tag_map[check_name]['name']): + add_prop_binding("fill.paint") + # Display binding removed for CMC/Conveyors + + # Recurse into nested elements ONLY for cleanup (is_top_level=False) + if 'elements' in el and isinstance(el['elements'], list): + traverse_elements(el['elements'], f"{element_path}.elements", prop_config, tag_map, is_top_level=False, system_name=system_name) + +def process_system(system_id, view_name=None): + print(f"Searching for system: {system_id}") + if view_name: + print(f"Filtering for views containing: '{view_name}'") + + # 1. Find matching folder(s) in Detailed-Views (Target) + target_folders = [] + if os.path.exists(BASE_NEW): + for item in os.listdir(BASE_NEW): + item_path = os.path.join(BASE_NEW, item) + if item.startswith(system_id) and os.path.isdir(item_path): + # If view_name specified, filter by it + if view_name is None or view_name.lower() in item.lower(): + target_folders.append(item) + + if not target_folders: + print(f"Error: Could not find folder(s) starting with '{system_id}' in {BASE_NEW}") + if view_name: + print(f" (with name containing '{view_name}')") + return + + print(f"\nFound {len(target_folders)} matching view(s):") + for i, folder in enumerate(target_folders, 1): + print(f" {i}. {folder}") + + # 2. Process each target folder + success_count = 0 + for target_folder_name in target_folders: + print(f"\n{'='*60}") + print(f"Processing folder: {target_folder_name}") + print(f"{'='*60}") + + # Find matching folder in DetailedOldViews (Source) + # We first try exact name match + source_folder_name = None + if os.path.exists(BASE_OLD): + if os.path.exists(os.path.join(BASE_OLD, target_folder_name)): + source_folder_name = target_folder_name + else: + # Try to find best match - prefer folders that contain key parts of target name + target_parts = set(target_folder_name.lower().split()) + best_match = None + best_score = 0 + + for item in os.listdir(BASE_OLD): + item_path = os.path.join(BASE_OLD, item) + if item.startswith(system_id) and os.path.isdir(item_path): + # Calculate match score based on common words + item_parts = set(item.lower().split()) + common_parts = target_parts.intersection(item_parts) + score = len(common_parts) + + # Prefer exact match + if item == target_folder_name: + source_folder_name = item + break + # Otherwise track best match + elif score > best_score: + best_score = score + best_match = item + + # Use best match if no exact match found + if not source_folder_name and best_match: + source_folder_name = best_match + + if not source_folder_name: + print(f"⚠ Warning: Could not find matching folder in {BASE_OLD} for '{target_folder_name}'") + print(f" Skipping this folder...") + continue + + print(f" Source (Old): {source_folder_name}") + print(f" Target (New): {target_folder_name}") + + # Extract MCM ID from folder name (e.g., "MCM04" from "MCM04 North Bulk Inbound...") + mcm_id = extract_mcm_id(target_folder_name) + print(f" Extracted MCM ID: {mcm_id}") + + view_json_path = os.path.join(BASE_OLD, source_folder_name, "view.json") + scada_view_path = os.path.join(BASE_NEW, target_folder_name, "view.json") + + # Create temporary copies to avoid permission issues if direct write fails + temp_source = f"{mcm_id}_source.json" + temp_target = f"{mcm_id}_target_{target_folder_name.replace(' ', '_')}.json" + + try: + # We try to read directly first + print(f"Loading View JSON: {view_json_path}...") + view_data = load_json(view_json_path) + if not view_data: + print(f" ✗ Failed to load source view.json") + continue + + print("Building tag map...") + tag_map = build_tag_map(view_data) + + print(f"Loading SCADA SVG View: {scada_view_path}...") + scada_view_data = load_json(scada_view_path) + if not scada_view_data: + print(f" ✗ Failed to load target view.json") + continue + + # Use extracted MCM ID instead of full folder name + print(f"Using System Name: {mcm_id}") + + print("Updating SCADA SVG Bindings...") + updated_count = update_scada_svg(scada_view_data, tag_map, mcm_id) + print(f"Generated bindings for {updated_count} elements.") + + # Write to temporary file first + with open(temp_target, 'w', encoding='utf-8') as f: + json.dump(scada_view_data, f, indent=2) + + print(f"Successfully processed to {temp_target}") + + # Now try to copy back using os.system/shell copy if direct write might fail + # But wait, Python write might fail due to permissions? + # Let's try writing directly to destination first. + try: + with open(scada_view_path, 'w', encoding='utf-8') as f: + json.dump(scada_view_data, f, indent=2) + print(f"✓ Saved directly to {scada_view_path}") + success_count += 1 + except PermissionError: + print("Direct write failed (Permission denied). Attempting shell copy...") + import shutil + shutil.copy2(temp_target, scada_view_path) + print("✓ Shell copy completed.") + success_count += 1 + + except Exception as e: + print(f"✗ An error occurred processing {target_folder_name}: {e}") + import traceback + traceback.print_exc() + finally: + # Cleanup temp + if os.path.exists(temp_target): + os.remove(temp_target) + + # Print summary + print(f"\n{'='*60}") + print(f"Summary: {success_count}/{len(target_folders)} view(s) processed successfully") + print(f"{'='*60}") + +def main(): + if len(sys.argv) < 2: + print("Usage: python update_scada_names.py [view_name]") + print("Example: python update_scada_names.py MCM02") + print("Example: python update_scada_names.py MCM02 'Fluid Inbound Upper'") + print("\nIf view_name is not specified, all views starting with MCM_ID will be processed.") + return + + system_id = sys.argv[1] + view_name = sys.argv[2] if len(sys.argv) > 2 else None + + if view_name: + print(f"Processing specific view containing: '{view_name}'") + + process_system(system_id, view_name) + +if __name__ == '__main__': + main()