Exemple #1
0
        public MainWindow()
        {
            InitializeComponent();

            this.Title = "BO23 KIOSK (version " + Assembly.GetExecutingAssembly().GetName().Version.ToString() + ")";

            /* -------------------------------------------------
             * เรียกค่าตั้งเริ่มต้นจากฐานข้อมูล
             * -------------------------------------------------*/
            string LogPath    = string.Empty;
            ushort dioCardNbr = 0;

            using (DB_Manager.ConfigManagement cm = new DB_Manager.ConfigManagement())
            {
                try { Testing = cm.GetIntValue("TESTING") == 1 ? true : false; }
                catch { Testing = false; }
                try { LogPath = cm.GetCharValue("KIOSK_LogPath"); }
                catch { LogPath = @"C:\BHM\Log\kiosk_gui"; }
                try { OrgCode = cm.GetCharValue("OrgCode"); }
                catch { OrgCode = "0689"; /* ซีพี-หนองจอก */ }
                try { dioCardNbr = (ushort)cm.GetIntValue("DIO_Card_Nbr"); }
                catch { dioCardNbr = 0 /*เข้าเป็นตัวแรก*/; }
            }
            log = new LogFile.Log(LogPath, "Main log");

            /* -------------------------------------------------
             * เขียนข้อความเริ่มต้น
             * -------------------------------------------------*/
            log.AppendText("-------------------------------------------------");
            log.AppendText("START NEW RUNNING.");
            log.AppendText("-------------------------------------------------");
            System.Diagnostics.Debug.WriteLine("-------------------------------------------------");
            System.Diagnostics.Debug.WriteLine("START NEW RUNNING.");
            System.Diagnostics.Debug.WriteLine("-------------------------------------------------");

            /* -------------------------------------------------
             * ติดตั้ง DIO กับระบบ
             * -------------------------------------------------*/
            DIO_Library.D7432.SetupLog();
            short  dioCode;
            string dioMessage;

            DIO_Library.D7432.Initial(dioCardNbr, out dioCode, out dioMessage);
            DIO_Library.D7432.Testing = false; //<-------------------------------------------------------------<-TESTING

            /* -------------------------------------------------
             * ติดตั้ง ระบบส่งหน้า ของ WPF
             * -------------------------------------------------*/
            pageTransControl.TransitionType = WpfPageTransitions.PageTransitionType.Appear;
            Helper.NewPage(this, PageName.SplashScreen);

            /* -------------------------------------------------
             * ติดตั้ง Events
             * -------------------------------------------------*/
            this.Loaded   += new RoutedEventHandler(MainWindow_Loaded);
            this.Unloaded += new RoutedEventHandler(MainWindow_Unloaded);
        }
        public SplashScreen(MainWindow owner)
        {
            InitializeComponent();
            this.Unloaded += new RoutedEventHandler(UserControl_Unloaded);
            _kiosk         = owner;

            //if (_kiosk.motionSensor == null) _kiosk.motionSensor = new DiThreadWithState(1000);
            //var h = new MotionStateEventHandler(Motion_Callback);
            //if (!_kiosk.motionSensor.IsOnMotionDetectRegistered(h)) _kiosk.motionSensor.OnMotionDetected += h;
            //_kiosk.motionSensor.Start();

            //อ่านชื่อ Splash Images
            try
            {
                string SplashImageDIR = string.Empty;
                int    SplashInterval;
                using (DB_Manager.ConfigManagement cm = new DB_Manager.ConfigManagement())
                {
                    SplashImageDIR = cm.GetCharValue("SplashImageDIR");
                    SplashInterval = (int)cm.GetIntValue("SplashInterval");
                }
                filePaths = System.IO.Directory.GetFiles(SplashImageDIR);
                LoadImage();
                timerSplashImage.Tick    += timerSplashScreen_Tick;
                timerSplashImage.Interval = new TimeSpan(0, 0, SplashInterval);
                timerSplashImage.Start();
            }
            catch { }
        }
Exemple #3
0
        // initial log
        public void InitLog()
        {
            // load configures
            using (DB_Manager.ConfigManagement cm = new DB_Manager.ConfigManagement())
            {
                /* ----------------------------------------------
                 * Log file.
                 * ----------------------------------------------*/
                string logPath;
                try
                {
                    logPath = cm.GetCharValue("VIS_LogPath");
                    if (logPath.Equals(""))
                    {
                        logPath = @"C:\BHM\Log\VISION";
                    }
                }
                catch { logPath = @"C:\BHM\Log\VISION"; }

                /* ----------------------------------------------
                 * Create log file
                 * ----------------------------------------------*/
                log = new LogFile.Log(logPath, "vision");

                // สร้าง timer

                // บันทึก
                log.AppendText("AUTO RUN CREATED.");
            }
        }
Exemple #4
0
        public static void SetupLog()
        {
            string logPath = string.Empty;

            using (DB_Manager.ConfigManagement cm = new DB_Manager.ConfigManagement())
            {
                try { logPath = cm.GetCharValue("DIO_LogPath"); }
                catch { logPath = @"C:\BHM\BHMLog\DIO"; }
            }
            log = new LogFile.Log(logPath, "DIO");
        }
Exemple #5
0
        private void button1_Click(object sender, EventArgs e)
        {
            string LogPath = string.Empty;

            using (DB_Manager.ConfigManagement cm = new DB_Manager.ConfigManagement())
            {
                try { LogPath = cm.GetCharValue("Motion_Card_Log_Path"); }
                catch { LogPath = @"C:\TestLog\Test"; }
            }
            log = new LogFile.Log(LogPath, "Test log");
        }
Exemple #6
0
 public void OnRunning(object sender, EventArgs e)
 {
     timer.Enabled = false;
     // load configures
     using (DB_Manager.ConfigManagement cm = new DB_Manager.ConfigManagement())
     {
         string request = cm.GetCharValue(_runRequestFieldName);
         if (request.ToUpper().Equals("RUN"))
         {
             OnPropertyChanged("RUN ONCE");
         }
     }
     timer.Enabled = true;
 }
        public RC522MegawinReader(int readTimeout, string portName)
        {
            string logPath = string.Empty;

            using (DB_Manager.ConfigManagement cm = new DB_Manager.ConfigManagement())
            {
                try { logPath = cm.GetCharValue("RFID_Reader_LogPath"); }
                catch { logPath = @"C:\BHM\BHMlog\RFID_Reader"; }
            }
            log = new LogFile.Log(logPath, "RFID_Reader");

            _readTimeout = readTimeout;
            _portName    = portName;
        }
        void ShowProgression_AdminLogin()
        {
            string logText = ">>> แสดงหน้า Admin Menu";

            _kiosk.log.AppendText(logText);
            System.Diagnostics.Debug.WriteLine(logText);

            string AdminName = string.Empty;

            using (DB_Manager.ConfigManagement cm = new DB_Manager.ConfigManagement())
            { AdminName = cm.GetCharValue("AdminName"); }

            _kiosk.LoginUser.UserName = AdminName;
            _kiosk.LoginUser.Password = passwordBox.Password; //txtKey.Text;

            Helper.ShowNewPage(_kiosk, this, PageName.Progression_AdminLogin);
        }
        void AttachReaderCallback()
        {
            string logText = "Attaching rfid reader to Activate Card Page...";

            _kiosk.log.AppendText(logText);
            System.Diagnostics.Debug.WriteLine(logText);
            try
            {
                string RFIDReaderPortName = string.Empty;
                using (DB_Manager.ConfigManagement cm = new DB_Manager.ConfigManagement())
                { RFIDReaderPortName = cm.GetCharValue("RFIDReaderPortName"); }
                if (_kiosk.rfidReader == null)
                {
                    _kiosk.rfidReader = new RfidReader.RC522MegawinReader(70, RFIDReaderPortName);
                }
                var h = new RfidReader.RC522MegawinEventHandler(Reader_Callback);
                if (!_kiosk.rfidReader.IsRC522MegawinEventHandlerRegistered(h))
                {
                    _kiosk.rfidReader.OnDataReceived += h;
                }
                _kiosk.rfidReader.Connect();
                logText = "Done attaching rfid reader.";
                _kiosk.log.AppendText(logText);
                System.Diagnostics.Debug.WriteLine(logText);
            }
            catch (Exception ex2)
            {
                if (!_kiosk.rfidReader.IgnoreIfError)
                {
                    logText = "Attaching rfid reader error!" + Environment.NewLine + ex2.Message;
                    _kiosk.log.AppendText(logText);
                    System.Diagnostics.Debug.WriteLine(logText);
                    Helper.ShowNewPage(_kiosk, this, PageName.Warning_AdminMenuReaderError);
                }
                else
                {
                    logText = "Attaching rfid reader error!" + Environment.NewLine + ex2.Message;
                    _kiosk.log.AppendText(logText);
                    System.Diagnostics.Debug.WriteLine(logText);
                    /* DO NOTHING */
                }
            }
        }
Exemple #10
0
        public TMT82_Printer(string printer_name)
        {
            /* -----------------------------------------
             * LOG PATH
             * -----------------------------------------*/
            string logPath = string.Empty;

            using (DB_Manager.ConfigManagement cm = new DB_Manager.ConfigManagement())
            {
                try { logPath = cm.GetCharValue("Printer_LogPath"); }
                catch { logPath = @"C:\BHM\BHMlog\TMT82_Printer"; }
            }
            log = new LogFile.Log(logPath, "TMT82_Printer");

            /* -----------------------------------------
             * Create  status API
             * -----------------------------------------*/
            this.PRINTER_NAME = printer_name;
            _objAPI           = new StatusAPI();
        }
Exemple #11
0
        /// <summary>
        /// Constructor
        /// </summary>
        public VISCOM()
        {
            /* -----------------------------------------
             * LOG PATH
             * -----------------------------------------*/
            string logPath = string.Empty;

            using (DB_Manager.ConfigManagement cm = new DB_Manager.ConfigManagement())
            {
                try { logPath = cm.GetCharValue("VISCOM_LogPath"); }
                catch { logPath = @"C:\BHM\BHMLog\VISCOM"; }
            }
            log = new LogFile.Log(logPath, "VISCOM");

            /* ล้างค่า */
            _lastResult.IncomeMessage = "";
            _lastResult.Result        = VisionResult.NG;
            _lastResult.Count         = 0;
            _lastResult.RespondedCode = 0;
            _lastResult.Message       = "";
        }
Exemple #12
0
        /// <summary>
        /// Validate system
        /// </summary>
        /// <param name="kiosk"></param>
        /// <returns></returns>
        public static bool CheckSystem(MainWindow kiosk)
        {/*ระบบต้อง Return ค่าเพื่อตัดสินใจ ใน 2 ทางเลือก*/
            string logText = "Validating system...";

            kiosk.log.AppendText(logText);
            System.Diagnostics.Debug.WriteLine(logText);

            /* --------------------------------------------------------------------------------------
             * ตรวจสอบเครื่องอ่าน RFID
             * -------------------------------------------------------------------------------------- */
            try
            {
                /* ตั้งค่าเครื่องอ่าน RFID */
                string RFIDReaderPortName  = string.Empty;
                bool   ignoreIfReaderError = false;
                using (DB_Manager.ConfigManagement cm = new DB_Manager.ConfigManagement())
                {
                    try { RFIDReaderPortName = cm.GetCharValue("RFIDReaderPortName"); }
                    catch { RFIDReaderPortName = "COM1"; }
                    try { ignoreIfReaderError = cm.GetCharValue("IgnoreRFIDReaderError").ToUpper().Equals("YES") ? true : false; }
                    catch { ignoreIfReaderError = true; }
                }

                /* เพิ่ม RFID Reader Object ให้กับระบบคีอ์ออส */
                if (kiosk.rfidReader == null)
                {
                    kiosk.rfidReader = new RfidReader.RC522MegawinReader(70, RFIDReaderPortName);
                }
                kiosk.rfidReader.IgnoreIfError = ignoreIfReaderError;

                /* ตรวจสอบการเชื่อมต่อเครื่องอ่าน */
                try
                {
                    logText = "เชื่อมต่อเครื่องอ่าน RFID..." + RFIDReaderPortName;
                    kiosk.log.AppendText(logText);
                    System.Diagnostics.Debug.WriteLine(logText);

                    kiosk.rfidReader.Connect();
                    if (kiosk.rfidReader.Port.IsOpen)
                    {
                        logText = "เครื่องอ่าน RFID เชื่อมต่อได้.";
                        kiosk.log.AppendText(logText);
                        System.Diagnostics.Debug.WriteLine(logText);
                    }
                    else
                    {
                        logText = "ไม่สามารถเชื่อมต่อเครื่องอ่าน RFID!";
                        kiosk.log.AppendText(logText);
                        System.Diagnostics.Debug.WriteLine(logText);
                    }
                }
                catch (Exception ex1)
                {
                    logText = "ไม่สามารถเชื่อมต่อเครื่องอ่าน RFID! เนื่องจาก " + ex1.Message;
                    kiosk.log.AppendText(logText);
                    System.Diagnostics.Debug.WriteLine(logText);
                }
            }
            catch (Exception ex0)
            {
                logText = "ไม่สามารถเชื่อมต่อเครื่องอ่าน RFID! เนื่องจาก " + ex0.Message;
                kiosk.log.AppendText(logText);
                System.Diagnostics.Debug.WriteLine(logText);
            }

            /* --------------------------------------------------------------------------------------
             * ตรวจสอบเครื่องพิมพ์
             * -------------------------------------------------------------------------------------- */
            bool isPrinterValid = false;

            try
            {
                logText = "กำลังเชื่อมต่อเครื่องพิมพ์...";
                kiosk.log.AppendText(logText);
                System.Diagnostics.Debug.WriteLine(logText);

                string Printer_Name = string.Empty;
                using (DB_Manager.ConfigManagement cm = new DB_Manager.ConfigManagement())
                {
                    try { Printer_Name = cm.GetCharValue("Printer_Name"); }
                    catch { Printer_Name = "EPSON TM-T82 Receipt"; }
                }
                if (kiosk.slipPrinter == null)
                {
                    kiosk.slipPrinter = new SlipPrinter.TMT82_Printer(Printer_Name);
                }
                kiosk.slipPrinter.Open();
                kiosk.slipPrinter.UpdatePrinterStatus();
                if ((kiosk.slipPrinter.printStatus & ASB.ASB_NO_RESPONSE) == ASB.ASB_NO_RESPONSE ||
                    (kiosk.slipPrinter.printStatus & ASB.ASB_COVER_OPEN) == ASB.ASB_COVER_OPEN ||
                    (kiosk.slipPrinter.printStatus & ASB.ASB_AUTOCUTTER_ERR) == ASB.ASB_AUTOCUTTER_ERR ||
                    (kiosk.slipPrinter.printStatus & ASB.ASB_PAPER_END) == ASB.ASB_PAPER_END)
                {
                    logText = "ผิดพลาด! เครื่องพิมพ์ไม่พร้อมใช้งาน " + Environment.NewLine + kiosk.slipPrinter.printStatus.ToString();
                    kiosk.log.AppendText(logText);
                    System.Diagnostics.Debug.WriteLine(logText);
                }

                logText = "เชื่อมต่อเครื่องพิมพ์ได้แล้ว";
                kiosk.log.AppendText(logText);
                System.Diagnostics.Debug.WriteLine(logText);
                isPrinterValid = true;
            }
            catch (Exception ex)
            {
                logText = "เครื่องพิมพ์ผิดพลาด! เนื่องจาก " + ex.Message;
                kiosk.log.AppendText(logText);
                System.Diagnostics.Debug.WriteLine(logText);
            }

            /* --------------------------------------------------------------------------------------
             * ตรวจสอบระบบ VISION
             * ณพสิษฐ์-14Mar2018-เพิ่มการตรวจสอบวิชชั่น
             * -------------------------------------------------------------------------------------- */
            bool isVisionRunning = false;

            try
            {
                logText = "กำลังตรวจสอบโปรแกรมกล้อง...";
                kiosk.log.AppendText(logText);
                System.Diagnostics.Debug.WriteLine(logText);

                long iRet = -1;
                using (DB_Manager.ConfigManagement cm = new DB_Manager.ConfigManagement())
                {
                    try { iRet = cm.GetIntValue("CAM1_Status"); }
                    catch { iRet = -1; }
                }
                if (iRet == 82)
                {
                    isVisionRunning = true;
                    logText         = "โปรแกรมกล้องพร้อมทำงานแล้ว";
                    kiosk.log.AppendText(logText);
                    System.Diagnostics.Debug.WriteLine(logText);
                }
                else
                {
                    logText = "โปรแกรมกล้องผิดพลาด! เนื่องจาก " + "ระบบตรวจไม่พอโปรแกรมกล้อง";
                    kiosk.log.AppendText(logText);
                    System.Diagnostics.Debug.WriteLine(logText);
                }
            }
            catch (Exception ex)
            {
                logText = "โปรแกรมกล้องผิดพลาด! เนื่องจาก " + ex.Message;
                kiosk.log.AppendText(logText);
                System.Diagnostics.Debug.WriteLine(logText);
            }

            /* --------------------------------------------------------------------------------------
             * ONLINE BO23
             * ณพสิษฐ์-14Mar2018-เพิ่มการตรวจสอบ WS ก่อนระบบจะยอมรับตะกร้า
             * -------------------------------------------------------------------------------------- */
            bool isWSOnline = false;

            try
            {
                logText = "กำลังตรวจสอบสัญญาณ ONLINE ...";
                kiosk.log.AppendText(logText);
                System.Diagnostics.Debug.WriteLine(logText);

                for (int i = 0; i < 3; i++)
                {
                    if (OnlineService.SearchCarTag("")) //ส่งข้อมูลว่าง รอตอบกลับ
                    {
                        //เชื่อมต่อได้แต่พบเลข ถือว่าผ่าน
                        isWSOnline = true;
                        logText    = "ONLINE เชื่อมต่อได้ แต่ SearchCarTag(\"\") พบเลข ถือว่า เชื่อมต่อผ่าน";
                        kiosk.log.AppendText(logText);
                        System.Diagnostics.Debug.WriteLine(logText);
                        break;
                    }
                    else
                    {
                        //เชื่อมต่อได้แต่ไม่พบเลข ถือว่าผ่าน
                        isWSOnline = true;
                        logText    = "ONLINE เชื่อมต่อได้ แต่ SearchCarTag(\"\") ไม่พบเลข ถือว่า เชื่อมต่อผ่าน";
                        kiosk.log.AppendText(logText);
                        System.Diagnostics.Debug.WriteLine(logText);
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                logText = "การเชื่อมต่อ ONLINE ผิดพลาด! เนื่องจาก " + ex.Message;
                kiosk.log.AppendText(logText);
                System.Diagnostics.Debug.WriteLine(logText);
            }

            /* --------------------------------------------------------------------------------------
             * SUMMARY OF VALIDATIONS
             * -------------------------------------------------------------------------------------- */
            logText = "กำลังสรุป การตรวจสอบ...";
            kiosk.log.AppendText(logText);
            System.Diagnostics.Debug.WriteLine(logText);
            //if (kiosk.Testing) return true; // <-------------------------------------------------------------------------------------------<--TESTING
            if ((kiosk.rfidReader.IgnoreIfError || kiosk.rfidReader.Port.IsOpen) &&
                (isPrinterValid) &&
                (isVisionRunning) &&
                (isWSOnline))
            { /* พร้อมใช้งาน */
                logText = "------พร้อมใช้งาน------";
                kiosk.log.AppendText(logText);
                System.Diagnostics.Debug.WriteLine(logText);
                return(true);
            }
            else /* ไม่พร้อมใช้งาน */
            {
                logText = "------ระบบไม่พร้อมใช้งาน------";
                kiosk.log.AppendText(logText);
                System.Diagnostics.Debug.WriteLine(logText);
                return(false);
            }
        }
        private void autoInteractive_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                /* -----------------------------------------
                 * คำอธิบายเพิ่มเติมอยู่ด้านล่าง อยู่นอกคลาส
                 * -----------------------------------------*/
                string logText;
                logText = "Auto interactive DoWork()...";
                _kiosk.log.AppendText(logText);
                System.Diagnostics.Debug.WriteLine(logText);

                /* -----------------------------------------
                 * เริ่มต้นตั้งแรกด้วยค่าเดียวกัน
                 * -----------------------------------------*/
                short  resCode;
                string respond;
                ushort logic;

                /* -----------------------------------------
                 * ล้าง DIO = OFF
                 * -----------------------------------------*/
                //Utilities.PLC_Reset();

                DIO_Library.D7432.WritePin(0, 16, false, out resCode, out respond); /* X27:AUTO:NG */
                DIO_Library.D7432.WritePin(0, 17, false, out resCode, out respond); /* X25:AUTO:OK*/
                ////DIO_Library.D7432.WritePin(0, 19, false, out resCode, out respond); /* X23:ON:BUFF:ST */
                ////DIO_Library.D7432.WritePin(0, 24, false, out resCode, out respond); /* X15:ON:AUTO:TT, OFF:AUTO:NOUSE, OFF:NOCHECK:UTRUN*/
                //DIO_Library.D7432.WritePin(0, 25, false, out resCode, out respond); /* ABS360 */
                ////DIO_Library.D7432.WritePin(0, 26, false, out resCode, out respond); /* X21:OFF:AUTO, ON:NO CHECK AND UTURN */
                //DIO_Library.D7432.WritePin(0, 27, false, out resCode, out respond); /* HOME */
                //DIO_Library.D7432.WritePin(0, 28, false, out resCode, out respond); /* ABS00 */
                //DIO_Library.D7432.WritePin(0, 29, false, out resCode, out respond); /* ABS90 */
                //DIO_Library.D7432.WritePin(0, 30, false, out resCode, out respond); /* ABS180 */
                //DIO_Library.D7432.WritePin(0, 31, false, out resCode, out respond); /* ABS270 */

                /* SET TO INSPECTION OF ST AND UTURN */
                //DIO_Library.D7432.WritePin(0, 19, true, out resCode, out respond); /* X23:ON:CHECK:ST , OFF:NOUSE*/
                //DIO_Library.D7432.WritePin(0, 24, false, out resCode, out respond); /* X15:ON:AUTO:TT, OFF:AUTO:NOUSE, OFF:NOCHECK:UTRUN*/
                //DIO_Library.D7432.WritePin(0, 26, false, out resCode, out respond); /* X21:OFF:AUTO, ON:NO CHECK AND UTURN */
                Thread.Sleep(250);

                /* -----------------------------------------
                 * ตัวแปร
                 * -----------------------------------------*/
                JobResultControl.ResultReport job = new JobResultControl.ResultReport();
                bool      INP1, INP2, isTimeout, isNext;
                Stopwatch sw = new Stopwatch();
                //long dicisionTime = Classes.PushBasketTiming.TIME_ROTATE_1REV;

                int   totalGoodBasket = _kiosk.SelectedTwoToneRow.GOOD_NUMBER;
                int[] sumPageGoodBasket = new int[4];
                int   rotaryState = 0, visionState = 0;

                int  goodBasket = 0;
                bool isNG = true;

                /* --------------------- VISION LOOP --------------------
                 * วนลูป ไปจนกว่าจะ
                 *    ก. รับได้ครบ
                 *    ข. กดหยุดการป้อน
                 * -----------------------------------------*/
                while (!StopFlag)/* ถ้ายังไม่ครบ หรือ ยังไม่กดหยุด*/
                {
                    // PRE-VISION --------------------------------------------------------------------------------- PRE-VISION
                    // ROTARY MACHINE STATE / TRANSITION
                    sw.Reset();
                    sw.Start();
                    isTimeout = false;
                    while /*รอตะกร้าเข้า CVY3 */ (!StopFlag)
                    {
                        DIO_Library.D7432.ReadPin(0, 0 /*In-Position X47:CV3 SENSOR*/, out INP1, out resCode, out respond);
                        DIO_Library.D7432.ReadPin(0, 1 /*In-Position ????ไม่รู้ว่าเป็นสัญญาณอะไร/คาดว่าเป็นเซนเซอร์ X17 แต่ต่อผิดอยู่*/, out INP2, out resCode, out respond);
                        if (_kiosk.IsTwoTone)
                        {/* TWO TONE */
                            if (INP1)
                            {
                                // ตรวจความคงที่ของสัญญาณด้วยการหน่วงเวลา
                                Thread.Sleep(500);
                                DIO_Library.D7432.ReadPin(0, 0 /*In-Position X47:CV3 SENSOR*/, out INP1, out resCode, out respond);
                                if (INP1)
                                {
                                    visionState = 0;
                                    break;
                                }
                            }
                        }
                        else
                        {/* Sri Thai */
                            if (INP2 && INP1)
                            {
                                visionState = 0;
                                break;
                            }
                        }

                        // !!! ปิดคำสั่งจับเวลารอตะกร้า 120 sec
                        //if (sw.ElapsedMilliseconds > 120000) { isTimeout = true; break; }
                    }
                    sw.Stop();

                    /* -----------------------------------------
                     * ถ้ากดปุ่ม หยุดการป้อน
                     *      เปิดหน้าใหม่ หน้ายืนยันการรับตะกร้า
                     * -----------------------------------------*/
                    if (StopFlag)
                    {
                        /* เก็บค่าให้ RAM */
                        if (_kiosk.IsTwoTone)
                        {
                            _kiosk.SelectedTwoToneRow.GOOD_NUMBER = totalGoodBasket;
                        }
                        else
                        {
                            _kiosk.SelectedSriThaiRow.GOOD_NUMBER = totalGoodBasket;
                        }

                        /* จบงานรับตะกร้า */
                        if (!_adminMode)
                        {
                            logText = "STOP BY USER! STOP ด้วยการกด จบการป้อน";
                            _kiosk.log.AppendText(logText);
                            System.Diagnostics.Debug.WriteLine(logText);
                            Helper.ShowNewPage(_kiosk, this, PageName.OptConfirmPush); /*จบการป้อน*/
                            return;
                        }
                        else
                        {
                            logText = "STOP BY USER! STOP ด้วยการกด จบการป้อน";
                            _kiosk.log.AppendText(logText);
                            System.Diagnostics.Debug.WriteLine(logText);
                            Helper.ShowNewPage(_kiosk, this, PageName.AdminMenu); /*จบการป้อน*/
                            return;
                        }
                    }

                    /* -----------------------------------------
                     * ถ้ารอนานเกินไป
                     *      เปิดหน้าใหม่ หน้ายืนยันการรับตะกร้า
                     * -----------------------------------------*/
                    if (isTimeout)
                    {
                        /* เก็บค่าให้ RAM */
                        if (_kiosk.IsTwoTone)
                        {
                            _kiosk.SelectedTwoToneRow.GOOD_NUMBER = totalGoodBasket;
                        }
                        else
                        {
                            _kiosk.SelectedSriThaiRow.GOOD_NUMBER = totalGoodBasket;
                        }

                        /* จบงานรับตะกร้า */
                        if (!_adminMode)
                        {
                            logText = "รอตั้งแรกนาน จึงสั่งให้หยุดรับ";
                            _kiosk.log.AppendText(logText);
                            System.Diagnostics.Debug.WriteLine(logText);
                            Helper.ShowNewPage(_kiosk, this, PageName.OptConfirmPush); /*จบการป้อน*/
                            return;
                        }
                        else
                        {
                            logText = "รอตั้งแรกนาน จึงสั่งให้หยุดรับ";
                            _kiosk.log.AppendText(logText);
                            System.Diagnostics.Debug.WriteLine(logText);
                            Helper.ShowNewPage(_kiosk, this, PageName.AdminMenu); /*จบการป้อน*/
                            return;
                        }
                    }
                    // รอจนมีตะกร้ามาถึง หรือ timeout แล้ว

                    // PRE-VISION ---------------------------------------------------------------------------------------- PER - VISION
                    // ถ่ายภาพ
                    using (DB_Manager.ConfigManagement cm = new DB_Manager.ConfigManagement())
                    {
                        // สั่งถ่ายภาพ
                        string snapCommand = "N";
                        if (_kiosk.IsTwoTone)
                        {
                            // Front
                            if (rotaryState == 0 /*000 deg*/ || rotaryState == 2 /*180 deg*/ || rotaryState == 4 /*360 deg*/ || rotaryState == 6 /*180 deg*/)
                            {
                                snapCommand = "TTF";
                            }

                            // Side
                            else if (rotaryState == 1 /*090 deg*/ || rotaryState == 3 /*270 deg*/ || rotaryState == 5 /*270 deg*/ || rotaryState == 7 /*090 deg*/)
                            {
                                snapCommand = "TTS";
                            }
                        }
                        else
                        {
                            // Front
                            if (rotaryState == 0 /*000 deg*/ || rotaryState == 2 /*180 deg*/ || rotaryState == 4 /*360 deg*/ || rotaryState == 6 /*180 deg*/)
                            {
                                snapCommand = "STF";
                            }

                            // Side
                            else if (rotaryState == 1 /*090 deg*/ || rotaryState == 3 /*270 deg*/ || rotaryState == 5 /*270 deg*/ || rotaryState == 7 /*090 deg*/)
                            {
                                snapCommand = "STS";
                            }
                        }
                        cm.SetCharValue("CAM_SNAP", snapCommand, "Kiosk cam snap");
                        Thread.Sleep(100);

                        // loop รอ คำสั่ง ถูกสั่ง
                        StopFlag = false;
                        sw.Reset();
                        sw.Start();
                        isTimeout = false;
                        isNext    = false;
                        while (!StopFlag)
                        {
                            if (cm.GetCharValue("CAM_SNAP").Equals("N"))
                            {
                                isNext = true; break;
                            }
                            if (sw.ElapsedMilliseconds > 120000)
                            {
                                isTimeout = true; break;
                            }
                        }
                        //Thread.Sleep(100);

                        // after loop

                        /* -----------------------------------------
                         * ถ้ากดปุ่ม หยุดการป้อน
                         *      เปิดหน้าใหม่ หน้ายืนยันการรับตะกร้า
                         * -----------------------------------------*/
                        if (StopFlag)
                        {
                            /* เก็บค่าให้ RAM */
                            if (_kiosk.IsTwoTone)
                            {
                                _kiosk.SelectedTwoToneRow.GOOD_NUMBER = totalGoodBasket;
                            }
                            else
                            {
                                _kiosk.SelectedSriThaiRow.GOOD_NUMBER = totalGoodBasket;
                            }

                            /* จบงานรับตะกร้า */
                            if (!_adminMode)
                            {
                                logText = "STOP BY USER! STOP ด้วยการกด จบการป้อน";
                                _kiosk.log.AppendText(logText);
                                System.Diagnostics.Debug.WriteLine(logText);
                                Helper.ShowNewPage(_kiosk, this, PageName.OptConfirmPush); /*จบการป้อน*/
                                return;
                            }
                            else
                            {
                                logText = "STOP BY USER! STOP ด้วยการกด จบการป้อน";
                                _kiosk.log.AppendText(logText);
                                System.Diagnostics.Debug.WriteLine(logText);
                                Helper.ShowNewPage(_kiosk, this, PageName.AdminMenu); /*จบการป้อน*/
                                return;
                            }
                        }

                        /* -----------------------------------------
                         * ถ้ารอนานเกินไป
                         *      เปิดหน้าใหม่ หน้ายืนยันการรับตะกร้า
                         * -----------------------------------------*/
                        if (isTimeout)
                        {
                            /* เก็บค่าให้ RAM */
                            if (_kiosk.IsTwoTone)
                            {
                                _kiosk.SelectedTwoToneRow.GOOD_NUMBER = totalGoodBasket;
                            }
                            else
                            {
                                _kiosk.SelectedSriThaiRow.GOOD_NUMBER = totalGoodBasket;
                            }

                            /* จบงานรับตะกร้า */
                            if (!_adminMode)
                            {
                                logText = "รอตั้งแรกนาน จึงสั่งให้หยุดรับ";
                                _kiosk.log.AppendText(logText);
                                System.Diagnostics.Debug.WriteLine(logText);
                                Helper.ShowNewPage(_kiosk, this, PageName.OptConfirmPush); /*จบการป้อน*/
                                return;
                            }
                            else
                            {
                                logText = "รอตั้งแรกนาน จึงสั่งให้หยุดรับ";
                                _kiosk.log.AppendText(logText);
                                System.Diagnostics.Debug.WriteLine(logText);
                                Helper.ShowNewPage(_kiosk, this, PageName.AdminMenu); /*จบการป้อน*/
                                return;
                            }
                        }

                        // สั่ง vision pro
                        if (isNext)
                        {
                            // Front
                            if (rotaryState == 0 /*000 deg*/ || rotaryState == 2 /*180 deg*/ || rotaryState == 4 /*360 deg*/ || rotaryState == 6 /*180 deg*/)
                            {
                                long journalID = job.CreateTwoToneFrontJobRecord(); // รอรับผลได้เลย
                            }

                            // Side
                            else if (rotaryState == 1 /*090 deg*/ || rotaryState == 3 /*270 deg*/ || rotaryState == 5 /*270 deg*/ || rotaryState == 7 /*090 deg*/)
                            {
                                long journalID = job.CreateTwoToneSideJobRecord(); // รอรับผลได้เลย
                            }

                            // รอข้อมูลทำงาน
                            Thread.Sleep(100);
                        }
                    } // using


                    // VISION -------------------------------------------------------------------------------------------------- VISION
                    // Thread.Sleep(2000); // for demo mode
                    goodBasket = 0;
                    isNG       = true;

                    // รอ vision ทำงานเสร็จ
                    // state id ต้องครบตามจำนวน 20 โดยประมาณ
                    using (DB_Manager.ConfigManagement cm = new DB_Manager.ConfigManagement())
                    {
                        int lastStateID = 0;
                        StopFlag = false;
                        sw.Reset();
                        sw.Start();
                        isTimeout = false;
                        isNext    = false;
                        while (!StopFlag)
                        {
                            lastStateID = (int)cm.GetIntValue("VIS_LastState_ID");
                            if (lastStateID >= 20)
                            {
                                isNext = true; break;
                            }
                            if (sw.ElapsedMilliseconds > 120000)
                            {
                                isTimeout = true; break;
                            }
                        }
                    }// using

                    /* -----------------------------------------
                     * ถ้ากดปุ่ม หยุดการป้อน
                     *      เปิดหน้าใหม่ หน้ายืนยันการรับตะกร้า
                     * -----------------------------------------*/
                    if (StopFlag)
                    {
                        /* เก็บค่าให้ RAM */
                        if (_kiosk.IsTwoTone)
                        {
                            _kiosk.SelectedTwoToneRow.GOOD_NUMBER = totalGoodBasket;
                        }
                        else
                        {
                            _kiosk.SelectedSriThaiRow.GOOD_NUMBER = totalGoodBasket;
                        }

                        /* จบงานรับตะกร้า */
                        if (!_adminMode)
                        {
                            logText = "STOP BY USER! STOP ด้วยการกด จบการป้อน";
                            _kiosk.log.AppendText(logText);
                            System.Diagnostics.Debug.WriteLine(logText);
                            Helper.ShowNewPage(_kiosk, this, PageName.OptConfirmPush); /*จบการป้อน*/
                            return;
                        }
                        else
                        {
                            logText = "STOP BY USER! STOP ด้วยการกด จบการป้อน";
                            _kiosk.log.AppendText(logText);
                            System.Diagnostics.Debug.WriteLine(logText);
                            Helper.ShowNewPage(_kiosk, this, PageName.AdminMenu); /*จบการป้อน*/
                            return;
                        }
                    }

                    /* -----------------------------------------
                     * ถ้ารอนานเกินไป
                     *      เปิดหน้าใหม่ หน้ายืนยันการรับตะกร้า
                     * -----------------------------------------*/
                    if (isTimeout)
                    {
                        /* เก็บค่าให้ RAM */
                        if (_kiosk.IsTwoTone)
                        {
                            _kiosk.SelectedTwoToneRow.GOOD_NUMBER = totalGoodBasket;
                        }
                        else
                        {
                            _kiosk.SelectedSriThaiRow.GOOD_NUMBER = totalGoodBasket;
                        }

                        /* จบงานรับตะกร้า */
                        if (!_adminMode)
                        {
                            logText = "รอตั้งแรกนาน จึงสั่งให้หยุดรับ";
                            _kiosk.log.AppendText(logText);
                            System.Diagnostics.Debug.WriteLine(logText);
                            Helper.ShowNewPage(_kiosk, this, PageName.OptConfirmPush); /*จบการป้อน*/
                            return;
                        }
                        else
                        {
                            logText = "รอตั้งแรกนาน จึงสั่งให้หยุดรับ";
                            _kiosk.log.AppendText(logText);
                            System.Diagnostics.Debug.WriteLine(logText);
                            Helper.ShowNewPage(_kiosk, this, PageName.AdminMenu); /*จบการป้อน*/
                            return;
                        }
                    }

                    // vision ทำงานเสร็จแล้ว
                    if (isNext)
                    {
                        // อ่านค่า id
                        long vis_id;
                        using (DB_Manager.ConfigManagement cm = new DB_Manager.ConfigManagement())
                        {
                            try
                            {
                                vis_id = cm.GetIntValue("VIS_LAST_VIS_ID");
                            }
                            catch { vis_id = 0; }
                        }

                        // ผลของ Front
                        if (rotaryState == 0 || rotaryState == 2 || rotaryState == 4 || rotaryState == 6)
                        {
                            // เรียกดูผล vision
                            JobResultControl.ResultReport.TwoToneModel visResult = new JobResultControl.ResultReport.TwoToneModel(vis_id, true /*ด้านหน้าหลัง*/);
                            goodBasket = visResult.Count;
                            isNG       = visResult.NO_GOOD;
                        }

                        // หรือ ผลของ Side
                        else if (rotaryState == 1 || rotaryState == 3 || rotaryState == 5 || rotaryState == 7)
                        {
                            // เรียกดูผล vision
                            JobResultControl.ResultReport.TwoToneModel visResult = new JobResultControl.ResultReport.TwoToneModel(vis_id, false /*ด้านข้าง*/);
                            goodBasket = visResult.Count;
                            isNG       = visResult.NO_GOOD;
                        }

                        // ตั้งไว้เผื่อผิดพลาด ไม่ควรเกิดทำงาน
                        else
                        {
                            goodBasket = 0; isNG = true;
                        }

                        // สรุปผลให้ กรณีที่เป็น OK
                        if (!isNG)
                        {
                            sumPageGoodBasket[visionState] = goodBasket;
                            SetGoodBasket(sumPageGoodBasket[visionState]);
                            SetStaticGoodBasket(sumPageGoodBasket[visionState]);
                        }
                        else
                        {
                            SetGoodBasket(0);
                        }
                    }


                    //// POS-VISION --------------------------------------------------------------------------------------------- POS-VISION

                    /* -----------------------------------------
                     * SUMMARY for next machine state
                     * สั่งขับออกถ้าเป็น NG , ฯลฯ
                     * -----------------------------------------*/
                    if (isNG)
                    {
                        /* สั่ง ขับออก */
                        Helper.NG_Basket();
                        Thread.Sleep(6000); // รอให้นิ่ง
                        /* ล้างการตรวจนับ */
                        visionState = 0;
                        SetGoodBasket(0);
                        SetStaticGoodBasket(0);
                    }
                    else
                    {/* OK */
                        /* แสดงผล */
                        totalGoodBasket += sumPageGoodBasket[0];
                        SetGoodBasket(sumPageGoodBasket[0]);
                        SetStaticGoodBasket(sumPageGoodBasket[0]);
                        SetTotalCount(totalGoodBasket);

                        // ถ้าค่ามากกว่า ก็ให้ NG
                        if (_kiosk.SelectedTwoToneRow.REMAIN < totalGoodBasket)
                        {
                            totalGoodBasket -= sumPageGoodBasket[0];
                            SetTotalCount(totalGoodBasket);

                            /* ล้างค่า*/

                            rotaryState = 0;
                            visionState = 0;

                            /* OK ส่งต่อ */
                            Helper.SetAsTwoTone();
                            Helper.NG_Basket();
                            SetGoodBasket(0);
                            SetStaticGoodBasket(0);
                            Thread.Sleep(6000); /*รอส่งเสร็จ*/
                        }
                        else // จำนวนอยู่ในช่วง OK
                        {
                            _kiosk.SelectedTwoToneRow.GOOD_NUMBER = totalGoodBasket;
                            // หมุนไปที่ ABS-360
                            //DIO_Library.D7432.WritePin(0, 28, true, out resCode, out respond);
                            //Thread.Sleep(1000);

                            //DIO_Library.D7432.WritePin(0, 28, false, out resCode, out respond);
                            //Thread.Sleep(1000);

                            /* ล้างค่า*/
                            rotaryState = 0;
                            visionState = 0;

                            /* OK ส่งต่อ */
                            Helper.SetAsTwoTone();
                            Helper.OK_Basket();
                            SetGoodBasket(0);
                            Thread.Sleep(6000); /*รอส่งเสร็จ*/
                        }
                    }

                    //// Outoff conveyor --------------------------------------------------------------------------------------------- POS-VISION
                    // ROTARY MACHINE STATE / BASKET TRANSITION
                    sw.Reset();
                    sw.Start();
                    isTimeout = false;
                    while /*รอตะกร้าเข้า CVY3 */ (!StopFlag)
                    {
                        DIO_Library.D7432.ReadPin(0, 0 /*In-Position X47:CV3 SENSOR*/, out INP1, out resCode, out respond);
                        DIO_Library.D7432.ReadPin(0, 1 /*In-Position ????ไม่รู้ว่าเป็นสัญญาณอะไร/คาดว่าเป็นเซนเซอร์ X17 แต่ต่อผิดอยู่*/, out INP2, out resCode, out respond);
                        if (!INP1)
                        {
                            // ตรวจความคงที่ของสัญญาณด้วยการหน่วงเวลา
                            Thread.Sleep(500);
                            DIO_Library.D7432.ReadPin(0, 0 /*In-Position X47:CV3 SENSOR*/, out INP1, out resCode, out respond);
                            if (!INP1)
                            {
                                visionState = 0;
                                break;
                            }
                        }
                        if (sw.ElapsedMilliseconds > 10000)
                        {
                            isTimeout = true; break;
                        }
                    }
                    sw.Stop();

                    /* -----------------------------------------
                     * ถ้ากดปุ่ม หยุดการป้อน
                     *      เปิดหน้าใหม่ หน้ายืนยันการรับตะกร้า
                     * -----------------------------------------*/
                    if (StopFlag)
                    {
                        /* เก็บค่าให้ RAM */
                        if (_kiosk.IsTwoTone)
                        {
                            _kiosk.SelectedTwoToneRow.GOOD_NUMBER = totalGoodBasket;
                        }
                        else
                        {
                            _kiosk.SelectedSriThaiRow.GOOD_NUMBER = totalGoodBasket;
                        }

                        /* จบงานรับตะกร้า */
                        if (!_adminMode)
                        {
                            logText = "STOP BY USER! STOP ด้วยการกด จบการป้อน";
                            _kiosk.log.AppendText(logText);
                            System.Diagnostics.Debug.WriteLine(logText);
                            Helper.ShowNewPage(_kiosk, this, PageName.OptConfirmPush); /*จบการป้อน*/
                            return;
                        }
                        else
                        {
                            logText = "STOP BY USER! STOP ด้วยการกด จบการป้อน";
                            _kiosk.log.AppendText(logText);
                            System.Diagnostics.Debug.WriteLine(logText);
                            Helper.ShowNewPage(_kiosk, this, PageName.AdminMenu); /*จบการป้อน*/
                            return;
                        }
                    }

                    /* -----------------------------------------
                     * ถ้ารอนานเกินไป
                     *      เปิดหน้าใหม่ หน้ายืนยันการรับตะกร้า
                     * -----------------------------------------*/
                    if (isTimeout)
                    {
                        totalGoodBasket -= sumPageGoodBasket[0];
                        SetGoodBasket(0);
                        SetStaticGoodBasket(0);
                        SetTotalCount(totalGoodBasket);
                    }
                    // รอจนมีตะกร้ามาถึง หรือ timeout แล้ว การถ่ายภาพจะมีชึ้นอีกกับตั้งเดิม
                }/* ------------------- VISION LOOP , while(!StopFlag)  ------------------------ */

                /* -----------------------------------------
                 * เปิดหน้าใหม่ หน้ายืนยันการรับตะกร้า
                 * -----------------------------------------*/
                if (!_adminMode)
                {
                    logText = "STOP BY USER! STOP ด้วยการกด จบการป้อน";
                    _kiosk.log.AppendText(logText);
                    System.Diagnostics.Debug.WriteLine(logText);
                    Helper.ShowNewPage(_kiosk, this, PageName.OptConfirmPush);
                }
                else
                {
                    logText = "STOP BY USER! STOP ด้วยการกด จบการป้อน";
                    _kiosk.log.AppendText(logText);
                    System.Diagnostics.Debug.WriteLine(logText);
                    Helper.ShowNewPage(_kiosk, this, PageName.AdminMenu);
                }
            }
            catch (Exception ex)
            {
                StopFlag = true;

                /* -----------------------------------------
                 * เปิดหน้าใหม่ หน้ายืนยันการรับตะกร้า
                 * -----------------------------------------*/
                if (!_adminMode)
                {
                    string logText = "STOP BY CATCH! STOP ด้วย error - " + ex.Message;
                    _kiosk.log.AppendText(logText);
                    System.Diagnostics.Debug.WriteLine(logText);
                    Helper.ShowNewPage(_kiosk, this, PageName.OptConfirmPush);
                }
                else
                {
                    string logText = "STOP BY CATCH! STOP ด้วย error - " + ex.Message;
                    _kiosk.log.AppendText(logText);
                    System.Diagnostics.Debug.WriteLine(logText);
                    Helper.ShowNewPage(_kiosk, this, PageName.AdminMenu);
                }
            }
        }