XiaomiAGVMQTT_UnLoading.cs 9.0 KB

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