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); }
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; } } }
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); } }
public void On_Event_Trigger(Node Node, CommandReturnMessage Msg) { _TaskReport.On_Event_Trigger(Node, Msg); }
public void On_Command_Finished(Node Node, Transaction Txn, CommandReturnMessage Msg) { Next(Node, Txn, "Finished"); _TaskReport.On_Command_Finished(Node, Txn, Msg); }
public void On_Command_Error(Node Node, Transaction Txn, CommandReturnMessage Msg) { _TaskReport.On_Command_Error(Node, Txn, Msg); On_TaskJob_Aborted(Txn.TaskObj); }
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); } }
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; } }
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; } }
public void On_Event_Trigger(Node Node, CommandReturnMessage Msg) { }
public void On_Command_Finished(Node Node, Transaction Txn, CommandReturnMessage Msg) { }
public void On_Command_Error(Node Node, Transaction Txn, CommandReturnMessage Msg) { }
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()); } }