From 6219c4c60ea51f4b92f2f192c63976dde6093a8c Mon Sep 17 00:00:00 2001 From: arDTDev Date: Tue, 25 Nov 2025 22:18:55 +0900 Subject: [PATCH] feat: Implement vision menu, processed data panel, and UI improvements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add VisionMenu component with Camera (QRCode) and Barcode (Keyence) submenus - Remove old CameraPanel component and replace with dropdown menu structure - Add ProcessedDataPanel to display processed data in bottom dock (5 rows visible) - Create SystemStatusPanel component with horizontal button layout (START/STOP/RESET) - Create EventLogPanel component for better code organization - Add device initialization feature with 7-axis progress tracking - Add GetProcessedData and GetInitializeStatus backend methods - Update Header menu layout to vertical (icon on top, text below) for more space - Update HomePage layout with bottom-docked ProcessedDataPanel - Refactor HomePage to use new modular components 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- FrontEnd/communication.ts | 88 ++++ FrontEnd/components/CameraPanel.tsx | 39 -- FrontEnd/components/EventLogPanel.tsx | 27 + FrontEnd/components/InitializeModal.tsx | 164 ++++--- FrontEnd/components/ProcessedDataPanel.tsx | 133 +++++ FrontEnd/components/SystemStatusPanel.tsx | 53 ++ FrontEnd/components/VisionMenu.tsx | 156 ++++++ FrontEnd/components/layout/Header.tsx | 21 +- FrontEnd/pages/HomePage.tsx | 75 +-- FrontEnd/types.ts | 23 + Handler/Project/WebUI/MachineBridge.cs | 270 +++++++++- Handler/Project/WebUI/WebSocketServer.cs | 21 + Handler/Project/fMain.Designer.cs | 214 ++++---- Handler/Project/fMain.resx | 544 ++++++++++----------- 14 files changed, 1273 insertions(+), 555 deletions(-) delete mode 100644 FrontEnd/components/CameraPanel.tsx create mode 100644 FrontEnd/components/EventLogPanel.tsx create mode 100644 FrontEnd/components/ProcessedDataPanel.tsx create mode 100644 FrontEnd/components/SystemStatusPanel.tsx create mode 100644 FrontEnd/components/VisionMenu.tsx diff --git a/FrontEnd/communication.ts b/FrontEnd/communication.ts index 1356cb4..0931f29 100644 --- a/FrontEnd/communication.ts +++ b/FrontEnd/communication.ts @@ -343,6 +343,94 @@ class CommunicationLayer { }); } } + + public async initializeDevice(): Promise<{ success: boolean; message: string }> { + if (isWebView && machine) { + const resultJson = await machine.InitializeDevice(); + return JSON.parse(resultJson); + } else { + return new Promise((resolve, reject) => { + if (!this.isConnected) { + setTimeout(() => { + if (!this.isConnected) reject({ success: false, message: "WebSocket connection timeout" }); + }, 2000); + } + + const timeoutId = setTimeout(() => { + this.listeners = this.listeners.filter(cb => cb !== handler); + reject({ success: false, message: "Initialize device timeout" }); + }, 10000); + + const handler = (data: any) => { + if (data.type === 'DEVICE_INITIALIZED') { + clearTimeout(timeoutId); + this.listeners = this.listeners.filter(cb => cb !== handler); + resolve(data.data); + } + }; + this.listeners.push(handler); + this.ws?.send(JSON.stringify({ type: 'INITIALIZE_DEVICE' })); + }); + } + } + + public async getInitializeStatus(): Promise { + if (isWebView && machine) { + return await machine.GetInitializeStatus(); + } else { + return new Promise((resolve, reject) => { + if (!this.isConnected) { + setTimeout(() => { + if (!this.isConnected) reject("WebSocket connection timeout"); + }, 2000); + } + + const timeoutId = setTimeout(() => { + this.listeners = this.listeners.filter(cb => cb !== handler); + reject("Initialize status fetch timeout"); + }, 10000); + + const handler = (data: any) => { + if (data.type === 'INITIALIZE_STATUS_DATA') { + clearTimeout(timeoutId); + this.listeners = this.listeners.filter(cb => cb !== handler); + resolve(JSON.stringify(data.data)); + } + }; + this.listeners.push(handler); + this.ws?.send(JSON.stringify({ type: 'GET_INITIALIZE_STATUS' })); + }); + } + } + + public async getProcessedData(): Promise { + if (isWebView && machine) { + return await machine.GetProcessedData(); + } else { + return new Promise((resolve, reject) => { + if (!this.isConnected) { + setTimeout(() => { + if (!this.isConnected) reject("WebSocket connection timeout"); + }, 2000); + } + + const timeoutId = setTimeout(() => { + this.listeners = this.listeners.filter(cb => cb !== handler); + reject("Processed data fetch timeout"); + }, 10000); + + const handler = (data: any) => { + if (data.type === 'PROCESSED_DATA') { + clearTimeout(timeoutId); + this.listeners = this.listeners.filter(cb => cb !== handler); + resolve(JSON.stringify(data.data)); + } + }; + this.listeners.push(handler); + this.ws?.send(JSON.stringify({ type: 'GET_PROCESSED_DATA' })); + }); + } + } } export const comms = new CommunicationLayer(); diff --git a/FrontEnd/components/CameraPanel.tsx b/FrontEnd/components/CameraPanel.tsx deleted file mode 100644 index 6e5d987..0000000 --- a/FrontEnd/components/CameraPanel.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import React from 'react'; -import { Camera, Crosshair } from 'lucide-react'; -import { PanelHeader } from './common/PanelHeader'; - -interface CameraPanelProps { - videoRef: React.RefObject; -} - -export const CameraPanel: React.FC = ({ videoRef }) => ( -
- -
-
-
- - - - -
-
-); diff --git a/FrontEnd/components/EventLogPanel.tsx b/FrontEnd/components/EventLogPanel.tsx new file mode 100644 index 0000000..d718733 --- /dev/null +++ b/FrontEnd/components/EventLogPanel.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import { Terminal } from 'lucide-react'; +import { CyberPanel } from './common/CyberPanel'; +import { LogEntry } from '../types'; + +interface EventLogPanelProps { + logs: LogEntry[]; +} + +export const EventLogPanel: React.FC = ({ logs }) => { + return ( + +
+ Event Log + +
+
+ {logs.map(log => ( +
+ [{log.timestamp}] + {log.message} +
+ ))} +
+
+ ); +}; diff --git a/FrontEnd/components/InitializeModal.tsx b/FrontEnd/components/InitializeModal.tsx index b8ed218..97bf509 100644 --- a/FrontEnd/components/InitializeModal.tsx +++ b/FrontEnd/components/InitializeModal.tsx @@ -1,6 +1,7 @@ import React, { useState, useEffect } from 'react'; -import { Target, CheckCircle2, Loader2 } from 'lucide-react'; +import { Target, CheckCircle2, Loader2, AlertCircle } from 'lucide-react'; import { TechButton } from './common/TechButton'; +import { comms } from '../communication'; interface InitializeModalProps { isOpen: boolean; @@ -17,74 +18,111 @@ interface AxisState { export const InitializeModal: React.FC = ({ isOpen, onClose }) => { const [axes, setAxes] = useState([ - { name: 'X-Axis', status: 'pending', progress: 0 }, - { name: 'Y-Axis', status: 'pending', progress: 0 }, - { name: 'Z-Axis', status: 'pending', progress: 0 }, + { name: 'PZ_PICK', status: 'pending', progress: 0 }, + { name: 'PL_UPDN', status: 'pending', progress: 0 }, + { name: 'PR_UPDN', status: 'pending', progress: 0 }, + { name: 'PL_MOVE', status: 'pending', progress: 0 }, + { name: 'PR_MOVE', status: 'pending', progress: 0 }, + { name: 'Z_THETA', status: 'pending', progress: 0 }, + { name: 'PX_PICK', status: 'pending', progress: 0 }, ]); const [isInitializing, setIsInitializing] = useState(false); + const [errorMessage, setErrorMessage] = useState(null); + const [statusInterval, setStatusInterval] = useState(null); // Reset state when modal closes useEffect(() => { if (!isOpen) { setAxes([ - { name: 'X-Axis', status: 'pending', progress: 0 }, - { name: 'Y-Axis', status: 'pending', progress: 0 }, - { name: 'Z-Axis', status: 'pending', progress: 0 }, + { name: 'PZ_PICK', status: 'pending', progress: 0 }, + { name: 'PL_UPDN', status: 'pending', progress: 0 }, + { name: 'PR_UPDN', status: 'pending', progress: 0 }, + { name: 'PL_MOVE', status: 'pending', progress: 0 }, + { name: 'PR_MOVE', status: 'pending', progress: 0 }, + { name: 'Z_THETA', status: 'pending', progress: 0 }, + { name: 'PX_PICK', status: 'pending', progress: 0 }, ]); setIsInitializing(false); + setErrorMessage(null); + if (statusInterval) { + clearInterval(statusInterval); + setStatusInterval(null); + } } }, [isOpen]); - const startInitialization = () => { - setIsInitializing(true); + // Cleanup interval on unmount + useEffect(() => { + return () => { + if (statusInterval) { + clearInterval(statusInterval); + } + }; + }, [statusInterval]); - // Initialize each axis with 3 second delay between them - axes.forEach((axis, index) => { - const delay = index * 3000; // 0s, 3s, 6s + const updateStatus = async () => { + try { + const statusJson = await comms.getInitializeStatus(); + const status = JSON.parse(statusJson); - // Start initialization after delay - setTimeout(() => { - setAxes(prev => { - const next = [...prev]; - next[index] = { ...next[index], status: 'initializing', progress: 0 }; - return next; - }); + if (!status.isInitializing) { + // Initialization complete + if (statusInterval) { + clearInterval(statusInterval); + setStatusInterval(null); + } + setIsInitializing(false); - // Progress animation (3 seconds) - const startTime = Date.now(); - const duration = 3000; - const interval = setInterval(() => { - const elapsed = Date.now() - startTime; - const progress = Math.min((elapsed / duration) * 100, 100); + // Check if all axes are home set + const allComplete = status.axes.every((axis: any) => axis.isHomeSet); + if (allComplete) { + // Auto close after 1 second + setTimeout(() => { + onClose(); + }, 1000); + } + } - setAxes(prev => { - const next = [...prev]; - next[index] = { ...next[index], progress }; - return next; - }); - - if (progress >= 100) { - clearInterval(interval); - setAxes(prev => { - const next = [...prev]; - next[index] = { ...next[index], status: 'completed', progress: 100 }; - return next; - }); - - // Check if all axes are completed - setAxes(prev => { - if (prev.every(a => a.status === 'completed')) { - // Auto close after 500ms - setTimeout(() => { - onClose(); - }, 500); - } - return prev; - }); + // Update axis states + setAxes(prev => { + return prev.map(axis => { + const backendAxis = status.axes.find((a: any) => a.name === axis.name); + if (backendAxis) { + const progress = backendAxis.progress; + const isComplete = backendAxis.isHomeSet; + return { + ...axis, + progress, + status: isComplete ? 'completed' : progress > 0 ? 'initializing' : 'pending' + }; } - }, 50); - }, delay); - }); + return axis; + }); + }); + } catch (error) { + console.error('[InitializeModal] Status update error:', error); + } + }; + + const startInitialization = async () => { + try { + setErrorMessage(null); + const result = await comms.initializeDevice(); + + if (!result.success) { + setErrorMessage(result.message); + return; + } + + setIsInitializing(true); + + // Start polling for status updates every 200ms + const interval = setInterval(updateStatus, 200); + setStatusInterval(interval); + } catch (error: any) { + setErrorMessage(error.message || 'Failed to start initialization'); + console.error('[InitializeModal] Initialization error:', error); + } }; if (!isOpen) return null; @@ -93,7 +131,7 @@ export const InitializeModal: React.FC = ({ isOpen, onClos return (
-
+

- AXIS INITIALIZATION + DEVICE INITIALIZATION

-
+ {errorMessage && ( +
+ +
+
INITIALIZATION ERROR
+
+                                {errorMessage}
+                            
+
+
+ )} + +
{axes.map((axis, index) => (
@@ -118,7 +168,7 @@ export const InitializeModal: React.FC = ({ isOpen, onClos ) : (
)} - + {axis.name}
@@ -140,7 +190,7 @@ export const InitializeModal: React.FC = ({ isOpen, onClos
{/* Progress Bar */} -
+
{ + const [data, setData] = useState([]); + const [loading, setLoading] = useState(false); + + const loadData = async () => { + setLoading(true); + try { + const dataJson = await comms.getProcessedData(); + const parsedData = JSON.parse(dataJson) as ProcessedDataRow[]; + // Display only the first 5 rows + setData(parsedData.slice(0, 5)); + } catch (error) { + console.error('[ProcessedDataPanel] Failed to load data:', error); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + loadData(); + // Refresh every 5 seconds + const interval = setInterval(loadData, 5000); + return () => clearInterval(interval); + }, []); + + const getRowBackgroundColor = (row: ProcessedDataRow) => { + if (row.REMARK.startsWith('(BYPASS')) { + return 'bg-sky-300/20'; + } + return row.LOC === 'L' ? 'bg-slate-700/20' : 'bg-slate-800/10'; + }; + + const getRowTextColor = (row: ProcessedDataRow) => { + if (row.REMARK.startsWith('(BYPASS')) { + return 'text-white'; + } + if (!row.PRNATTACH) { + return 'text-red-500'; + } + if (!row.PRNVALID) { + return 'text-emerald-900'; + } + return 'text-slate-200'; + }; + + return ( + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + {data.length === 0 ? ( + + + + ) : ( + data.map((row, index) => ( + + + + + + + + + + + + + + + + + + + )) + )} + +
RMODELSTARTBATCHSIDRIDVENDERQTY(MAX)MFGV.LOTPARTNOCPNRemarkAttachValid
+ {loading ? 'Loading...' : 'No data available'} +
{row.target}{row.JTYPE}{row.STIME}{row.BATCH}{row.SID}{row.RID}{row.VNAME}{row.QTY.toLocaleString()}{row.qtymax.toLocaleString()}{row.MFGDATE}{row.VLOT}{row.PARTNO}{row.MCN}{row.REMARK} + + + +
+
+
+ ); +}; diff --git a/FrontEnd/components/SystemStatusPanel.tsx b/FrontEnd/components/SystemStatusPanel.tsx new file mode 100644 index 0000000..596c6b0 --- /dev/null +++ b/FrontEnd/components/SystemStatusPanel.tsx @@ -0,0 +1,53 @@ +import React from 'react'; +import { Play, Square, RotateCw } from 'lucide-react'; +import { TechButton } from './common/TechButton'; +import { CyberPanel } from './common/CyberPanel'; +import { SystemState } from '../types'; + +interface SystemStatusPanelProps { + systemState: SystemState; + onControl: (action: 'start' | 'stop' | 'reset') => void; +} + +export const SystemStatusPanel: React.FC = ({ + systemState, + onControl +}) => { + return ( + +
System Status
+
+ {systemState} +
+ + {/* Horizontal Button Layout */} +
+ onControl('start')} + > + + START + + onControl('stop')} + > + + STOP + + onControl('reset')} + > + + RESET + +
+
+ ); +}; diff --git a/FrontEnd/components/VisionMenu.tsx b/FrontEnd/components/VisionMenu.tsx new file mode 100644 index 0000000..43ebcd4 --- /dev/null +++ b/FrontEnd/components/VisionMenu.tsx @@ -0,0 +1,156 @@ +import React, { useState, useRef, useEffect } from 'react'; +import { Camera, ChevronRight, X } from 'lucide-react'; + +interface VisionMenuProps { + isOpen: boolean; + onClose: () => void; +} + +export const VisionMenu: React.FC = ({ isOpen, onClose }) => { + const [activeSubmenu, setActiveSubmenu] = useState(null); + const menuRef = useRef(null); + + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + if (menuRef.current && !menuRef.current.contains(event.target as Node)) { + onClose(); + } + }; + + if (isOpen) { + document.addEventListener('mousedown', handleClickOutside); + } + + return () => { + document.removeEventListener('mousedown', handleClickOutside); + }; + }, [isOpen, onClose]); + + if (!isOpen) return null; + + const handleQRCodeCamera = () => { + console.log('[VisionMenu] Camera (QRCode) clicked'); + // TODO: Implement QR Code camera functionality + }; + + const handleKeyenceBarcode = () => { + console.log('[VisionMenu] Barcode (Keyence) clicked'); + // TODO: Implement Keyence barcode functionality + }; + + return ( +
+ {/* Header */} +
+
+ +

VISION

+
+ +
+ + {/* Menu Items */} +
+ {/* Camera (QRCode) */} +
+ + + {/* QRCode Submenu */} + {activeSubmenu === 'qrcode' && ( +
setActiveSubmenu(null)} + > + +
+ + + +
+ )} +
+ + {/* Barcode (Keyence) */} +
+ + + {/* Keyence Submenu */} + {activeSubmenu === 'keyence' && ( +
setActiveSubmenu(null)} + > + +
+ + + +
+ )} +
+
+
+ ); +}; diff --git a/FrontEnd/components/layout/Header.tsx b/FrontEnd/components/layout/Header.tsx index 048f870..9c31a88 100644 --- a/FrontEnd/components/layout/Header.tsx +++ b/FrontEnd/components/layout/Header.tsx @@ -1,6 +1,7 @@ -import React from 'react'; +import React, { useState } from 'react'; import { useNavigate, useLocation } from 'react-router-dom'; import { Activity, Settings, Move, Camera, Layers, Cpu, Target } from 'lucide-react'; +import { VisionMenu } from '../VisionMenu'; interface HeaderProps { currentTime: Date; @@ -12,12 +13,15 @@ interface HeaderProps { export const Header: React.FC = ({ currentTime, onTabChange, activeTab }) => { const navigate = useNavigate(); const location = useLocation(); + const [showVisionMenu, setShowVisionMenu] = useState(false); const isWebView = typeof window !== 'undefined' && !!window.chrome?.webview; const isIOPage = location.pathname === '/io-monitor'; return ( -
+ <> + setShowVisionMenu(false)} /> +
{ @@ -47,7 +51,7 @@ export const Header: React.FC = ({ currentTime, onTabChange, active {/* IO Tab Switcher (only on IO page) */} -
+
{[ { id: 'recipe', icon: Layers, label: 'RECIPE', path: '/' }, { id: 'io', icon: Activity, label: 'I/O MONITOR', path: '/io-monitor' }, @@ -67,21 +71,27 @@ export const Header: React.FC = ({ currentTime, onTabChange, active if (item.id === 'io') { navigate('/io-monitor'); onTabChange(null); + setShowVisionMenu(false); + } else if (item.id === 'camera') { + setShowVisionMenu(!showVisionMenu); + onTabChange(null); } else { if (location.pathname !== '/') { navigate('/'); } + setShowVisionMenu(false); onTabChange(activeTab === item.id ? null : item.id as any); } }} className={` - flex items-center gap-2 px-6 py-2 rounded-full font-tech font-bold text-sm transition-all border border-transparent + flex flex-col items-center justify-center gap-1 px-3 py-2 rounded-xl font-tech font-bold text-[10px] transition-all border border-transparent min-w-[70px] ${isActive ? 'bg-neon-blue/10 text-neon-blue border-neon-blue shadow-glow-blue' : 'text-slate-400 hover:text-white hover:bg-white/5'} `} > - {item.label} + + {item.label} ); })} @@ -97,5 +107,6 @@ export const Header: React.FC = ({ currentTime, onTabChange, active
+ ); }; diff --git a/FrontEnd/pages/HomePage.tsx b/FrontEnd/pages/HomePage.tsx index d13252a..05e9cdb 100644 --- a/FrontEnd/pages/HomePage.tsx +++ b/FrontEnd/pages/HomePage.tsx @@ -1,14 +1,15 @@ import React, { useState, useEffect } from 'react'; -import { Play, Square, RotateCw, AlertTriangle, Siren, Terminal } from 'lucide-react'; +import { AlertTriangle, Siren } from 'lucide-react'; import { Machine3D } from '../components/Machine3D'; import { SettingsModal } from '../components/SettingsModal'; import { InitializeModal } from '../components/InitializeModal'; import { RecipePanel } from '../components/RecipePanel'; import { MotionPanel } from '../components/MotionPanel'; -import { CameraPanel } from '../components/CameraPanel'; import { CyberPanel } from '../components/common/CyberPanel'; -import { TechButton } from '../components/common/TechButton'; import { ModelInfoPanel } from '../components/ModelInfoPanel'; +import { ProcessedDataPanel } from '../components/ProcessedDataPanel'; +import { SystemStatusPanel } from '../components/SystemStatusPanel'; +import { EventLogPanel } from '../components/EventLogPanel'; import { SystemState, Recipe, IOPoint, LogEntry, RobotTarget, ConfigItem } from '../types'; interface HomePageProps { @@ -46,14 +47,8 @@ export const HomePage: React.FC = ({ onCloseTab, videoRef }) => { - useEffect(() => { - if (activeTab === 'camera' && navigator.mediaDevices?.getUserMedia) { - navigator.mediaDevices.getUserMedia({ video: true }).then(s => { if (videoRef.current) videoRef.current.srcObject = s }); - } - }, [activeTab, videoRef]); - return ( -
+
{/* 3D Canvas (Background Layer) */}
@@ -78,11 +73,10 @@ export const HomePage: React.FC = ({
{/* Floating Panel (Left) */} - {activeTab && activeTab !== 'setting' && activeTab !== 'recipe' && ( -
+ {activeTab === 'motion' && ( +
- {activeTab === 'motion' && } - {activeTab === 'camera' && } +
)} @@ -109,54 +103,15 @@ export const HomePage: React.FC = ({ /> {/* Right Sidebar (Dashboard) */} -
+
+ + +
- -
System Status
-
- {systemState} -
-
- onControl('start')} - > - START AUTO - - onControl('stop')} - > - STOP / PAUSE - - onControl('reset')} - > - SYSTEM RESET - -
-
- - -
- Event Log - -
-
- {logs.map(log => ( -
- [{log.timestamp}] - {log.message} -
- ))} -
-
+ {/* Bottom Docked - Processed Data Panel */} +
+
); diff --git a/FrontEnd/types.ts b/FrontEnd/types.ts index 9209b2c..1162b70 100644 --- a/FrontEnd/types.ts +++ b/FrontEnd/types.ts @@ -58,6 +58,26 @@ export interface ConfigItem { Description: string; } +export interface ProcessedDataRow { + target: string; + JTYPE: string; + STIME: string; + BATCH: string; + SID: string; + RID: string; + VNAME: string; + LOC: string; + QTY: number; + qtymax: number; + MFGDATE: string; + VLOT: string; + PARTNO: string; + MCN: string; + REMARK: string; + PRNATTACH: boolean; + PRNVALID: boolean; +} + declare global { interface Window { chrome?: { @@ -76,6 +96,9 @@ declare global { GetRecipe(recipeTitle: string): Promise; SaveRecipe(recipeTitle: string, recipeData: string): Promise; SaveConfig(configJson: string): Promise; + InitializeDevice(): Promise; + GetInitializeStatus(): Promise; + GetProcessedData(): Promise; } }; addEventListener(type: string, listener: (event: any) => void): void; diff --git a/Handler/Project/WebUI/MachineBridge.cs b/Handler/Project/WebUI/MachineBridge.cs index 71590c1..f97fe98 100644 --- a/Handler/Project/WebUI/MachineBridge.cs +++ b/Handler/Project/WebUI/MachineBridge.cs @@ -71,6 +71,121 @@ namespace Project.WebUI _host.HandleCommand(command); } + public string InitializeDevice() + { + Console.WriteLine($"[C#] Initialize Device Request"); + + try + { + // Check if motion is initialized + if (PUB.flag.get(eVarBool.FG_INIT_MOTIO) == false) + { + var response = new { success = false, message = "Motion not initialized\nPlease try again later" }; + return JsonConvert.SerializeObject(response); + } + + var errors = new List(); + + // Check if system is running + if (PUB.sm.isRunning == true) + errors.Add("AUTO-RUN MODE - Cannot be used during automatic execution. Please stop and try again"); + + // Check AIR supply + if (DIO.GetIOOutput(eDOName.SOL_AIR) == false) + errors.Add("Press the AIR button on the front to supply AIR"); + + // Check printer pickers + if (DIO.GetIOInput(eDIName.L_PICK_BW) == false) + errors.Add("Left printer picker is not in reverse position"); + + if (DIO.GetIOInput(eDIName.R_PICK_BW) == false) + errors.Add("Right printer picker is not in reverse position"); + + // Check picker cylinders + if (SETTING.Data.Enable_PickerCylinder) + { + if (DIO.GetIOInput(eDIName.L_CYLUP) == false) + errors.Add("Left printer picker cylinder is not in UP position"); + + if (DIO.GetIOInput(eDIName.R_CYLUP) == false) + errors.Add("Right printer picker cylinder is not in UP position"); + } + + // Check emergency stop + if (DIO.IsEmergencyOn() == true) + errors.Add("Cannot move when in emergency stop state"); + + // Check if running + if (PUB.sm.Step == eSMStep.RUN) + errors.Add("Cannot initialize while in operation"); + + if (errors.Count > 0) + { + var response = new { success = false, message = string.Join("\n", errors) }; + return JsonConvert.SerializeObject(response); + } + + // Start initialization + PUB.log.Add("User Request: Initialize Device", false); + PUB.sm.SetNewStep(eSMStep.HOME_FULL); + + var response2 = new { success = true, message = "Device initialization started" }; + return JsonConvert.SerializeObject(response2); + } + catch (Exception ex) + { + Console.WriteLine($"[ERROR] Failed to initialize device: {ex.Message}"); + var response = new { success = false, message = ex.Message }; + return JsonConvert.SerializeObject(response); + } + } + + public string GetInitializeStatus() + { + try + { + var status = new + { + isInitializing = PUB.sm.Step == eSMStep.HOME_FULL, + currentStep = PUB.sm.Step.ToString(), + axes = new List + { + new { name = "PZ_PICK", axisIndex = (int)eAxis.PZ_PICK, isHomeSet = PUB.mot.IsHomeSet((short)eAxis.PZ_PICK), progress = GetAxisProgress(eAxis.PZ_PICK) }, + new { name = "PL_UPDN", axisIndex = (int)eAxis.PL_UPDN, isHomeSet = PUB.mot.IsHomeSet((short)eAxis.PL_UPDN), progress = GetAxisProgress(eAxis.PL_UPDN) }, + new { name = "PR_UPDN", axisIndex = (int)eAxis.PR_UPDN, isHomeSet = PUB.mot.IsHomeSet((short)eAxis.PR_UPDN), progress = GetAxisProgress(eAxis.PR_UPDN) }, + new { name = "PL_MOVE", axisIndex = (int)eAxis.PL_MOVE, isHomeSet = PUB.mot.IsHomeSet((short)eAxis.PL_MOVE), progress = GetAxisProgress(eAxis.PL_MOVE) }, + new { name = "PR_MOVE", axisIndex = (int)eAxis.PR_MOVE, isHomeSet = PUB.mot.IsHomeSet((short)eAxis.PR_MOVE), progress = GetAxisProgress(eAxis.PR_MOVE) }, + new { name = "Z_THETA", axisIndex = (int)eAxis.Z_THETA, isHomeSet = PUB.mot.IsHomeSet((short)eAxis.Z_THETA), progress = GetAxisProgress(eAxis.Z_THETA) }, + new { name = "PX_PICK", axisIndex = (int)eAxis.PX_PICK, isHomeSet = PUB.mot.IsHomeSet((short)eAxis.PX_PICK), progress = GetAxisProgress(eAxis.PX_PICK) } + } + }; + + return JsonConvert.SerializeObject(status); + } + catch (Exception ex) + { + Console.WriteLine($"[ERROR] Failed to get initialize status: {ex.Message}"); + return JsonConvert.SerializeObject(new { isInitializing = false, currentStep = "ERROR", axes = new List() }); + } + } + + private int GetAxisProgress(eAxis axis) + { + // Return 100 if home is set, otherwise check motion status + if (PUB.mot.IsHomeSet((short)axis)) + return 100; + + // Check if axis is in motion + if (PUB.mot.IsMotion((short)axis)) + return 50; // In progress + + // Check if home search started + if (PUB.mot.IsOrg((short)axis) || PUB.mot.IsLimitN((short)axis)) + return 75; // Near completion + + return 0; // Not started + } + /// /// 마이그레이션완료 /// @@ -90,11 +205,19 @@ namespace Project.WebUI } // Select model using PUB.SelectModelV - bool result = AR.PUB.SelectModelV(recipeTitle, true); + bool result = PUB.SelectModelV(recipeTitle, true); if (result) { - Console.WriteLine($"[INFO] Recipe {recipeTitle} selected successfully"); + // Select motion model based on conveyor usage + var motionmode = VAR.BOOL[eVarBool.Use_Conveyor] ? "Conveyor" : "Default"; + bool changeMot = PUB.SelectModelM(motionmode); + if (changeMot == false) + { + PUB.log.AddE($"No Motion model ({motionmode})"); + } + + Console.WriteLine($"[INFO] Recipe {recipeTitle} selected successfully with motion mode: {motionmode}"); // Get the selected model data var dr = PUB.mdm.GetDataV(recipeTitle); @@ -144,14 +267,14 @@ namespace Project.WebUI try { // Use SETTING.Data (CommonSetting) from the project - if (AR.SETTING.Data == null) + if (SETTING.Data == null) { Console.WriteLine($"[WARN] SETTING.Data is not initialized"); return "[]"; } var settingsArray = new List(); - var properties = AR.SETTING.Data.GetType().GetProperties(); + var properties = SETTING.Data.GetType().GetProperties(); foreach (var prop in properties) { @@ -167,7 +290,7 @@ namespace Project.WebUI // Get property info string key = prop.Name; - object value = prop.GetValue(AR.SETTING.Data, null); + object value = prop.GetValue(SETTING.Data, null); string type = "String"; string group = "General"; string description = key.Replace("_", " "); @@ -241,7 +364,7 @@ namespace Project.WebUI var settingsArray = JsonConvert.DeserializeObject>>(configJson); // Update SETTING.Data properties - var properties = AR.SETTING.Data.GetType().GetProperties(); + var properties = SETTING.Data.GetType().GetProperties(); foreach (var item in settingsArray) { @@ -258,22 +381,22 @@ namespace Project.WebUI { if (type == "Boolean") { - prop.SetValue(AR.SETTING.Data, bool.Parse(value), null); + prop.SetValue(SETTING.Data, bool.Parse(value), null); } else if (type == "Number") { if (prop.PropertyType == typeof(int)) - prop.SetValue(AR.SETTING.Data, int.Parse(value), null); + prop.SetValue(SETTING.Data, int.Parse(value), null); else if (prop.PropertyType == typeof(long)) - prop.SetValue(AR.SETTING.Data, long.Parse(value), null); + prop.SetValue(SETTING.Data, long.Parse(value), null); else if (prop.PropertyType == typeof(double)) - prop.SetValue(AR.SETTING.Data, double.Parse(value), null); + prop.SetValue(SETTING.Data, double.Parse(value), null); else if (prop.PropertyType == typeof(float)) - prop.SetValue(AR.SETTING.Data, float.Parse(value), null); + prop.SetValue(SETTING.Data, float.Parse(value), null); } else { - prop.SetValue(AR.SETTING.Data, value, null); + prop.SetValue(SETTING.Data, value, null); } } catch (Exception ex) @@ -283,7 +406,7 @@ namespace Project.WebUI } // Save to file - AR.SETTING.Data.Save(); + SETTING.Data.Save(); Console.WriteLine($"[INFO] Settings saved successfully"); } @@ -705,5 +828,126 @@ namespace Project.WebUI return JsonConvert.SerializeObject(response); } } + + public string GetProcessedData() + { + try + { + // TODO: Connect to actual data source (FMain.dataSet1.K4EE_Component_Reel_Result) + // For now, return sample data structure + var processedData = new List(); + + // Sample data for testing - replace with actual data from FMain or database + var sampleData = new[] { + new { + target = "1", + JTYPE = "MODEL_A", + STIME = DateTime.Now.AddMinutes(-30).ToString("HH:mm:ss"), + BATCH = DateTime.Now.AddMinutes(-30).ToString("HH:mm:ss"), + SID = "SID123456", + RID = "RID789012", + VNAME = "VENDOR_A", + LOC = "L", + QTY = 1250, + qtymax = 2500, + MFGDATE = "2025-11-20", + VLOT = "LOT001", + PARTNO = "PN12345", + MCN = "CPN001", + REMARK = "", + PRNATTACH = true, + PRNVALID = true + }, + new { + target = "2", + JTYPE = "MODEL_B", + STIME = DateTime.Now.AddMinutes(-25).ToString("HH:mm:ss"), + BATCH = DateTime.Now.AddMinutes(-25).ToString("HH:mm:ss"), + SID = "SID234567", + RID = "RID890123", + VNAME = "VENDOR_B", + LOC = "R", + QTY = 3500, + qtymax = 5000, + MFGDATE = "2025-11-21", + VLOT = "LOT002", + PARTNO = "PN23456", + MCN = "CPN002", + REMARK = "", + PRNATTACH = true, + PRNVALID = false + }, + new { + target = "3", + JTYPE = "MODEL_A", + STIME = DateTime.Now.AddMinutes(-20).ToString("HH:mm:ss"), + BATCH = DateTime.Now.AddMinutes(-20).ToString("HH:mm:ss"), + SID = "SID345678", + RID = "RID901234", + VNAME = "VENDOR_A", + LOC = "L", + QTY = 800, + qtymax = 2500, + MFGDATE = "2025-11-22", + VLOT = "LOT003", + PARTNO = "PN34567", + MCN = "CPN003", + REMARK = "(BYPASS)", + PRNATTACH = false, + PRNVALID = true + }, + new { + target = "4", + JTYPE = "MODEL_C", + STIME = DateTime.Now.AddMinutes(-15).ToString("HH:mm:ss"), + BATCH = DateTime.Now.AddMinutes(-15).ToString("HH:mm:ss"), + SID = "SID456789", + RID = "RID012345", + VNAME = "VENDOR_C", + LOC = "R", + QTY = 4200, + qtymax = 6000, + MFGDATE = "2025-11-23", + VLOT = "LOT004", + PARTNO = "PN45678", + MCN = "CPN004", + REMARK = "", + PRNATTACH = true, + PRNVALID = true + }, + new { + target = "5", + JTYPE = "MODEL_B", + STIME = DateTime.Now.AddMinutes(-10).ToString("HH:mm:ss"), + BATCH = DateTime.Now.AddMinutes(-10).ToString("HH:mm:ss"), + SID = "SID567890", + RID = "RID123456", + VNAME = "VENDOR_B", + LOC = "L", + QTY = 1800, + qtymax = 5000, + MFGDATE = "2025-11-24", + VLOT = "LOT005", + PARTNO = "PN56789", + MCN = "CPN005", + REMARK = "", + PRNATTACH = true, + PRNVALID = true + } + }; + + foreach (var item in sampleData) + { + processedData.Add(item); + } + + return JsonConvert.SerializeObject(processedData); + } + catch (Exception ex) + { + Console.WriteLine($"[ERROR] Failed to get processed data: {ex.Message}"); + return JsonConvert.SerializeObject(new List()); + } + } } } diff --git a/Handler/Project/WebUI/WebSocketServer.cs b/Handler/Project/WebUI/WebSocketServer.cs index a2e1e12..c1550a8 100644 --- a/Handler/Project/WebUI/WebSocketServer.cs +++ b/Handler/Project/WebUI/WebSocketServer.cs @@ -212,6 +212,27 @@ namespace Project.WebUI var response = new { type = "RECIPE_SAVED", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) }; await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response)); } + else if (type == "INITIALIZE_DEVICE") + { + var bridge = new MachineBridge(_mainForm); + string resultJson = bridge.InitializeDevice(); + var response = new { type = "DEVICE_INITIALIZED", data = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson) }; + await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response)); + } + else if (type == "GET_INITIALIZE_STATUS") + { + var bridge = new MachineBridge(_mainForm); + string statusJson = bridge.GetInitializeStatus(); + var response = new { type = "INITIALIZE_STATUS_DATA", data = Newtonsoft.Json.JsonConvert.DeserializeObject(statusJson) }; + await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response)); + } + else if (type == "GET_PROCESSED_DATA") + { + var bridge = new MachineBridge(_mainForm); + string dataJson = bridge.GetProcessedData(); + var response = new { type = "PROCESSED_DATA", data = Newtonsoft.Json.JsonConvert.DeserializeObject(dataJson) }; + await Send(socket, Newtonsoft.Json.JsonConvert.SerializeObject(response)); + } } catch (Exception ex) { diff --git a/Handler/Project/fMain.Designer.cs b/Handler/Project/fMain.Designer.cs index d9aef2b..1b3dd70 100644 --- a/Handler/Project/fMain.Designer.cs +++ b/Handler/Project/fMain.Designer.cs @@ -993,7 +993,7 @@ // this.systemParameterToolStripMenuItem.Font = new System.Drawing.Font("Cambria", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.systemParameterToolStripMenuItem.Name = "systemParameterToolStripMenuItem"; - this.systemParameterToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.systemParameterToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.systemParameterToolStripMenuItem.Text = "System Parameter"; this.systemParameterToolStripMenuItem.Click += new System.EventHandler(this.systemParameterToolStripMenuItem_Click); // @@ -1001,28 +1001,28 @@ // this.toolStripMenuItem9.Font = new System.Drawing.Font("Cambria", 10F, System.Drawing.FontStyle.Bold); this.toolStripMenuItem9.Name = "toolStripMenuItem9"; - this.toolStripMenuItem9.Size = new System.Drawing.Size(255, 22); + this.toolStripMenuItem9.Size = new System.Drawing.Size(253, 22); this.toolStripMenuItem9.Text = "Show Log"; this.toolStripMenuItem9.Click += new System.EventHandler(this.toolStripMenuItem9_Click); // // toolStripMenuItem4 // this.toolStripMenuItem4.Name = "toolStripMenuItem4"; - this.toolStripMenuItem4.Size = new System.Drawing.Size(252, 6); + this.toolStripMenuItem4.Size = new System.Drawing.Size(250, 6); // // demoRunToolStripMenuItem // this.demoRunToolStripMenuItem.Font = new System.Drawing.Font("Cambria", 10F, System.Drawing.FontStyle.Bold); this.demoRunToolStripMenuItem.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0))))); this.demoRunToolStripMenuItem.Name = "demoRunToolStripMenuItem"; - this.demoRunToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.demoRunToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.demoRunToolStripMenuItem.Text = "save data test"; this.demoRunToolStripMenuItem.Click += new System.EventHandler(this.demoRunToolStripMenuItem_Click); // // toolStripMenuItem1 // this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(252, 6); + this.toolStripMenuItem1.Size = new System.Drawing.Size(250, 6); // // panBottom // @@ -1362,72 +1362,72 @@ this.keyenceSaveImageToolStripMenuItem, this.toolStripMenuItem5}); this.cmCam.Name = "cmLot1"; - this.cmCam.Size = new System.Drawing.Size(208, 192); + this.cmCam.Size = new System.Drawing.Size(212, 192); this.cmCam.Opening += new System.ComponentModel.CancelEventHandler(this.cmCam_Opening); // // toolStripMenuItem2 // this.toolStripMenuItem2.Name = "toolStripMenuItem2"; - this.toolStripMenuItem2.Size = new System.Drawing.Size(207, 22); + this.toolStripMenuItem2.Size = new System.Drawing.Size(211, 22); this.toolStripMenuItem2.Text = "Save Image"; this.toolStripMenuItem2.Click += new System.EventHandler(this.toolStripMenuItem2_Click); // // liveViewProcessOnOffToolStripMenuItem // this.liveViewProcessOnOffToolStripMenuItem.Name = "liveViewProcessOnOffToolStripMenuItem"; - this.liveViewProcessOnOffToolStripMenuItem.Size = new System.Drawing.Size(207, 22); + this.liveViewProcessOnOffToolStripMenuItem.Size = new System.Drawing.Size(211, 22); this.liveViewProcessOnOffToolStripMenuItem.Text = "Live View Process On/Off"; this.liveViewProcessOnOffToolStripMenuItem.Click += new System.EventHandler(this.liveViewProcessOnOffToolStripMenuItem_Click); // // zoomFitToolStripMenuItem // this.zoomFitToolStripMenuItem.Name = "zoomFitToolStripMenuItem"; - this.zoomFitToolStripMenuItem.Size = new System.Drawing.Size(207, 22); + this.zoomFitToolStripMenuItem.Size = new System.Drawing.Size(211, 22); this.zoomFitToolStripMenuItem.Text = "Zoom Fit"; this.zoomFitToolStripMenuItem.Click += new System.EventHandler(this.zoomFitToolStripMenuItem_Click); // // readBarcodeToolStripMenuItem // this.readBarcodeToolStripMenuItem.Name = "readBarcodeToolStripMenuItem"; - this.readBarcodeToolStripMenuItem.Size = new System.Drawing.Size(207, 22); + this.readBarcodeToolStripMenuItem.Size = new System.Drawing.Size(211, 22); this.readBarcodeToolStripMenuItem.Text = "Read Barcode"; // // livetaskToolStripMenuItem // this.livetaskToolStripMenuItem.Name = "livetaskToolStripMenuItem"; - this.livetaskToolStripMenuItem.Size = new System.Drawing.Size(207, 22); + this.livetaskToolStripMenuItem.Size = new System.Drawing.Size(211, 22); this.livetaskToolStripMenuItem.Text = "live-task"; // // toolStripMenuItem3 // this.toolStripMenuItem3.Name = "toolStripMenuItem3"; - this.toolStripMenuItem3.Size = new System.Drawing.Size(204, 6); + this.toolStripMenuItem3.Size = new System.Drawing.Size(208, 6); // // keyenceTrigOnToolStripMenuItem // this.keyenceTrigOnToolStripMenuItem.Name = "keyenceTrigOnToolStripMenuItem"; - this.keyenceTrigOnToolStripMenuItem.Size = new System.Drawing.Size(207, 22); + this.keyenceTrigOnToolStripMenuItem.Size = new System.Drawing.Size(211, 22); this.keyenceTrigOnToolStripMenuItem.Text = "keyence Trig On"; this.keyenceTrigOnToolStripMenuItem.Click += new System.EventHandler(this.keyenceTrigOnToolStripMenuItem_Click); // // keyenceTrigOffToolStripMenuItem // this.keyenceTrigOffToolStripMenuItem.Name = "keyenceTrigOffToolStripMenuItem"; - this.keyenceTrigOffToolStripMenuItem.Size = new System.Drawing.Size(207, 22); + this.keyenceTrigOffToolStripMenuItem.Size = new System.Drawing.Size(211, 22); this.keyenceTrigOffToolStripMenuItem.Text = "Keyence Trig Off"; this.keyenceTrigOffToolStripMenuItem.Click += new System.EventHandler(this.keyenceTrigOffToolStripMenuItem_Click); // // keyenceSaveImageToolStripMenuItem // this.keyenceSaveImageToolStripMenuItem.Name = "keyenceSaveImageToolStripMenuItem"; - this.keyenceSaveImageToolStripMenuItem.Size = new System.Drawing.Size(207, 22); + this.keyenceSaveImageToolStripMenuItem.Size = new System.Drawing.Size(211, 22); this.keyenceSaveImageToolStripMenuItem.Text = "Keyence Save Image"; this.keyenceSaveImageToolStripMenuItem.Click += new System.EventHandler(this.keyenceSaveImageToolStripMenuItem_Click); // // toolStripMenuItem5 // this.toolStripMenuItem5.Name = "toolStripMenuItem5"; - this.toolStripMenuItem5.Size = new System.Drawing.Size(204, 6); + this.toolStripMenuItem5.Size = new System.Drawing.Size(208, 6); // // panel37 // @@ -1617,12 +1617,12 @@ this.cmBarcode.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripMenuItem22}); this.cmBarcode.Name = "cmLot1"; - this.cmBarcode.Size = new System.Drawing.Size(108, 26); + this.cmBarcode.Size = new System.Drawing.Size(109, 26); // // toolStripMenuItem22 // this.toolStripMenuItem22.Name = "toolStripMenuItem22"; - this.toolStripMenuItem22.Size = new System.Drawing.Size(107, 22); + this.toolStripMenuItem22.Size = new System.Drawing.Size(108, 22); this.toolStripMenuItem22.Text = "Delete"; // // cmDebug @@ -1661,7 +1661,7 @@ this.toolStripMenuItem16, this.getImageToolStripMenuItem}); this.cmDebug.Name = "cmVision"; - this.cmDebug.Size = new System.Drawing.Size(256, 590); + this.cmDebug.Size = new System.Drawing.Size(254, 590); // // inboundToolStripMenuItem // @@ -1671,109 +1671,109 @@ this.apiCheckToolStripMenuItem, this.barcodeTestToolStripMenuItem}); this.inboundToolStripMenuItem.Name = "inboundToolStripMenuItem"; - this.inboundToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.inboundToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.inboundToolStripMenuItem.Text = "Inbound"; // // postDataToolStripMenuItem // this.postDataToolStripMenuItem.Name = "postDataToolStripMenuItem"; - this.postDataToolStripMenuItem.Size = new System.Drawing.Size(160, 22); + this.postDataToolStripMenuItem.Size = new System.Drawing.Size(158, 22); this.postDataToolStripMenuItem.Text = "Post Data"; this.postDataToolStripMenuItem.Click += new System.EventHandler(this.postDataToolStripMenuItem_Click); // // manualPrintToolStripMenuItem // this.manualPrintToolStripMenuItem.Name = "manualPrintToolStripMenuItem"; - this.manualPrintToolStripMenuItem.Size = new System.Drawing.Size(160, 22); + this.manualPrintToolStripMenuItem.Size = new System.Drawing.Size(158, 22); this.manualPrintToolStripMenuItem.Text = "Manual Print"; this.manualPrintToolStripMenuItem.Click += new System.EventHandler(this.manualPrintToolStripMenuItem_Click); // // apiCheckToolStripMenuItem // this.apiCheckToolStripMenuItem.Name = "apiCheckToolStripMenuItem"; - this.apiCheckToolStripMenuItem.Size = new System.Drawing.Size(160, 22); + this.apiCheckToolStripMenuItem.Size = new System.Drawing.Size(158, 22); this.apiCheckToolStripMenuItem.Text = "api check"; this.apiCheckToolStripMenuItem.Click += new System.EventHandler(this.apiCheckToolStripMenuItem_Click); // // barcodeTestToolStripMenuItem // this.barcodeTestToolStripMenuItem.Name = "barcodeTestToolStripMenuItem"; - this.barcodeTestToolStripMenuItem.Size = new System.Drawing.Size(160, 22); + this.barcodeTestToolStripMenuItem.Size = new System.Drawing.Size(158, 22); this.barcodeTestToolStripMenuItem.Text = "Barcode Test"; this.barcodeTestToolStripMenuItem.Click += new System.EventHandler(this.barcodeTestToolStripMenuItem_Click); // // countToolStripMenuItem // this.countToolStripMenuItem.Name = "countToolStripMenuItem"; - this.countToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.countToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.countToolStripMenuItem.Text = "Debug Window"; this.countToolStripMenuItem.Click += new System.EventHandler(this.countToolStripMenuItem_Click); // // motionEmulatorToolStripMenuItem // this.motionEmulatorToolStripMenuItem.Name = "motionEmulatorToolStripMenuItem"; - this.motionEmulatorToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.motionEmulatorToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.motionEmulatorToolStripMenuItem.Text = "Finish Window"; this.motionEmulatorToolStripMenuItem.Click += new System.EventHandler(this.motionEmulatorToolStripMenuItem_Click); // // customerRuleToolStripMenuItem // this.customerRuleToolStripMenuItem.Name = "customerRuleToolStripMenuItem"; - this.customerRuleToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.customerRuleToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.customerRuleToolStripMenuItem.Text = "Customer Rule"; this.customerRuleToolStripMenuItem.Click += new System.EventHandler(this.customerRuleToolStripMenuItem_Click); // // sMResetToolStripMenuItem // this.sMResetToolStripMenuItem.Name = "sMResetToolStripMenuItem"; - this.sMResetToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.sMResetToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.sMResetToolStripMenuItem.Text = "S/M Reset"; this.sMResetToolStripMenuItem.Click += new System.EventHandler(this.sMResetToolStripMenuItem_Click); // // systemParameterMotorToolStripMenuItem // this.systemParameterMotorToolStripMenuItem.Name = "systemParameterMotorToolStripMenuItem"; - this.systemParameterMotorToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.systemParameterMotorToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.systemParameterMotorToolStripMenuItem.Text = "System Parameter(Motion))"; this.systemParameterMotorToolStripMenuItem.Click += new System.EventHandler(this.systemParameterMotorToolStripMenuItem_Click); // // regExTestToolStripMenuItem // this.regExTestToolStripMenuItem.Name = "regExTestToolStripMenuItem"; - this.regExTestToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.regExTestToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.regExTestToolStripMenuItem.Text = "RegEx Test"; this.regExTestToolStripMenuItem.Click += new System.EventHandler(this.regExTestToolStripMenuItem_Click); // // debugModeToolStripMenuItem // this.debugModeToolStripMenuItem.Name = "debugModeToolStripMenuItem"; - this.debugModeToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.debugModeToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.debugModeToolStripMenuItem.Text = "Debug Mode"; this.debugModeToolStripMenuItem.Click += new System.EventHandler(this.debugModeToolStripMenuItem_Click); // // toolStripMenuItem8 // this.toolStripMenuItem8.Name = "toolStripMenuItem8"; - this.toolStripMenuItem8.Size = new System.Drawing.Size(252, 6); + this.toolStripMenuItem8.Size = new System.Drawing.Size(250, 6); // // dIOMonitorToolStripMenuItem // this.dIOMonitorToolStripMenuItem.Name = "dIOMonitorToolStripMenuItem"; - this.dIOMonitorToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.dIOMonitorToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.dIOMonitorToolStripMenuItem.Text = "Test Barcode Process"; this.dIOMonitorToolStripMenuItem.Click += new System.EventHandler(this.dIOMonitorToolStripMenuItem_Click); // // refreshControklToolStripMenuItem // this.refreshControklToolStripMenuItem.Name = "refreshControklToolStripMenuItem"; - this.refreshControklToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.refreshControklToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.refreshControklToolStripMenuItem.Text = "Refresh Controkl"; this.refreshControklToolStripMenuItem.Click += new System.EventHandler(this.refreshControklToolStripMenuItem_Click); // // 작업선택화면ToolStripMenuItem // this.작업선택화면ToolStripMenuItem.Name = "작업선택화면ToolStripMenuItem"; - this.작업선택화면ToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.작업선택화면ToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.작업선택화면ToolStripMenuItem.Text = "Data Buffer (SID Ref)"; this.작업선택화면ToolStripMenuItem.Click += new System.EventHandler(this.workSelectionScreenToolStripMenuItem_Click); // @@ -1783,19 +1783,19 @@ this.testToolStripMenuItem, this.detectCountToolStripMenuItem}); this.historyToolStripMenuItem.Name = "historyToolStripMenuItem"; - this.historyToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.historyToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.historyToolStripMenuItem.Text = "History"; // // testToolStripMenuItem // this.testToolStripMenuItem.Name = "testToolStripMenuItem"; - this.testToolStripMenuItem.Size = new System.Drawing.Size(160, 22); + this.testToolStripMenuItem.Size = new System.Drawing.Size(158, 22); this.testToolStripMenuItem.Text = "test"; // // detectCountToolStripMenuItem // this.detectCountToolStripMenuItem.Name = "detectCountToolStripMenuItem"; - this.detectCountToolStripMenuItem.Size = new System.Drawing.Size(160, 22); + this.detectCountToolStripMenuItem.Size = new System.Drawing.Size(158, 22); this.detectCountToolStripMenuItem.Text = "Detect Count"; // // menusToolStripMenuItem @@ -1804,20 +1804,20 @@ this.sampleToolStripMenuItem, this.clearToolStripMenuItem1}); this.menusToolStripMenuItem.Name = "menusToolStripMenuItem"; - this.menusToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.menusToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.menusToolStripMenuItem.Text = "Menus"; // // sampleToolStripMenuItem // this.sampleToolStripMenuItem.Name = "sampleToolStripMenuItem"; - this.sampleToolStripMenuItem.Size = new System.Drawing.Size(111, 22); + this.sampleToolStripMenuItem.Size = new System.Drawing.Size(109, 22); this.sampleToolStripMenuItem.Text = "Add"; this.sampleToolStripMenuItem.Click += new System.EventHandler(this.sampleToolStripMenuItem_Click); // // clearToolStripMenuItem1 // this.clearToolStripMenuItem1.Name = "clearToolStripMenuItem1"; - this.clearToolStripMenuItem1.Size = new System.Drawing.Size(111, 22); + this.clearToolStripMenuItem1.Size = new System.Drawing.Size(109, 22); this.clearToolStripMenuItem1.Text = "Clear"; this.clearToolStripMenuItem1.Click += new System.EventHandler(this.clearToolStripMenuItem1_Click); // @@ -1828,27 +1828,27 @@ this.jObEndToolStripMenuItem, this.multiSIDSelectToolStripMenuItem}); this.screenToolStripMenuItem.Name = "screenToolStripMenuItem"; - this.screenToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.screenToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.screenToolStripMenuItem.Text = "Screen"; // // jOBStartToolStripMenuItem // this.jOBStartToolStripMenuItem.Name = "jOBStartToolStripMenuItem"; - this.jOBStartToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.jOBStartToolStripMenuItem.Size = new System.Drawing.Size(175, 22); this.jOBStartToolStripMenuItem.Text = "JOB Start"; this.jOBStartToolStripMenuItem.Click += new System.EventHandler(this.jOBStartToolStripMenuItem_Click); // // jObEndToolStripMenuItem // this.jObEndToolStripMenuItem.Name = "jObEndToolStripMenuItem"; - this.jObEndToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.jObEndToolStripMenuItem.Size = new System.Drawing.Size(175, 22); this.jObEndToolStripMenuItem.Text = "JOb End"; this.jObEndToolStripMenuItem.Click += new System.EventHandler(this.jObEndToolStripMenuItem_Click); // // multiSIDSelectToolStripMenuItem // this.multiSIDSelectToolStripMenuItem.Name = "multiSIDSelectToolStripMenuItem"; - this.multiSIDSelectToolStripMenuItem.Size = new System.Drawing.Size(177, 22); + this.multiSIDSelectToolStripMenuItem.Size = new System.Drawing.Size(175, 22); this.multiSIDSelectToolStripMenuItem.Text = "Multi SID Select"; this.multiSIDSelectToolStripMenuItem.Click += new System.EventHandler(this.multiSIDSelectToolStripMenuItem_Click); // @@ -1861,105 +1861,105 @@ this.axis3ToolStripMenuItem, this.axis4ToolStripMenuItem}); this.motionParameterToolStripMenuItem.Name = "motionParameterToolStripMenuItem"; - this.motionParameterToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.motionParameterToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.motionParameterToolStripMenuItem.Text = "Motion Parameter"; // // axis0ToolStripMenuItem // this.axis0ToolStripMenuItem.Name = "axis0ToolStripMenuItem"; - this.axis0ToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.axis0ToolStripMenuItem.Size = new System.Drawing.Size(114, 22); this.axis0ToolStripMenuItem.Text = "Axis 0"; this.axis0ToolStripMenuItem.Click += new System.EventHandler(this.axis0ToolStripMenuItem_Click); // // axis1ToolStripMenuItem // this.axis1ToolStripMenuItem.Name = "axis1ToolStripMenuItem"; - this.axis1ToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.axis1ToolStripMenuItem.Size = new System.Drawing.Size(114, 22); this.axis1ToolStripMenuItem.Text = "Axis 1"; this.axis1ToolStripMenuItem.Click += new System.EventHandler(this.axis1ToolStripMenuItem_Click); // // axis2ToolStripMenuItem // this.axis2ToolStripMenuItem.Name = "axis2ToolStripMenuItem"; - this.axis2ToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.axis2ToolStripMenuItem.Size = new System.Drawing.Size(114, 22); this.axis2ToolStripMenuItem.Text = "Axis 2"; this.axis2ToolStripMenuItem.Click += new System.EventHandler(this.axis2ToolStripMenuItem_Click); // // axis3ToolStripMenuItem // this.axis3ToolStripMenuItem.Name = "axis3ToolStripMenuItem"; - this.axis3ToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.axis3ToolStripMenuItem.Size = new System.Drawing.Size(114, 22); this.axis3ToolStripMenuItem.Text = "Axis 3"; this.axis3ToolStripMenuItem.Click += new System.EventHandler(this.axis3ToolStripMenuItem_Click); // // axis4ToolStripMenuItem // this.axis4ToolStripMenuItem.Name = "axis4ToolStripMenuItem"; - this.axis4ToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.axis4ToolStripMenuItem.Size = new System.Drawing.Size(114, 22); this.axis4ToolStripMenuItem.Text = "Axis 4"; this.axis4ToolStripMenuItem.Click += new System.EventHandler(this.axis4ToolStripMenuItem_Click); // // processListToolStripMenuItem // this.processListToolStripMenuItem.Name = "processListToolStripMenuItem"; - this.processListToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.processListToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.processListToolStripMenuItem.Text = "Process List"; this.processListToolStripMenuItem.Click += new System.EventHandler(this.processListToolStripMenuItem_Click); // // toolStripMenuItem7 // this.toolStripMenuItem7.Name = "toolStripMenuItem7"; - this.toolStripMenuItem7.Size = new System.Drawing.Size(252, 6); + this.toolStripMenuItem7.Size = new System.Drawing.Size(250, 6); // // visionProcess0ToolStripMenuItem // this.visionProcess0ToolStripMenuItem.Name = "visionProcess0ToolStripMenuItem"; - this.visionProcess0ToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.visionProcess0ToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.visionProcess0ToolStripMenuItem.Text = "Vision Status(0)"; this.visionProcess0ToolStripMenuItem.Click += new System.EventHandler(this.visionProcess0ToolStripMenuItem_Click); // // visionProcess1ToolStripMenuItem // this.visionProcess1ToolStripMenuItem.Name = "visionProcess1ToolStripMenuItem"; - this.visionProcess1ToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.visionProcess1ToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.visionProcess1ToolStripMenuItem.Text = "Vision Status(1)"; this.visionProcess1ToolStripMenuItem.Click += new System.EventHandler(this.visionProcess1ToolStripMenuItem_Click); // // speedLimitToolStripMenuItem // this.speedLimitToolStripMenuItem.Name = "speedLimitToolStripMenuItem"; - this.speedLimitToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.speedLimitToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.speedLimitToolStripMenuItem.Text = "Speed Limit"; this.speedLimitToolStripMenuItem.Click += new System.EventHandler(this.speedLimitToolStripMenuItem_Click); // // toolStripMenuItem10 // this.toolStripMenuItem10.Name = "toolStripMenuItem10"; - this.toolStripMenuItem10.Size = new System.Drawing.Size(252, 6); + this.toolStripMenuItem10.Size = new System.Drawing.Size(250, 6); // // bcdRegProcessClearToolStripMenuItem // this.bcdRegProcessClearToolStripMenuItem.Name = "bcdRegProcessClearToolStripMenuItem"; - this.bcdRegProcessClearToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.bcdRegProcessClearToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.bcdRegProcessClearToolStripMenuItem.Text = "Bcd RegProcess Clear"; this.bcdRegProcessClearToolStripMenuItem.Click += new System.EventHandler(this.bcdRegProcessClearToolStripMenuItem_Click); // // displayVARToolStripMenuItem // this.displayVARToolStripMenuItem.Name = "displayVARToolStripMenuItem"; - this.displayVARToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.displayVARToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.displayVARToolStripMenuItem.Text = "Display VAR"; this.displayVARToolStripMenuItem.Click += new System.EventHandler(this.displayVARToolStripMenuItem_Click); // // toolStripMenuItem16 // this.toolStripMenuItem16.Name = "toolStripMenuItem16"; - this.toolStripMenuItem16.Size = new System.Drawing.Size(252, 6); + this.toolStripMenuItem16.Size = new System.Drawing.Size(250, 6); // // getImageToolStripMenuItem // this.getImageToolStripMenuItem.Name = "getImageToolStripMenuItem"; - this.getImageToolStripMenuItem.Size = new System.Drawing.Size(255, 22); + this.getImageToolStripMenuItem.Size = new System.Drawing.Size(253, 22); this.getImageToolStripMenuItem.Text = "Get Image"; // // idxDataGridViewTextBoxColumn @@ -2274,7 +2274,7 @@ // toolStripLabel2 // this.toolStripLabel2.Name = "toolStripLabel2"; - this.toolStripLabel2.Size = new System.Drawing.Size(10, 44); + this.toolStripLabel2.Size = new System.Drawing.Size(11, 44); this.toolStripLabel2.Text = " "; this.toolStripLabel2.Click += new System.EventHandler(this.pictureBox1_Click); // @@ -2297,7 +2297,7 @@ // this.모델선택ToolStripMenuItem.Image = global::Project.Properties.Resources.icons8_object_40; this.모델선택ToolStripMenuItem.Name = "모델선택ToolStripMenuItem"; - this.모델선택ToolStripMenuItem.Size = new System.Drawing.Size(174, 46); + this.모델선택ToolStripMenuItem.Size = new System.Drawing.Size(175, 46); this.모델선택ToolStripMenuItem.Text = "Work Model"; this.모델선택ToolStripMenuItem.Click += new System.EventHandler(this.ModelSelectionToolStripMenuItem_Click); // @@ -2305,20 +2305,20 @@ // this.btModelMot.Image = global::Project.Properties.Resources.Motor; this.btModelMot.Name = "btModelMot"; - this.btModelMot.Size = new System.Drawing.Size(174, 46); + this.btModelMot.Size = new System.Drawing.Size(175, 46); this.btModelMot.Text = "Motion Model"; this.btModelMot.Click += new System.EventHandler(this.toolStripMenuItem23_Click); // // toolStripMenuItem12 // this.toolStripMenuItem12.Name = "toolStripMenuItem12"; - this.toolStripMenuItem12.Size = new System.Drawing.Size(171, 6); + this.toolStripMenuItem12.Size = new System.Drawing.Size(172, 6); // // 바코드룰ToolStripMenuItem // this.바코드룰ToolStripMenuItem.Image = global::Project.Properties.Resources.icons8_add_40; this.바코드룰ToolStripMenuItem.Name = "바코드룰ToolStripMenuItem"; - this.바코드룰ToolStripMenuItem.Size = new System.Drawing.Size(174, 46); + this.바코드룰ToolStripMenuItem.Size = new System.Drawing.Size(175, 46); this.바코드룰ToolStripMenuItem.Text = "Barcode Rule"; this.바코드룰ToolStripMenuItem.Click += new System.EventHandler(this.BarcodeRuleToolStripMenuItem_Click); // @@ -2329,14 +2329,14 @@ this.인바운드데이터업데이트ToolStripMenuItem}); this.sID정보ToolStripMenuItem.Image = global::Project.Properties.Resources.icons8_save_to_grid_40; this.sID정보ToolStripMenuItem.Name = "sID정보ToolStripMenuItem"; - this.sID정보ToolStripMenuItem.Size = new System.Drawing.Size(174, 46); + this.sID정보ToolStripMenuItem.Size = new System.Drawing.Size(175, 46); this.sID정보ToolStripMenuItem.Text = "SID Info"; // // 프로그램열기ToolStripMenuItem // this.프로그램열기ToolStripMenuItem.Image = global::Project.Properties.Resources.Arrow_Right; this.프로그램열기ToolStripMenuItem.Name = "프로그램열기ToolStripMenuItem"; - this.프로그램열기ToolStripMenuItem.Size = new System.Drawing.Size(222, 46); + this.프로그램열기ToolStripMenuItem.Size = new System.Drawing.Size(226, 46); this.프로그램열기ToolStripMenuItem.Text = "Open Program"; this.프로그램열기ToolStripMenuItem.Click += new System.EventHandler(this.OpenProgramToolStripMenuItem_Click); // @@ -2344,7 +2344,7 @@ // this.인바운드데이터업데이트ToolStripMenuItem.Image = global::Project.Properties.Resources.Arrow_Right; this.인바운드데이터업데이트ToolStripMenuItem.Name = "인바운드데이터업데이트ToolStripMenuItem"; - this.인바운드데이터업데이트ToolStripMenuItem.Size = new System.Drawing.Size(222, 46); + this.인바운드데이터업데이트ToolStripMenuItem.Size = new System.Drawing.Size(226, 46); this.인바운드데이터업데이트ToolStripMenuItem.Text = "Update SID Information"; this.인바운드데이터업데이트ToolStripMenuItem.Click += new System.EventHandler(this.InboundDataUpdateToolStripMenuItem_Click); // @@ -2454,7 +2454,7 @@ // this.toolStripMenuItem11.Image = ((System.Drawing.Image)(resources.GetObject("toolStripMenuItem11.Image"))); this.toolStripMenuItem11.Name = "toolStripMenuItem11"; - this.toolStripMenuItem11.Size = new System.Drawing.Size(156, 46); + this.toolStripMenuItem11.Size = new System.Drawing.Size(159, 46); this.toolStripMenuItem11.Text = "Program"; this.toolStripMenuItem11.Click += new System.EventHandler(this.toolStripMenuItem11_Click); // @@ -2462,7 +2462,7 @@ // this.toolStripMenuItem13.Image = ((System.Drawing.Image)(resources.GetObject("toolStripMenuItem13.Image"))); this.toolStripMenuItem13.Name = "toolStripMenuItem13"; - this.toolStripMenuItem13.Size = new System.Drawing.Size(156, 46); + this.toolStripMenuItem13.Size = new System.Drawing.Size(159, 46); this.toolStripMenuItem13.Text = "Log"; this.toolStripMenuItem13.Click += new System.EventHandler(this.toolStripMenuItem13_Click); // @@ -2470,7 +2470,7 @@ // this.toolStripMenuItem14.Image = ((System.Drawing.Image)(resources.GetObject("toolStripMenuItem14.Image"))); this.toolStripMenuItem14.Name = "toolStripMenuItem14"; - this.toolStripMenuItem14.Size = new System.Drawing.Size(156, 46); + this.toolStripMenuItem14.Size = new System.Drawing.Size(159, 46); this.toolStripMenuItem14.Text = "Capture"; this.toolStripMenuItem14.Click += new System.EventHandler(this.toolStripMenuItem14_Click); // @@ -2478,7 +2478,7 @@ // this.toolStripMenuItem15.Image = ((System.Drawing.Image)(resources.GetObject("toolStripMenuItem15.Image"))); this.toolStripMenuItem15.Name = "toolStripMenuItem15"; - this.toolStripMenuItem15.Size = new System.Drawing.Size(156, 46); + this.toolStripMenuItem15.Size = new System.Drawing.Size(159, 46); this.toolStripMenuItem15.Text = "Saved Data"; this.toolStripMenuItem15.Click += new System.EventHandler(this.toolStripMenuItem15_Click); // @@ -2526,7 +2526,7 @@ // this.btManage.Image = global::Project.Properties.Resources.icons8_control_panel_40; this.btManage.Name = "btManage"; - this.btManage.Size = new System.Drawing.Size(153, 46); + this.btManage.Size = new System.Drawing.Size(154, 46); this.btManage.Text = "Manage"; this.btManage.Click += new System.EventHandler(this.managementToolStripMenuItem_Click_1); // @@ -2534,7 +2534,7 @@ // this.빠른실행ToolStripMenuItem.Image = global::Project.Properties.Resources.icons8_object_40; this.빠른실행ToolStripMenuItem.Name = "빠른실행ToolStripMenuItem"; - this.빠른실행ToolStripMenuItem.Size = new System.Drawing.Size(153, 46); + this.빠른실행ToolStripMenuItem.Size = new System.Drawing.Size(154, 46); this.빠른실행ToolStripMenuItem.Text = "Quick Run"; this.빠른실행ToolStripMenuItem.Click += new System.EventHandler(this.quickExecutionToolStripMenuItem_Click); // @@ -2562,7 +2562,7 @@ this.btManualPrint.Image = ((System.Drawing.Image)(resources.GetObject("btManualPrint.Image"))); this.btManualPrint.ImageTransparentColor = System.Drawing.Color.Magenta; this.btManualPrint.Name = "btManualPrint"; - this.btManualPrint.Size = new System.Drawing.Size(119, 44); + this.btManualPrint.Size = new System.Drawing.Size(120, 44); this.btManualPrint.Text = "Manual Print"; this.btManualPrint.Click += new System.EventHandler(this.toolStripButton1_Click); // @@ -2576,7 +2576,7 @@ this.btJobCancle.Image = ((System.Drawing.Image)(resources.GetObject("btJobCancle.Image"))); this.btJobCancle.ImageTransparentColor = System.Drawing.Color.Magenta; this.btJobCancle.Name = "btJobCancle"; - this.btJobCancle.Size = new System.Drawing.Size(108, 44); + this.btJobCancle.Size = new System.Drawing.Size(109, 44); this.btJobCancle.Text = "Cancel Job"; this.btJobCancle.ToolTipText = "Cancel Current Job"; this.btJobCancle.Click += new System.EventHandler(this.toolStripButton13_Click); @@ -2600,7 +2600,7 @@ this.btCheckInfo.Image = global::Project.Properties.Resources.Barcode; this.btCheckInfo.ImageTransparentColor = System.Drawing.Color.Magenta; this.btCheckInfo.Name = "btCheckInfo"; - this.btCheckInfo.Size = new System.Drawing.Size(130, 44); + this.btCheckInfo.Size = new System.Drawing.Size(131, 44); this.btCheckInfo.Text = "Barcode Check"; this.btCheckInfo.Click += new System.EventHandler(this.toolStripButton15_Click); // @@ -2627,27 +2627,27 @@ this.toolStripMenuItem30}); this.바코드LToolStripMenuItem.Image = global::Project.Properties.Resources.Arrow_Left; this.바코드LToolStripMenuItem.Name = "바코드LToolStripMenuItem"; - this.바코드LToolStripMenuItem.Size = new System.Drawing.Size(196, 46); + this.바코드LToolStripMenuItem.Size = new System.Drawing.Size(197, 46); this.바코드LToolStripMenuItem.Text = "Camera (QRCode)"; this.바코드LToolStripMenuItem.Click += new System.EventHandler(this.button1_Click_1); // // 연결ToolStripMenuItem // this.연결ToolStripMenuItem.Name = "연결ToolStripMenuItem"; - this.연결ToolStripMenuItem.Size = new System.Drawing.Size(155, 46); + this.연결ToolStripMenuItem.Size = new System.Drawing.Size(156, 46); this.연결ToolStripMenuItem.Text = "Connect"; this.연결ToolStripMenuItem.Click += new System.EventHandler(this.ConnectToolStripMenuItem_Click); // // toolStripMenuItem26 // this.toolStripMenuItem26.Name = "toolStripMenuItem26"; - this.toolStripMenuItem26.Size = new System.Drawing.Size(152, 6); + this.toolStripMenuItem26.Size = new System.Drawing.Size(153, 6); // // toolStripMenuItem21 // this.toolStripMenuItem21.Image = global::Project.Properties.Resources.icons8_green_circle_40; this.toolStripMenuItem21.Name = "toolStripMenuItem21"; - this.toolStripMenuItem21.Size = new System.Drawing.Size(155, 46); + this.toolStripMenuItem21.Size = new System.Drawing.Size(156, 46); this.toolStripMenuItem21.Text = "Trigger On"; this.toolStripMenuItem21.Click += new System.EventHandler(this.toolStripMenuItem21_Click); // @@ -2655,20 +2655,20 @@ // this.toolStripMenuItem24.Image = global::Project.Properties.Resources.icons8_black_circle_40; this.toolStripMenuItem24.Name = "toolStripMenuItem24"; - this.toolStripMenuItem24.Size = new System.Drawing.Size(155, 46); + this.toolStripMenuItem24.Size = new System.Drawing.Size(156, 46); this.toolStripMenuItem24.Text = "Trigger Off"; this.toolStripMenuItem24.Click += new System.EventHandler(this.toolStripMenuItem24_Click); // // toolStripMenuItem6 // this.toolStripMenuItem6.Name = "toolStripMenuItem6"; - this.toolStripMenuItem6.Size = new System.Drawing.Size(152, 6); + this.toolStripMenuItem6.Size = new System.Drawing.Size(153, 6); // // toolStripMenuItem28 // this.toolStripMenuItem28.Image = global::Project.Properties.Resources.icons8_green_circle_40; this.toolStripMenuItem28.Name = "toolStripMenuItem28"; - this.toolStripMenuItem28.Size = new System.Drawing.Size(155, 46); + this.toolStripMenuItem28.Size = new System.Drawing.Size(156, 46); this.toolStripMenuItem28.Text = "Trigger On"; this.toolStripMenuItem28.Click += new System.EventHandler(this.toolStripMenuItem28_Click); // @@ -2676,7 +2676,7 @@ // this.toolStripMenuItem30.Image = global::Project.Properties.Resources.icons8_black_circle_40; this.toolStripMenuItem30.Name = "toolStripMenuItem30"; - this.toolStripMenuItem30.Size = new System.Drawing.Size(155, 46); + this.toolStripMenuItem30.Size = new System.Drawing.Size(156, 46); this.toolStripMenuItem30.Text = "Trigger Off"; this.toolStripMenuItem30.Click += new System.EventHandler(this.toolStripMenuItem30_Click); // @@ -2697,27 +2697,27 @@ this.loadMemoryToolStripMenuItem}); this.바코드키엔스ToolStripMenuItem.Image = global::Project.Properties.Resources.Barcode; this.바코드키엔스ToolStripMenuItem.Name = "바코드키엔스ToolStripMenuItem"; - this.바코드키엔스ToolStripMenuItem.Size = new System.Drawing.Size(196, 46); + this.바코드키엔스ToolStripMenuItem.Size = new System.Drawing.Size(197, 46); this.바코드키엔스ToolStripMenuItem.Text = "Barcode (Keyence)"; // // toolStripMenuItem17 // this.toolStripMenuItem17.Image = global::Project.Properties.Resources.icons8_camera_40; this.toolStripMenuItem17.Name = "toolStripMenuItem17"; - this.toolStripMenuItem17.Size = new System.Drawing.Size(172, 46); + this.toolStripMenuItem17.Size = new System.Drawing.Size(173, 46); this.toolStripMenuItem17.Text = "Get Image"; this.toolStripMenuItem17.Click += new System.EventHandler(this.toolStripMenuItem17_Click); // // toolStripMenuItem18 // this.toolStripMenuItem18.Name = "toolStripMenuItem18"; - this.toolStripMenuItem18.Size = new System.Drawing.Size(169, 6); + this.toolStripMenuItem18.Size = new System.Drawing.Size(170, 6); // // triggerOnToolStripMenuItem1 // this.triggerOnToolStripMenuItem1.Image = global::Project.Properties.Resources.icons8_green_circle_40; this.triggerOnToolStripMenuItem1.Name = "triggerOnToolStripMenuItem1"; - this.triggerOnToolStripMenuItem1.Size = new System.Drawing.Size(172, 46); + this.triggerOnToolStripMenuItem1.Size = new System.Drawing.Size(173, 46); this.triggerOnToolStripMenuItem1.Text = "Trigger On"; this.triggerOnToolStripMenuItem1.Click += new System.EventHandler(this.triggerOnToolStripMenuItem1_Click); // @@ -2725,20 +2725,20 @@ // this.triggerOffToolStripMenuItem1.Image = global::Project.Properties.Resources.icons8_black_circle_40; this.triggerOffToolStripMenuItem1.Name = "triggerOffToolStripMenuItem1"; - this.triggerOffToolStripMenuItem1.Size = new System.Drawing.Size(172, 46); + this.triggerOffToolStripMenuItem1.Size = new System.Drawing.Size(173, 46); this.triggerOffToolStripMenuItem1.Text = "Trigger Off"; this.triggerOffToolStripMenuItem1.Click += new System.EventHandler(this.triggerOffToolStripMenuItem1_Click); // // toolStripMenuItem19 // this.toolStripMenuItem19.Name = "toolStripMenuItem19"; - this.toolStripMenuItem19.Size = new System.Drawing.Size(169, 6); + this.toolStripMenuItem19.Size = new System.Drawing.Size(170, 6); // // connectToolStripMenuItem // this.connectToolStripMenuItem.Image = global::Project.Properties.Resources.Socket; this.connectToolStripMenuItem.Name = "connectToolStripMenuItem"; - this.connectToolStripMenuItem.Size = new System.Drawing.Size(172, 46); + this.connectToolStripMenuItem.Size = new System.Drawing.Size(173, 46); this.connectToolStripMenuItem.Text = "Connect"; this.connectToolStripMenuItem.Click += new System.EventHandler(this.connectToolStripMenuItem_Click); // @@ -2746,20 +2746,20 @@ // this.disConnectToolStripMenuItem.Image = global::Project.Properties.Resources.icons8_unavailable_40; this.disConnectToolStripMenuItem.Name = "disConnectToolStripMenuItem"; - this.disConnectToolStripMenuItem.Size = new System.Drawing.Size(172, 46); + this.disConnectToolStripMenuItem.Size = new System.Drawing.Size(173, 46); this.disConnectToolStripMenuItem.Text = "DisConnect"; this.disConnectToolStripMenuItem.Click += new System.EventHandler(this.disConnectToolStripMenuItem_Click); // // toolStripMenuItem20 // this.toolStripMenuItem20.Name = "toolStripMenuItem20"; - this.toolStripMenuItem20.Size = new System.Drawing.Size(169, 6); + this.toolStripMenuItem20.Size = new System.Drawing.Size(170, 6); // // resetToolStripMenuItem // this.resetToolStripMenuItem.Image = global::Project.Properties.Resources.icons8_delete_40; this.resetToolStripMenuItem.Name = "resetToolStripMenuItem"; - this.resetToolStripMenuItem.Size = new System.Drawing.Size(172, 46); + this.resetToolStripMenuItem.Size = new System.Drawing.Size(173, 46); this.resetToolStripMenuItem.Text = "Reset"; this.resetToolStripMenuItem.Click += new System.EventHandler(this.resetToolStripMenuItem_Click); // @@ -2767,14 +2767,14 @@ // this.webManagerToolStripMenuItem.Image = global::Project.Properties.Resources.icons8_what_40; this.webManagerToolStripMenuItem.Name = "webManagerToolStripMenuItem"; - this.webManagerToolStripMenuItem.Size = new System.Drawing.Size(172, 46); + this.webManagerToolStripMenuItem.Size = new System.Drawing.Size(173, 46); this.webManagerToolStripMenuItem.Text = "Web Manager"; this.webManagerToolStripMenuItem.Click += new System.EventHandler(this.webManagerToolStripMenuItem_Click); // // toolStripMenuItem23 // this.toolStripMenuItem23.Name = "toolStripMenuItem23"; - this.toolStripMenuItem23.Size = new System.Drawing.Size(169, 6); + this.toolStripMenuItem23.Size = new System.Drawing.Size(170, 6); // // loadMemoryToolStripMenuItem // @@ -2788,62 +2788,62 @@ this.toolStripMenuItem35, this.toolStripMenuItem36}); this.loadMemoryToolStripMenuItem.Name = "loadMemoryToolStripMenuItem"; - this.loadMemoryToolStripMenuItem.Size = new System.Drawing.Size(172, 46); + this.loadMemoryToolStripMenuItem.Size = new System.Drawing.Size(173, 46); this.loadMemoryToolStripMenuItem.Text = "Load Memory"; // // toolStripMenuItem27 // this.toolStripMenuItem27.Name = "toolStripMenuItem27"; - this.toolStripMenuItem27.Size = new System.Drawing.Size(80, 22); + this.toolStripMenuItem27.Size = new System.Drawing.Size(81, 22); this.toolStripMenuItem27.Text = "1"; this.toolStripMenuItem27.Click += new System.EventHandler(this.toolStripMenuItem27_Click); // // toolStripMenuItem29 // this.toolStripMenuItem29.Name = "toolStripMenuItem29"; - this.toolStripMenuItem29.Size = new System.Drawing.Size(80, 22); + this.toolStripMenuItem29.Size = new System.Drawing.Size(81, 22); this.toolStripMenuItem29.Text = "2"; this.toolStripMenuItem29.Click += new System.EventHandler(this.toolStripMenuItem27_Click); // // toolStripMenuItem31 // this.toolStripMenuItem31.Name = "toolStripMenuItem31"; - this.toolStripMenuItem31.Size = new System.Drawing.Size(80, 22); + this.toolStripMenuItem31.Size = new System.Drawing.Size(81, 22); this.toolStripMenuItem31.Text = "3"; this.toolStripMenuItem31.Click += new System.EventHandler(this.toolStripMenuItem27_Click); // // toolStripMenuItem32 // this.toolStripMenuItem32.Name = "toolStripMenuItem32"; - this.toolStripMenuItem32.Size = new System.Drawing.Size(80, 22); + this.toolStripMenuItem32.Size = new System.Drawing.Size(81, 22); this.toolStripMenuItem32.Text = "4"; this.toolStripMenuItem32.Click += new System.EventHandler(this.toolStripMenuItem27_Click); // // toolStripMenuItem33 // this.toolStripMenuItem33.Name = "toolStripMenuItem33"; - this.toolStripMenuItem33.Size = new System.Drawing.Size(80, 22); + this.toolStripMenuItem33.Size = new System.Drawing.Size(81, 22); this.toolStripMenuItem33.Text = "5"; this.toolStripMenuItem33.Click += new System.EventHandler(this.toolStripMenuItem27_Click); // // toolStripMenuItem34 // this.toolStripMenuItem34.Name = "toolStripMenuItem34"; - this.toolStripMenuItem34.Size = new System.Drawing.Size(80, 22); + this.toolStripMenuItem34.Size = new System.Drawing.Size(81, 22); this.toolStripMenuItem34.Text = "6"; this.toolStripMenuItem34.Click += new System.EventHandler(this.toolStripMenuItem27_Click); // // toolStripMenuItem35 // this.toolStripMenuItem35.Name = "toolStripMenuItem35"; - this.toolStripMenuItem35.Size = new System.Drawing.Size(80, 22); + this.toolStripMenuItem35.Size = new System.Drawing.Size(81, 22); this.toolStripMenuItem35.Text = "7"; this.toolStripMenuItem35.Click += new System.EventHandler(this.toolStripMenuItem27_Click); // // toolStripMenuItem36 // this.toolStripMenuItem36.Name = "toolStripMenuItem36"; - this.toolStripMenuItem36.Size = new System.Drawing.Size(80, 22); + this.toolStripMenuItem36.Size = new System.Drawing.Size(81, 22); this.toolStripMenuItem36.Text = "8"; this.toolStripMenuItem36.Click += new System.EventHandler(this.toolStripMenuItem27_Click); // diff --git a/Handler/Project/fMain.resx b/Handler/Project/fMain.resx index ccec18b..e4a3ede 100644 --- a/Handler/Project/fMain.resx +++ b/Handler/Project/fMain.resx @@ -211,384 +211,380 @@ If pressed while motion is moving, motion will also stop. iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAQWSURBVFhH7dZvTBNnHAdw3kxfLVmyoV75o0UEghpfmSUG - FRNFlLa0dMBINn2hsoxMjS8GoZIc0IKKW5BtRdnMTBZBpYdSA1cRIwa12QuTTVRiJ0URFBORK63Bv+Hn - 8zTPYe96rUc55pt+k2/o0evz+6T3rzHRRBONQtF12L7UsLYjGpbp07LMuPYc80LLnnZrOplWrcNWVHyj - 6ROyq2TSaZhHXiob3cV2VQ7LtCMUhK/NpXMwG8nHghJf9/g6ddCdQTaVSc6FtlVo+AgG5DraoKCrHb6+ - aPf/xdtCIAPpLPNWw7aWkI9PZ4nVV5h4+AksMN0bJv+afQyONkprPz2MBxd222FHDws7exzTxdsYK0Zq - aXoKHfZCskxM6vGnn6p/8YxgIFXaB/HVgzR5a3bRdNrsPC4QJm6hBHIze4rTd5/9HK+zxOr9Sd3oAx5I - lfe/XlzPfeYfEmnwBYEH4cMo/ubE3XHZIXm40QV1KPGoN52iH70WAFHjKu91k1GRRdvJNOAhBejbkUKJ - m4/OSTEQdUTdOHEZ48RAquwWLDIPriPjZh5yK/ng4eWL9xPhYG2r0w+TBKKqTK5RMm7mwecQHoKvVimQ - uHi/QFxORzuk/D4WFogbZxmqIiNnliyWmcSDZJ+DrPAcXH3ytgAXCkiZIrxg8BOCH4ZvJTxmd3eHAIcr - vtVk2S9A0tEJeUBUFT1whYyVH//jiwzMRa2yNcO1Y7+Bt9YC93+ug1MnT8DervOSt5gVfw4F4cIBqbI+ - SKgdyiKj5QU/W3eda4GW443w6NABeF5jDqoHYXt/rQdL8wnQd9r8uIwzwgsjsCGBqHHl/z0lo8NnqqFh - vs9iyZ+oNV/ySaBC9WHdAWj+4xhsaByUxOGGA+LGmwdrCUM63PZv9F7TjzekAHL7gK6Byj1NEQGp7Xfe - LKQHFhBOcDhjbiVn1ANnzOv3lBT3+mj6uRRCqv+Um6DF8B1cWbEKbGu2RgZEjaPd1wgnOO+BpHl6L/dt - Ue9oxf4RKdRodRV0/fA9sJnrwJmWNt3ZAKnSW+hQ388mJGGCgAF9ZjS6+vftG6bRL5V/TWVgLyqA3pUr - BTBlgH3wRYVrjJCECQfkO5C53imFCuxsgbiJVQ9KCet95ADdmRlzClRV3PUmVLvNhCSMUkB6zZapmQLD - wvgoBbyavtyltnob1PXciw8BVftlwPgoBXSmpNzG6yU1TSYGQgOBqtKbE7JhfJQG8llqnUzAUPzLOiIY - n7kC8kmueRxLXkYWj8GwiTNqh6VgfGUAX15PS6shSyofyM+f58nTF4eChgL2xMa+cqam/nV12bIkstTc - JhRUDPzfYeJg6PhXum1jRp07EPjRYeJMZWfPHzfklgysz7AjmPXv5OR48lY00UTzcRMT8w7v8y50hSqQ - nAAAAABJRU5ErkJggg== + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAQWSURBVFhH7dZRTBt1HAfwvbg9mZgo06sFV2SU4JY9LSYL + bpgoovRKSwUkUfewyTIyNXuwhI7kgJbOoQZRy4YuLjGDTe7YWkOvK5ixsK3ZwxK1m8Q6yoawYTLkSrsw + naY/879w2P6uLVco7qXf5Jem17v/75P7/+9/Xbcum2yyyUz0g+zzOp79VMdzfprn5uiz3H2aPx3Uubl+ + 2sPW1V/teQRfE5tiBtbjYxmJfsipquA5J81zkLrYgN7DvYSvl6LuuHOZ+jBYgo+vKhXnBrbRPDdNAJWe + AajxOuGNIZf4Sb5jZDHP/aPj+xvwOJsckdq8j36HjZYbU/i3FcfoGaBo1+kp0rh22AV7RnjYO+JZKvKd + YDGSZpiozs3VSuNoj999VPNZaJoAKbMf1G0TTHynFUbnZl0SLhaGqzYB8hX+lGAYPvM4GWeTI/yxpjsC + EpBqGnvwTKfwGO6XVsgDIU0rvnO49pz3JJxuHc8eyTsaLqaY2w/igGY/PN1yYxj3TCu0m+siTWqGUt89 + qaq9ThmQrF1N9/x5gsNAqvEaPGWd2In7Ks7iVrLs9EpFzsPAF/p9Iiwh0OwHlSUwg/sqDllD4h30OmWY + REXOi8VVDDqh8MvZlEBxqm2Trbi3opTx3AJppHgN8vFrcPvJ63G4ZEDKssIHhrwhpGZkK5Ew7w4PyoB4 + qylznYP8o/PKgGSqmfELuP+yEV9fiw0reQ5a2V64dOwLCNttcPOTDjh18gS87/0u4Raz5etJGS4VkGr0 + Q659sgwbUoa8W9852wd9x7vh9pHDcK/dKquQ3Qajn3eCrfcEGNysiCv5Nv7BUAQka7Hp17vYkDDRrq4N + EZutet5u/T6SAJWsfus4DL1fHYMXuydkMCVAUmrrhB174iLsftMQtnxwFTdPp24x7dDyXo8MpwRI7f75 + 7yeZ8Y3YtRTBVNkimAwgmKrGQg31oxGGuYcByeqHJgv0GffBhS3bgN3xmgynCEimmglewq6l/AdcrCpD + WHirbnSm+dA0BpGaaWsF74H9wJfuBF9R0VKtBkiZr4HaerMc28TIgDH1h8kUGDt4cIphmOiPlkZw1dXA + 6NatcbDMAP3wRHNgFtvEpAJKNV66y4dBuFYLJJXXesuMfYqAwdKSNQWqmn8J57YFrdgmJlNAZserUYxb + DpgSJiVTwIvFzwU0jnCXplO4vxxQdUgBTEqmgL7CwutkvPyehbxYaCxQZf5pXjFMSqaBUp51LOQSKPln + vSKYlLUCSilov5ODj6WVkNH4smCipzAqTeCfl4uK2vHYGQtUV68PVRnqk0GTAUdycv7yabXfXNy8OR+P + uSZJBsXA/x2GQ6Bzr+vfnjXpg7HAhw7DiZaXb5gzVjaM7ypx+bRax5WCAjU+J5tssnlI+Rfv8y50Kpg4 + AwAAAABJRU5ErkJggg== iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAI0SURBVFhH7ZjNTttAFIXzGoU+BT8WQpQIG1RF/AlVlA2q - 8l4IEFtQaXkCWJEAQoJ1S1i0qwahQjJZAMmQO9yJbOc4146wVz7St4h9z5yjcSZKUsiVK9eQUkXn46M7 - sdecce6anqNTot7wnF3lTo1ybDxRuf/e+F+wYCpQVqKSZufAQmlCO8nxslJ+rBjX+cfxsuACGcDxspA5 - CzheFjL7UctzurW5Bu9BSjP4egiOl4XMFirXPq3ozk1Nt8rrcMaPma9U9NPOFrzvh+NlITOhloqmnK7f - Gzq/bnTr2xc4S9hydl4qyfGykNmwMKWfv+/3Ak3JiJ1UK65un1UDs/R60OPmeFnI3CNGyfDOEe2Lc61W - veBaITheFjIHGFBy2HIEx8tC5j5Qydqtbl9eBq7FLUdwvCxkhoCSfpKUIzheFjJHQiV/HvaXu75KVI7g - eFnIHIV5z1WDp5Wgx90qf4WeKDheFjIj0IHw83Zw4pfkeFnIHAaf1gv9fPQjcC1JSY6Xhcx+YLlzPhCR - H0FySY6XhcyWgeXs3JAlOV4WMhOxylmo5OFBYLbzu6bVxlL/LMPxspDZUPqkX06O5XKW0E7S+5Ouwdku - HC8LmXtwSbGchUtK5QiOl4XMftTirPm2gu5BqNj84HIEx8tC5izgeFnInAUcL6s7XA+bUyfJz076EQ0X - SZGGO7nN8bLob4gs//p48Mb+ND+PfeD4eFLz0yNmJ7tbjxZ9F7pr084lLpcrVy6rQuEVBSwdzqFOWm0A - AAAASUVORK5CYII= + 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 + D3oaxdPZVBESAAAAAElFTkSuQmCC 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 - aQAAAABJRU5ErkJggg== + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAQKSURBVFhH3VhJixNBFI4belLxJoogLofBSVcljuACuYwz + VS8j7oInvYr7AoIXPbvd/SPijgdXBBk9iAt60dGrjmamq4Rp+WrSPZ3XnU4nk4j4wXfJe1Xv66pXr16l + UPjfEZQHl1ivuskXap/x6DDoS73XCjUAG/f/KzClkZIRdM0Ken1R0pSVFKTR2QS9NlJfMUUl+Txdhy9o + 56TUz7mQvPTF8DNfqh183lnDF9V1RtB9HrBTGkl3JktqDY/TEYyggzUxOM6DzJa1fvphSnSAx2sLVuiT + WTk2W2JuI/UlHjcXrNAX+IQ95HkePxPY1nZX7qekX1bSWyvp3fj6So3bs+hWMu9240DkzTlfqsdWqCM1 + r7qCz1PrVyutpON+UT/h49KInMx1cIxH9/jgJNX73yU9Av9g//55tqy2WanPGKGvu/pYUqesp7cGhYtz + 4eNL2mOl/hSOH1tO1haH3/B5jaTbXE8DUOf4IE4j9K3A27l0aq1aCCHG2/6N+8xw6AtWMahU5mOML+kh + xPml6m5f6BtJfwrCD09FqyLsxFUq8yfKI6us1KPcnsGXSAP3UWW1DbGaCUQx57occH1x50aq91gFiDP9 + 9DVpb8EifQgqlUVhvGYCwdRr0eVOinNILL1bgfZWztFtq6Q98XiZAqW+Evd1wKXOHUP6kh45HyR/ij2L + aeKALIHWo1cNzmiLMuueUEdwWrMPRPcILVOb1OJIIPo57hSnq2mulCRtPaNQA5HA6TqV4gRxYnDcfYTQ + Z7mtl2xIC3TB3CHGt85H6Osptp7RiOqhvAK7zvCUovRwW+QTF5i1xb2hPoO49QYjxU4BbptIIBKSO/SW + I5unbyP+e5x6YySwZZnpJjfoMTQRVupjCVudiTLjVtGjV9wxJIpqg3M9LVxXkuKfyZI+6sZ79DRhi6hH + ebyCkXQ16ThNLrBTcZNFehGUywt8T+/itjiN1Jfj8RxwQXPHkHGBuPCzTl9zDn1BwZ/qG1pmxfDHpH2G + xiPRqK4OtDrcGQwFoglFw4DWCS0U92tGrBzEoVXDk5Pb40QHznVFwKOaD3CDhL6BY49tNVI9wKFCsHqi + f+b+ETfoMeQcthUrZ6S+m/Bh/C0UcV0NSP3C4vCbxpzTn8KrKCgU5lhBW/BERR7X27bTKCVRy4+ca7Gt + oJF0k+tJAA8XPGD44DS6kyjoBGoan6fedR/LPq0znOij75PFHav5PKnAE7Dduvi9b2gCT07c3Z08O/GP + GNeRCTym+UQ9o6BzPH4u/NN/fYTAdufNyXaInGt7W5sBBwePah6kU+K05j4Q7QAvu2bFPA9xolvWuW4A + VxGaTjQYWTk6bdOjuFuNqHp8nr8CtEXoJ5FP6IJB9ye61BsTLdP/iD/nDdZLx6Q0lQAAAABJRU5ErkJg + gg== iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAODSURBVFhH7ZjpThNRHMVJfB2XR9APvoJRH8FQ+KBgZCkk - RkShGwQsYIcWKBSGVaWWgKBSSECWEsGwQ1hkq5QAsYBE/t5zuzCFEUrpNBG5yUkPd+6c8+udaUkn7nL8 - t0O8I17RqoQbOpVwW0nlPLBcR5e/NryhjTff06rMbiaKkdwaVeldf/3JQ6MS7mtvWn5nZmYeZDTPU1qH - W1GhA13oPBXSd1nNbpwgF6ak0JmbaFk78XLjnsOWx2Lnjkr9bt53ueNLr/lxjo/cePMtLJILiIXQDQY/ - zvHxzwJm1ozSU2EgqkLm0Z6IALMMn0ibYCZjeg0Z1WJ0xLKQmc2ypV0RAepTRSpOs1F5dgPteFaIdj3n - EjKQhUxdam1IV9iA6s+eoPRPamjo4wBZXzZR+fMG8q4vyxaHo92NVV8OA3S19/NsaVfYgFl9u0EZUkQa - 6Ro6DI8QUgqHXUQmsqVd5wIMKTkj5I4nFA5zigBCZ4UMwrH10ntYMUAoAFmSXk2bK4shx6TaWl0iU0aN - 7JtRFPBgZ53sQhvpEy1keVYvu5PYuTIGhjV2Uys/R3pcMUAUOSztVJBspbnhcX5fQVJI+MD84rcJKnxc - Sc0Cg/QeQioCKIVbnpjhc7ivKl40UlFKFXU1dnPBYy5wz61Nzx6DjDqgHFxAv7bc1GPvobr8Zq5e5vfZ - nHTNUchzAWoGvUEhZNjp+ivcWSSFHHH6AKVdYQPWLVBQBeki2TRvWLCVVqYihwsIGchCZoG6NqQrIkCj - oY107JP4triF2qwdURGykGk0fAjpighQnNojweaiElN3VIVMZEu7IgKMpS4Bz6uLBShO7lEe+57CK/7O - U9eTbWiD+8IcB1md37kvKuoki32Ce1PVIBc85nAMHmtxDjwykAV/tCNswC/sn0DfzDY/Aa8j7CsMvyGc - g8vcv2LfX63tk9ybtQ5qqndxXy04ueAxh2PwWItz4JGBLHhpRy/rhNcmCDf9OMcHHuRg0fj8Ns1vHlBn - xwR/Xdgi6nJO0+z6Pve9PXM0teTlvt+1RKOzm9x/HfvBBY85HIPHWpwDjwxkwUs7xuZ8sCf+cMdjh/yk - 115H3QAPiKXe1/aT5mHlz1OfdFXoHcm6xDJ+AnZSLiyaws7ZWRc6rYaWR36Mk4dV15KEd8O3PAZCV9hw - gcGfdLH7Qe6hYzSVm2i6euplvRwXd8TF/QE1/NiTtMURWQAAAABJRU5ErkJggg== + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAN3SURBVFhH7ZjpThNRGIZJvB3RS8Af3oJRL8FQ+kOByFJI + jIBCNwjIYocWKJROoaBSS0AQKSRFlhLBsENYZKuUUGIBiXzmPbVlOq2ldEtEvuTNvD1zzvs9PTN/5qSk + XNf/Wvw9/oZCwt1WSri7iVTpI90t9BL3D1uKdO0DhUTrVEi0lCQ55ZL6+2KOkCWXcA8VabpfhYWFZwVd + a5TX70yo0AO90PNCSO9j1TqxQByUaKFnmVS3G/Zx453Dlidj58SSvVvzPu70+lQxl7/K0rV3MEm8OFlC + bzCIufz1zwIWGmfoGTceVyFT3CcqwCL1ACkytFSdb6RqGR8f5RtZZol6IHZAVS5PtXkGaiwx05Frm+jY + FZOQgSxkKnNN0QHKPrn8Uj010uTHcdK/7KTGYjN59raCmkaq4/0db06JmRx9Yyxb2CtiwKLRY7/UOTxN + D02eh0cJKYTDLiIT2cJeMQEGNLkk5JErEA5jCQGMBtIPVxz4DicMUAhZl99KB9sbQVA+uXc2SVNgDPln + Egp4drRHFq6XVFId6Z63BzWHsHMNxWY2x6LpYWuSAohGVl0fVWbpaXVqjr1XkBAS3je+8XWeqrKbqYvr + oTPPOWRCAIVwW/PLf3Zqm5pedFBNTgsNdQwzwWPM987tLq0EQcYdMBScTz/dTrJb7NRW0cU0YrHTqdsZ + MEcMGROgfMLjF0KmbI6/wl1GQshpmxdQ2CtiwLZ18qsynyeD/A1VZetpezF6OJ+QgSxkVspMAb2iAqxW + 95JSqqO3td3Uq++Pi5CFzGr1h9gB+cUT4gwOqtMMx1XIRHbMgMnUNWCsulqA/MIJlefw7Irf5bJ2Mkzu + M19VaiW97RvzNTWDpLPMM69pmWCCxxjuwWMu1sAjA1mhekQM+NlJNLp8yBbgOu0i9g1hm9hi/pXMRD19 + C8xrFVbqbHcw38rZmOAxhnvwmIs18MhAFrywx4jTC6jI4NLEXP7CQQ4mza0d0trBGQ32z7PruptoyLZE + K3unzI/YV2lx08P8mGOTZlYOmP8y+50JHmO4B4+5WAOPDGTBC3vMrnphw36449ihIvO1x9o2zgKSqfem + MZI/bv4R9ugD1aSyZimlDWwBdlIcFG9h5yymMUJPvbr7iZgnZOmV3Zn4N2zLkyD0ihjOV+ykK70+VXzg + GG+VSTU3L3ys13WV6zc1/NiTCjg6UAAAAABJRU5ErkJggg== - iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAAAMRJREFUWEdj - GAWjYDCAaVUu/4nFM2pde6Ha6AdAFt/ekEoQX12T/H9Bk+eXmTUufVCt9AHEOhCEB8SRpDgQhM+vSPw/ - t87jDyzaaYWhziPNgUfmRf2f2+Dxf8/s2P8fTzf//3qulSYYw4HE4iVtvv8f7CnHaig1McguqPMgDsSm - aCDxqAMpxaMOpBSPOpBSPOpASvGoAynFow6kFI86kFI86kBK8agDKcWjDqQUjzqQUjzqQEoxhgMHI4Y6 - bxSMggEEDAwAcaf95QqwNkoAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAAALxJREFUWEdj + YBgFo2AQgGlVLv+JxTNqXXvR9dMcgCy+vSGVIL66Jvn/gibPLzNrXPrQzaApINaBA+ZIUhwIwudXJP6f + W+fxBz36qY3JcuCReVH/5zZ4/N8zO/b/x9PN/7+ea6UJxnAgsXhJm+//B3vKMQykNsZwILqCgcajDqQU + jzqQUjzqQErxqAMpxaMOpBSPOpBSPOpASvGoAynFow6kFI86kFI86kBK8agDKcUYDhyMGO7AUTAKBhAA + AHGn/eXya/8LAAAAAElFTkSuQmCC - iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAAAMRJREFUWEdj - GAWjYDCAaVUu/4nFM2pde6Ha6AdAFt/ekEoQX12T/H9Bk+eXmTUufVCt9AHEOhCEB8SRpDgQhM+vSPw/ - t87jDyzaaYWhziPNgUfmRf2f2+Dxf8/s2P8fTzf//3qulSYYw4HE4iVtvv8f7CnHaig1McguqPMgDsSm - aCDxqAMpxaMOpBSPOpBSPOpASvGoAynFow6kFI86kFI86kBK8agDKcWjDqQUjzqQUjzqQEoxhgMHI4Y6 - bxSMggEEDAwAcaf95QqwNkoAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAAALxJREFUWEdj + YBgFo2AQgGlVLv+JxTNqXXvR9dMcgCy+vSGVIL66Jvn/gibPLzNrXPrQzaApINaBA+ZIUhwIwudXJP6f + W+fxBz36qY3JcuCReVH/5zZ4/N8zO/b/x9PN/7+ea6UJxnAgsXhJm+//B3vKMQykNsZwILqCgcajDqQU + jzqQUjzqQErxqAMpxaMOpBSPOpBSPOpASvGoAynFow6kFI86kFI86kBK8agDKcUYDhyMGO7AUTAKBhAA + AHGn/eXya/8LAAAAAElFTkSuQmCC - iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAAAMRJREFUWEdj - GAWjYDCAaVUu/4nFM2pde6Ha6AdAFt/ekEoQX12T/H9Bk+eXmTUufVCt9AHEOhCEB8SRpDgQhM+vSPw/ - t87jDyzaaYWhziPNgUfmRf2f2+Dxf8/s2P8fTzf//3qulSYYw4HE4iVtvv8f7CnHaig1McguqPMgDsSm - aCDxqAMpxaMOpBSPOpBSPOpASvGoAynFow6kFI86kFI86kBK8agDKcWjDqQUjzqQUjzqQEoxhgMHI4Y6 - bxSMggEEDAwAcaf95QqwNkoAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAAALxJREFUWEdj + YBgFo2AQgGlVLv+JxTNqXXvR9dMcgCy+vSGVIL66Jvn/gibPLzNrXPrQzaApINaBA+ZIUhwIwudXJP6f + W+fxBz36qY3JcuCReVH/5zZ4/N8zO/b/x9PN/7+ea6UJxnAgsXhJm+//B3vKMQykNsZwILqCgcajDqQU + jzqQUjzqQErxqAMpxaMOpBSPOpBSPOpASvGoAynFow6kFI86kFI86kBK8agDKcUYDhyMGO7AUTAKBhAA + AHGn/eXya/8LAAAAAElFTkSuQmCC - iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAAAMRJREFUWEdj - GAWjYDCAaVUu/4nFM2pde6Ha6AdAFt/ekEoQX12T/H9Bk+eXmTUufVCt9AHEOhCEB8SRpDgQhM+vSPw/ - t87jDyzaaYWhziPNgUfmRf2f2+Dxf8/s2P8fTzf//3qulSYYw4HE4iVtvv8f7CnHaig1McguqPMgDsSm - aCDxqAMpxaMOpBSPOpBSPOpASvGoAynFow6kFI86kFI86kBK8agDKcWjDqQUjzqQUjzqQEoxhgMHI4Y6 - bxSMggEEDAwAcaf95QqwNkoAAAAASUVORK5CYII= + iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAAALxJREFUWEdj + YBgFo2AQgGlVLv+JxTNqXXvR9dMcgCy+vSGVIL66Jvn/gibPLzNrXPrQzaApINaBA+ZIUhwIwudXJP6f + W+fxBz36qY3JcuCReVH/5zZ4/N8zO/b/x9PN/7+ea6UJxnAgsXhJm+//B3vKMQykNsZwILqCgcajDqQU + jzqQUjzqQErxqAMpxaMOpBSPOpBSPOpASvGoAynFow6kFI86kFI86kBK8agDKcUYDhyMGO7AUTAKBhAA + AHGn/eXya/8LAAAAAElFTkSuQmCC iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADDSURBVFhHYxgFo2AwgGlVLv+JxjUuvVBt9AMgi29vSCWI - r65J/j+t3vPLjCqXPqhW+gBiHQjCA+JIUhwIwudXJP6vr9P6A492GmGo80hz4JF5Uf/nNnj83zM79v/H - 083/v55rpQnGcCCxeEmb7/8He8qxGkpNDLIL6jyIA7EpGkg86kBK8agDKcWjDqQUjzqQUjzqQErxqAMp - xaMOpBSPOpBSPOpASvGoAynFow6kFI86kFKM4cDBiKHOGwWjYAABAwMAl/T9hXWK+3wAAAAASUVORK5C - YII= + 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 - TgDQASA1MVpwzwAAAABJRU5ErkJggg== + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK + YKyG2WBogqMYJQOtCEVRFBGdTBCJfRnkS4VaaWNT5sqx1BUxRXxDHYxAJLvkusEeBaPAB+5z4Jzn+t3X + /aLhnEfjo8m+dCoa+7/C3O2Hqe0zDC+8KG+cRZHZhdzaaWTVTCLDMIY0vfM04Nfh77/G/sEhwpEDbO3t + I7TxE8urEVy99fT/AL5gWDLrTB/hnF4XsW0khCu5ln8DmJliT2AXrcNBsU1gj/MH4nMeKwBrPktM28xM + cX79DFKrHHD5d9D26hvicx4pABt2lpg10zYzU0zr7+e3xXGcrkEB2O2TNec9nJFwB3alZn5jZorfeDZh + 6Q3g8s06BeCoKF4MRURoH1+BY2oNCbeb0TIclIYxOhzf8frTOuo7FxCbbVIAzpni0iceEc8vhzEwGkJD + lx83ymxifejdKjRNk/8PWnyIyTQqAJek0jqHwfEVscu31baIu8+90sTE4nY025dQ2/5FIPpnXlzKuK8A + HBUzHot52djqQ6HZhfR7IwK4mKpHtvEDMqvfCiQ6zaAAXM8x94aIWTNrLLG4kVUzgaTSPlzLtyJOZxbb + 1wtfyg4Q+AfA3aZlButjSfxGcUJBk4g5tuP3haQKRKXcUQDOmbvNTpPOJeFFjordZmbWTNvMTHFUcpUC + nOccAdABIDXXE1nzAAAAAElFTkSuQmCC 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 - DT7fX3+e7xvou4uzAAAAAElFTkSuQmCC + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAPUSURBVFhH3VhNSxtBGBbaW+3P6Ae2tGe9hGRnZtW2lIAR + hFLjH9BWk5408eviwTX+jd5Lj15Md1cRKyTWFPoNXqoRTIyHpmx5Rl2Td+NmokkVH3hg2Z2Z92Fn5v1q + a7uusILBxyZjY6vd3e9tzr8vBQIHZkdHGcSz3d39Dd9Mzkcxls5vCZa7um5bnL+xGftl9/YW1oeGDrdj + MSc/NeUU5+ac0vy8JJ7xbjsedzLRaAlj07r+02IsthQItNN1L4ylQOCmJUTM5rywOTBwsDMx4RwuLKjT + MBzM2QyHixbnBfx5rEntnAtpIe6vCPHZ7u8v7M3MeI03SKyBP7oiRG45GLxH7TUES9Oep4UoLgUCf6mh + ixJrpjs7ix9CoWfUrhJsTRvEYc9PTnoWbxZ3k0kIPbA07SW17wv8OUzcm531LNpsYsthK61pT6mOmsCZ + w7a28s9R7iYSDrbb1rS7VE8VcLNwIVpx5uoxMzJSNhnb8r3duP5rkcg+nfy/uBEOF23OR6kuCThh+Dkl + V5JKHZG+P4uK4/empx2bsf2azhwRAk6YTvIwlXLKm5tOOZNRMgqWNzacci7nHC4uer5RSmfOWIzqa0P4 + 2kkkPBOqeCzuBCoiIc4dryASEcfU9R9V4hDM4d0RkugEykqD9UQ2MtalYTjp3t5imvOHpwIZiyHwewaf + QRXDKmPOIhIMi7FXrkCkRchK6EA/+gnw+6ZCaLGFeOcKRD6H9IgOrMdaQmq9a0QcmE8mnVVd/+IKRORA + DkcHqpAKqsR5xIGFuTnHEqLgCkQWXFK4IGexlsjzigMP5ucdi7E/rRWYzTZP4JXf4it/SaSbicc9A/3o + J8Tvmwq3x8aq3QyymPVo9Oo46sHBksnYyKnAUOjRlQp1PT1FOxh84AoEcA7rlpNIFrLZhgxWiixvbdVN + Fn6Pj3uTBQDxGKkOneDhsUgVcSeESBVxIDTgyFF9SPfbUVRfZsKan56G/9v/yPktqk/C1LTRtb6+y0n5 + DUOm/JYQp1kMxXHRlLuUoml4uGzp+qe3kcgNqqsKaEegBERRTRdpFZHJI5qZjN2hemoC7QhZuKucxwtS + FkpClCxNe0J1+ALtCIhEUU0XbRbx52RfkfMX1L4S0I7Adjf9TBqGPHPY1ob/HAXaEaj4EWmwHR5jDRKu + BGvhQiifuXqQDUxNe42iGo5URhyFsOiysoHJ2D7ibN3beh5IZ85YDKHI7ukpoPqSLeBk8qgFbBiSsgWc + TMqsBIEfZSRC6XFn1ds1aAUQzFEaIi1a0fWvOKsnTXQ84x2+YYwVCnXQ+dcG/wB/nu8b8pEjogAAAABJ + RU5ErkJggg== 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 - 9CkXAAAAAElFTkSuQmCC + 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 - PQAAAABJRU5ErkJggg== + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADISURBVFhHY2AYBSMR7L/1T2bXvV+r6YlBdqK7AyfYe/un + 9u57v//TE4PsRHcHTjDqQCx4+Dtw1bVf/0PWfYNjEB8m13HsB4ocIYysl2oOXHjp13/FaZ/hGMSHyeXt + +o4iRwgj6x05Dhz0UUxrPOpASjHFDhz0mWTUgZQ6cPOtX+DiBIZBfGTHI8sRwsh6qeZAWuPh78BBH8WD + PpOMOpBSB9IajzqQUkyxAwd9g3XQZ5JB78BBH8W0xqMOpBQPLwcO+gHMUTCcAABB2DuYaWEClwAAAABJ + RU5ErkJggg== AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0 dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh - d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABQQgAAhEMAAL5C - AADIQgs= + d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAAC6QgCAiEMAAIhC + AAANQws= AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0 dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh - d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABhQwAAhEMAAL5C - AADIQgs= + d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAABvQwCAiEMAAIhC + AAANQws= AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0 dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABlTeXN0ZW0uRHJh - d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAADHQwAAhEMAAL5C - AADIQgs= + d2luZy5SZWN0YW5nbGVGBAAAAAF4AXkFd2lkdGgGaGVpZ2h0AAAAAAsLCwsCAAAAAIDAQwCAiEMAAIhC + AAANQws=