EquipmentSignal.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using WCS.Data;
  6. namespace WCS.PLC.Model.Equipment
  7. {
  8. public enum EquipmentType
  9. {
  10. srm = 1,
  11. conveyor = 2,
  12. rgv = 3
  13. }
  14. public enum DB_TypeEnum
  15. {
  16. WCS可读可写DB = 1,
  17. WCS只读DB = 2,
  18. WCS状态和故障DB = 3,
  19. WCS读取扫码DB = 4,
  20. WCS读写扩展DB1 = 5,
  21. WCS读写扩展DB2 = 6,
  22. WCS读写扩展DB3 = 7,
  23. }
  24. public class EquipmentSignal
  25. {
  26. protected string PlcName { get; set; }
  27. protected List<ConvDbInfo> EquDbInfoSet = new List<ConvDbInfo>();
  28. public byte[] DB_WCS_ReadWrite
  29. {
  30. get
  31. {
  32. return Current.PlcSet.SingleOrDefault(v => v.PLC_NAME == PlcName)
  33. .WCS_DBSet
  34. .SingleOrDefault(v => v.DB_NAME == EquDbInfo_ReadWrite.DBName)
  35. .DB_EQUDATA.Skip(EquDbInfo_ReadWrite.DBReadIndox).Take(EquDbInfo_ReadWrite.DBReadLength).ToArray();
  36. }
  37. }
  38. public byte[] DB_WCS_Read
  39. {
  40. get
  41. {
  42. return Current.PlcSet.SingleOrDefault(v => v.PLC_NAME == PlcName)
  43. .WCS_DBSet.SingleOrDefault(v => v.DB_NAME == EquDbInfo_Read.DBName)
  44. .DB_EQUDATA.Skip(EquDbInfo_Read.DBReadIndox).Take(EquDbInfo_Read.DBReadLength).ToArray();
  45. }
  46. }
  47. public byte[] DB_Equ_Status
  48. {
  49. get
  50. {
  51. return Current.PlcSet.SingleOrDefault(v => v.PLC_NAME == PlcName)
  52. .WCS_DBSet.SingleOrDefault(v => v.DB_NAME == EquDbInfo_Status.DBName)
  53. .DB_EQUDATA.Skip(EquDbInfo_Status.DBReadIndox).Take(EquDbInfo_Status.DBReadLength).ToArray();
  54. }
  55. }
  56. public byte[] DB_Equ_BarCode
  57. {
  58. get
  59. {
  60. if (EquDbInfo_BarCode == null)
  61. {
  62. return new byte[0];
  63. }
  64. else
  65. {
  66. return Current.PlcSet.SingleOrDefault(v => v.PLC_NAME == PlcName)
  67. .WCS_DBSet.SingleOrDefault(v => v.DB_NAME == EquDbInfo_BarCode.DBName)
  68. .DB_EQUDATA.Skip(EquDbInfo_BarCode.DBReadIndox).Take(EquDbInfo_BarCode.DBReadLength).ToArray();
  69. }
  70. }
  71. }
  72. public ConvDbInfo EquDbInfo_ReadWrite
  73. {
  74. get
  75. {
  76. return EquDbInfoSet.FirstOrDefault(v => v.DBType == DB_TypeEnum.WCS可读可写DB);
  77. }
  78. }
  79. public ConvDbInfo EquDbInfo_Read
  80. {
  81. get
  82. {
  83. return EquDbInfoSet.FirstOrDefault(v => v.DBType == DB_TypeEnum.WCS只读DB);
  84. }
  85. }
  86. public ConvDbInfo EquDbInfo_Status
  87. {
  88. get
  89. {
  90. return EquDbInfoSet.FirstOrDefault(v => v.DBType == DB_TypeEnum.WCS状态和故障DB);
  91. }
  92. }
  93. public ConvDbInfo EquDbInfo_BarCode
  94. {
  95. get
  96. {
  97. return EquDbInfoSet.FirstOrDefault(v => v.DBType == DB_TypeEnum.WCS读取扫码DB);
  98. }
  99. }
  100. public ConvDbInfo EquDbInfo_ExtendOne
  101. {
  102. get
  103. {
  104. return EquDbInfoSet.FirstOrDefault(v => v.DBType == DB_TypeEnum.WCS读写扩展DB1);
  105. }
  106. }
  107. public ConvDbInfo EquDbInfo_ExtendTwo
  108. {
  109. get
  110. {
  111. return EquDbInfoSet.FirstOrDefault(v => v.DBType == DB_TypeEnum.WCS读写扩展DB2);
  112. }
  113. }
  114. public ConvDbInfo EquDbInfo_ExtendThree
  115. {
  116. get
  117. {
  118. return EquDbInfoSet.FirstOrDefault(v => v.DBType == DB_TypeEnum.WCS读写扩展DB3);
  119. }
  120. }
  121. public EquipmentSignal(string plcname,List<ConvDbInfo> equDBInfoSet)
  122. {
  123. PlcName = plcname;
  124. EquDbInfoSet = equDBInfoSet;
  125. }
  126. public dynamic QueryDB_WCS_ReadWriteSignal(string backType, int offset, int boolOffset = 0)
  127. {
  128. return QueryDB_Equ_Signal(EquDbInfo_ReadWrite, DB_WCS_ReadWrite, backType, offset, boolOffset);
  129. }
  130. public dynamic QueryDB_WCS_ReadSignal(string backType, int offset, int boolOffset = 0)
  131. {
  132. return QueryDB_Equ_Signal(EquDbInfo_Read, DB_WCS_Read, backType, offset, boolOffset);
  133. }
  134. public dynamic QueryDB_Equ_StatusSignal(string backType, int offset, int boolOffset = 0)
  135. {
  136. return QueryDB_Equ_Signal(EquDbInfo_Status, DB_Equ_Status, backType, offset, boolOffset);
  137. }
  138. private dynamic QueryDB_Equ_Signal(ConvDbInfo equDbInfo, byte[] dB_Equ, string backType, int offset, int boolOffset = 0)
  139. {
  140. dynamic result = null;
  141. try
  142. {
  143. //int startindex = equDbInfo.DBReadIndox + offset;
  144. if (backType == "string")
  145. {
  146. byte[] dbad = dB_Equ.Skip(offset).Take(4).ToArray();
  147. result = ExtendsUtil.GetBarCodeStr(dbad).Trim();
  148. }
  149. else if (backType == "uint" || backType == "UInt32" || backType == "enumUInt32")
  150. {
  151. result = Convert.ToUInt32(dB_Equ[offset] * 256 * 256 * 256 + dB_Equ[offset + 1] * 256 * 256 + dB_Equ[offset + 2] * 256 + dB_Equ[offset + 3]);
  152. }
  153. else if (backType == "float")
  154. {
  155. byte[] singleBytetemp = dB_Equ.Skip(offset).Take(4).ToArray();
  156. byte[] singleByte = new byte[4];
  157. singleByte[0] = singleBytetemp[3];
  158. singleByte[1] = singleBytetemp[2];
  159. singleByte[2] = singleBytetemp[1];
  160. singleByte[3] = singleBytetemp[0];
  161. result = BitConverter.ToSingle(singleByte, 0);
  162. }
  163. else if (backType == "ushort" || backType == "enumUInt16" || backType == "UInt16")
  164. {
  165. result = Convert.ToUInt16(dB_Equ[offset] * 256 + dB_Equ[offset + 1]);
  166. }
  167. else if (backType == "byte" || backType == "enumByte")
  168. {
  169. result = Convert.ToByte(dB_Equ[offset]);
  170. }
  171. else if (backType == "bool")
  172. {
  173. result = PlcHelper.ByteToBool(dB_Equ[offset], boolOffset);
  174. }
  175. else
  176. {
  177. throw new Exception(string.Format("WCS读取到未知类型[{0}]无法解析,请检查输入类型是否正确", backType));
  178. }
  179. }
  180. catch (Exception ex)
  181. {
  182. Log4netHelper.Logger_Error.ErrorFormat(ex.ToString());
  183. }
  184. return result;
  185. }
  186. public string Query_string_DB_WCS_ReadWrite(int offset)
  187. {
  188. return Query_string(EquDbInfo_ReadWrite, DB_WCS_ReadWrite, offset);
  189. }
  190. public string Query_string_DB_WCS_Read(int offset)
  191. {
  192. return Query_string(EquDbInfo_Read, DB_WCS_Read, offset);
  193. }
  194. public string Query_string_DB_Equ_Status(int offset)
  195. {
  196. return Query_string(EquDbInfo_Status, DB_Equ_Status, offset);
  197. }
  198. public string Query_string(ConvDbInfo equDbInfo, byte[] dB_Equ, int offset)
  199. {
  200. //int startindex = equDbInfo.DBReadIndox + offset;
  201. byte[] dbad = dB_Equ.Skip(offset).Take(4).ToArray();
  202. return ExtendsUtil.GetBarCodeStr(dbad).Trim();
  203. }
  204. public int Query_int_DB_WCS_ReadWrite(int offset)
  205. {
  206. return Query_int(EquDbInfo_ReadWrite, DB_WCS_ReadWrite, offset);
  207. }
  208. public uint Query_uint_DB_WCS_ReadWrite(int offset)
  209. {
  210. return Query_uint(EquDbInfo_ReadWrite, DB_WCS_ReadWrite, offset);
  211. }
  212. public uint Query_uint_DB_WCS_Read(int offset)
  213. {
  214. return Query_uint(EquDbInfo_Read, DB_WCS_Read, offset);
  215. }
  216. public int Query_int_DB_WCS_Read(int offset)
  217. {
  218. return Query_int(EquDbInfo_Read, DB_WCS_Read, offset);
  219. }
  220. public uint Query_uint_DB_Equ_Status(int offset)
  221. {
  222. return Query_uint(EquDbInfo_Status, DB_Equ_Status, offset);
  223. }
  224. public int Query_int(ConvDbInfo equDbInfo, byte[] dB_Equ, int offset)
  225. {
  226. //int startindex = equDbInfo.DBReadIndox + offset;
  227. return Convert.ToInt32(dB_Equ[offset] * 256 * 256 * 256 + dB_Equ[offset + 1] * 256 * 256 + dB_Equ[offset + 2] * 256 + dB_Equ[offset + 3]);
  228. }
  229. public uint Query_uint(ConvDbInfo equDbInfo, byte[] dB_Equ, int offset)
  230. {
  231. //int startindex = equDbInfo.DBReadIndox + offset;
  232. return Convert.ToUInt32(dB_Equ[offset] * 256 * 256 * 256 + dB_Equ[offset + 1] * 256 * 256 + dB_Equ[offset + 2] * 256 + dB_Equ[offset + 3]);
  233. }
  234. public float Query_float_DB_WCS_ReadWrite(int offset)
  235. {
  236. return Query_float(EquDbInfo_ReadWrite, DB_WCS_ReadWrite, offset);
  237. }
  238. public float Query_float_DB_WCS_Read(int offset)
  239. {
  240. return Query_float(EquDbInfo_Read, DB_WCS_Read, offset);
  241. }
  242. public float Query_float_DB_Equ_Status(int offset)
  243. {
  244. return Query_float(EquDbInfo_Status, DB_Equ_Status, offset);
  245. }
  246. public float Query_float(ConvDbInfo equDbInfo, byte[] dB_Equ, int offset)
  247. {
  248. //int startindex = equDbInfo.DBReadIndox + offset;
  249. byte[] singleBytetemp = dB_Equ.Skip(offset).Take(4).ToArray();
  250. byte[] singleByte = new byte[4];
  251. singleByte[0] = singleBytetemp[3];
  252. singleByte[1] = singleBytetemp[2];
  253. singleByte[2] = singleBytetemp[1];
  254. singleByte[3] = singleBytetemp[0];
  255. return BitConverter.ToSingle(singleByte, 0);
  256. }
  257. public ushort Query_ushort_DB_WCS_ReadWrite(int offset)
  258. {
  259. return Query_ushort(EquDbInfo_ReadWrite, DB_WCS_ReadWrite, offset);
  260. }
  261. public ushort Query_ushort_DB_WCS_Read(int offset)
  262. {
  263. return Query_ushort(EquDbInfo_Read, DB_WCS_Read, offset);
  264. }
  265. public ushort Query_ushort_DB_Equ_Status(int offset)
  266. {
  267. return Query_ushort(EquDbInfo_Status, DB_Equ_Status, offset);
  268. }
  269. public ushort Query_ushort(ConvDbInfo equDbInfo, byte[] dB_Equ, int offset)
  270. {
  271. try
  272. {
  273. return Convert.ToUInt16(dB_Equ[offset] * 256 + dB_Equ[offset + 1]);
  274. }
  275. catch (Exception ex)
  276. {
  277. return 0;
  278. }
  279. //int startindex = equDbInfo.DBReadIndox + offset;
  280. }
  281. public byte Query_byte_DB_WCS_ReadWrite(int offset)
  282. {
  283. return Query_byte(EquDbInfo_ReadWrite, DB_WCS_ReadWrite, offset);
  284. }
  285. public byte Query_byte_DB_WCS_Read(int offset)
  286. {
  287. return Query_byte(EquDbInfo_Read, DB_WCS_Read, offset);
  288. }
  289. public byte Query_byte_DB_Equ_Status(int offset)
  290. {
  291. return Query_byte(EquDbInfo_Status, DB_Equ_Status, offset);
  292. }
  293. public byte Query_byte(ConvDbInfo equDbInfo, byte[] dB_Equ, int offset)
  294. {
  295. //int startindex = equDbInfo.DBReadIndox + offset;
  296. return Convert.ToByte(dB_Equ[offset]);
  297. }
  298. public bool Query_bool_DB_WCS_ReadWrite(int offset, int boolOffset = 0)
  299. {
  300. return Query_bool(EquDbInfo_ReadWrite, DB_WCS_ReadWrite, offset, boolOffset);
  301. }
  302. public bool Query_bool_DB_WCS_Read(int offset, int boolOffset = 0)
  303. {
  304. return Query_bool(EquDbInfo_Read, DB_WCS_Read, offset, boolOffset);
  305. }
  306. public bool Query_bool_DB_Equ_Status(int offset, int boolOffset = 0)
  307. {
  308. return Query_bool(EquDbInfo_Status, DB_Equ_Status, offset, boolOffset);
  309. }
  310. public bool Query_bool(ConvDbInfo equDbInfo, byte[] dB_Equ, int offset, int boolOffset = 0)
  311. {
  312. //int startindex = equDbInfo.DBReadIndox + offset;
  313. return PlcHelper.ByteToBool(dB_Equ[offset], boolOffset);
  314. }
  315. public List<string> Query_BarCode()
  316. {
  317. List<string> barCodeSet = new List<string>();
  318. if (EquDbInfo_BarCode != null)
  319. {
  320. foreach (var item in EquDbInfo_BarCode.ScannSet)
  321. {
  322. //byte[] dbsann = DB_Equ_BarCode.Skip(item.SCANN_STARTADDRESS).Take(item.SCANN_LENGTH).ToArray();
  323. string barcode = ExtendsUtil.GetBarCodeStr(DB_Equ_BarCode).Trim();
  324. barCodeSet.Add(barcode);
  325. }
  326. }
  327. return barCodeSet;
  328. }
  329. }
  330. public class ConvDbInfo
  331. {
  332. public int DBName { get; set; }
  333. public DB_TypeEnum DBType { get; set; }
  334. public int DBReadIndox { get; set; }
  335. public int DBReadLength { get; set; }
  336. public List<WCS_SCANN> ScannSet = new List<WCS_SCANN>();
  337. }
  338. }