using System; using System.Threading; using MECF.Framework.Simulator.Core.Driver; namespace MECF.Framework.Simulator.Core.Robots { public class YaskawaNX100ControllerSimulator : SocketDeviceSimulator { protected Random _rd = new Random(); public bool Failed { get; set; } public string ResultValue { get; set; } public YaskawaNX100ControllerSimulator(int port) :base(port, 4, "\r", ' ') { //Action Command AddCommandHandler("INIT", HandleINIT); AddCommandHandler("MHOM", HandleMHOM); AddCommandHandler("MTRG", HandleMTRG); AddCommandHandler("MTRE", HandleMTRE); AddCommandHandler("MTGO", HandleMTGO); AddCommandHandler("MTPO", HandleMTPO); AddCommandHandler("MTRP", HandleMTRP); AddCommandHandler("MMAP", HandleMMAP); AddCommandHandler("MALN", HandleMALN); AddCommandHandler("MPNT", HandleMPNT); AddCommandHandler("MTPT", HandleMTPT); AddCommandHandler("MTRS", HandleMTRS); AddCommandHandler("MEXG", HandleMEXG); /* AddCommandHandler("MREL", HandleMREL); AddCommandHandler("MALN", HandleMALN); AddCommandHandler("MACA", HandleMACA); AddCommandHandler("MCTR", HandleMCTR); AddCommandHandler("MTCH", HandleMTCH); AddCommandHandler("MABS", HandleMABS); AddCommandHandler("MMCA", HandleMMCA); */ //Control Command AddCommandHandler("CCLR", HandleCCLR); AddCommandHandler("CSOL", HandleCSOL); AddCommandHandler("CHLT", HandleCHLT); AddCommandHandler("CLFT", HandleCLFT); //AddCommandHandler("CSTP", HandleCSTP); AddCommandHandler("CRSM", HandleCRSM); //AddCommandHandler("CSRV", HandleCSRV); //Setting Command AddCommandHandler("SSPD", HandleSSPD); AddCommandHandler("SSLV", HandleSSLV); AddCommandHandler("SPRM", HandleSPRM); AddCommandHandler("SMSK", HandleSMSK); //Reference Command AddCommandHandler("RMAP", HandleRMAP); AddCommandHandler("RSTS", HandleRSTS); /* AddCommandHandler("RSPD", HandleRSPD); AddCommandHandler("RSLV", HandleRSLV); AddCommandHandler("RPRM", HandleRPRM); AddCommandHandler("RERR", HandleRERR); AddCommandHandler("RMSK", HandleRMSK); AddCommandHandler("RVER", HandleRVER); AddCommandHandler("RALN", HandleRALN); AddCommandHandler("RACA", HandleRACA); AddCommandHandler("RCCD", HandleRCCD); AddCommandHandler("RLOG", HandleRLOG); AddCommandHandler("RMAP", HandleRMAP); */ //ACK AddCommandHandler("ACKN", HandleACKN); AddCommandHandler("Unknown", HandleUnknown); } public virtual void HandleMTRG(string obj) { Response("MTRG", obj); Thread.Sleep(2000); EndOfExecution(obj); } public virtual void HandleMTRE(string obj) { Response("MTRE", obj); Thread.Sleep(1000); EndOfExecution(obj); } public virtual void HandleMTPO(string obj) { Response("MTPO", obj); Thread.Sleep(1000); EndOfExecution(obj); } public virtual void HandleMTGO(string obj) { Response("MTGO", obj); Thread.Sleep(1000); EndOfExecution(obj); } public virtual void HandleMTRP(string obj) { Response("MTRP", obj); Thread.Sleep(2000); EndOfExecution(obj); } public virtual void HandleRMAP(string obj) { Response("RMAP", obj); EndOfExecution(obj); } public virtual void HandleMMCA(string obj) { Response("MMCA", obj); EndOfExecution(obj); } public virtual void HandleMMAP(string msg) { string unit = msg.Substring(1, 1); string seq = msg.Substring(2, 2); ; string cmd = msg.Substring(4, 4); ; string sts = 0.ToString("X02"); string Ackcd = 0.ToString("X04"); //$ () string feedback = string.Format(",{0},{1},{2},{3},{4},", unit, seq, sts, Ackcd, cmd).Replace(",", ""); string sum = CheckSum(feedback); string result = String.Format("{0}{1}{2}", "$", feedback, sum); OnWriteMessage(result); Thread.Sleep(3000); int executeTime = _rd.Next(10000, 999999); string exeTime = executeTime.ToString("D6"); string posData = GetPosData(); string error = 0.ToString("X04"); //! () INIT feedback = string.Format(",{0},{1},{2},{3},{4},", unit, seq, sts, error, cmd).Replace(",", ""); sum = CheckSum(feedback); result = String.Format("{0}{1}{2}", "!", feedback, sum); OnWriteMessage(result); } public virtual void HandleMABS(string obj) { Response("MABS", obj); EndOfExecution(obj); } public virtual void HandleMTCH(string obj) { Response("MTCH", obj); EndOfExecution(obj); } public virtual void HandleMCTR(string obj) { Response("MCTR", obj); EndOfExecution(obj); } public virtual void HandleMTRS(string obj) { Response("MTRS", obj); EndOfExecution(obj); } public virtual void HandleMPNT(string obj) { Response("MPNT", obj); Thread.Sleep(1000); EndOfExecution(obj); } public virtual void HandleMTPT(string obj) { Response("MTPT", obj); Thread.Sleep(1000); EndOfExecution(obj); } public virtual void HandleMEXG(string obj) { Response("MEXG", obj); Thread.Sleep(1000); EndOfExecution(obj); } public virtual void HandleUnknown(string obj) { Response("", obj); } private void HandleACKN(string obj) { //DO NOTHING } private void HandleRLOG(string obj) { Response("RLOG", obj); } private void HandleRCCD(string obj) { Response("RCCD", obj); } private void HandleRACA(string obj) { Response("RACA", obj); } private void HandleRALN(string obj) { Response("RALN", obj); } private void HandleRVER(string obj) { Response("RVER", obj); } private void HandleRMSK(string obj) { Response("RMSK", obj); } private void HandleRERR(string obj) { Response("RERR", obj); } //$,(,),RSTS(,) //$ () //$ () public virtual void HandleRSTS(string msg) { string unit = msg.Substring(1, 1); string seq = msg.Substring(2, 2); ; string cmd = msg.Substring(4, 4); ; string sts = 0.ToString("X02"); string Ackcd = 0.ToString("X04"); string error = 0.ToString("X04"); int status1 = Convert.ToInt32("0011", 2); string status = string.Format("{0}000", status1.ToString("X1")); string feedback = string.Format(",{0},{1},{2},{3},{4},{5},{6},", unit, seq, sts, Ackcd, cmd, error, status).Replace(",",""); string sum = CheckSum(feedback); string result = String.Format("{0}{1}{2}", "$", feedback, sum); OnWriteMessage(result); } private void HandleRPRM(string obj) { Response("RPRM", obj); } private void HandleRSLV(string obj) { Response("RSLV", obj); } private void HandleRSPD(string obj) { Response("RSPD", obj); } private void HandleSMSK(string obj) { Response("SMSK", obj); } private void HandleSPRM(string obj) { Response("SPRM", obj); } private void HandleSSLV(string obj) { Response("SSLV", obj); } private void HandleSSPD(string obj) { Response("SSPD", obj); } private void HandleCSOL(string obj) { Response("CSOL", obj); EndOfExecution(obj); } private void HandleCLFT(string obj) { Response("CLFT", obj); EndOfExecution(obj); } private void HandleCHLT(string obj) { Response("CHLT", obj); EndOfExecution(obj); } //$,(,),CCLR,(,) //$,(,),,,CCLR,(,) //!,(,),,,CCLR,,…,(,) public virtual void HandleCCLR(string msg) { string unit = msg.Substring(1, 1); string seq = msg.Substring(2, 2); ; string cmd = msg.Substring(4, 4); ; string sts = 0.ToString("X02"); string Ackcd = 0.ToString("X04"); string feedback = string.Format(",{0},{1},{2},{3},{4},", unit, seq, sts, Ackcd, cmd).Replace(",", ""); string sum = CheckSum(feedback); string result = String.Format("{0}{1}{2}", "$", feedback, sum); OnWriteMessage(result); Thread.Sleep(3000); int executeTime = _rd.Next(10000, 999999); string exeTime = executeTime.ToString("D6"); string posData = GetPosData(); string error = 0.ToString("X04"); feedback = string.Format(",{0},{1},{2},{3},{4},{5},{6},", unit, seq, sts, error, cmd, exeTime, posData).Replace(",", ""); sum = CheckSum(feedback); result = String.Format("{0}{1}{2}", "!", feedback, sum); OnWriteMessage(result); } private void HandleCSRV(string obj) { Response("CSRV", obj); EndOfExecution(obj); } private void HandleCRSM(string obj) { Response("CRSM", obj); EndOfExecution(obj); } private void HandleCSTP(string obj) { Response("CSTP", obj); EndOfExecution(obj); } private void HandleMACA(string obj) { Response("MACA", obj); EndOfExecution(obj); } //$,(,),MALN,,(,) //$,(,),,,MALN,,(,) //! () MALN //!,(,),,,MALN,,…,,…,(,) public virtual void HandleMALN(string msg) { string unit = msg.Substring(1, 1); string seq = msg.Substring(2, 2); ; string cmd = msg.Substring(4, 4); ; string sts = 0.ToString("X02"); string Ackcd = 0.ToString("X04"); string feedback = string.Format(",{0},{1},{2},{3},{4},", unit, seq, sts, Ackcd, cmd).Replace(",", ""); string sum = CheckSum(feedback); string result = String.Format("{0}{1}{2}", "$", feedback, sum); OnWriteMessage(result); Thread.Sleep(3000); string error = 0.ToString("X04"); int executeTime = _rd.Next(10000, 999999); string exeTime = executeTime.ToString("D6"); string posData = GetPosData(); string valueData = GetValueData(); feedback = string.Format(",{0},{1},{2},{3},{4},{5},{6},{7},", unit, seq, sts, error, cmd, exeTime, posData, valueData).Replace(",", ""); sum = CheckSum(feedback); result = String.Format("{0}{1}{2}", "!", feedback, sum); OnWriteMessage(result); } private void HandleMREL(string obj) { Response("MREL", obj); EndOfExecution(obj); } //$,(,),INIT,,,(,) //$,(,),,,INIT,,,(,) //!,(,),,,INIT,,…,(,) public virtual void HandleINIT(string msg) { string unit = msg.Substring(1, 1); string seq = msg.Substring(2, 2); ; string cmd = msg.Substring(4, 4); ; string sts = 0.ToString("X02"); string Ackcd = 0.ToString("X04"); //$ () string feedback = string.Format(",{0},{1},{2},{3},{4},", unit, seq, sts, Ackcd, cmd).Replace(",", ""); string sum = CheckSum(feedback); string result = String.Format("{0}{1}{2}", "$", feedback, sum); OnWriteMessage(result); Thread.Sleep(3000); int executeTime = _rd.Next(10000, 999999); string exeTime = executeTime.ToString("D6"); string posData = GetPosData(); string error = 0.ToString("X04"); //! () INIT feedback = string.Format(",{0},{1},{2},{3},{4},", unit, seq, sts, error, cmd).Replace(",", ""); sum = CheckSum(feedback); result = String.Format("{0}{1}{2}", "!", feedback, sum); OnWriteMessage(result); } public virtual void HandleMHOM(string msg) { string unit = msg.Substring(1,1); string seq = msg.Substring(2, 2); ; string cmd = msg.Substring(4, 4); ; string sts = 0.ToString("X02"); string Ackcd = 0.ToString("X04"); //$ () string feedback = string.Format(",{0},{1},{2},{3},{4},", unit, seq, sts, Ackcd, cmd).Replace(",", ""); string sum = CheckSum(feedback); string result = String.Format("{0}{1}{2}", "$", feedback, sum); OnWriteMessage(result); Thread.Sleep(3000); int executeTime = _rd.Next(10000, 999999); string exeTime = executeTime.ToString("D6"); string posData = GetPosData(); string error = 0.ToString("X04"); //! () INIT feedback = string.Format(",{0},{1},{2},{3},{4},", unit, seq, sts, error, cmd).Replace(",", ""); sum = CheckSum(feedback); result = String.Format("{0}{1}{2}", "!", feedback, sum); OnWriteMessage(result); } //$,0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 //$,(,),,,,, (,) // public void Response(string cmd, string msg) { string unit = msg.Substring(1, 1); string seq = msg.Substring(2, 2); ; string sts = 0.ToString("X02"); string Ackcd = 0.ToString("X04"); int status1 = Convert.ToInt32("0011", 2); string status = string.Format("{0}000", status1.ToString("X1")); //$ () string feedback = string.Format(",{0},{1},{2},{3},{4},", unit, seq, sts, Ackcd, cmd).Replace(",", ""); string sum = CheckSum(feedback); string result = String.Format("{0}{1}{2}", "$", feedback, sum); OnWriteMessage(result); } public string CheckSum(string feedback) { int sum = 0; foreach (var item in feedback) { sum += (int)item; } sum = sum % 256; return sum.ToString("X02"); } public void EndOfExecution(string msg) { string[] arrayMsg = msg.Split(','); string unit = msg.Substring(1, 1); string seq = msg.Substring(2, 2); ; string cmd = msg.Substring(4, 4); ; string sts = 0.ToString("X02"); string Ackcd = Failed ? "33D4" : 0.ToString("X04"); int executeTime = _rd.Next(10000, 999999); string exeTime = executeTime.ToString("D6"); string posData = 0.ToString("D8"); int status1 = Convert.ToInt32("0011", 2); string status = string.Format("{0}000", status1.ToString("X1")); //! < UNo > (< SeqNo >) < StsN > < Errcd > MTRG < CR > string feedback = string.Format(",{0},{1},{2},{3},{4},", unit, seq, sts, Ackcd, cmd).Replace(",", ""); string sum = CheckSum(feedback); string result = String.Format("{0}{1}{2}", "!", feedback, sum); OnWriteMessage(result); } public string GetPosData() { return string.Format("{0},{1},{2},{3},{4}", _rd.Next().ToString("D8"), _rd.Next().ToString("D8"), _rd.Next().ToString("D8"), _rd.Next().ToString("D8"), _rd.Next().ToString("D8")); } public string GetValueData() { return string.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9}", _rd.Next(0, 0).ToString("D8"), _rd.Next(0, 0).ToString("D8"), _rd.Next(0, 0).ToString("D8"), _rd.Next(0, 0).ToString("D8"), _rd.Next(0, 0).ToString("D8"), _rd.Next(0, 0).ToString("D8"), _rd.Next(0, 0).ToString("D8"), _rd.Next(0, 0).ToString("D8"), _rd.Next(0, 0).ToString("D8"), _rd.Next(0, 0).ToString("D8")); } public string GetMapData(bool random, bool full) { string result=""; for (int i = 0; i < 25; i++) { if (random) { result += string.Format("{0:00}:{1}", i + 1, _rd.Next(100) > 50 ? "OK" : "--"); }else if (full) { result += string.Format("{0:00}:{1}", i + 1, "OK" ); } else { result += string.Format("{0:00}:{1}", i + 1, "--"); } if (i < 24) { result += ","; } } return result; } public string GetMapData(bool pre, bool post, bool mid) { string result = ""; for (int i = 0; i < 25; i++) { if (i < 8) { result += string.Format("{0:00}:{1}", i + 1, pre ? "OK" : "--"); } else if (i < 16) { result += string.Format("{0:00}:{1}", i + 1, mid ? "OK" : "--"); } else { result += string.Format("{0:00}:{1}", i + 1, post ? "OK" : "--"); } if (i < 24) { result += ","; } } return result; } public string GetMapData(int startslot, int endslot) { string result = ""; for (int i = 0; i < 25; i++) { if (i >= startslot && i<=endslot) { result += string.Format("{0:00}:{1}", i + 1, "OK" ); } else { result += string.Format("{0:00}:{1}", i + 1, "--"); } if (i < 24) { result += ","; } } return result; } } }