IReadWriteNetExtenions.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  1. using HslCommunication;
  2. using HslCommunication.Core;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace ProjectManagementSystem.Common.Extenions
  9. {
  10. public static class IReadWriteNetExtenions
  11. {
  12. public static OperateResult WriteValue<T>(this IReadWriteNet plc, string plcAddr, T plcValue)
  13. {
  14. OperateResult operateResult;
  15. switch (plcValue)
  16. {
  17. case bool value:
  18. operateResult = plc.Write(plcAddr, value);
  19. break;
  20. case byte value:
  21. operateResult = plc.Write(plcAddr, new byte[] { value });
  22. break;
  23. case short value:
  24. operateResult = plc.Write(plcAddr, value);
  25. break;
  26. case ushort value:
  27. operateResult = plc.Write(plcAddr, value);
  28. break;
  29. case int value:
  30. operateResult = plc.Write(plcAddr, value);
  31. break;
  32. case uint value:
  33. operateResult = plc.Write(plcAddr, value);
  34. break;
  35. case long value:
  36. operateResult = plc.Write(plcAddr, value);
  37. break;
  38. case ulong value:
  39. operateResult = plc.Write(plcAddr, value);
  40. break;
  41. case string value:
  42. operateResult = plc.Write(plcAddr, value, Encoding.ASCII);
  43. break;
  44. default:
  45. operateResult = new OperateResult($"未识别的数据类型 {typeof(T).Name}");
  46. operateResult.IsSuccess = false;
  47. break;
  48. }
  49. return operateResult;
  50. }
  51. public static bool ReadValue<T>(this IReadWriteNet plc, string plcAddr, T plcValue, out OperateResult<T> operateResult)
  52. {
  53. operateResult = new OperateResult<T>();
  54. switch (plcValue)
  55. {
  56. case bool value:
  57. {
  58. var readResult = plc.ReadBool(plcAddr);
  59. operateResult.IsSuccess = readResult.IsSuccess;
  60. operateResult.Content = readResult.Content.ToValue<T>();
  61. operateResult.Message = readResult.Message;
  62. if (readResult.IsSuccess
  63. && readResult.Content == value)
  64. {
  65. return true;
  66. }
  67. }
  68. break;
  69. case byte value:
  70. {
  71. var readResult = plc.Read(plcAddr, 1);
  72. operateResult.IsSuccess = readResult.IsSuccess;
  73. operateResult.Content = readResult.Content[0].ToValue<T>();
  74. operateResult.Message = readResult.Message;
  75. if (readResult.IsSuccess
  76. && readResult.Content[0] == value)
  77. {
  78. return true;
  79. }
  80. }
  81. break;
  82. case short value:
  83. {
  84. var readResult = plc.ReadInt16(plcAddr);
  85. operateResult.IsSuccess = readResult.IsSuccess;
  86. operateResult.Content = readResult.Content.ToValue<T>();
  87. operateResult.Message = readResult.Message;
  88. if (readResult.IsSuccess
  89. && readResult.Content == value)
  90. {
  91. return true;
  92. }
  93. }
  94. break;
  95. case ushort value:
  96. {
  97. var readResult = plc.ReadUInt16(plcAddr);
  98. operateResult.IsSuccess = readResult.IsSuccess;
  99. operateResult.Content = readResult.Content.ToValue<T>();
  100. operateResult.Message = readResult.Message;
  101. if (readResult.IsSuccess
  102. && readResult.Content == value)
  103. {
  104. return true;
  105. }
  106. }
  107. break;
  108. case int value:
  109. {
  110. var readResult = plc.ReadInt32(plcAddr);
  111. operateResult.IsSuccess = readResult.IsSuccess;
  112. operateResult.Content = readResult.Content.ToValue<T>();
  113. operateResult.Message = readResult.Message;
  114. if (readResult.IsSuccess
  115. && readResult.Content == value)
  116. {
  117. return true;
  118. }
  119. }
  120. break;
  121. case uint value:
  122. {
  123. var readResult = plc.ReadUInt32(plcAddr);
  124. operateResult.IsSuccess = readResult.IsSuccess;
  125. operateResult.Content = readResult.Content.ToValue<T>();
  126. operateResult.Message = readResult.Message;
  127. if (readResult.IsSuccess
  128. && readResult.Content == value)
  129. {
  130. return true;
  131. }
  132. }
  133. break;
  134. case long value:
  135. {
  136. var readResult = plc.ReadInt64(plcAddr);
  137. operateResult.IsSuccess = readResult.IsSuccess;
  138. operateResult.Content = readResult.Content.ToValue<T>();
  139. operateResult.Message = readResult.Message;
  140. if (readResult.IsSuccess
  141. && readResult.Content == value)
  142. {
  143. return true;
  144. }
  145. }
  146. break;
  147. case ulong value:
  148. {
  149. var readResult = plc.ReadUInt64(plcAddr);
  150. operateResult.IsSuccess = readResult.IsSuccess;
  151. operateResult.Content = readResult.Content.ToValue<T>();
  152. operateResult.Message = readResult.Message;
  153. if (readResult.IsSuccess
  154. && readResult.Content == value)
  155. {
  156. return true;
  157. }
  158. }
  159. break;
  160. case string value:
  161. {
  162. var readResult = plc.ReadString(plcAddr, (ushort)value.Length, Encoding.ASCII);
  163. operateResult.IsSuccess = readResult.IsSuccess;
  164. operateResult.Content = readResult.Content.ToValue<T>();
  165. operateResult.Message = readResult.Message;
  166. if (readResult.IsSuccess
  167. && readResult.Content == value)
  168. {
  169. return true;
  170. }
  171. }
  172. break;
  173. default:
  174. operateResult.IsSuccess = false;
  175. operateResult.Content = default(T);
  176. operateResult.Message = $"未识别的数据类型 {typeof(T).Name}";
  177. break;
  178. }
  179. return false;
  180. }
  181. //public static OperateResult WriteValue<T>(this IReadWriteNet plc, string plcAddr, T plcValue)
  182. //{
  183. // string DbValueTypeName = typeof(T).Name;
  184. // OperateResult operateResult = null;
  185. // switch (DbValueTypeName)
  186. // {
  187. // case "Boolean":
  188. // operateResult = plc.Write(plcAddr, plcValue.ToValue<bool>());
  189. // break;
  190. // case "Byte":
  191. // var dbValue = plcValue.ToValue<byte>();
  192. // operateResult = plc.Write(plcAddr, new byte[] { dbValue });
  193. // break;
  194. // case "Int16":
  195. // operateResult = plc.Write(plcAddr, plcValue.ToValue<short>());
  196. // break;
  197. // case "UInt16":
  198. // operateResult = plc.Write(plcAddr, plcValue.ToValue<ushort>());
  199. // break;
  200. // case "Int32":
  201. // operateResult = plc.Write(plcAddr, plcValue.ToValue<int>());
  202. // break;
  203. // case "UInt32":
  204. // operateResult = plc.Write(plcAddr, plcValue.ToValue<uint>());
  205. // break;
  206. // case "Int64":
  207. // operateResult = plc.Write(plcAddr, plcValue.ToValue<long>());
  208. // break;
  209. // case "UInt64":
  210. // operateResult = plc.Write(plcAddr, plcValue.ToValue<ulong>());
  211. // break;
  212. // case "String":
  213. // operateResult = plc.Write(plcAddr, plcValue.ToValue<string>(), Encoding.ASCII);
  214. // break;
  215. // default:
  216. // operateResult = new OperateResult($"未识别的数据类型 {DbValueTypeName}");
  217. // operateResult.IsSuccess = false;
  218. // break;
  219. // }
  220. // return operateResult;
  221. //}
  222. //public static bool ReadValue<T>(this IReadWriteNet plc, string plcAddr, T plcValue, out OperateResult<T> operateResult)
  223. //{
  224. // string DbValueTypeName = typeof(T).Name;
  225. // operateResult = new OperateResult<T>();
  226. // switch (DbValueTypeName)
  227. // {
  228. // case "Boolean":
  229. // {
  230. // var readResult = plc.ReadBool(plcAddr);
  231. // operateResult.IsSuccess = readResult.IsSuccess;
  232. // operateResult.Content = readResult.Content.ToValue<T>();
  233. // operateResult.Message = readResult.Message;
  234. // if (readResult.IsSuccess
  235. // && readResult.Content == plcValue.ToValue<bool>())
  236. // {
  237. // return true;
  238. // }
  239. // }
  240. // break;
  241. // case "Byte":
  242. // {
  243. // var readResult = plc.Read(plcAddr, 1);
  244. // operateResult.IsSuccess = readResult.IsSuccess;
  245. // operateResult.Content = readResult.Content[0].ToValue<T>();
  246. // operateResult.Message = readResult.Message;
  247. // if (readResult.IsSuccess
  248. // && readResult.Content[0] == plcValue.ToValue<byte>())
  249. // {
  250. // return true;
  251. // }
  252. // }
  253. // break;
  254. // case "Int16":
  255. // {
  256. // var readResult = plc.ReadInt16(plcAddr);
  257. // operateResult.IsSuccess = readResult.IsSuccess;
  258. // operateResult.Content = readResult.Content.ToValue<T>();
  259. // operateResult.Message = readResult.Message;
  260. // if (readResult.IsSuccess
  261. // && readResult.Content == plcValue.ToValue<short>())
  262. // {
  263. // return true;
  264. // }
  265. // }
  266. // break;
  267. // case "UInt16":
  268. // {
  269. // var readResult = plc.ReadUInt16(plcAddr);
  270. // operateResult.IsSuccess = readResult.IsSuccess;
  271. // operateResult.Content = readResult.Content.ToValue<T>();
  272. // operateResult.Message = readResult.Message;
  273. // if (readResult.IsSuccess
  274. // && readResult.Content == plcValue.ToValue<ushort>())
  275. // {
  276. // return true;
  277. // }
  278. // }
  279. // break;
  280. // case "Int32":
  281. // {
  282. // var readResult = plc.ReadInt32(plcAddr);
  283. // operateResult.IsSuccess = readResult.IsSuccess;
  284. // operateResult.Content = readResult.Content.ToValue<T>();
  285. // operateResult.Message = readResult.Message;
  286. // if (readResult.IsSuccess
  287. // && readResult.Content == plcValue.ToValue<int>())
  288. // {
  289. // return true;
  290. // }
  291. // }
  292. // break;
  293. // case "UInt32":
  294. // {
  295. // var readResult = plc.ReadUInt32(plcAddr);
  296. // operateResult.IsSuccess = readResult.IsSuccess;
  297. // operateResult.Content = readResult.Content.ToValue<T>();
  298. // operateResult.Message = readResult.Message;
  299. // if (readResult.IsSuccess
  300. // && readResult.Content == plcValue.ToValue<uint>())
  301. // {
  302. // return true;
  303. // }
  304. // }
  305. // break;
  306. // case "Int64":
  307. // {
  308. // var readResult = plc.ReadInt64(plcAddr);
  309. // operateResult.IsSuccess = readResult.IsSuccess;
  310. // operateResult.Content = readResult.Content.ToValue<T>();
  311. // operateResult.Message = readResult.Message;
  312. // if (readResult.IsSuccess
  313. // && readResult.Content == plcValue.ToValue<long>())
  314. // {
  315. // return true;
  316. // }
  317. // }
  318. // break;
  319. // case "UInt64":
  320. // {
  321. // var readResult = plc.ReadUInt64(plcAddr);
  322. // operateResult.IsSuccess = readResult.IsSuccess;
  323. // operateResult.Content = readResult.Content.ToValue<T>();
  324. // operateResult.Message = readResult.Message;
  325. // if (readResult.IsSuccess
  326. // && readResult.Content == plcValue.ToValue<ulong>())
  327. // {
  328. // return true;
  329. // }
  330. // }
  331. // break;
  332. // case "String":
  333. // {
  334. // string plcValueContent = plcValue.ToValue<string>();
  335. // var readResult = plc.ReadString(plcAddr, (ushort)plcValueContent.Length, Encoding.ASCII);
  336. // operateResult.IsSuccess = readResult.IsSuccess;
  337. // operateResult.Content = readResult.Content.ToValue<T>();
  338. // operateResult.Message = readResult.Message;
  339. // if (readResult.IsSuccess
  340. // && readResult.Content == plcValueContent)
  341. // {
  342. // return true;
  343. // }
  344. // }
  345. // break;
  346. // default:
  347. // operateResult.IsSuccess = false;
  348. // operateResult.Content = 0.ToValue<T>();
  349. // operateResult.Message = $"未识别的数据类型 {DbValueTypeName}";
  350. // break;
  351. // }
  352. // return false;
  353. //}
  354. }
  355. }