DeviceExtension.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. using WCS.Core;
  2. using PLCType = WCS.Core.PLCType;
  3. namespace WCS.WorkEngineering.Extensions
  4. {
  5. /// <summary>
  6. /// 设备扩展
  7. /// </summary>
  8. public static class DeviceExtension
  9. {
  10. #region 设备类型
  11. public static List<ProtocolInfo> ProtocolInfos = new List<ProtocolInfo>();
  12. /// <summary>
  13. /// 是否是巷道
  14. /// </summary>
  15. /// <param name="source">设备信息</param>
  16. /// <returns></returns>
  17. public static bool IsTunnel(this Device source)
  18. {
  19. return source.HasFlag(DeviceFlags.巷道);
  20. }
  21. #endregion 设备类型
  22. #region 标签判断
  23. public static bool HasFlag(this Device device, params DeviceFlags[] flag)
  24. {
  25. foreach (var item in flag)
  26. {
  27. if (device.HasFlag(item)) continue;
  28. return false;
  29. }
  30. return true;
  31. }
  32. #endregion 标签判断
  33. #region 协议操作扩展
  34. public static void AddProtocol<T>(this Device device, int position, ushort db, string ip)
  35. {
  36. var info = new ProtocolInfo
  37. {
  38. Position = position,
  39. DBInfo = new DBInfo
  40. {
  41. No = db,
  42. PLCInfo = new PLCInfo
  43. {
  44. IP = ip,
  45. Port = 102,
  46. Rack = 0,
  47. Slot = 1,
  48. Type = PLCType.Siemens
  49. }
  50. }
  51. };
  52. ProtocolInfos.Add(info);
  53. device.AddProtocol<T>(info);
  54. }
  55. #endregion 协议操作扩展
  56. }
  57. /// <summary>
  58. /// 设备标签
  59. /// </summary>
  60. [Flags]
  61. public enum DeviceFlags
  62. {
  63. 扫码 = 1 << 0,
  64. 称重 = 1 << 1,
  65. 外检 = 1 << 2,
  66. 顶升 = 1 << 3,
  67. 移栽 = 1 << 4,
  68. 旋转 = 1 << 5,
  69. 入库 = 1 << 6,
  70. 出库 = 1 << 7,
  71. 巷道口 = 1 << 8,
  72. RGV口 = 1 << 9,
  73. AGV口 = 1 << 10,
  74. 直轨 = 1 << 11,
  75. 弯轨 = 1 << 12,
  76. 环轨 = 1 << 13,
  77. 巷道 = 1 << 14,
  78. 堆垛机 = 1 << 15,
  79. 输送机 = 1 << 16,
  80. #region 一轨双车堆垛机
  81. 一列堆垛机 = 1 << 23,
  82. 二列堆垛机 = 1 << 24,
  83. #endregion 一轨双车堆垛机
  84. RGV = 1 << 25,
  85. 桁架 = 1 << 26,
  86. 一楼扫码 = 1 << 27,
  87. 满轮主线第一次扫码 = 1 << 28,
  88. 主线分流点 = 1 << 29,
  89. }
  90. /// <summary>
  91. /// 输送机段信息
  92. /// </summary>
  93. public class StationSegmentInfo
  94. {
  95. /// <summary>
  96. /// 构造函数
  97. /// </summary>
  98. /// <param name="start">起始设备号</param>
  99. /// <param name="end">结束设备号</param>
  100. /// <param name="ip">ip</param>
  101. public StationSegmentInfo(int start, int end, string ip)
  102. {
  103. Start = start;
  104. End = end;
  105. IP = ip;
  106. }
  107. /// <summary>
  108. /// 起始设备编号
  109. /// </summary>
  110. public int Start { get; set; }
  111. /// <summary>
  112. ///结束设备编号
  113. /// </summary>
  114. public int End { get; set; }
  115. /// <summary>
  116. /// 输送机段所属IP
  117. /// </summary>
  118. public string IP { get; set; }
  119. }
  120. /// <summary>
  121. /// RGV信息
  122. /// </summary>
  123. public class RGVSegmentInfo
  124. {
  125. /// <summary>
  126. /// 构造函数
  127. /// </summary>
  128. /// <param name="start">起始设备号</param>
  129. /// <param name="end">结束设备号</param>
  130. /// <param name="ip">ip</param>
  131. public RGVSegmentInfo(int code, string ip)
  132. {
  133. Code = code;
  134. IP = ip;
  135. }
  136. /// <summary>
  137. /// 设备编号
  138. /// </summary>
  139. public int Code { get; set; }
  140. /// <summary>
  141. /// 输送机段所属IP
  142. /// </summary>
  143. public string IP { get; set; }
  144. }
  145. /// <summary>
  146. /// 桁架信息
  147. /// </summary>
  148. public class TrussSegmentInfo
  149. {
  150. /// <summary>
  151. /// 构造函数
  152. /// </summary>
  153. /// <param name="code"></param>
  154. /// <param name="ip">ip</param>
  155. public TrussSegmentInfo(int code, string ip)
  156. {
  157. Code = code;
  158. IP = ip;
  159. }
  160. /// <summary>
  161. /// 设备编号
  162. /// </summary>
  163. public int Code { get; set; }
  164. /// <summary>
  165. /// 输送机段所属IP
  166. /// </summary>
  167. public string IP { get; set; }
  168. }
  169. /// <summary>
  170. /// 扫码器信息
  171. /// </summary>
  172. public class BcrInfo
  173. {
  174. /// <summary>
  175. /// 构造函数
  176. /// </summary>
  177. /// <param name="deviceNo">设备编号</param>
  178. /// <param name="ip">ip</param>
  179. public BcrInfo(int[] deviceNo, string ip)
  180. {
  181. DeviceNo = deviceNo;
  182. IP = ip;
  183. }
  184. /// <summary>
  185. /// 设备编号
  186. /// </summary>
  187. public int[] DeviceNo { get; set; }
  188. /// <summary>
  189. /// ip
  190. /// </summary>
  191. public string IP { get; set; }
  192. }
  193. /// <summary>
  194. /// 外形信息
  195. /// </summary>
  196. public class ShapeInfo
  197. {
  198. /// <summary>
  199. /// 构造函数
  200. /// </summary>
  201. /// <param name="deviceNo">设备编号</param>
  202. /// <param name="ip">ip</param>
  203. public ShapeInfo(int[] deviceNo, string ip)
  204. {
  205. DeviceNo = deviceNo;
  206. IP = ip;
  207. }
  208. /// <summary>
  209. /// 设备编号
  210. /// </summary>
  211. public int[] DeviceNo { get; set; }
  212. /// <summary>
  213. /// ip
  214. /// </summary>
  215. public string IP { get; set; }
  216. }
  217. /// <summary>
  218. /// 路径信息
  219. /// </summary>
  220. public class RouteInfo
  221. {
  222. /// <summary>
  223. /// 构造函数
  224. /// </summary>
  225. /// <param name="deviceCode">起始点设备号</param>
  226. /// <param name="nextList">下一个设备集合</param>
  227. public RouteInfo(string deviceCode, string[] nextList)
  228. {
  229. DeviceCode = deviceCode;
  230. NextList = nextList;
  231. }
  232. /// <summary>
  233. /// 设备号
  234. /// </summary>
  235. public string DeviceCode { get; set; }
  236. /// <summary>
  237. /// 下一个设备
  238. /// </summary>
  239. public string[] NextList { get; set; }
  240. }
  241. }