XiaomiAGVMQTT_Loading.cs 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. using MqttnetServerWin;
  2. using Newtonsoft.Json;
  3. using System;
  4. using System.Linq;
  5. using System.Text;
  6. using static MainForm.ClassFile.XiaomiAPI_AGV.XiaomiAGVMQTT_Loading.IncomingFromAGV;
  7. namespace MainForm.ClassFile.XiaomiAPI_AGV
  8. {
  9. /// <summary>
  10. /// AGV向装备 发送 ⼊料指令(⼊料请求指令/⼊料完成指令)
  11. /// control/incoming ⼊料请求
  12. /// control/incoming/finish ⼊料完成
  13. /// </summary>
  14. public class XiaomiAGVMQTT_Loading : XiaomiAGVMQTT_Base
  15. {
  16. #region 解析数据
  17. /// <summary>
  18. /// 解析 agv报文(⼊料请求指令、⼊料完成指令)
  19. /// iiot_tm_comm_control_down/tm/down/control/${portCode}
  20. /// </summary>
  21. /// <param name="mqttHelper"></param>
  22. /// <param name="portCode">设备号</param>
  23. public static IncomingFromAGV DoData_AGVIncoming(string data)
  24. {
  25. IncomingFromAGV incomingFromAGV = new IncomingFromAGV();
  26. //incomingFromAGV.things = fromAGV.things; // 事件;非必填
  27. //incomingFromAGV.time = fromAGV.time; // 时间戳;13位
  28. //// 服务内容
  29. //incomingFromAGV.service.callId = fromAGV.service.callId;
  30. //incomingFromAGV.service.identifier = fromAGV.service.identifier;
  31. //incomingFromAGV.service.identifier = fromAGV.service.identifier;
  32. //// 接驳台信息
  33. //incomingFromAGV.service.inputItems
  34. // = JsonConvert.DeserializeObject<IncomingFromAGVInputItems>(fromAGV.service.inputItems);
  35. return incomingFromAGV;
  36. }
  37. /// <summary>
  38. /// AGV发送来的报文(⼊料请求指令、⼊料完成指令) - 实体
  39. /// </summary>
  40. public class IncomingFromAGV
  41. {
  42. /// <summary>
  43. /// 事件;非必填
  44. /// </summary>
  45. public string things { set; get; } = null;
  46. /// <summary>
  47. /// 服务内容
  48. /// </summary>
  49. public IncomingFromAGVService service { set; get; } = new IncomingFromAGVService();
  50. /// <summary>
  51. /// 时间戳;13位
  52. /// </summary>
  53. public string time { set; get; } = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
  54. /// <summary>
  55. /// 服务内容
  56. /// </summary>
  57. public class IncomingFromAGVService
  58. {
  59. /// <summary>
  60. /// Id 等于 时间戳time
  61. /// </summary>
  62. public string callId { set; get; } = string.Empty;
  63. /// <summary>
  64. /// 任务标识符
  65. /// control/incoming ⼊料请求
  66. /// control/incoming/finish ⼊料完成
  67. /// </summary>
  68. public string identifier { set; get; } = string.Empty;
  69. /// <summary>
  70. /// 接驳台信息
  71. /// </summary>
  72. public IncomingFromAGVInputItems inputItems { set; get; } = new IncomingFromAGVInputItems();
  73. }
  74. /// <summary>
  75. /// 接驳台信息
  76. /// </summary>
  77. public class IncomingFromAGVInputItems
  78. {
  79. /// <summary>
  80. /// 接驳⼝编码
  81. /// </summary>
  82. public string portCode { set; get; } = string.Empty;
  83. /// <summary>
  84. /// 送料数量;空箱传0
  85. /// </summary>
  86. public int quantity { set; get; }
  87. }
  88. }
  89. #endregion 解析数据
  90. #region 装备向AGV 回复‘⼊料请求指令’(SMT装备向AGV返回[允许或拒绝]⼊料请求)
  91. /// <summary>
  92. /// 装备向AGV 回复‘⼊料请求指令’(SMT装备向AGV返回[允许或拒绝]⼊料请求)
  93. /// iiot_tm_comm_control_up/tm/up/control/agv
  94. /// </summary>
  95. /// <param name="mqttHelper"></param>
  96. /// <param name="data"></param>
  97. public static void SendIncomingToAGV(ref MQTTHelper mqttHelper, IncomingToAGV data)
  98. {
  99. string dataJson = JsonConvert.SerializeObject(data);
  100. mqttHelper.PublishAsync_Client(AgvTopic, dataJson, true).Wait();
  101. }
  102. /// <summary>
  103. /// ⼊料请求指令 - 装备向AGV回复的报文
  104. /// </summary>
  105. public class IncomingToAGV
  106. {
  107. /// <summary>
  108. /// 时间戳;13位
  109. /// </summary>
  110. public string time { set; get; } = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
  111. /// <summary>
  112. /// 事件;非必填
  113. /// </summary>
  114. public string things { set; get; } = null;
  115. /// <summary>
  116. /// 服务内容
  117. /// </summary>
  118. public IncomingToAGVService service { set; get; } = new IncomingToAGVService();
  119. /// <summary>
  120. /// 服务内容
  121. /// </summary>
  122. public class IncomingToAGVService
  123. {
  124. /// <summary>
  125. /// Id 等于 时间戳time
  126. /// </summary>
  127. public string callId { set; get; } = string.Empty;
  128. /// <summary>
  129. /// 任务标识符
  130. /// control/incoming ⼊料请求
  131. /// </summary>
  132. public string identifier { set; get; } = "control/incoming";
  133. /// <summary>
  134. /// 状态信息
  135. /// </summary>
  136. public string executeStatus { set; get; } = "SUCCESS";
  137. /// <summary>
  138. /// 接驳台信息
  139. /// </summary>
  140. public IncomingToAGVOutputItems outputItems { set; get; } = new IncomingToAGVOutputItems();
  141. }
  142. /// <summary>
  143. /// 接驳台信息
  144. /// </summary>
  145. public class IncomingToAGVOutputItems
  146. {
  147. /// <summary>
  148. /// 接驳⼝编码
  149. /// </summary>
  150. public string portCode { set; get; } = string.Empty;
  151. /// <summary>
  152. /// 允许:agree
  153. /// 不允许:refuse
  154. /// </summary>
  155. public string message { set; get; } = "agree";
  156. }
  157. }
  158. #endregion 装备向AGV 回复‘⼊料请求指令’(SMT装备向AGV返回[允许或拒绝]⼊料请求)
  159. #region 装备向AGV 回复‘⼊料完成指令’(SMT装备向AGV返回⼊料完成)
  160. /// <summary>
  161. /// 装备向AGV 回复‘⼊料完成指令’(SMT装备向AGV返回⼊料完成)
  162. /// iiot_tm_comm_control_up/tm/up/control/agv
  163. /// </summary>
  164. /// <param name="mqttHelper"></param>
  165. /// <param name="data"></param>
  166. public static void SendIncomingFinishToAGV(ref MQTTHelper mqttHelper, IncomingFinishToAGV data)
  167. {
  168. string dataJson = JsonConvert.SerializeObject(data);
  169. mqttHelper.PublishAsync_Client(AgvTopic, dataJson, true).Wait();
  170. }
  171. /// <summary>
  172. /// ⼊料完成指令 - 装备向AGV回复的报文
  173. /// </summary>
  174. public class IncomingFinishToAGV
  175. {
  176. /// <summary>
  177. /// 时间戳;13位
  178. /// </summary>
  179. public string time { set; get; } = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
  180. /// <summary>
  181. /// 事件;非必填
  182. /// </summary>
  183. public string things { set; get; } = null;
  184. /// <summary>
  185. /// 服务内容
  186. /// </summary>
  187. public IncomingFinishToAGVService service { set; get; } = new IncomingFinishToAGVService();
  188. /// <summary>
  189. /// 服务内容
  190. /// </summary>
  191. public class IncomingFinishToAGVService
  192. {
  193. /// <summary>
  194. /// Id 等于 时间戳time
  195. /// </summary>
  196. public string callId { set; get; } = string.Empty;
  197. /// <summary>
  198. /// 任务标识符
  199. /// control/incoming/finish ⼊料完成
  200. /// </summary>
  201. public string identifier { set; get; } = "control/incoming/finish";
  202. /// <summary>
  203. /// 状态信息
  204. /// </summary>
  205. public string executeStatus { set; get; } = "SUCCESS";
  206. /// <summary>
  207. /// 接驳台信息
  208. /// </summary>
  209. public IncomingFinishToAGVOutputItems outputItems { set; get; } = new IncomingFinishToAGVOutputItems();
  210. }
  211. /// <summary>
  212. /// 接驳台信息
  213. /// </summary>
  214. public class IncomingFinishToAGVOutputItems
  215. {
  216. /// <summary>
  217. /// 接驳⼝编码
  218. /// </summary>
  219. public string portCode { set; get; } = string.Empty;
  220. /// <summary>
  221. /// 送料数量.空箱传0
  222. /// </summary>
  223. public int quantity { set; get; } = 0;
  224. }
  225. }
  226. #endregion 装备向AGV 回复‘⼊料完成指令’(SMT装备向AGV返回⼊料完成)
  227. }
  228. }