GoodsLevel_CF.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622
  1. 
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using Curtain.DataAccess;
  7. using Curtain.Extension.ExCompareOperator;
  8. using Curtain.Extension.ExObjectConvert;
  9. using Curtain.Extension.ExSystemData;
  10. using Curtain.Framework.Json;
  11. using Curtain.Helpers;
  12. using Curtain.Log;
  13. using Curtain.Net.Sockets.PLC;
  14. using Curtain.Net.Sockets.PLC.Model;
  15. using Curtain.Net.Sockets.PLC.Model.Siemens;
  16. namespace PLC_S.ServerModel
  17. {
  18. /// <summary>
  19. /// 返回产品等级(1次品、2漏气、3重烧、4副品[盖子]、5良品(智能),6良品(连体))等信息(成检分线对接)
  20. /// </summary>
  21. public class GoodsLevel_CF : SocketServer<SimpleSocketServerModel>, IShowFormLog, IWindowsServer
  22. {
  23. public Dictionary<string, PLC_S_GL_CF> PLC_FLAGS = new Dictionary<string, PLC_S_GL_CF>();
  24. public const string M_NAME = "GL_CF";
  25. private readonly Logger logger = Logger.CreateLogger(M_NAME);
  26. private readonly LogInfo logger_t = new LogInfo();
  27. private readonly LogInfo logger_e = new LogInfo();
  28. private bool _S_STOP = false;
  29. public int Interval
  30. {
  31. get;
  32. set;
  33. }
  34. public string EPTS_CODE
  35. {
  36. get;
  37. set;
  38. }
  39. public GoodsLevel_CF()
  40. {
  41. logger.FileExistDays = 30;
  42. logger.FilePrefix = "";
  43. logger.FileSuffix = M_NAME;
  44. logger.LevelOneFile = true;
  45. logger.FileNameWithoutDate = true;
  46. logger_t.SubFolderFormat = "<name>";
  47. logger_t.FileExistDays = 30;
  48. logger_t.LevelOneFile = true;
  49. logger_e.FileExistDays = 10;
  50. this.Model.FormatType = CommandFormatType.StartStopChar;
  51. this.ServerStarting += ServerSocket_ServerStarting;
  52. this.ServerStarted += ServerSocket_ServerStarted;
  53. this.ServerStoping += ServerSocket_ServerStoping;
  54. this.ServerStoped += ServerSocket_ServerStoped;
  55. this.ServerMessage += ServerSocket_ServerMessage;
  56. this.Received += ServerSocket_Received;
  57. }
  58. #region Server
  59. public IFormLogShow FormLogShow
  60. {
  61. get;
  62. set;
  63. }
  64. private void ServerSocket_ServerStarting(object sender, CancelEventArgs e)
  65. {
  66. try
  67. {
  68. _S_STOP = false;
  69. logger.OutputTrace($"{M_NAME}_ServerStarting");
  70. }
  71. catch { }
  72. }
  73. private void ServerSocket_ServerStarted(object sender, EventArgs e)
  74. {
  75. try
  76. {
  77. _S_STOP = false;
  78. logger.OutputTrace($"{M_NAME}_ServerStarted");
  79. }
  80. catch { }
  81. }
  82. private void ServerSocket_ServerStoping(object sender, CancelEventArgs e)
  83. {
  84. try
  85. {
  86. _S_STOP = false;
  87. logger.OutputTrace($"{M_NAME}_ServerStoping");
  88. }
  89. catch { }
  90. }
  91. private void ServerSocket_ServerStoped(object sender, EventArgs e)
  92. {
  93. try
  94. {
  95. _S_STOP = false;
  96. logger.OutputTrace($"{M_NAME}_ServerStoped");
  97. }
  98. catch { }
  99. }
  100. private void ServerSocket_ServerMessage(object sender, ServerMessageEventArgs e)
  101. {
  102. try
  103. {
  104. _S_STOP = false;
  105. string message = e.ToString();
  106. string cip = e?.Client?.IP;
  107. if (e.Type == ServerMessageType.Debug)
  108. {
  109. Logger.Debug(message, $"{M_NAME}-T[{cip}]", logger_t);
  110. }
  111. if (e.Type == ServerMessageType.Error)
  112. {
  113. Logger.Error(e.Exception, message, $"{M_NAME}-E[{cip}]", logger_e);
  114. }
  115. if (e.Type == ServerMessageType.Trace)
  116. {
  117. Logger.Trace(message, $"{M_NAME}-T[{cip}]", logger_t);
  118. }
  119. if (e.Type == ServerMessageType.Warning)
  120. {
  121. Logger.Warn(message, $"{M_NAME}-E[{cip}]", logger_e);
  122. }
  123. FormLogShow?.ShowLog("ServerMessage=" + message);
  124. }
  125. catch { }
  126. }
  127. #endregion
  128. /// <summary>
  129. /// 返回产品型号
  130. /// </summary>
  131. /// <param name="sender"></param>
  132. /// <param name="e"></param>
  133. private void ServerSocket_Received(object sender, ReceiveSession e)
  134. {
  135. PLC_S_GL_CF plc_s = null;
  136. string cIP = e?.Client?.IP;
  137. string logKeyT = $"{M_NAME}-T[{cIP}]";
  138. string logKeyE = $"{M_NAME}-E[{cIP}]";
  139. _S_STOP = false;
  140. SocketClient<SiemensS7_1200Model> plc = null;
  141. Logger LoggerT = null;
  142. try
  143. {
  144. LoggerT = Logger.CreateLogger(logKeyT, logger_t);
  145. lock (LoggerT)
  146. {
  147. LoggerT.BeginTracking();
  148. string outputMessage = e.ToString();
  149. Logger.Trace(outputMessage, logKeyT, logger_t);
  150. FormLogShow?.ShowLog(outputMessage);
  151. if (string.IsNullOrWhiteSpace(e.Content))
  152. {
  153. outputMessage = "接收数据为空";
  154. Logger.Warn(outputMessage, logKeyT, logger_t);
  155. Logger.Warn(outputMessage, logKeyE, logger_e);
  156. FormLogShow?.ShowLog(outputMessage);
  157. return;
  158. }
  159. outputMessage = e.Content;
  160. Logger.Trace(outputMessage, logKeyT, logger_t);
  161. FormLogShow?.ShowLog(outputMessage);
  162. string[] c = e.Content.Split('#');
  163. string flag = null;
  164. if (c.Length > 0)
  165. {
  166. flag = c[0];
  167. }
  168. string barcode = null;
  169. if (c.Length > 1)
  170. {
  171. barcode = c[1];
  172. }
  173. if (string.IsNullOrWhiteSpace(flag))
  174. {
  175. outputMessage = $"[{e.Content}]接收设备代码为空";
  176. Logger.Warn(outputMessage, logKeyT, logger_t);
  177. Logger.Warn(outputMessage, logKeyE, logger_e);
  178. FormLogShow?.ShowLog(outputMessage);
  179. return;
  180. }
  181. plc_s = GetPLC_S_GC(flag, e, logKeyE);
  182. if (plc_s == null)
  183. {
  184. outputMessage = $"[{e.Content}]设备代码[{flag}]未找到ini配置或有错误";
  185. Logger.Error(null, outputMessage, logKeyT, logger_t);
  186. Logger.Error(null, outputMessage, logKeyE, logger_e);
  187. FormLogShow?.ShowLog(outputMessage);
  188. return;
  189. }
  190. outputMessage = $"[{e.Content}]PLC_Connect={JsonHelper.FromObject(plc_s)}";
  191. Logger.Trace(outputMessage, logKeyT, logger_t);
  192. FormLogShow?.ShowLog(outputMessage);
  193. plc = new SocketClient<SiemensS7_1200Model>();
  194. plc.Connect(plc_s.IP, plc_s.Port);
  195. //outputMessage = $"[{e.Content}]PLC_Connect=[{plc_s.IP}:{plc_s.Port}]";
  196. //Logger.Trace(outputMessage, logKeyT, logger_t);
  197. //FormLogShow?.ShowLog(outputMessage);
  198. if (string.IsNullOrWhiteSpace(barcode) ||
  199. barcode == "0" ||
  200. barcode.Length != 11 ||
  201. barcode.StartsWith("0"))
  202. {
  203. outputMessage = $"[{e.Content}]接收条码格式错误";
  204. Logger.Warn(outputMessage, logKeyT, logger_t);
  205. Logger.Warn(outputMessage, logKeyE, logger_e);
  206. FormLogShow?.ShowLog(outputMessage);
  207. SET_GoodsLevel(e, plc_s, logKeyT, plc, 0);
  208. SendError(plc_s, e, logKeyT, logKeyE, plc);
  209. return;
  210. }
  211. DataRow codeRow = GetGoodsLevel(barcode, e, logKeyE);
  212. if (codeRow == null)
  213. {
  214. outputMessage = $"[{e.Content}]此条码[{barcode}]不存在";
  215. Logger.Warn(outputMessage, logKeyT, logger_t);
  216. Logger.Warn(outputMessage, logKeyE, logger_e);
  217. FormLogShow?.ShowLog(outputMessage);
  218. SET_GoodsLevel(e, plc_s, logKeyT, plc, 0);
  219. SendError(plc_s, e, logKeyT, logKeyE, plc);
  220. return;
  221. }
  222. string level = codeRow["GOODSLEVELTYPEID"].ToString();
  223. string leak1 = codeRow["LEAKFLAG1"].ToString();
  224. string leak2 = codeRow["LEAKFLAG2"].ToString();
  225. string leak3 = codeRow["LEAKFLAG3"].ToString();
  226. // xuwei add 2024-04-13 修磨合格标识
  227. int leak7 = Convert.ToInt32(codeRow["LEAKFLAG7"]);
  228. string gtid = codeRow["goodstypeid"].ToString();
  229. // 1次品、2漏气、3重烧、4副品[盖子]、5良品
  230. int code;
  231. string codeName;
  232. //6221 2楼分线1 测漏气
  233. //6222 2楼分线2 堵漏气
  234. //6121 1楼分线1 内漏+通球
  235. GetLevelCode(flag, gtid, level, leak1, leak2, leak3, out code, out codeName);
  236. outputMessage = $"[{e.Content}]产品等级={codeName}[{code}][{level}-{leak1}-{leak2}-{leak3}]{gtid}";
  237. Logger.Trace(outputMessage, logKeyT, logger_t);
  238. FormLogShow?.ShowLog(outputMessage);
  239. if (code == 0)
  240. {
  241. outputMessage = $"[{e.Content}]此条码[{barcode}]未设置产品等级";
  242. Logger.Error(null, outputMessage, logKeyT, logger_t);
  243. Logger.Error(null, outputMessage, logKeyE, logger_e);
  244. FormLogShow?.ShowLog(outputMessage);
  245. SET_GoodsLevel(e, plc_s, logKeyT, plc, 0);
  246. SendError(plc_s, e, logKeyT, logKeyE, plc);
  247. return;
  248. }
  249. //1. 产品分级(int)【1次品、2漏气、3重烧、4副品[盖子]、5良品(智能),6良品(连体)】
  250. SET_GoodsLevel(e, plc_s, logKeyT, plc, code);
  251. //xuwei add 2024-04-13 修磨(int)【1:合格、2:不合格】
  252. SET_GoodsLeak7(e, plc_s, logKeyT, plc, leak7);
  253. //xuwei end
  254. //xuwei add 2024-04-23 漏气(int)【1:合格、2:不合格】
  255. SET_GoodsLeak1(e, plc_s, logKeyT, plc, Convert.ToInt32(leak1));
  256. //xuwei end
  257. //2.状态(int)【0:无,1:PLC等待读取;2.PLC读取完成】
  258. outputMessage = $"[{e.Content}]SET_F_Code=[1]{plc_s.Add_F_Code + plc_s.Add_F_CodeNum}";
  259. Logger.Trace(outputMessage, logKeyT, logger_t);
  260. FormLogShow?.ShowLog(outputMessage);
  261. PLCResult p_r = plc?.Write<short>(plc_s.Add_F_Code, plc_s.Add_F_CodeNum, (short)1);
  262. outputMessage = $"[{e.Content}]END_F_Code=[{p_r}]{plc_s.Add_F_Code + plc_s.Add_F_CodeNum}";
  263. Logger.Trace(outputMessage, logKeyT, logger_t);
  264. FormLogShow?.ShowLog(outputMessage);
  265. //3.通信异常标识(int)【0:正常,1:后台处理异常,报警】
  266. outputMessage = $"[{e.Content}]SET_ErrorNum=[0]{plc_s.Add_Error + plc_s.Add_ErrorNum}";
  267. Logger.Trace(outputMessage, logKeyT, logger_t);
  268. FormLogShow?.ShowLog(outputMessage);
  269. p_r = plc?.Write<short>(plc_s.Add_Error, plc_s.Add_ErrorNum, (short)0);
  270. outputMessage = $"[{e.Content}]END_ErrorNum=[{p_r}]{plc_s.Add_Error + plc_s.Add_ErrorNum}";
  271. Logger.Trace(outputMessage, logKeyT, logger_t);
  272. FormLogShow?.ShowLog(outputMessage);
  273. }
  274. }
  275. catch (Exception ex)
  276. {
  277. FormLogShow?.ShowLog($"[{e.Content}]ERROR={ex.Message}");
  278. if (plc_s != null)
  279. {
  280. Logger.Error(ex, $"[{e.Content}]ERROR", logKeyT, logger_t);
  281. Logger.Error(ex, $"[{e.Content}]ERROR", logKeyE, logger_e);
  282. SendError(plc_s, e, logKeyT, logKeyE, plc);
  283. }
  284. else
  285. {
  286. Logger.Error(ex, $"[{e.Content}]ERROR-NOFLAG", logKeyT, logger_t);
  287. Logger.Error(ex, $"[{e.Content}]ERROR-NOFLAG", logKeyE, logger_e);
  288. }
  289. }
  290. finally
  291. {
  292. LoggerT?.EndTracking();
  293. plc?.Disconnect();
  294. plc?.Close();
  295. //e.ReturnMessage("0000");
  296. }
  297. }
  298. private void SET_GoodsLevel(ReceiveSession e, PLC_S_GL_CF plc_s, string logKeyT, SocketClient<SiemensS7_1200Model> plc, int code)
  299. {
  300. string outputMessage = $"[{e.Content}]SET_GoodsLevel=[{code}]{plc_s.Add_Code + plc_s.Add_CodeNum}";
  301. Logger.Trace(outputMessage, logKeyT, logger_t);
  302. FormLogShow?.ShowLog(outputMessage);
  303. PLCResult p_r = plc.Write<short>(plc_s.Add_Code, plc_s.Add_CodeNum, (short)(code));
  304. outputMessage = $"[{e.Content}]END_GoodsLevel=[{p_r}]{plc_s.Add_Code + plc_s.Add_CodeNum}";
  305. Logger.Trace(outputMessage, logKeyT, logger_t);
  306. FormLogShow?.ShowLog(outputMessage);
  307. //return outputMessage;
  308. }
  309. //xuwei add 2024-04-13 增加修磨写入
  310. private void SET_GoodsLeak7(ReceiveSession e, PLC_S_GL_CF plc_s, string logKeyT, SocketClient<SiemensS7_1200Model> plc, int code)
  311. {
  312. if (!string.IsNullOrEmpty(plc_s.Add_GoodsLeak7Code) && !string.IsNullOrEmpty(plc_s.Add_GoodsLeak7CodeNum))
  313. {
  314. string outputMessage = $"[{e.Content}]SET_GoodsLeak7=[{code}]{plc_s.Add_GoodsLeak7Code + plc_s.Add_GoodsLeak7CodeNum}";
  315. Logger.Trace(outputMessage, logKeyT, logger_t);
  316. FormLogShow?.ShowLog(outputMessage);
  317. PLCResult p_r = plc.Write<short>(plc_s.Add_GoodsLeak7Code, plc_s.Add_GoodsLeak7CodeNum, (short)(code));
  318. outputMessage = $"[{e.Content}]END_GoodsLeak7=[{p_r}]{plc_s.Add_GoodsLeak7Code + plc_s.Add_GoodsLeak7CodeNum}";
  319. Logger.Trace(outputMessage, logKeyT, logger_t);
  320. FormLogShow?.ShowLog(outputMessage);
  321. }
  322. }
  323. //xuwei add 2024-04-23 增加漏气写入
  324. private void SET_GoodsLeak1(ReceiveSession e, PLC_S_GL_CF plc_s, string logKeyT, SocketClient<SiemensS7_1200Model> plc, int code)
  325. {
  326. if (!string.IsNullOrEmpty(plc_s.Add_GoodsLeak1Code) && !string.IsNullOrEmpty(plc_s.Add_GoodsLeak1CodeNum))
  327. {
  328. string outputMessage = $"[{e.Content}]SET_GoodsLeak1=[{code}]{plc_s.Add_GoodsLeak1Code + plc_s.Add_GoodsLeak1CodeNum}";
  329. Logger.Trace(outputMessage, logKeyT, logger_t);
  330. FormLogShow?.ShowLog(outputMessage);
  331. PLCResult p_r = plc.Write<short>(plc_s.Add_GoodsLeak1Code, plc_s.Add_GoodsLeak1CodeNum, (short)(code));
  332. outputMessage = $"[{e.Content}]END_GoodsLeak1=[{p_r}]{plc_s.Add_GoodsLeak1Code + plc_s.Add_GoodsLeak1CodeNum}";
  333. Logger.Trace(outputMessage, logKeyT, logger_t);
  334. FormLogShow?.ShowLog(outputMessage);
  335. }
  336. }
  337. private static void GetLevelCode(string flag, string gtid, string level,
  338. string leak1, string leak2, string leak3, out int code, out string codeName)
  339. {
  340. code = 0;
  341. codeName = "";
  342. bool zhineng = gtid.EqualAny("18", "19");
  343. // 连体: 次品1 》 漏气2 》 重烧3 》 副品4 》 正品6 >> 冷补8
  344. // 智能: 次品1 》 重烧3 》 副品4 》 漏气7 》 正品5 >> 冷补9
  345. // 1次品、2漏气【连体】、3重烧、4副品[盖子]、5良品(智能),6良品(连体)、7漏气【智能】、8冷补【连体】、9冷补【智能】
  346. if (zhineng)
  347. {
  348. codeName = "[智能]";
  349. if (leak1 == "1")
  350. {
  351. codeName += "[合格]";
  352. }
  353. else
  354. {
  355. codeName += "[漏气]";
  356. }
  357. if (level == "7")
  358. {
  359. codeName += "次品";
  360. }
  361. else if (level == "6")
  362. {
  363. codeName += "重烧";
  364. }
  365. else if (level == "5")
  366. {
  367. codeName += "副品";
  368. }
  369. //xuwei add 2023-04-19 加冷补
  370. else if (level == "16")
  371. {
  372. codeName += "冷补";
  373. }
  374. //xuwei end
  375. else
  376. {
  377. codeName += "正品";
  378. }
  379. if (level == "7")
  380. {
  381. code = 1;
  382. return;
  383. }
  384. if (level == "6")
  385. {
  386. code = 3;
  387. return;
  388. }
  389. if (level == "5")
  390. {
  391. code = 4;
  392. codeName += "[盖子]";
  393. return;
  394. }
  395. //xuwei add 2023-04-19 加冷补
  396. if (level == "16")
  397. {
  398. code = 9;
  399. return;
  400. }
  401. //xuwei end
  402. if (flag == "6221" || flag == "21")
  403. {
  404. if (leak1 != "1")
  405. {
  406. code = 7;
  407. codeName += "[漏气]";
  408. return;
  409. }
  410. }
  411. code = 5;
  412. return;
  413. }
  414. codeName = "[连体]";
  415. if (leak1 == "1")
  416. {
  417. codeName += "[合格]";
  418. }
  419. else
  420. {
  421. codeName += "[漏气]";
  422. }
  423. if (level == "7")
  424. {
  425. codeName += "次品";
  426. }
  427. else if (level == "6")
  428. {
  429. codeName += "重烧";
  430. }
  431. else if (level == "5")
  432. {
  433. codeName += "副品";
  434. }
  435. //xuwei add 2023-04-19 加冷补
  436. else if (level == "16")
  437. {
  438. codeName += "冷补";
  439. }
  440. //xuwei end
  441. else
  442. {
  443. codeName += "正品";
  444. }
  445. if (level == "7")
  446. {
  447. code = 1;
  448. return;
  449. }
  450. if (flag == "6221" || flag == "21")
  451. {
  452. if (leak1 != "1")
  453. {
  454. code = 2;
  455. codeName += "[漏气]";
  456. return;
  457. }
  458. }
  459. if (level == "6")
  460. {
  461. code = 3;
  462. return;
  463. }
  464. if (level == "5")
  465. {
  466. code = 4;
  467. codeName += "[盖子]";
  468. return;
  469. }
  470. //xuwei add 2023-04-19 加冷补
  471. if (level == "16")
  472. {
  473. code = 8;
  474. return;
  475. }
  476. //xuwei end
  477. code = 6;
  478. }
  479. private void SendError(PLC_S_GL_CF plc_s, ReceiveSession e, string loggerNameT,
  480. string loggerNameE, SocketClient<SiemensS7_1200Model> plc)
  481. {
  482. try
  483. {
  484. //using (SocketClient<SiemensS7_1200Model> plc = new SocketClient<SiemensS7_1200Model>())
  485. {
  486. string outputMessage = $"[{e.Content}]SET_ErrorNum=[1]{plc_s.Add_Error + plc_s.Add_ErrorNum}";
  487. Logger.Trace(outputMessage, loggerNameT, logger_t);
  488. FormLogShow?.ShowLog(outputMessage);
  489. PLCResult p_r = plc?.Write<short>(plc_s.Add_Error, plc_s.Add_ErrorNum, (short)1);
  490. outputMessage = $"[{e.Content}]END_ErrorNum=[{p_r}]{plc_s.Add_Error + plc_s.Add_ErrorNum}";
  491. Logger.Trace(outputMessage, loggerNameT, logger_t);
  492. FormLogShow?.ShowLog(outputMessage);
  493. }
  494. }
  495. catch (Exception ex)
  496. {
  497. Logger.Error(ex, $"[{e.Content}]ERROR-SendError", loggerNameT, logger_t);
  498. Logger.Error(ex, $"[{e.Content}]ERROR-SendError", loggerNameE, logger_e);
  499. FormLogShow?.ShowLog($"[{e.Content}]ERROR-SendError={ex.Message}");
  500. }
  501. }
  502. private DataRow GetGoodsLevel(string barcode, ReceiveSession e, string loggerName)
  503. {
  504. IDataAccess dataAccess = null;
  505. try
  506. {
  507. dataAccess = PLC_S_DataAccess.GetDataAccess(e);
  508. string sqlString = "select gdd.GOODSLEVELTYPEID,g.goodstypeid, decode(gdd.LEAKFLAG1,'0','2','1') AS LEAKFLAG1, gdd.LEAKFLAG2, gdd.LEAKFLAG3, decode(gdd.LEAKFLAG7,'0','2','1') AS LEAKFLAG7 \n" +
  509. " from tp_pm_groutingdailydetail gdd\n" +
  510. " inner join tp_mst_goods g on g.goodsid = gdd.goodsid\n" +
  511. " where gdd.barcode = :barcode";
  512. DataTable dataTable = dataAccess.ExecuteDatatable(sqlString, new CDAParameter(":barcode", barcode));
  513. if (dataTable.HasData())
  514. {
  515. return dataTable.Rows[0];
  516. }
  517. return null;
  518. }
  519. catch (Exception ex)
  520. {
  521. Logger.Error(ex, $"[{e.Content}]ERROR-GetGoodsLevel", loggerName, logger_e);
  522. FormLogShow?.ShowLog($"[{e.Content}]ERROR-GetGoodsLevel={ex.Message}");
  523. return null;
  524. }
  525. finally
  526. {
  527. dataAccess?.Close();
  528. }
  529. }
  530. private PLC_S_GL_CF GetPLC_S_GC(string flag, ReceiveSession e, string loggerName)
  531. {
  532. try
  533. {
  534. flag = M_NAME + flag;
  535. if (PLC_FLAGS.ContainsKey(flag))
  536. {
  537. return PLC_FLAGS[flag];
  538. }
  539. else
  540. {
  541. PLC_S_GL_CF plc_s = new PLC_S_GL_CF();
  542. INIHelper ini = INIHelper.Create($@"PLC_S_INI\PLC_S_{M_NAME}.ini");
  543. plc_s.IP = ini.Read(flag, "IP");
  544. plc_s.Port = ini.Read(flag, "Port").ToInt32();
  545. plc_s.Add_Code = ini.Read(flag, "Add_Code");
  546. plc_s.Add_CodeNum = ini.Read(flag, "Add_CodeNum");
  547. plc_s.Add_F_Code = ini.Read(flag, "Add_F_Code");
  548. plc_s.Add_F_CodeNum = ini.Read(flag, "Add_F_CodeNum");
  549. plc_s.Add_Error = ini.Read(flag, "Add_Error");
  550. plc_s.Add_ErrorNum = ini.Read(flag, "Add_ErrorNum");
  551. //xuwei add 2024-04-13 增加修磨标识
  552. plc_s.Add_GoodsLeak7Code = ini.Read(flag, "Add_GoodsLeak7Code");
  553. plc_s.Add_GoodsLeak7CodeNum = ini.Read(flag, "Add_GoodsLeak7CodeNum");
  554. //xuwei add 2024-04-23 增加漏气标识
  555. plc_s.Add_GoodsLeak1Code = ini.Read(flag, "Add_GoodsLeak1Code");
  556. plc_s.Add_GoodsLeak1CodeNum = ini.Read(flag, "Add_GoodsLeak1CodeNum");
  557. PLC_FLAGS.Add(flag, plc_s);
  558. return plc_s;
  559. }
  560. }
  561. catch (Exception ex)
  562. {
  563. Logger.Error(ex, $"[{e.Content}]ERROR-GetPLC_S_GC", loggerName, logger_e);
  564. FormLogShow?.ShowLog($"[{e.Content}]ERROR-GetPLC_S_GC={ex.Message}");
  565. return null;
  566. }
  567. }
  568. }
  569. }