IT Story/C# & WPF

Sending commands in queue to equipment Example source

Hoyami7 2022. 7. 3. 17:37
반응형
void threadEquipmentProcess()
        {
            string sData = string.Empty;
            string[] sArrEvent;
            do
            {
                lock (this.SyncRoot)
                {
                    try
                    {
                        try
                        {
                            s_EQPEventProcess(); //설비로부터 Event 처리
                            s_BitTimeOutCheck();

                            if (this.m_Info.funGetPLCCommandCount() > 0)
                            {
                                sData = this.m_Info.funGetPLCCommand().ToString();
                                sArrEvent = sData.Split(new char[] { ',' });

                                switch (Convert.ToInt32(sArrEvent[0]))
                                {
                                    case (int)Structure.classStructure.PLCCommand.HOSTConnected:
                                        this.s_SendHostConnect(Convert.ToBoolean(sArrEvent[1]));
                                        break;

                                    case (int)Structure.classStructure.PLCCommand.CellSizeWrite:
                                        this.s_CellSizeWirte(sArrEvent[1], sArrEvent[2]);
                                        break;

                                    case (int)Structure.classStructure.PLCCommand.DateandTimeSetting:
                                        this.s_SendCurrentTime(sArrEvent[1]);
                                        break;

                                    case (int)Structure.classStructure.PLCCommand.ControlState:
                                        this.s_SendHostOnlineMode(sArrEvent[1]);
                                        break;

                                    case (int)Structure.classStructure.PLCCommand.OPCall:
                                        this.s_WriteHostMsg(sArrEvent[1], true);
                                        break;

                                    case (int)Structure.classStructure.PLCCommand.HostMsg:
                                        this.s_WriteHostMsg(sArrEvent[1], false);
                                        break;
                                        
                                    case (int)Structure.classStructure.PLCCommand.BuzzerOn:
                                        this.s_SendBuzzerOn();
                                        break;

                                    case (int)Structure.classStructure.PLCCommand.BuzzerOff:
                                        this.s_SendBuzzerOff();
                                        break;

                                        // Printer Label을 재출력 한다.
                                    case (int)Structure.classStructure.PLCCommand.RePrinter:
                                        EnuCommon.PrinterErrCode enuReturn = this.m_Label.SendLabeData(sArrEvent[1]);
                                        if (enuReturn != EnuCommon.PrinterErrCode.NoError)
                                            this.m_Info.Set_Log(EnuCommon.LogType.CIM, "Printer Send Label Data Error : " + enuReturn.ToString());
                                        break;


                                    case (int)Structure.classStructure.PLCCommand.TestPrinter:
                                        s_PortStatusChange(sArrEvent[1]);
                                        break;
                                 
                                    default:
                                        break;
                                }
                            }
                            Thread.Sleep(20);
                        }
                        catch (Exception ex)
                        {
                            this.m_Info.Set_Log(Common.EnuCommon.LogType.CIM, ex.ToString());
                        }
                    }
                    catch { }
                }
            } while (true);
        }
반응형