YaskawaSR100ControllerSimulator.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574
  1. using System;
  2. using System.Threading;
  3. using MECF.Framework.Simulator.Core.Driver;
  4. namespace MECF.Framework.Simulator.Core.Robots
  5. {
  6. public class YaskawaSR100ControllerSimulator : SocketDeviceSimulator
  7. {
  8. protected Random _rd = new Random();
  9. public YaskawaSR100ControllerSimulator(int port)
  10. :base(port, 3, "\r", ',')
  11. {
  12. //Action Command
  13. AddCommandHandler("INIT", HandleINIT);
  14. AddCommandHandler("MREL", HandleMREL);
  15. AddCommandHandler("MALN", HandleMALN);
  16. AddCommandHandler("MACA", HandleMACA);
  17. AddCommandHandler("MPNT", HandleMPNT);
  18. AddCommandHandler("MTRS", HandleMTRS);
  19. AddCommandHandler("MCTR", HandleMCTR);
  20. AddCommandHandler("MTCH", HandleMTCH);
  21. AddCommandHandler("MABS", HandleMABS);
  22. AddCommandHandler("MMAP", HandleMMAP);
  23. AddCommandHandler("RMPD", HandleRMPD);
  24. AddCommandHandler("MMCA", HandleMMCA);
  25. //Control Command
  26. AddCommandHandler("CSTP", HandleCSTP);
  27. AddCommandHandler("CRSM", HandleCRSM);
  28. AddCommandHandler("CSRV", HandleCSRV);
  29. AddCommandHandler("CCLR", HandleCCLR);
  30. AddCommandHandler("CSOL", HandleCSOL);
  31. //Setting Command
  32. AddCommandHandler("SSPD", HandleSSPD);
  33. AddCommandHandler("SSLV", HandleSSLV);
  34. AddCommandHandler("SPRM", HandleSPRM);
  35. AddCommandHandler("SMSK", HandleSMSK);
  36. //Reference Command
  37. AddCommandHandler("RSPD", HandleRSPD);
  38. AddCommandHandler("RSLV", HandleRSLV);
  39. AddCommandHandler("RPRM", HandleRPRM);
  40. AddCommandHandler("RSTS", HandleRSTS);
  41. AddCommandHandler("RERR", HandleRERR);
  42. AddCommandHandler("RMSK", HandleRMSK);
  43. AddCommandHandler("RVER", HandleRVER);
  44. AddCommandHandler("RALN", HandleRALN);
  45. AddCommandHandler("RACA", HandleRACA);
  46. AddCommandHandler("RCCD", HandleRCCD);
  47. AddCommandHandler("RLOG", HandleRLOG);
  48. AddCommandHandler("RMAP", HandleRMAP);
  49. AddCommandHandler("RPOS", HandleRPOS);
  50. //ACK
  51. AddCommandHandler("ACKN", HandleACKN);
  52. AddCommandHandler("Unknown", HandleUnknown);
  53. }
  54. public virtual void HandleRMAP(string obj)
  55. {
  56. Response("RMAP", obj);
  57. EndOfExecution(obj);
  58. }
  59. public virtual void HandleMMCA(string obj)
  60. {
  61. Response("MMCA", obj);
  62. EndOfExecution(obj);
  63. }
  64. public virtual void HandleMMAP(string obj)
  65. {
  66. Response("MMAP", obj);
  67. EndOfExecution(obj);
  68. }
  69. public virtual void HandleRMPD(string obj)
  70. {
  71. Response("RMPD", obj);
  72. EndOfExecution(obj);
  73. }
  74. public virtual void HandleMABS(string obj)
  75. {
  76. Response("MABS", obj);
  77. EndOfExecution(obj);
  78. }
  79. public virtual void HandleMTCH(string obj)
  80. {
  81. Response("MTCH", obj);
  82. EndOfExecution(obj);
  83. }
  84. public virtual void HandleMCTR(string obj)
  85. {
  86. Response("MCTR", obj);
  87. EndOfExecution(obj);
  88. }
  89. public virtual void HandleMTRS(string obj)
  90. {
  91. Response("MTRS", obj);
  92. EndOfExecution(obj);
  93. }
  94. public virtual void HandleMPNT(string obj)
  95. {
  96. Response("MPNT", obj);
  97. EndOfExecution(obj);
  98. }
  99. public virtual void HandleUnknown(string obj)
  100. {
  101. Response("", obj);
  102. }
  103. public virtual void HandleCSOL(string obj)
  104. {
  105. Response("CSOL", obj);
  106. EndOfExecution(obj);
  107. }
  108. private void HandleACKN(string obj)
  109. {
  110. //DO NOTHING
  111. }
  112. private void HandleRLOG(string obj)
  113. {
  114. Response("RLOG", obj);
  115. }
  116. private void HandleRCCD(string obj)
  117. {
  118. Response("RCCD", obj);
  119. }
  120. private void HandleRACA(string obj)
  121. {
  122. Response("RACA", obj);
  123. }
  124. private void HandleRALN(string obj)
  125. {
  126. Response("RALN", obj);
  127. }
  128. private void HandleRVER(string obj)
  129. {
  130. Response("RVER", obj);
  131. }
  132. public virtual void HandleRMSK(string obj)
  133. {
  134. Response("RMSK", obj);
  135. }
  136. private void HandleRERR(string obj)
  137. {
  138. Response("RERR", obj);
  139. }
  140. public virtual void HandleRPOS(string msg)
  141. {
  142. string[] arrayMsg = msg.Split(',');
  143. string unit = arrayMsg[1];
  144. string seq = arrayMsg[2];
  145. string cmd = arrayMsg[3];
  146. string sts = 0.ToString("X02");
  147. string Ackcd = 0.ToString("X04");
  148. string cmode = arrayMsg[4];
  149. string feedback = string.Format(",{0},{1},{2},{3},{4},{5},", unit, seq, sts, Ackcd, cmd, cmode);
  150. string sum = CheckSum(feedback);
  151. string result = String.Format("{0}{1}{2}", arrayMsg[0], feedback, sum);
  152. // OnWriteMessage(result);
  153. Thread.Sleep(3000);
  154. int executeTime = _rd.Next(10000, 999999);
  155. string exeTime = executeTime.ToString("D6");
  156. string posData = GetPosData();
  157. string error = 0.ToString("X04");
  158. feedback = string.Format(",{0},{1},{2},{3},{4},{5},{6},", unit, seq, sts, Ackcd, cmd, cmode, posData);
  159. sum = CheckSum(feedback);
  160. result = String.Format("{0}{1}{2}", "!", feedback, sum);
  161. OnWriteMessage(result);
  162. }
  163. //$,<UNo>(,<SeqNo>),RSTS(,<Sum>)<CR>
  164. //$,<UNo>(,<SeqNo>),<Sts>,<Ackcd>,RSTS,<Errcd>,<Status>(,<Sum>)<CR>
  165. public virtual void HandleRSTS(string msg)
  166. {
  167. string[] arrayMsg = msg.Split(',');
  168. string unit = arrayMsg[1];
  169. string seq = arrayMsg[2];
  170. string cmd = arrayMsg[3];
  171. string sts = 0.ToString("X02");
  172. string Ackcd = 0.ToString("X04");
  173. string error = 0.ToString("X04");
  174. int status1 = Convert.ToInt32("0011", 2);
  175. string status = string.Format("{0}000", status1.ToString("X1"));
  176. string feedback = string.Format(",{0},{1},{2},{3},{4},{5},{6},", unit, seq, sts, Ackcd, cmd, error, status);
  177. string sum = CheckSum(feedback);
  178. string result = String.Format("{0}{1}{2}", arrayMsg[0], feedback, sum);
  179. OnWriteMessage(result);
  180. }
  181. private void HandleRPRM(string obj)
  182. {
  183. Response("RPRM", obj);
  184. }
  185. private void HandleRSLV(string obj)
  186. {
  187. Response("RSLV", obj);
  188. }
  189. private void HandleRSPD(string obj)
  190. {
  191. Response("RSPD", obj);
  192. }
  193. public virtual void HandleSMSK(string obj)
  194. {
  195. Response("SMSK", obj);
  196. }
  197. private void HandleSPRM(string obj)
  198. {
  199. Response("SPRM", obj);
  200. }
  201. private void HandleSSLV(string obj)
  202. {
  203. Thread.Sleep(100);
  204. Response("SSLV", obj);
  205. }
  206. private void HandleSSPD(string obj)
  207. {
  208. Response("SSPD", obj);
  209. }
  210. //$,<UNo>(,<SeqNo>),CCLR,<CMode>(,<Sum>)<CR>
  211. //$,<UNo>(,<SeqNo>),<Sts>,<Ackcd>,CCLR,<CMode>(,<Sum>)<CR>
  212. //!,<UNo>(,<SeqNo>),<Sts>,<Errcd>,CCLR,<ExeTime>,<PosData1>…,<PosDataN>(,<Sum>)<CR>
  213. public virtual void HandleCCLR(string msg)
  214. {
  215. string[] arrayMsg = msg.Split(',');
  216. string unit = arrayMsg[1];
  217. string seq = arrayMsg[2];
  218. string cmd = arrayMsg[3];
  219. string sts = 0.ToString("X02");
  220. string Ackcd = 0.ToString("X04");
  221. string cmode = arrayMsg[4];
  222. string feedback = string.Format(",{0},{1},{2},{3},{4},{5},", unit, seq, sts, Ackcd, cmd, cmode);
  223. string sum = CheckSum(feedback);
  224. string result = String.Format("{0}{1}{2}", arrayMsg[0], feedback, sum);
  225. OnWriteMessage(result);
  226. Thread.Sleep(3000);
  227. int executeTime = _rd.Next(10000, 999999);
  228. string exeTime = executeTime.ToString("D6");
  229. string posData = GetPosData();
  230. string error = 0.ToString("X04");
  231. feedback = string.Format(",{0},{1},{2},{3},{4},{5},{6},", unit, seq, sts, error, cmd, exeTime, posData);
  232. sum = CheckSum(feedback);
  233. result = String.Format("{0}{1}{2}", "!", feedback, sum);
  234. OnWriteMessage(result);
  235. }
  236. private void HandleCSRV(string obj)
  237. {
  238. Response("CSRV", obj);
  239. EndOfExecution(obj);
  240. }
  241. private void HandleCRSM(string obj)
  242. {
  243. Response("CRSM", obj);
  244. EndOfExecution(obj);
  245. }
  246. private void HandleCSTP(string obj)
  247. {
  248. Response("CSTP", obj);
  249. EndOfExecution(obj);
  250. }
  251. private void HandleMACA(string obj)
  252. {
  253. Response("MACA", obj);
  254. EndOfExecution(obj);
  255. }
  256. //$,<UNo>(,<SeqNo>),MALN,<Mode>,<Angle>(,<Sum>)<CR>
  257. //$,<UNo>(,<SeqNo>),<Sts>,<Ackcd>,MALN,<Mode>,<Angle>(,<Sum>)<CR>
  258. //!,<UNo>(,<SeqNo>),<Sts>,<Errcd>,MALN,<ExeTime>,<PosData1>…,<PosDataN>,<Value1>…,<Value10>(,<Sum>)<CR>
  259. public virtual void HandleMALN(string msg)
  260. {
  261. string[] arrayMsg = msg.Split(',');
  262. string unit = arrayMsg[1];
  263. string seq = arrayMsg[2];
  264. string cmd = arrayMsg[3];
  265. string sts = 0.ToString("X02");
  266. string Ackcd = 0.ToString("X04");
  267. string mode = arrayMsg[4];
  268. string angle = arrayMsg[5];
  269. string feedback = string.Format(",{0},{1},{2},{3},{4},{5},{6},", unit, seq, sts, Ackcd, cmd, mode, angle);
  270. string sum = CheckSum(feedback);
  271. string result = String.Format("{0}{1}{2}", arrayMsg[0], feedback, sum);
  272. OnWriteMessage(result);
  273. Thread.Sleep(3000);
  274. string error = 0.ToString("X04");
  275. int executeTime = _rd.Next(10000, 999999);
  276. string exeTime = executeTime.ToString("D6");
  277. string posData = GetPosData();
  278. string valueData = GetValueData();
  279. feedback = string.Format(",{0},{1},{2},{3},{4},{5},{6},{7},", unit, seq, sts, error, cmd, exeTime, posData, valueData);
  280. sum = CheckSum(feedback);
  281. result = String.Format("{0}{1}{2}", "!", feedback, sum);
  282. //result = ">,2,EVNT,100,2022/10/20 04:26:33,2CA0,9B";
  283. OnWriteMessage(result);
  284. }
  285. private void HandleMREL(string obj)
  286. {
  287. Response("MREL", obj);
  288. EndOfExecution(obj);
  289. }
  290. //$,<UNo>(,<SeqNo>),INIT,<ErrClr>,<SrvOn>,<Home>(,<Sum>)<CR>
  291. //$,<UNo>(,<SeqNo>),<Sts>,<Ackcd>,INIT,<ErrClr>,<SrvOn>,<Axis>(,<Sum>)<CR>
  292. //!,<UNo>(,<SeqNo>),<Sts>,<Errcd>,INIT,<ExeTime>,<PosData1>…,<PosDataN>(,<Sum>)<CR>
  293. public virtual void HandleINIT(string msg)
  294. {
  295. string[] arrayMsg = msg.Split(',');
  296. string unit = arrayMsg[1];
  297. string seq = arrayMsg[2];
  298. string cmd = arrayMsg[3];
  299. string sts = 0.ToString("X02");
  300. string Ackcd = 0.ToString("X04");
  301. string errorClr = arrayMsg[4];
  302. string srvOn = arrayMsg[5];
  303. string axis = arrayMsg[6];
  304. string feedback = string.Format(",{0},{1},{2},{3},{4},{5},{6},{7},", unit, seq, sts, Ackcd, cmd, errorClr, srvOn, axis);
  305. string sum = CheckSum(feedback);
  306. string result = String.Format("{0}{1}{2}", arrayMsg[0], feedback, sum);
  307. OnWriteMessage(result);
  308. //string absEvent = ">,12EVNT,100,2022 / 04 / 24 10:11:41,3AC0,980F?$,2,04,C0,0000,INIT,1,1,G,32";
  309. //OnWriteMessage(absEvent);
  310. Thread.Sleep(3000);
  311. int executeTime = _rd.Next(10000, 999999);
  312. string exeTime = executeTime.ToString("D6");
  313. string posData = GetPosData();
  314. string error = 0.ToString("X04");
  315. feedback = string.Format(",{0},{1},{2},{3},{4},{5},{6},", unit, seq, sts, error, cmd, exeTime, posData);
  316. sum = CheckSum(feedback);
  317. result = String.Format("{0}{1}{2}", "!", feedback, sum);
  318. OnWriteMessage(result);
  319. }
  320. //$,0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 <CR>
  321. //$,<UNo>(,<SeqNo>),<Sts>,<Ackcd>,<Command>,<Parameter>, <Value>(,<Sum>)<CR>
  322. //
  323. public void Response(string cmd, string msg)
  324. {
  325. string[] arrayMsg = msg.Split(',');
  326. string unit = arrayMsg[1];
  327. string seq = arrayMsg[2];
  328. string sts = 0.ToString("X02");
  329. string error = 0.ToString("X04");
  330. string Ackcd = 0.ToString("X04");
  331. int status1 = Convert.ToInt32("0011", 2);
  332. string status = string.Format("{0}000", status1.ToString("X1"));
  333. string feedback = string.Format(",{0},{1},{2},{3},{4},{5},{6},", unit, seq, sts, Ackcd, cmd, error, status);
  334. string sum = CheckSum(feedback);
  335. string result = String.Format("{0}{1}{2}", arrayMsg[0], feedback, sum);
  336. OnWriteMessage(result);
  337. }
  338. public string CheckSum(string feedback)
  339. {
  340. int sum = 0;
  341. foreach (var item in feedback)
  342. {
  343. sum += (int)item;
  344. }
  345. sum = sum % 256;
  346. return sum.ToString("X02");
  347. }
  348. public void EndOfExecution(string msg)
  349. {
  350. string[] arrayMsg = msg.Split(',');
  351. string unit = arrayMsg[1];
  352. string seq = arrayMsg[2];
  353. string sts = 0.ToString("X02");
  354. string error = 0.ToString("X04");
  355. string type = arrayMsg[3];
  356. int executeTime = _rd.Next(10000, 999999);
  357. string exeTime = executeTime.ToString("D6");
  358. string posData = 0.ToString("D8");
  359. int status1 = Convert.ToInt32("0011", 2);
  360. string status = string.Format("{0}000", status1.ToString("X1"));
  361. string feedback = string.Format(",{0},{1},{2},{3},{4},{5},{6},", unit, seq, sts, error, type, exeTime, posData);
  362. string sum = CheckSum(feedback);
  363. string result = String.Format("{0}{1}{2}", "!", feedback, sum);
  364. OnWriteMessage(result);
  365. }
  366. public string GetPosData()
  367. {
  368. 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"));
  369. }
  370. public string GetValueData()
  371. {
  372. return string.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9}",
  373. _rd.Next(0, 0).ToString("D8"),
  374. _rd.Next(0, 0).ToString("D8"),
  375. _rd.Next(0, 0).ToString("D8"),
  376. _rd.Next(0, 0).ToString("D8"),
  377. _rd.Next(0, 0).ToString("D8"),
  378. _rd.Next(0, 0).ToString("D8"),
  379. _rd.Next(0, 0).ToString("D8"),
  380. _rd.Next(0, 0).ToString("D8"),
  381. _rd.Next(0, 0).ToString("D8"),
  382. _rd.Next(0, 0).ToString("D8"));
  383. }
  384. public string GetMapData(bool random, bool full)
  385. {
  386. string result="";
  387. for (int i = 0; i < 25; i++)
  388. {
  389. if (random)
  390. {
  391. result += string.Format("{0:00}:{1}", i + 1, _rd.Next(100) > 50 ? "OK" : "--");
  392. }else if (full)
  393. {
  394. result += string.Format("{0:00}:{1}", i + 1, "OK" );
  395. }
  396. else
  397. {
  398. result += string.Format("{0:00}:{1}", i + 1, "--");
  399. }
  400. if (i < 24)
  401. {
  402. result += ",";
  403. }
  404. }
  405. return result;
  406. }
  407. public string GetMapData(bool pre, bool post, bool mid)
  408. {
  409. string result = "";
  410. for (int i = 0; i < 25; i++)
  411. {
  412. if (i < 8)
  413. {
  414. result += string.Format("{0:00}:{1}", i + 1, pre ? "OK" : "--");
  415. }
  416. else if (i < 16)
  417. {
  418. result += string.Format("{0:00}:{1}", i + 1, mid ? "OK" : "--");
  419. }
  420. else
  421. {
  422. result += string.Format("{0:00}:{1}", i + 1, post ? "OK" : "--");
  423. }
  424. if (i < 24)
  425. {
  426. result += ",";
  427. }
  428. }
  429. return result;
  430. }
  431. public string GetMapData(int startslot, int endslot)
  432. {
  433. string result = "";
  434. for (int i = 0; i < 25; i++)
  435. {
  436. if (i >= startslot && i <= endslot)
  437. {
  438. result += string.Format("{0:00}:{1}", i + 1, "OK");
  439. }
  440. else
  441. {
  442. result += string.Format("{0:00}:{1}", i + 1, "--");
  443. }
  444. if (i < 24)
  445. {
  446. result += ",";
  447. }
  448. }
  449. result = "01:OK,02:--,03:OK,04:--,05:OK,06:--,07:OK,08:--,09:--,10:--,11:OK,12:OK,13:OK,14:OK,15:OK,16:--,17:OK,18:--,19:--,20:--,21:--,22:--,23:--,24:--,25:--";
  450. return result;
  451. }
  452. public string GetMapThickData(int startslot, int endslot)
  453. {
  454. string result = "";
  455. for (int i = 0; i < 25; i++)
  456. {
  457. if (i >= startslot && i <= endslot)
  458. {
  459. if(i%2==0)
  460. result += string.Format("{0:00}:{1}", i + 1, "00001111,00002222");
  461. else
  462. result += string.Format("{0:00}:{1}", i + 1, "00001111,00002222");
  463. }
  464. else
  465. {
  466. result += string.Format("{0:00}:{1}", i + 1, "00000000,00000000");
  467. }
  468. if (i < 24)
  469. {
  470. result += ",";
  471. }
  472. }
  473. result = "00:00019221,00019728,01:00031709,00032457,02:00044349,00045076,03:00057170,00057920,04:00082661,00083387,05:00089048,00089799,06:00095386,00096138,07:00101821,00102548,08:00108206,00108931,09:00120976,00121752,10:00000000,00000000,11:00000000,00000000,12:00000000,00000000,13:00000000,00000000,14:00000000,00000000,15:00000000,00000000,16:00000000,00000000,17:00000000,00000000,18:00000000,00000000,19:00000000,00000000,20:00000000,00000000,21:00000000,00000000,22:00000000,00000000,23:00000000,00000000,24:00000000,00000000,25:00000000,00000000,26:00000000,00000000,27:00000000,00000000,28:00000000,00000000,29:00000000,00000000";
  474. return result;
  475. }
  476. }
  477. }