Exemple #1
0
        private void SendResult(object result)
        {
            var resultMessage = new CommandReturnMessage(result);
            var bytes         = new BinarySerializationProtocol().Encode(resultMessage);

            _clientSocket.Send(bytes);
        }
        public void DecodeSingleMessage()
        {
            var originalPackage = new TestPackage(new string[] { "mock-assembly.dll", "notest-assembly.dll" });
            var originalMessage = new CommandReturnMessage(originalPackage);

            var bytes = wireProtocol.Encode(originalMessage);

            Console.WriteLine($"Serialized {bytes.Length} bytes.");

            var messages = new List <TestEngineMessage>(wireProtocol.Decode(bytes));

            Assert.That(messages.Count, Is.EqualTo(1));
            var message = messages[0] as CommandReturnMessage;

            Assert.That(message.ReturnValue, Is.TypeOf <TestPackage>());
            ComparePackages((TestPackage)message.ReturnValue, originalPackage);
        }
Exemple #3
0
        public void On_Command_Error(Node Node, Transaction Txn, CommandReturnMessage Msg)
        {
            switch (Txn.FormName)
            {
            case "FormManual":
                switch (Node.Type)
                {
                case "LOADPORT":
                    //ManualPortStatusUpdate.LockUI(false);
                    break;
                }
                break;
            }
            logger.Debug("On_Command_Error");
            AlarmInfo CurrentAlarm = new AlarmInfo();

            CurrentAlarm.NodeName  = Node.Name;
            CurrentAlarm.AlarmCode = Msg.Value;
            CurrentAlarm.NeedReset = true;
            try
            {
                AlarmMessage Detail = AlmMapping.Get(Node.Name, CurrentAlarm.AlarmCode);

                CurrentAlarm.SystemAlarmCode = Detail.CodeID;
                CurrentAlarm.Desc            = Detail.Code_Cause;
                CurrentAlarm.EngDesc         = Detail.Code_Cause_English;
                CurrentAlarm.Type            = Detail.Code_Type;
                CurrentAlarm.IsStop          = Detail.IsStop;
                if (CurrentAlarm.IsStop)
                {
                    // RouteCtrl.Stop();
                }
            }
            catch (Exception e)
            {
                CurrentAlarm.Desc = "未定義";
                logger.Error(Node.Controller + "-" + Node.AdrNo + "(GetAlarmMessage)" + e.Message + "\n" + e.StackTrace);
            }
            CurrentAlarm.TimeStamp = DateTime.Now;

            AlarmManagement.Add(CurrentAlarm);

            AlarmUpdate.UpdateAlarmList(AlarmManagement.GetAll());
            AlarmUpdate.UpdateAlarmHistory(AlarmManagement.GetHistory());
        }
        public void DoWork(Transaction Txn, bool WaitForData = false)
        {
            SpinWait.SpinUntil(() => conn != null, 999999999);
            CommandReturnMessage msg = new CommandReturnMessage();

            lock (conn)
            {
                logger.Info(DeviceName + " Send:" + Txn.ModbusMethod);
                //Txn.SetTimeOut(1000);
                //Txn.SetTimeOutReport(this);
                //Txn.SetTimeOutMonitor(true);
                switch (Txn.ModbusMethod)
                {
                case Transaction.Command.ModbusMethod.ReadHoldingRegisters:
                    new Thread(() =>
                    {
                        Thread.CurrentThread.IsBackground = true;
                        ushort[] regs = conn.ReadHoldingRegisters(Txn.ModbusSlaveID, Txn.ModbusStartAddress, Txn.ModbusNumOfPoints);
                        msg.Type      = CommandReturnMessage.ReturnType.Excuted;
                        foreach (ushort each in regs)
                        {
                            msg.Value += "," + each.ToString();
                        }
                        msg.Value = msg.Value.Substring(1);
                        _ReportTarget.On_Command_Excuted(NodeManagement.Get(Txn.NodeName), Txn, msg);
                    }).Start();

                    break;

                case Transaction.Command.ModbusMethod.WriteSingleRegister:
                    new Thread(() =>
                    {
                        Thread.CurrentThread.IsBackground = true;
                        conn.WriteSingleRegister(Txn.ModbusSlaveID, Txn.ModbusRegisterAddress, Txn.ModbusValue);
                        msg.Type = CommandReturnMessage.ReturnType.Excuted;
                        _ReportTarget.On_Command_Excuted(NodeManagement.Get(Txn.NodeName), Txn, msg);
                    }).Start();


                    break;
                }
            }
        }
Exemple #5
0
        public void On_Event_Trigger(Node Node, CommandReturnMessage Msg)
        {
            logger.Debug("On_Event_Trigger");

            try
            {
                Transaction txn = new Transaction();
                switch (Node.Type)
                {
                case "LOADPORT":

                    break;
                }
            }
            catch (Exception e)
            {
                logger.Error(e.StackTrace, e);
            }
        }
        public void DecodeSplitMessages(int numMessages)
        {
            const int SPLIT_SIZE = 1000;

            var originalPackage = new TestPackage(new string[] { "mock-assembly.dll", "notest-assembly.dll" });
            var originalMessage = new CommandReturnMessage(originalPackage);

            var msgBytes  = wireProtocol.Encode(originalMessage);
            var msgLength = msgBytes.Length;
            var allBytes  = new byte[msgLength * numMessages];

            for (int i = 0; i < numMessages; i++)
            {
                Array.Copy(msgBytes, 0, allBytes, i * msgLength, msgLength);
            }

            Console.WriteLine($"Serialized {numMessages} messages in {allBytes.Length} bytes.");

            var messages = new List <TestEngineMessage>();

            for (int index = 0; index < allBytes.Length; index += SPLIT_SIZE)
            {
                var bytesToSend = Math.Min(allBytes.Length - index, SPLIT_SIZE);
                var buffer      = new byte[bytesToSend];
                Array.Copy(allBytes, index, buffer, 0, bytesToSend);
                messages.AddRange(wireProtocol.Decode(buffer));
                Console.WriteLine($"Decoded {bytesToSend} bytes, message count is now {messages.Count}");
                var expectedCount = (index + bytesToSend) / msgLength;
                Assert.That(messages.Count, Is.EqualTo(expectedCount));
            }

            foreach (CommandReturnMessage message in messages)
            {
                Assert.That(message.ReturnValue, Is.TypeOf <TestPackage>());
                ComparePackages((TestPackage)message.ReturnValue, originalPackage);
            }
        }
Exemple #7
0
 public void On_Event_Trigger(Node Node, CommandReturnMessage Msg)
 {
     _TaskReport.On_Event_Trigger(Node, Msg);
 }
Exemple #8
0
 public void On_Command_Finished(Node Node, Transaction Txn, CommandReturnMessage Msg)
 {
     Next(Node, Txn, "Finished");
     _TaskReport.On_Command_Finished(Node, Txn, Msg);
 }
Exemple #9
0
 public void On_Command_Error(Node Node, Transaction Txn, CommandReturnMessage Msg)
 {
     _TaskReport.On_Command_Error(Node, Txn, Msg);
     On_TaskJob_Aborted(Txn.TaskObj);
 }
Exemple #10
0
        public void DoWork(Transaction orgTxn, bool WaitForData = false)
        {
            Transaction Txn = null;


            Txn = orgTxn;


            if (Txn.CommandEncodeStr.Equals("GetMappingDummy"))
            {
                string mappingData = "";
                if (Txn.NodeName.Equals("LOADPORT01"))
                {
                    //mappingData = "1111111111111111111111111";
                    mappingData = SystemConfig.Get().FakeDataP1;
                }
                else if (Txn.NodeName.Equals("LOADPORT02"))
                {
                    mappingData = SystemConfig.Get().FakeDataP2;
                }
                else if (Txn.NodeName.Equals("LOADPORT03"))
                {
                    mappingData = SystemConfig.Get().FakeDataP3;
                }
                else if (Txn.NodeName.Equals("LOADPORT04"))
                {
                    mappingData = SystemConfig.Get().FakeDataP4;
                }

                CommandReturnMessage cm = new CommandReturnMessage();
                //cm.CommandType = Transaction.Command.LoadPortType.GetMapping;
                cm.Value = mappingData;
                //Txn.Method= Transaction.Command.LoadPortType.GetMapping;
                _ReportTarget.On_Command_Excuted(NodeManagement.Get(Txn.NodeName), Txn, cm);
            }
            //conn.WaitForData(WaitForData);

            // lock (TransactionList)
            List <CommandReturnMessage> msgList = _Decoder.GetMessage(Txn.CommandEncodeStr);


            if (!Txn.NodeType.Equals("OCR"))
            {
                if (msgList.Count != 0)
                {
                    Txn.Type = msgList[0].Command;
                    //Txn.CommandType = msgList[0].CommandType;
                }
            }
            else
            {
                Txn.Type = "";
                //Txn.CommandType = "";
            }
            string key = "";

            if (Vendor.ToUpper().Equals("KAWASAKI"))
            {
                key = Txn.Seq;
            }
            if (DeviceType.ToUpper().Equals("SMARTTAG"))
            {
                key = "00";
            }
            else if (Vendor.ToUpper().Equals("HST") || Vendor.ToUpper().Equals("COGNEX"))
            {
                key = "1" + Txn.Type;
            }

            else if (Vendor.ToUpper().Equals("SANWA") || Vendor.ToUpper().Equals("ATEL_NEW"))
            {
                key = Txn.AdrNo + Txn.Type;
                //支援同時多發命令
                for (int seq = 0; seq <= 99; seq++)
                {
                    string tmpKey = key + seq.ToString("00");

                    if (!TransactionList.ContainsKey(tmpKey))
                    {
                        key = tmpKey;
                        break;
                    }
                    if (seq == 99)
                    {
                        logger.Error("seq is run out!");
                    }
                }
            }
            else
            {
                if (Vendor.ToUpper().Equals("SANWA_MC"))
                {
                    if (orgTxn.CommandEncodeStr.Contains("MCR:"))
                    {
                        Txn.CommandType = "CMD";
                    }
                    if (Txn.Method == Transaction.Command.LoadPortType.Reset)
                    {
                        key = "0";
                    }
                    else
                    {
                        key = Txn.AdrNo;
                    }
                    //}
                    //else
                    //{
                    //    key = "0" + msgList[0].Command;
                    //}
                }
                else
                {
                    key = Txn.AdrNo + Txn.Type;
                }
            }

            if (TransactionList.TryAdd(key, Txn) || Txn.Method.Equals("Stop"))
            {
                Txn.SetTimeOutReport(this);
                Txn.SetTimeOutMonitor(true);



                //if (Vendor.ToUpper().Equals("ACDT"))
                //{
                //    byte[] byteAry = Encoding.UTF8.GetBytes(Txn.CommandEncodeStr);


                //    logger.Debug(DeviceName + " Send:" + BitConverter.ToString(byteAry) + " Wafer:" + waferids);
                //}
                //else
                //{

                if (Txn.CommandType.Equals(""))
                {
                    Txn.CommandType = _Decoder.GetMessage(Txn.CommandEncodeStr)[0].CommandType;
                }
                //if (Txn.CommandType.Equals("GET") || Txn.CommandType.IndexOf("FS") != -1)
                //{

                //}
                if (Txn.Method.Equals(Transaction.Command.LoadPortType.Reset))
                {
                    Txn.SetTimeOut(15000);
                }
                else
                {
                    Txn.SetTimeOut(Txn.AckTimeOut);
                }
                try
                {
                    //logger.Info(DeviceName + " Send:" + Txn.CommandEncodeStr.Replace("\r", ""));
                    //if (!this.Vendor.ToUpper().Equals("MITSUBISHI_PLC"))
                    //{
                    //    _ReportTarget.On_Message_Log("CMD", DeviceName + " Send:" + Txn.CommandEncodeStr.Replace("\r", ""));
                    //}
                    //if (this.Vendor.Equals("SMARTTAG8200") || this.Vendor.Equals("SMARTTAG8400"))
                    //{
                    //    //if (Txn.Method == Transaction.Command.SmartTagType.GetLCDData)
                    //    //{
                    //    //    conn.WaitForData(true);
                    //    //}
                    //    ThreadPool.QueueUserWorkItem(new WaitCallback(conn.SendHexData), Txn.CommandEncodeStr);

                    //}
                    //else
                    //{

                    //    ThreadPool.QueueUserWorkItem(new WaitCallback(conn.Send), Txn.CommandEncodeStr);
                    //}
                    if (Txn.NodeName.ToUpper().Equals("SMIF1"))
                    {
                        ch1Send = Txn.CommandEncodeStr;
                    }
                    else if (Txn.NodeName.ToUpper().Equals("SMIF2"))
                    {
                        ch2Send = Txn.CommandEncodeStr;
                    }
                }
                catch (Exception eex)
                {
                    logger.Error(eex.StackTrace);
                    _ReportTarget.On_Message_Log("CMD", DeviceName + " Err:" + eex.StackTrace);
                    Txn.SetTimeOutMonitor(false);
                    Transaction tmp;
                    TransactionList.TryRemove(key, out tmp);
                    CommandReturnMessage rm = new CommandReturnMessage();
                    rm.Value = "ConnectionError";
                    _ReportTarget.On_Command_Error(NodeManagement.Get(Txn.NodeName), Txn, rm);
                }
            }
            else
            {
                Transaction workingTxn;
                TransactionList.TryRemove(key, out workingTxn);
                logger.Debug(DeviceName + "(DoWork " + IPAdress + ":" + Port.ToString() + ":" + Txn.CommandEncodeStr + ") Same type command " + workingTxn.CommandEncodeStr + " is already excuting.");
                _ReportTarget.On_Message_Log("CMD", DeviceName + "(DoWork " + IPAdress + ":" + Port.ToString() + ":" + Txn.CommandEncodeStr + ") Same type command " + workingTxn.CommandEncodeStr + " is already excuting.");
                Txn.SetTimeOutMonitor(false);
                CommandReturnMessage rm = new CommandReturnMessage();
                rm.Value = "AlreadyExcuting";
                _ReportTarget.On_Command_Error(NodeManagement.Get(Txn.NodeName), Txn, rm);
            }
        }
Exemple #11
0
        public void On_Command_Finished(Node Node, Transaction Txn, CommandReturnMessage Msg)
        {
            logger.Debug("On_Command_Finished");
            //Transaction txn = new Transaction();
            switch (Txn.FormName)
            {
            case "ChangeAlignWaferSize":
                switch (Node.Type)
                {
                case "ROBOT":
                    switch (Txn.Method)
                    {
                    case Transaction.Command.RobotType.GetWait:
                        Node.WaitForFinish = false;
                        break;
                    }
                    break;
                }
                break;

            case "FormManual":

                switch (Node.Type)
                {
                case "SMARTTAG":
                    switch (Txn.Method)
                    {
                    case Transaction.Command.SmartTagType.GetLCDData:
                        ManualPortStatusUpdate.UpdateID(Msg.Value);
                        break;
                    }
                    //ManualPortStatusUpdate.LockUI(false);
                    break;

                case "LOADPORT":

                    ManualPortStatusUpdate.UpdateLog(Node.Name, Msg.Command + " Finished");
                    //ManualPortStatusUpdate.LockUI(false);

                    break;

                case "ROBOT":
                    ManualRobotStatusUpdate.UpdateGUI(Txn, Node.Name, Msg.Value);        //update 手動功能畫面
                    break;

                case "ALIGNER":
                    ManualAlignerStatusUpdate.UpdateGUI(Txn, Node.Name, Msg.Value);        //update 手動功能畫面
                    break;
                }
                break;

            default:
                switch (Node.Type)
                {
                case "ROBOT":
                //switch (Txn.Method)
                //{
                //    case Transaction.Command.RobotType.Mapping: //when 200mm port mapped by robot's fork, then port's busy switch to false.
                //        NodeManagement.Get(Txn.Position).Busy = false;
                //        break;
                //}
                //break;
                case "LOADPORT":
                    switch (Txn.Method)
                    {
                    }
                    break;

                case "OCR":
                    switch (Txn.Method)
                    {
                    case Transaction.Command.OCRType.Read:
                        OCRUpdate.UpdateOCRRead(Node.Name, Msg.Value, Txn.TargetJobs[0]);

                        break;
                    }
                    break;
                }
                break;
            }
        }
Exemple #12
0
        public void On_Command_Excuted(Node Node, Transaction Txn, CommandReturnMessage Msg)
        {
            logger.Debug("On_Command_Excuted");
            string Message = "";

            Transaction SendTxn = new Transaction();

            if (Txn.Method == Transaction.Command.LoadPortType.Reset)
            {
                AlarmUpdate.UpdateAlarmList(AlarmManagement.GetAll());
            }



            switch (Node.Type)
            {
            case "LOADPORT":
                switch (Txn.Method)
                {
                case Transaction.Command.LoadPortType.GetMapping:
                case Transaction.Command.LoadPortType.Unload:
                case Transaction.Command.LoadPortType.MappingUnload:
                case Transaction.Command.LoadPortType.DoorUp:
                case Transaction.Command.LoadPortType.InitialPos:
                case Transaction.Command.LoadPortType.ForceInitialPos:
                    WaferAssignUpdate.RefreshMapping(Node.Name);
                    MonitoringUpdate.UpdateNodesJob(Node.Name);
                    RunningUpdate.UpdateNodesJob(Node.Name);
                    break;

                case Transaction.Command.LoadPortType.GetCassetteSize:
                    ManualPortStatusUpdate.UpdateParameter("CASSETTE_SIZE_tb", Msg.Value);
                    break;

                case Transaction.Command.LoadPortType.GetSlotOffset:
                    ManualPortStatusUpdate.UpdateParameter("SLOT_OFFSET_tb", Msg.Value);
                    break;

                case Transaction.Command.LoadPortType.GetWaferOffset:
                    ManualPortStatusUpdate.UpdateParameter("WAFER_OFFSET_tb", Msg.Value);
                    break;

                case Transaction.Command.LoadPortType.GetTweekDistance:
                    ManualPortStatusUpdate.UpdateParameter("TWEEK_tb", Msg.Value);
                    break;

                case Transaction.Command.LoadPortType.GetSlotPitch:
                    ManualPortStatusUpdate.UpdateParameter("SLOT_PITCH_tb", Msg.Value);
                    break;
                }
                break;

            case "ROBOT":
                switch (Txn.Method)
                {
                case Transaction.Command.RobotType.GetMapping:
                    WaferAssignUpdate.RefreshMapping(Node.CurrentPosition);
                    MonitoringUpdate.UpdateNodesJob(Node.CurrentPosition);
                    RunningUpdate.UpdateNodesJob(Node.CurrentPosition);
                    break;
                }
                break;
            }

            switch (Txn.FormName)
            {
            case "FormStatus":
                Util.StateUtil.UpdateSTS(Node.Name, Msg.Value);
                break;

            case "PauseProcedure":

                break;

            case "FormManual":
                switch (Node.Type)
                {
                case "SMARTTAG":
                    if (!Txn.Method.Equals(Transaction.Command.SmartTagType.GetLCDData))
                    {
                        //ManualPortStatusUpdate.LockUI(false);
                    }
                    break;

                case "LOADPORT":
                    if (!Txn.CommandType.Equals("MOV") && !Txn.CommandType.Equals("HCS"))
                    {
                        //ManualPortStatusUpdate.LockUI(false);
                    }
                    else
                    {
                        if (Txn.Method.Equals(Transaction.Command.LoadPortType.Reset))
                        {
                            // ManualPortStatusUpdate.LockUI(false);
                        }
                    }
                    ManualPortStatusUpdate.UpdateLog(Node.Name, Msg.Command + " Excuted");
                    switch (Txn.Method)
                    {
                    case Transaction.Command.LoadPortType.ReadVersion:
                        ManualPortStatusUpdate.UpdateVersion(Node.Name, Msg.Value);
                        break;

                    case Transaction.Command.LoadPortType.GetLED:
                        ManualPortStatusUpdate.UpdateLED(Node.Name, Msg.Value);
                        break;

                    case Transaction.Command.LoadPortType.ReadStatus:
                        ManualPortStatusUpdate.UpdateSmifStatus(Node.Name, Msg.Value);
                        break;

                    case Transaction.Command.LoadPortType.GetCount:

                        break;

                    case Transaction.Command.LoadPortType.GetMapping:
                        ManualPortStatusUpdate.UpdateMapping(Node.Name, Msg.Value);
                        break;
                    }
                    break;

                case "OCR":
                    switch (Txn.Method)
                    {
                    case Transaction.Command.OCRType.GetOnline:
                        //OCRUpdate.UpdateOCRStatus(Node.Name, Msg.Value);
                        break;
                    }
                    break;

                case "ROBOT":
                    switch (Txn.Method)
                    {
                    case Transaction.Command.RobotType.Speed:
                    case Transaction.Command.RobotType.Mode:
                    case Transaction.Command.RobotType.Reset:
                    case Transaction.Command.RobotType.Servo:

                        ManualRobotStatusUpdate.UpdateGUI(Txn, Node.Name, Msg.Value);            //update 手動功能畫面
                        break;

                    case Transaction.Command.RobotType.GetSpeed:
                    case Transaction.Command.RobotType.GetRIO:
                    case Transaction.Command.RobotType.GetError:
                    case Transaction.Command.RobotType.GetMode:
                    case Transaction.Command.RobotType.GetStatus:
                    case Transaction.Command.RobotType.GetSV:
                        ManualRobotStatusUpdate.UpdateGUI(Txn, Node.Name, Msg.Value);            //update 手動功能畫面
                        break;

                    case Transaction.Command.RobotType.GetCombineStatus:
                        ManualRobotStatusUpdate.UpdateGUI(Txn, Node.Name, Msg.Command);            //update 手動功能畫面
                        break;
                    }
                    break;

                case "ALIGNER":
                    switch (Txn.Method)
                    {
                    case Transaction.Command.AlignerType.Speed:
                    case Transaction.Command.AlignerType.Mode:
                    case Transaction.Command.AlignerType.Reset:
                    case Transaction.Command.AlignerType.Servo:
                    //Thread.Sleep(500);
                    ////向Aligner 詢問狀態
                    //Node aligner = NodeManagement.Get(Node.Name);
                    //String script_name = aligner.Brand.ToUpper().Equals("SANWA") ? "AlignerStateGet" : "AlignerStateGet(Kawasaki)";
                    ////aligner.ExcuteScript(script_name, "FormManual", out Message);
                    //ManualAlignerStatusUpdate.UpdateGUI(Txn, Node.Name, Msg.Value);//update
                    //break;
                    case Transaction.Command.AlignerType.GetMode:
                    case Transaction.Command.AlignerType.GetSV:
                    case Transaction.Command.AlignerType.GetStatus:
                    case Transaction.Command.AlignerType.GetSpeed:
                    case Transaction.Command.AlignerType.GetRIO:
                    case Transaction.Command.AlignerType.GetError:
                        ManualAlignerStatusUpdate.UpdateGUI(Txn, Node.Name, Msg.Value);            //update 手動功能畫面
                        break;

                    case Transaction.Command.RobotType.GetCombineStatus:
                        ManualAlignerStatusUpdate.UpdateGUI(Txn, Node.Name, Msg.Command);            //update 手動功能畫面
                        break;
                    }
                    break;
                }
                break;

            default:

                break;
            }
        }
Exemple #13
0
 public void On_Event_Trigger(Node Node, CommandReturnMessage Msg)
 {
 }
Exemple #14
0
 public void On_Command_Finished(Node Node, Transaction Txn, CommandReturnMessage Msg)
 {
 }
Exemple #15
0
 public void On_Command_Error(Node Node, Transaction Txn, CommandReturnMessage Msg)
 {
 }
Exemple #16
0
        public void On_Connection_Message(object Msg)
        {
            try
            {
                JObject restoredObject = JsonConvert.DeserializeObject <JObject>(Msg.ToString());
                //JObject可使用LINQ方式存取
                //var q = from p in restoredObject.Properties()
                //        where p.Name == "Name"
                //        select p;
                TaskFlowManagement.CurrentProcessTask Task = null;
                Node Node = null;
                CommandReturnMessage ReturnMsg = null;
                Transaction          Txn       = null;
                switch (restoredObject.Property("Event").Value.ToString())
                {
                case "NodeReq":
                    ReqNode       = JsonConvert.DeserializeObject <Node>(restoredObject.Property("Node").Value.ToString());
                    NodeAvailable = true;
                    break;

                case "SystemConfig":
                    SystemConfig SysCfg = JsonConvert.DeserializeObject <SystemConfig>(restoredObject.Property("SystemConfig").Value.ToString());
                    //Dictionary<string, string> param = new Dictionary<string, string>();
                    //param.Add("@Target","ROBOT01");
                    //NewTask("123123", TaskFlowManagement.Command.ROBOT_HOME,param);
                    break;

                case "On_TaskJob_Ack":
                    Task = JsonConvert.DeserializeObject <TaskFlowManagement.CurrentProcessTask>(restoredObject.Property("Task").Value.ToString());
                    _Report.On_TaskJob_Ack(Task);
                    break;

                case "On_TaskJob_Finished":
                    Task = JsonConvert.DeserializeObject <TaskFlowManagement.CurrentProcessTask>(restoredObject.Property("Task").Value.ToString());
                    _Report.On_TaskJob_Finished(Task);
                    break;

                case "On_TaskJob_Aborted":
                    Task = JsonConvert.DeserializeObject <TaskFlowManagement.CurrentProcessTask>(restoredObject.Property("Task").Value.ToString());
                    string NodeName   = restoredObject.Property("NodeName").Value.ToString();
                    string ReportType = restoredObject.Property("ReportType").Value.ToString();
                    string Message    = restoredObject.Property("Message").Value.ToString();
                    _Report.On_TaskJob_Aborted(Task);
                    break;

                case "On_Alarm_Happend":
                    //TransferControl.Management.AlarmManagement.AlarmInfo Alarm = JsonConvert.DeserializeObject<TransferControl.Management.AlarmManagement.AlarmInfo>(restoredObject.Property("Alarm").Value.ToString());
                    //_Report.On_Alarm_Happen(Alarm);
                    break;

                case "On_Event_Trigger":
                    Node      = JsonConvert.DeserializeObject <Node>(restoredObject.Property("Node").Value.ToString());
                    ReturnMsg = JsonConvert.DeserializeObject <CommandReturnMessage>(restoredObject.Property("Msg").Value.ToString());
                    _Report.On_Event_Trigger(Node, ReturnMsg);
                    break;

                case "On_Command_Excuted":
                    Node      = JsonConvert.DeserializeObject <Node>(restoredObject.Property("Node").Value.ToString());
                    Txn       = JsonConvert.DeserializeObject <Transaction>(restoredObject.Property("Txn").Value.ToString());
                    ReturnMsg = JsonConvert.DeserializeObject <CommandReturnMessage>(restoredObject.Property("Msg").Value.ToString());
                    _Report.On_Command_Excuted(Node, Txn, ReturnMsg);
                    break;

                case "On_Command_Finished":
                    Node      = JsonConvert.DeserializeObject <Node>(restoredObject.Property("Node").Value.ToString());
                    Txn       = JsonConvert.DeserializeObject <Transaction>(restoredObject.Property("Txn").Value.ToString());
                    ReturnMsg = JsonConvert.DeserializeObject <CommandReturnMessage>(restoredObject.Property("Msg").Value.ToString());
                    _Report.On_Command_Finished(Node, Txn, ReturnMsg);
                    break;
                }
            }
            catch (Exception e)
            {
                MessageLog("CMD", e.Message);
                MessageLog("CMD", e.StackTrace);
                MessageLog("CMD", Msg.ToString());
            }
        }