GoodsCode_KL.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544
  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.ExObjectConvert;
  8. using Curtain.Extension.ExSystemData;
  9. using Curtain.Framework.Json;
  10. using Curtain.Helpers;
  11. using Curtain.Log;
  12. using Curtain.Net.Sockets.PLC;
  13. using Curtain.Net.Sockets.PLC.Model;
  14. using Curtain.Net.Sockets.PLC.Model.Siemens;
  15. namespace PLC_S.ServerModel
  16. {
  17. /// <summary>
  18. /// 返回产品型号等信息(登窑前 条码+型号)
  19. /// </summary>
  20. public class GoodsCode_KL : SocketServer<SimpleSocketServerModel>, IShowFormLog, IWindowsServer
  21. {
  22. public Dictionary<string, PLC_S_GC_KL> PLC_FLAGS = new Dictionary<string, PLC_S_GC_KL>();
  23. public const string M_NAME = "GC_KL";
  24. private MES_S _mes_s = null;
  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 GoodsCode_KL()
  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. _mes_s = MES_S.Get();
  58. }
  59. #region Server
  60. public IFormLogShow FormLogShow
  61. {
  62. get;
  63. set;
  64. }
  65. private void ServerSocket_ServerStarting(object sender, CancelEventArgs e)
  66. {
  67. try
  68. {
  69. _S_STOP = false;
  70. logger.OutputTrace($"{M_NAME}_ServerStarting");
  71. }
  72. catch { }
  73. }
  74. private void ServerSocket_ServerStarted(object sender, EventArgs e)
  75. {
  76. try
  77. {
  78. _S_STOP = false;
  79. logger.OutputTrace($"{M_NAME}_ServerStarted");
  80. }
  81. catch { }
  82. }
  83. private void ServerSocket_ServerStoping(object sender, CancelEventArgs e)
  84. {
  85. try
  86. {
  87. _S_STOP = false;
  88. logger.OutputTrace($"{M_NAME}_ServerStoping");
  89. }
  90. catch { }
  91. }
  92. private void ServerSocket_ServerStoped(object sender, EventArgs e)
  93. {
  94. try
  95. {
  96. _S_STOP = false;
  97. logger.OutputTrace($"{M_NAME}_ServerStoped");
  98. }
  99. catch { }
  100. }
  101. private void ServerSocket_ServerMessage(object sender, ServerMessageEventArgs e)
  102. {
  103. try
  104. {
  105. _S_STOP = false;
  106. string message = e.ToString();
  107. string cip = e?.Client?.IP;
  108. if (e.Type == ServerMessageType.Debug)
  109. {
  110. Logger.Debug(message, $"{M_NAME}-T[{cip}]", logger_t);
  111. }
  112. if (e.Type == ServerMessageType.Error)
  113. {
  114. Logger.Error(e.Exception, message, $"{M_NAME}-E[{cip}]", logger_e);
  115. }
  116. if (e.Type == ServerMessageType.Trace)
  117. {
  118. Logger.Trace(message, $"{M_NAME}-T[{cip}]", logger_t);
  119. }
  120. if (e.Type == ServerMessageType.Warning)
  121. {
  122. Logger.Warn(message, $"{M_NAME}-E[{cip}]", logger_e);
  123. }
  124. FormLogShow?.ShowLog("ServerMessage=" + message);
  125. }
  126. catch { }
  127. }
  128. #endregion
  129. /// <summary>
  130. /// 返回产品型号
  131. /// </summary>
  132. /// <param name="sender"></param>
  133. /// <param name="e"></param>
  134. private void ServerSocket_Received(object sender, ReceiveSession e)
  135. {
  136. PLC_S_GC_KL plc_s = null;
  137. string cIP = e?.Client?.IP;
  138. string logKeyT = $"{M_NAME}-T[{cIP}]";
  139. string logKeyE = $"{M_NAME}-E[{cIP}]";
  140. _S_STOP = false;
  141. SocketClient<SiemensS7_1200Model> plc = null;
  142. Logger LoggerT = Logger.CreateLogger(logKeyT, logger_t);
  143. lock (LoggerT)
  144. {
  145. try
  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. SendError(plc_s, e, logKeyT, logKeyE, plc);
  208. return;
  209. }
  210. DataRow codeRow = GetGoodsCode(barcode, e, logKeyE);
  211. if (codeRow == null)
  212. {
  213. outputMessage = $"[{e.Content}]此条码[{barcode}]不存在";
  214. Logger.Warn(outputMessage, logKeyT, logger_t);
  215. Logger.Warn(outputMessage, logKeyE, logger_e);
  216. FormLogShow?.ShowLog(outputMessage);
  217. SendError(plc_s, e, logKeyT, logKeyE, plc);
  218. return;
  219. }
  220. string code = codeRow["goodscode"].ToString();
  221. string intcode = codeRow["seatcovercode"].ToString();
  222. string p_id = codeRow["flowprocedureid"].ToString();
  223. outputMessage = $"[{e.Content}]产品型号={code}[{intcode}]P[{p_id}]";
  224. Logger.Trace(outputMessage, logKeyT, logger_t);
  225. FormLogShow?.ShowLog(outputMessage);
  226. if (string.IsNullOrWhiteSpace(intcode))
  227. {
  228. outputMessage = $"[{e.Content}]此条码[{barcode}]未设置型号代码";
  229. Logger.Error(null, outputMessage, logKeyT, logger_t);
  230. Logger.Error(null, outputMessage, logKeyE, logger_e);
  231. FormLogShow?.ShowLog(outputMessage);
  232. SendError(plc_s, e, logKeyT, logKeyE, plc);
  233. return;
  234. }
  235. #region 防伪码
  236. //string se_flag = null;
  237. //using (IDataAccess dataAccess = PLC_S_DataAccess.GetDataAccess())
  238. //{
  239. // // 是否启用防伪码 TODO
  240. // se_flag = dataAccess.ExecuteScalar("select t.settingvalue from tp_mst_systemsetting t where t.settingcode = ''") + "";
  241. //}
  242. //if (!string.IsNullOrWhiteSpace(plc_s.Add_SE_Code1))
  243. //{
  244. // // 读取防伪码
  245. // outputMessage = $"[{e.Content}]GET_SE_Code1=[ ]{plc_s.Add_SE_Code1 + plc_s.Add_SE_Code1Num}";
  246. // Logger.Trace(outputMessage, logKeyT, logger_t);
  247. // FormLogShow?.ShowLog(outputMessage);
  248. // PLCResult<string> se1_result = plc.Read<string>(plc_s.Add_SE_Code1, plc_s.Add_SE_Code1Num, 12);
  249. // outputMessage = $"[{e.Content}]END_SE_Code1=[{se1_result.Data}]{se1_result}";
  250. // Logger.Trace(outputMessage, logKeyT, logger_t);
  251. // FormLogShow?.ShowLog(outputMessage);
  252. // ////outputMessage = $"[{e.Content}]GET_SE_Code2=[ ]{plc_s.Add_SE_Code2 + plc_s.Add_SE_Code2Num}";
  253. // ////Logger.Trace(outputMessage, logKeyT, logger_t);
  254. // ////FormLogShow?.ShowLog(outputMessage);
  255. // //PLCResult<string> se2_result = plc.Read<string>(plc_s.Add_SE_Code2, plc_s.Add_SE_Code2Num, 12);
  256. // //outputMessage = $"[{e.Content}]END_SE_Code2=[{se2_result.Data}]{plc_s.Add_SE_Code2 + plc_s.Add_SE_Code2Num}";
  257. // //Logger.Trace(outputMessage, logKeyT, logger_t);
  258. // //FormLogShow?.ShowLog(outputMessage);
  259. // string se_code = "";
  260. // if (!string.IsNullOrWhiteSpace(se1_result.Data) && !se1_result.Data.StartsWith("0"))
  261. // {
  262. // se_code = se1_result.Data;
  263. // }
  264. // //else if (!string.IsNullOrWhiteSpace(se2_result.Data) && !se2_result.Data.StartsWith("0"))
  265. // //{
  266. // // se_code = se2_result.Data;
  267. // //}
  268. // if (string.IsNullOrWhiteSpace(se_code))
  269. // {
  270. // SendCode(plc_s, e, logKeyT, logKeyE, plc, 4);
  271. // return;
  272. // }
  273. // string result = Proxy.SmartDeviceProxy.Instance.Invoke<string>(
  274. // p => p.CheckSecurityCodeByBarcode(
  275. // _mes_s.AccountCode,
  276. // plc_s.USER_CODE,
  277. // barcode,
  278. // se_code
  279. // ));
  280. // outputMessage = $"[{e.Content}]SE_Result=[{result}]{se_code}[{plc_s.USER_CODE}]";
  281. // Logger.Trace(outputMessage, logKeyT, logger_t);
  282. // FormLogShow?.ShowLog(outputMessage);
  283. // // 返回状态(成功、失败)
  284. // if (result != "OK")
  285. // {
  286. // if (result == "EX")
  287. // {
  288. // outputMessage = $"MES服务端异常(详情参见MES端日志)";
  289. // }
  290. // else if (result == "EU-01")
  291. // {
  292. // outputMessage = $"无效的帐套或工号(详情参见MES端日志)";
  293. // }
  294. // else
  295. // {
  296. // outputMessage = $"其他错误(详情参见MES端日志)[{result}]";
  297. // }
  298. // Logger.Error(null, outputMessage, logKeyT, logger_t);
  299. // Logger.Error(null, outputMessage, logKeyE, logger_e);
  300. // FormLogShow?.ShowLog(outputMessage);
  301. // SendCode(plc_s, e, logKeyT, logKeyE, plc, 5);
  302. // return;
  303. // }
  304. //}
  305. #endregion
  306. // 写入PLC 条码
  307. outputMessage = $"[{e.Content}]SET_BarCode=[{barcode}]{plc_s.Add_BarCode + plc_s.Add_BarCodeNum}";
  308. Logger.Trace(outputMessage, logKeyT, logger_t);
  309. FormLogShow?.ShowLog(outputMessage);
  310. PLCResult p_r = plc.Write<string>(plc_s.Add_BarCode, plc_s.Add_BarCodeNum, barcode);
  311. outputMessage = $"[{e.Content}]END_BarCode=[{p_r}]{plc_s.Add_BarCode + plc_s.Add_BarCodeNum}";
  312. Logger.Trace(outputMessage, logKeyT, logger_t);
  313. FormLogShow?.ShowLog(outputMessage);
  314. // 写入PLC 型号
  315. outputMessage = $"[{e.Content}]SET_GoodsCode=[{intcode}]{plc_s.Add_Code + plc_s.Add_CodeNum}";
  316. Logger.Trace(outputMessage, logKeyT, logger_t);
  317. FormLogShow?.ShowLog(outputMessage);
  318. p_r = plc.Write<short>(plc_s.Add_Code, plc_s.Add_CodeNum, (short)(intcode.ToInt32()));
  319. outputMessage = $"[{e.Content}]END_GoodsCode=[{p_r}]{plc_s.Add_Code + plc_s.Add_CodeNum}";
  320. Logger.Trace(outputMessage, logKeyT, logger_t);
  321. FormLogShow?.ShowLog(outputMessage);
  322. // [100]3#釉坯库(入) 是 [101]3#登窑 的前工序
  323. if (p_id != "100")
  324. {
  325. //2.状态(int)【3:产品不可到达】
  326. //outputMessage = $"[{e.Content}]SET_F_Code=[3]{plc_s.Add_F_Code + plc_s.Add_F_CodeNum}";
  327. //Logger.Trace(outputMessage, logKeyT, logger_t);
  328. //FormLogShow?.ShowLog(outputMessage);
  329. //p_r = plc?.Write<short>(plc_s.Add_F_Code, plc_s.Add_F_CodeNum, (short)3);
  330. //outputMessage = $"[{e.Content}]END_F_Code=[{p_r}]{plc_s.Add_F_Code + plc_s.Add_F_CodeNum}";
  331. //Logger.Trace(outputMessage, logKeyT, logger_t);
  332. //FormLogShow?.ShowLog(outputMessage);
  333. SendCode(plc_s, e, logKeyT, logKeyE, plc, 3);
  334. return;
  335. }
  336. //2.状态(int)【0:无,1:PLC等待读取;2.PLC读取完成】
  337. //outputMessage = $"[{e.Content}]SET_F_Code=[1]{plc_s.Add_F_Code + plc_s.Add_F_CodeNum}";
  338. //Logger.Trace(outputMessage, logKeyT, logger_t);
  339. //FormLogShow?.ShowLog(outputMessage);
  340. //p_r = plc?.Write<short>(plc_s.Add_F_Code, plc_s.Add_F_CodeNum, (short)1);
  341. //outputMessage = $"[{e.Content}]END_F_Code=[{p_r}]{plc_s.Add_F_Code + plc_s.Add_F_CodeNum}";
  342. //Logger.Trace(outputMessage, logKeyT, logger_t);
  343. //FormLogShow?.ShowLog(outputMessage);
  344. SendCode(plc_s, e, logKeyT, logKeyE, plc, 1);
  345. ////3.通信异常标识(int)【0:正常,1:后台处理异常,报警】
  346. //outputMessage = $"[{e.Content}]SET_ErrorNum=[0]{plc_s.Add_Error + plc_s.Add_ErrorNum}";
  347. //Logger.Trace(outputMessage, logKeyT, logger_t);
  348. //FormLogShow?.ShowLog(outputMessage);
  349. //plc?.Write<short>(plc_s.Add_Error, plc_s.Add_ErrorNum, (short)0);
  350. //outputMessage = $"[{e.Content}]END_ErrorNum=[0]{plc_s.Add_Error + plc_s.Add_ErrorNum}";
  351. //Logger.Trace(outputMessage, logKeyT, logger_t);
  352. //FormLogShow?.ShowLog(outputMessage);
  353. }
  354. catch (Exception ex)
  355. {
  356. FormLogShow?.ShowLog($"[{e.Content}]ERROR={ex.Message}");
  357. if (plc_s != null)
  358. {
  359. Logger.Error(ex, $"[{e.Content}]ERROR", logKeyT, logger_t);
  360. Logger.Error(ex, $"[{e.Content}]ERROR", logKeyE, logger_e);
  361. SendError(plc_s, e, logKeyT, logKeyE, plc);
  362. }
  363. else
  364. {
  365. Logger.Error(ex, $"[{e.Content}]ERROR-NOFLAG", logKeyT, logger_t);
  366. Logger.Error(ex, $"[{e.Content}]ERROR-NOFLAG", logKeyE, logger_e);
  367. }
  368. }
  369. finally
  370. {
  371. LoggerT?.EndTracking();
  372. plc?.Disconnect();
  373. plc?.Close();
  374. //e.ReturnMessage("0000");
  375. }
  376. }
  377. }
  378. private void SendCode(PLC_S_GC_KL plc_s, ReceiveSession e, string loggerNameT,
  379. string loggerNameE, SocketClient<SiemensS7_1200Model> plc, short code)
  380. {
  381. try
  382. {
  383. //using (SocketClient<SiemensS7_1200Model> plc = new SocketClient<SiemensS7_1200Model>())
  384. {
  385. // 扫码结果:【0:复位 1:通过 2:扫码异常 3:工序异常 4:防伪码读取错误 5:防伪码绑定错误】
  386. string outputMessage = $"[{e.Content}]SET_CODE=[{code}]{plc_s.Add_F_Code + plc_s.Add_F_CodeNum}【1:完成 3:前工序不是[3#釉坯库(入)] 4:防伪码读取错误 5:防伪码验证错误】";
  387. Logger.Trace(outputMessage, loggerNameT, logger_t);
  388. FormLogShow?.ShowLog(outputMessage);
  389. PLCResult p_r = plc?.Write<short>(plc_s.Add_F_Code, plc_s.Add_F_CodeNum, code);
  390. outputMessage = $"[{e.Content}]END_CODE=[{p_r}]{plc_s.Add_F_Code + plc_s.Add_F_CodeNum}";
  391. Logger.Trace(outputMessage, loggerNameT, logger_t);
  392. FormLogShow?.ShowLog(outputMessage);
  393. }
  394. }
  395. catch (Exception ex)
  396. {
  397. Logger.Error(ex, $"[{e.Content}]ERROR-SendCode", loggerNameT, logger_t);
  398. Logger.Error(ex, $"[{e.Content}]ERROR-SendCode", loggerNameE, logger_e);
  399. FormLogShow?.ShowLog($"[{e.Content}]ERROR-SendCode={ex.Message}");
  400. }
  401. }
  402. private void SendError(PLC_S_GC_KL plc_s, ReceiveSession e, string loggerNameT,
  403. string loggerNameE, SocketClient<SiemensS7_1200Model> plc)
  404. {
  405. try
  406. {
  407. //using (SocketClient<SiemensS7_1200Model> plc = new SocketClient<SiemensS7_1200Model>())
  408. {
  409. string outputMessage = $"[{e.Content}]SET_ErrorNum=[2]{plc_s.Add_Error + plc_s.Add_ErrorNum}";
  410. Logger.Trace(outputMessage, loggerNameT, logger_t);
  411. FormLogShow?.ShowLog(outputMessage);
  412. PLCResult p_r = plc?.Write<short>(plc_s.Add_Error, plc_s.Add_ErrorNum, (short)2);
  413. outputMessage = $"[{e.Content}]END_ErrorNum=[{p_r}]{plc_s.Add_Error + plc_s.Add_ErrorNum}";
  414. Logger.Trace(outputMessage, loggerNameT, logger_t);
  415. FormLogShow?.ShowLog(outputMessage);
  416. }
  417. }
  418. catch (Exception ex)
  419. {
  420. Logger.Error(ex, $"[{e.Content}]ERROR-SendError", loggerNameT, logger_t);
  421. Logger.Error(ex, $"[{e.Content}]ERROR-SendError", loggerNameE, logger_e);
  422. FormLogShow?.ShowLog($"[{e.Content}]ERROR-SendError={ex.Message}");
  423. }
  424. }
  425. private DataRow GetGoodsCode(string barcode, ReceiveSession e, string loggerName)
  426. {
  427. IDataAccess dataAccess = null;
  428. try
  429. {
  430. dataAccess = PLC_S_DataAccess.GetDataAccess(e);
  431. string sqlString = "select g.goodscode, g.seatcovercode, inp.flowprocedureid, gdd.goodsleveltypeid\n" +
  432. " from tp_pm_groutingdailydetail gdd\n" +
  433. " LEFT JOIN tp_pm_inproduction inp on inp.groutingdailydetailid = gdd.groutingdailydetailid\n" +
  434. " and inp.INSCRAPFLAG='0' and inp.ISREWORKFLAG='0'\n" + // 报损待审和半检返工都算不可到达
  435. " inner join tp_mst_goods g\n" +
  436. " on g.goodsid = gdd.goodsid\n" +
  437. " where gdd.barcode = :barcode";
  438. DataTable dataTable = dataAccess.ExecuteDatatable(sqlString, new CDAParameter(":barcode", barcode));
  439. if (dataTable.HasData())
  440. {
  441. return dataTable.Rows[0];
  442. }
  443. return null;
  444. }
  445. catch (Exception ex)
  446. {
  447. Logger.Error(ex, $"[{e.Content}]ERROR-GetGoodsCode", loggerName, logger_e);
  448. FormLogShow?.ShowLog($"[{e.Content}]ERROR-GetGoodsCode={ex.Message}");
  449. return null;
  450. }
  451. finally
  452. {
  453. dataAccess?.Close();
  454. }
  455. }
  456. private PLC_S_GC_KL GetPLC_S_GC(string flag, ReceiveSession e, string loggerName)
  457. {
  458. try
  459. {
  460. flag = M_NAME + flag;
  461. if (PLC_FLAGS.ContainsKey(flag))
  462. {
  463. return PLC_FLAGS[flag];
  464. }
  465. else
  466. {
  467. PLC_S_GC_KL plc_s = new PLC_S_GC_KL();
  468. INIHelper ini = INIHelper.Create($@"PLC_S_INI\PLC_S_{M_NAME}.ini");
  469. plc_s.IP = ini.Read(flag, "IP");
  470. plc_s.Port = ini.Read(flag, "Port").ToInt32();
  471. plc_s.Add_BarCode = ini.Read(flag, "Add_BarCode");
  472. plc_s.Add_BarCodeNum = ini.Read(flag, "Add_BarCodeNum");
  473. plc_s.Add_Code = ini.Read(flag, "Add_Code");
  474. plc_s.Add_CodeNum = ini.Read(flag, "Add_CodeNum");
  475. plc_s.Add_F_Code = ini.Read(flag, "Add_F_Code");
  476. plc_s.Add_F_CodeNum = ini.Read(flag, "Add_F_CodeNum");
  477. plc_s.Add_Error = ini.Read(flag, "Add_Error");
  478. plc_s.Add_ErrorNum = ini.Read(flag, "Add_ErrorNum");
  479. plc_s.USER_CODE = ini.Read(flag, "USER_CODE");
  480. plc_s.Add_SE_Code1 = ini.Read(flag, "Add_SE_Code1");
  481. plc_s.Add_SE_Code1Num = ini.Read(flag, "Add_SE_Code1Num");
  482. plc_s.Add_SE_Code2 = ini.Read(flag, "Add_SE_Code2");
  483. plc_s.Add_SE_Code2Num = ini.Read(flag, "Add_SE_Code2Num");
  484. PLC_FLAGS.Add(flag, plc_s);
  485. return plc_s;
  486. }
  487. }
  488. catch (Exception ex)
  489. {
  490. Logger.Error(ex, $"[{e.Content}]ERROR-GetPLC_S_GC", loggerName, logger_e);
  491. FormLogShow?.ShowLog($"[{e.Content}]ERROR-GetPLC_S_GC={ex.Message}");
  492. return null;
  493. }
  494. }
  495. }
  496. }