GoodsLevel_QR2_SE.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603
  1. 
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.ServiceModel;
  7. using Curtain.DataAccess;
  8. using Curtain.Extension.ExCompareOperator;
  9. using Curtain.Extension.ExObjectConvert;
  10. using Curtain.Extension.ExSystemData;
  11. using Curtain.Framework.Json;
  12. using Curtain.Helpers;
  13. using Curtain.Log;
  14. using Curtain.Net.Sockets.PLC;
  15. using Curtain.Net.Sockets.PLC.Model;
  16. using Curtain.Net.Sockets.PLC.Model.Siemens;
  17. using PLC_S.Proxy;
  18. namespace PLC_S.ServerModel
  19. {
  20. /// <summary>
  21. /// 返回扫码结果(0:复位 1:通过 2:扫码异常 3:工序异常 4:防伪码读取错误 5:防伪码验证错误)等信息(3#刮登对接乾润)
  22. /// </summary>
  23. public class GoodsLevel_QR2_SE : SocketServer<SimpleSocketServerModel>, IShowFormLog, IWindowsServer
  24. {
  25. public Dictionary<string, PLC_S_GL_QR> PLC_FLAGS = new Dictionary<string, PLC_S_GL_QR>();
  26. public const string M_NAME = "GL_QR";
  27. private MES_S _mes_s = null;
  28. private readonly Logger logger = Logger.CreateLogger(M_NAME);
  29. private readonly LogInfo logger_t = new LogInfo();
  30. private readonly LogInfo logger_e = new LogInfo();
  31. private bool _S_STOP = false;
  32. public int Interval
  33. {
  34. get;
  35. set;
  36. }
  37. public string EPTS_CODE
  38. {
  39. get;
  40. set;
  41. }
  42. public GoodsLevel_QR2_SE()
  43. {
  44. logger.FileExistDays = 30;
  45. logger.FilePrefix = "";
  46. logger.FileSuffix = M_NAME;
  47. logger.LevelOneFile = true;
  48. logger.FileNameWithoutDate = true;
  49. logger_t.SubFolderFormat = "<name>";
  50. logger_t.FileExistDays = 30;
  51. logger_t.LevelOneFile = true;
  52. logger_e.FileExistDays = 10;
  53. this.Model.FormatType = CommandFormatType.StartStopChar;
  54. this.ServerStarting += ServerSocket_ServerStarting;
  55. this.ServerStarted += ServerSocket_ServerStarted;
  56. this.ServerStoping += ServerSocket_ServerStoping;
  57. this.ServerStoped += ServerSocket_ServerStoped;
  58. this.ServerMessage += ServerSocket_ServerMessage;
  59. this.Received += ServerSocket_Received;
  60. _mes_s = MES_S.Get();
  61. }
  62. #region Server
  63. public IFormLogShow FormLogShow
  64. {
  65. get;
  66. set;
  67. }
  68. private void ServerSocket_ServerStarting(object sender, CancelEventArgs e)
  69. {
  70. try
  71. {
  72. _S_STOP = false;
  73. logger.OutputTrace($"{M_NAME}_ServerStarting");
  74. }
  75. catch { }
  76. }
  77. private void ServerSocket_ServerStarted(object sender, EventArgs e)
  78. {
  79. try
  80. {
  81. _S_STOP = false;
  82. logger.OutputTrace($"{M_NAME}_ServerStarted");
  83. }
  84. catch { }
  85. }
  86. private void ServerSocket_ServerStoping(object sender, CancelEventArgs e)
  87. {
  88. try
  89. {
  90. _S_STOP = false;
  91. logger.OutputTrace($"{M_NAME}_ServerStoping");
  92. }
  93. catch { }
  94. }
  95. private void ServerSocket_ServerStoped(object sender, EventArgs e)
  96. {
  97. try
  98. {
  99. _S_STOP = false;
  100. logger.OutputTrace($"{M_NAME}_ServerStoped");
  101. }
  102. catch { }
  103. }
  104. private void ServerSocket_ServerMessage(object sender, ServerMessageEventArgs e)
  105. {
  106. try
  107. {
  108. _S_STOP = false;
  109. string message = e.ToString();
  110. string cip = e?.Client?.IP;
  111. if (e.Type == ServerMessageType.Debug)
  112. {
  113. Logger.Debug(message, $"{M_NAME}-T[{cip}]", logger_t);
  114. }
  115. if (e.Type == ServerMessageType.Error)
  116. {
  117. Logger.Error(e.Exception, message, $"{M_NAME}-E[{cip}]", logger_e);
  118. }
  119. if (e.Type == ServerMessageType.Trace)
  120. {
  121. Logger.Trace(message, $"{M_NAME}-T[{cip}]", logger_t);
  122. }
  123. if (e.Type == ServerMessageType.Warning)
  124. {
  125. Logger.Warn(message, $"{M_NAME}-E[{cip}]", logger_e);
  126. }
  127. FormLogShow?.ShowLog("ServerMessage=" + message);
  128. }
  129. catch { }
  130. }
  131. #endregion
  132. int int_code = 0;
  133. /// <summary>
  134. /// 返回产品型号
  135. /// </summary>
  136. /// <param name="sender"></param>
  137. /// <param name="e"></param>
  138. private void ServerSocket_Received(object sender, ReceiveSession e)
  139. {
  140. PLC_S_GL_QR plc_s = null;
  141. string cIP = e?.Client?.IP;
  142. string logKeyT = $"{M_NAME}-T[{cIP}]";
  143. string logKeyE = $"{M_NAME}-E[{cIP}]";
  144. _S_STOP = false;
  145. SocketClient<SiemensS7_1200Model> plc = null;
  146. Logger LoggerT = null;
  147. try
  148. {
  149. LoggerT = Logger.CreateLogger(logKeyT, logger_t);
  150. lock (LoggerT)
  151. {
  152. LoggerT.BeginTracking();
  153. string outputMessage = e.ToString();
  154. Logger.Trace(outputMessage, logKeyT, logger_t);
  155. FormLogShow?.ShowLog(outputMessage);
  156. if (string.IsNullOrWhiteSpace(e.Content))
  157. {
  158. outputMessage = "接收数据为空";
  159. Logger.Warn(outputMessage, logKeyT, logger_t);
  160. Logger.Warn(outputMessage, logKeyE, logger_e);
  161. FormLogShow?.ShowLog(outputMessage);
  162. SendCode(plc_s, e, logKeyT, logKeyE, plc, 2);
  163. return;
  164. }
  165. outputMessage = e.Content;
  166. Logger.Trace(outputMessage, logKeyT, logger_t);
  167. FormLogShow?.ShowLog(outputMessage);
  168. string[] c = e.Content.Split('#');
  169. string flag = null;
  170. if (c.Length > 0)
  171. {
  172. flag = c[0];
  173. }
  174. string securityCode = null;
  175. if (c.Length > 1)
  176. {
  177. securityCode = c[1];
  178. }
  179. if (string.IsNullOrWhiteSpace(flag))
  180. {
  181. outputMessage = $"[{e.Content}]接收设备代码为空";
  182. Logger.Warn(outputMessage, logKeyT, logger_t);
  183. Logger.Warn(outputMessage, logKeyE, logger_e);
  184. FormLogShow?.ShowLog(outputMessage);
  185. SendCode(plc_s, e, logKeyT, logKeyE, plc, 2);
  186. return;
  187. }
  188. //int ws_id = 0;
  189. //if (flag == "0")
  190. //{
  191. // // 3#刮登
  192. // ws_id = 74;
  193. //}
  194. plc_s = GetPLC_S_GC(flag, e, logKeyE);
  195. if (plc_s == null)
  196. {
  197. outputMessage = $"[{e.Content}]设备代码[{flag}]未找到ini配置或有错误";
  198. Logger.Error(null, outputMessage, logKeyT, logger_t);
  199. Logger.Error(null, outputMessage, logKeyE, logger_e);
  200. FormLogShow?.ShowLog(outputMessage);
  201. SendCode(plc_s, e, logKeyT, logKeyE, plc, 2);
  202. return;
  203. }
  204. outputMessage = $"[{e.Content}]PLC_Connect={JsonHelper.FromObject(plc_s)}";
  205. Logger.Trace(outputMessage, logKeyT, logger_t);
  206. FormLogShow?.ShowLog(outputMessage);
  207. plc = new SocketClient<SiemensS7_1200Model>();
  208. plc.Connect(plc_s.IP, plc_s.Port);
  209. if (string.IsNullOrWhiteSpace(securityCode) ||
  210. securityCode == "0" ||
  211. securityCode.Length != 12 ||
  212. securityCode.StartsWith("0"))
  213. {
  214. outputMessage = $"[{e.Content}]接收防伪码格式错误";
  215. Logger.Warn(outputMessage, logKeyT, logger_t);
  216. Logger.Warn(outputMessage, logKeyE, logger_e);
  217. FormLogShow?.ShowLog(outputMessage);
  218. SendCode(plc_s, e, logKeyT, logKeyE, plc, 2);
  219. return;
  220. }
  221. #region 防伪码处理过程 xuwei add 2021-12-08
  222. //【防伪码】1从寄存器读取产品条码================================================
  223. outputMessage = $"[{e.Content}]GET_SE_BarCode=[]{plc_s.Add_SE_BarCode + plc_s.Add_SE_BarCodeNum}";
  224. Logger.Trace(outputMessage, logKeyT, logger_t);
  225. FormLogShow?.ShowLog(outputMessage);
  226. PLCResult<string> se_read = plc.Read<string>(plc_s.Add_SE_BarCode, plc_s.Add_SE_BarCodeNum, 11);
  227. outputMessage = $"[{e.Content}]END_SE_BarCode=[{se_read.ToString()}]{plc_s.Add_SE_BarCode + plc_s.Add_SE_BarCodeNum}";
  228. Logger.Trace(outputMessage, logKeyT, logger_t);
  229. FormLogShow?.ShowLog(outputMessage);
  230. string barcode = se_read.Data.ToString();
  231. //===============================================================================
  232. #endregion
  233. string usercode = "";
  234. string p_id = "";
  235. string goodstypecode = "";
  236. //string se_flag = null;
  237. //string se_flag_code = null;
  238. using (IDataAccess dataAccess = PLC_S_DataAccess.GetDataAccess())
  239. {
  240. string sqlString = "select gdd.GOODSLEVELTYPEID,g.goodstypeid, inp.flowprocedureid,gt.goodstypecode\n" +
  241. " from tp_pm_groutingdailydetail gdd\n" +
  242. " LEFT JOIN tp_pm_inproduction inp on inp.groutingdailydetailid = gdd.groutingdailydetailid\n" +
  243. " inner join tp_mst_goods g on g.goodsid = gdd.goodsid\n" +
  244. " inner join tp_mst_goodsType gt on g.goodstypeid = gt.goodstypeid\n" +
  245. " where gdd.barcode = :barcode";
  246. DataTable dataTable = dataAccess.ExecuteDatatable(sqlString, new CDAParameter(":barcode", barcode));
  247. DataRow codeRow = null;
  248. if (dataTable.HasData())
  249. {
  250. codeRow = dataTable.Rows[0];
  251. }
  252. if (codeRow == null)
  253. {
  254. outputMessage = $"[{e.Content}]此条码[{barcode}]不存在";
  255. Logger.Warn(outputMessage, logKeyT, logger_t);
  256. Logger.Warn(outputMessage, logKeyE, logger_e);
  257. FormLogShow?.ShowLog(outputMessage);
  258. SendCode(plc_s, e, logKeyT, logKeyE, plc, 2);
  259. return;
  260. }
  261. p_id = codeRow["flowprocedureid"].ToString();
  262. goodstypecode = codeRow["goodstypecode"].ToString();
  263. #region 刮边工号 从工位配置中读取
  264. sqlString = @"
  265. SELECT t.usercode, u.userid
  266. FROM tp_mst_workstation t
  267. inner join tp_mst_user u on u.usercode = t.usercode
  268. WHERE t.workstationtypeid = 3201
  269. AND t.workstationid = @workstationid@
  270. ";
  271. CDAParameter[] ps = new CDAParameter[]
  272. {
  273. new CDAParameter("workstationid", plc_s.WS_ID),
  274. };
  275. int userid = 0;
  276. dataTable = dataAccess.ExecuteDatatable(sqlString, ps);
  277. if (dataTable.HasData())
  278. {
  279. usercode = dataTable.Rows[0]["usercode"].ToString();
  280. userid = dataTable.Rows[0]["userid"].ToInt32();
  281. }
  282. outputMessage = $"[{e.Content}]DB_UserCode=[{usercode}]";
  283. Logger.Trace(outputMessage, logKeyT, logger_t);
  284. FormLogShow?.ShowLog(outputMessage);
  285. #endregion
  286. // 是否启用防伪码 S_PM_031 这个是验证的
  287. //se_flag = "," + dataAccess.ExecuteScalar("select t.settingvalue from tp_mst_systemsetting t where t.settingcode = 'S_PM_031'") + ",";
  288. //se_flag_code = dataAccess.ExecuteScalar("select t.settingvalue from tp_mst_systemsetting t where t.settingcode = 'S_PM_032'") + "";
  289. }
  290. #region 防伪码处理 xuwei add 2021-12-30
  291. //【防伪码】验证防伪码 ==================================================
  292. string seResult = SmartDeviceProxy.Instance.Invoke<string>(
  293. p => p.CheckSecurityCodeByBarcode(
  294. _mes_s.AccountCode,
  295. usercode,
  296. barcode,
  297. securityCode
  298. ));
  299. outputMessage = $"[{e.Content}]SE_Result=[{seResult}]{securityCode}";
  300. Logger.Trace(outputMessage, logKeyT, logger_t);
  301. FormLogShow?.ShowLog(outputMessage);
  302. // 返回状态(成功、失败)
  303. if (seResult != "OK")
  304. {
  305. if (seResult == "EX")
  306. {
  307. outputMessage = $"MES服务端异常(详情参见MES端日志)";
  308. }
  309. else if (seResult == "EU-01")
  310. {
  311. outputMessage = $"无效的帐套或工号(详情参见MES端日志)";
  312. }
  313. else
  314. {
  315. outputMessage = $"其他错误(详情参见MES端日志)[{seResult}]";
  316. }
  317. Logger.Error(null, outputMessage, logKeyT, logger_t);
  318. Logger.Error(null, outputMessage, logKeyE, logger_e);
  319. FormLogShow?.ShowLog(outputMessage);
  320. SendCode(plc_s, e, logKeyT, logKeyE, plc, 5);
  321. return;
  322. }
  323. //===============================================================================
  324. #endregion
  325. #region 防伪码 取消原方法
  326. /*
  327. if (!string.IsNullOrWhiteSpace(plc_s.Add_SE_Code1) &&
  328. se_flag.Contains($",{plc_s.P_ID},") &&
  329. goodstypecode.StartsWith(se_flag_code)
  330. )
  331. {
  332. // 读取防伪码
  333. //outputMessage = $"[{e.Content}]GET_SE_Code1=[ ]{plc_s.Add_SE_Code1 + plc_s.Add_SE_Code1Num}";
  334. //Logger.Trace(outputMessage, logKeyT, logger_t);
  335. //FormLogShow?.ShowLog(outputMessage);
  336. PLCResult<string> se1_result = plc.Read<string>(plc_s.Add_SE_Code1, plc_s.Add_SE_Code1Num, 12);
  337. outputMessage = $"[{e.Content}]END_SE_Code1=[{se1_result.Data}]{se1_result}";
  338. Logger.Trace(outputMessage, logKeyT, logger_t);
  339. FormLogShow?.ShowLog(outputMessage);
  340. ////outputMessage = $"[{e.Content}]GET_SE_Code2=[ ]{plc_s.Add_SE_Code2 + plc_s.Add_SE_Code2Num}";
  341. ////Logger.Trace(outputMessage, logKeyT, logger_t);
  342. ////FormLogShow?.ShowLog(outputMessage);
  343. //PLCResult<string> se2_result = plc.Read<string>(plc_s.Add_SE_Code2, plc_s.Add_SE_Code2Num, 12);
  344. //outputMessage = $"[{e.Content}]END_SE_Code2=[{se2_result.Data}]{plc_s.Add_SE_Code2 + plc_s.Add_SE_Code2Num}";
  345. //Logger.Trace(outputMessage, logKeyT, logger_t);
  346. //FormLogShow?.ShowLog(outputMessage);
  347. string se_code = "";
  348. if (!string.IsNullOrWhiteSpace(se1_result.Data) &&
  349. !se1_result.Data.StartsWith("0") &&
  350. !se1_result.Data.StartsWith("ERROR")
  351. )
  352. {
  353. se_code = se1_result.Data;
  354. }
  355. //else if (!string.IsNullOrWhiteSpace(se2_result.Data) && !se2_result.Data.StartsWith("0"))
  356. //{
  357. // se_code = se2_result.Data;
  358. //}
  359. if (string.IsNullOrWhiteSpace(se_code))
  360. {
  361. SendCode(plc_s, e, logKeyT, logKeyE, plc, 4);
  362. return;
  363. }
  364. string result = SmartDeviceProxy.Instance.Invoke<string>(
  365. p => p.CheckSecurityCodeByBarcode(
  366. _mes_s.AccountCode,
  367. usercode,
  368. barcode,
  369. se_code
  370. ));
  371. outputMessage = $"[{e.Content}]SE_Result=[{result}]{se_code}";
  372. Logger.Trace(outputMessage, logKeyT, logger_t);
  373. FormLogShow?.ShowLog(outputMessage);
  374. // 返回状态(成功、失败)
  375. if (result != "OK")
  376. {
  377. if (result == "EX")
  378. {
  379. outputMessage = $"MES服务端异常(详情参见MES端日志)";
  380. }
  381. else if (result == "EU-01")
  382. {
  383. outputMessage = $"无效的帐套或工号(详情参见MES端日志)";
  384. }
  385. else
  386. {
  387. outputMessage = $"其他错误(详情参见MES端日志)[{result}]";
  388. }
  389. Logger.Error(null, outputMessage, logKeyT, logger_t);
  390. Logger.Error(null, outputMessage, logKeyE, logger_e);
  391. FormLogShow?.ShowLog(outputMessage);
  392. SendCode(plc_s, e, logKeyT, logKeyE, plc, 5);
  393. return;
  394. }
  395. }
  396. */
  397. #endregion
  398. if (p_id != plc_s.P_ID.ToString())
  399. {
  400. // 3#刮登计件
  401. string result = SmartDeviceProxy.Instance.Invoke<string>(
  402. p => p.AddWorkPieceByStatus3(
  403. _mes_s.AccountCode,
  404. //plc_s.USER_CODE,
  405. usercode,
  406. null,
  407. plc_s.P_ID,
  408. barcode,
  409. null));
  410. outputMessage = $"[{e.Content}]MES_Result=[{result}]";
  411. Logger.Trace(outputMessage, logKeyT, logger_t);
  412. FormLogShow?.ShowLog(outputMessage);
  413. // 返回状态(成功、失败)
  414. if (result != "OK")
  415. {
  416. if (result == "EE")
  417. {
  418. outputMessage = $"MES服务端异常(详情参见MES端日志)";
  419. }
  420. else if (result == "EU-01")
  421. {
  422. outputMessage = $"无效的帐套或工号(详情参见MES端日志)";
  423. }
  424. else
  425. {
  426. outputMessage = $"其他错误(详情参见MES端日志)[{result}]";
  427. }
  428. Logger.Error(null, outputMessage, logKeyT, logger_t);
  429. Logger.Error(null, outputMessage, logKeyE, logger_e);
  430. FormLogShow?.ShowLog(outputMessage);
  431. SendCode(plc_s, e, logKeyT, logKeyE, plc, 3);
  432. return;
  433. }
  434. }
  435. //重置验证防伪码标识为0(乾润要求)
  436. Int16 goodsFlag = 0;
  437. outputMessage = $"[{e.Content}]SET_SE_Flag=[{goodsFlag}]{plc_s.Add_SE_Flag + plc_s.Add_SE_FlagNum}";
  438. Logger.Trace(outputMessage, logKeyT, logger_t);
  439. FormLogShow?.ShowLog(outputMessage);
  440. PLCResult p_r = plc?.Write<short>(plc_s.Add_SE_Flag, plc_s.Add_SE_FlagNum, goodsFlag);
  441. outputMessage = $"[{e.Content}]END_SE_Flag=[{p_r.ToString()}]{plc_s.Add_SE_Flag + plc_s.Add_SE_FlagNum}";
  442. Logger.Trace(outputMessage, logKeyT, logger_t);
  443. FormLogShow?.ShowLog(outputMessage);
  444. //1:通过
  445. SendCode(plc_s, e, logKeyT, logKeyE, plc, 1);
  446. }
  447. }
  448. catch (Exception ex)
  449. {
  450. FormLogShow?.ShowLog($"[{e.Content}]ERROR={ex.Message}");
  451. if (plc_s != null)
  452. {
  453. Logger.Error(ex, $"[{e.Content}]ERROR", logKeyT, logger_t);
  454. Logger.Error(ex, $"[{e.Content}]ERROR", logKeyE, logger_e);
  455. if (plc?.Socket?.Connected ?? false)
  456. {
  457. SendCode(plc_s, e, logKeyT, logKeyE, plc, 3);
  458. }
  459. }
  460. else
  461. {
  462. Logger.Error(ex, $"[{e.Content}]ERROR-NOFLAG", logKeyT, logger_t);
  463. Logger.Error(ex, $"[{e.Content}]ERROR-NOFLAG", logKeyE, logger_e);
  464. }
  465. }
  466. finally
  467. {
  468. LoggerT?.EndTracking();
  469. plc?.Disconnect();
  470. plc?.Close();
  471. //e.ReturnMessage("0000");
  472. }
  473. }
  474. private void SendCode(PLC_S_GL_QR plc_s, ReceiveSession e, string loggerNameT,
  475. string loggerNameE, SocketClient<SiemensS7_1200Model> plc, short code)
  476. {
  477. try
  478. {
  479. //using (SocketClient<SiemensS7_1200Model> plc = new SocketClient<SiemensS7_1200Model>())
  480. {
  481. // 扫码结果:【0:复位 1:通过 2:扫码异常 3:工序异常 4:防伪码读取错误 5:防伪码绑定错误 】
  482. string outputMessage = $"[{e.Content}]SET_CODE=[{code}]{plc_s.Add_Code + plc_s.Add_CodeNum}【0:复位 1:通过 2:扫码异常 3:工序异常 4:防伪码读取错误 5:防伪码验证错误】";
  483. Logger.Trace(outputMessage, loggerNameT, logger_t);
  484. FormLogShow?.ShowLog(outputMessage);
  485. PLCResult p_r = plc?.Write<short>(plc_s.Add_Code, plc_s.Add_CodeNum, code);
  486. outputMessage = $"[{e.Content}]END_CODE=[{p_r}]{plc_s.Add_Code + plc_s.Add_CodeNum}";
  487. Logger.Trace(outputMessage, loggerNameT, logger_t);
  488. FormLogShow?.ShowLog(outputMessage);
  489. }
  490. }
  491. catch (Exception ex)
  492. {
  493. Logger.Error(ex, $"[{e.Content}]ERROR-SendCode", loggerNameT, logger_t);
  494. Logger.Error(ex, $"[{e.Content}]ERROR-SendCode", loggerNameE, logger_e);
  495. FormLogShow?.ShowLog($"[{e.Content}]ERROR-SendCode={ex.Message}");
  496. }
  497. }
  498. private PLC_S_GL_QR GetPLC_S_GC(string flag, ReceiveSession e, string loggerName)
  499. {
  500. try
  501. {
  502. flag = M_NAME + flag;
  503. if (PLC_FLAGS.ContainsKey(flag))
  504. {
  505. return PLC_FLAGS[flag];
  506. }
  507. else
  508. {
  509. PLC_S_GL_QR plc_s = new PLC_S_GL_QR();
  510. INIHelper ini = INIHelper.Create($@"PLC_S_INI\PLC_S_{M_NAME}.ini");
  511. plc_s.IP = ini.Read(flag, "IP");
  512. plc_s.Port = ini.Read(flag, "Port").ToInt32();
  513. plc_s.P_ID = ini.Read(flag, "P_ID").ToInt32();
  514. plc_s.WS_ID = ini.Read(flag, "WS_ID").ToInt32();
  515. plc_s.USER_CODE = ini.Read(flag, "USER_CODE");
  516. plc_s.Add_Code = ini.Read(flag, "Add_Code");
  517. plc_s.Add_CodeNum = ini.Read(flag, "Add_CodeNum");
  518. plc_s.Add_SE_Code1 = ini.Read(flag, "Add_SE_Code1");
  519. plc_s.Add_SE_Code1Num = ini.Read(flag, "Add_SE_Code1Num");
  520. plc_s.Add_SE_Code2 = ini.Read(flag, "Add_SE_Code2");
  521. plc_s.Add_SE_Code2Num = ini.Read(flag, "Add_SE_Code2Num");
  522. //xuwei add 2021-12-24
  523. plc_s.Add_FinishFlag = ini.Read(flag, "Add_FinishFlag");
  524. plc_s.Add_FinishFlagNum = ini.Read(flag, "Add_FinishFlagNum");
  525. //xuwei add 2021-12-30
  526. plc_s.Add_SE_Flag = ini.Read(flag, "Add_SE_Flag");
  527. plc_s.Add_SE_FlagNum = ini.Read(flag, "Add_SE_FlagNum");
  528. plc_s.Add_SE_Type = ini.Read(flag, "Add_SE_Type");
  529. plc_s.Add_SE_TypeNum = ini.Read(flag, "Add_SE_TypeNum");
  530. plc_s.Add_SE_BarCode = ini.Read(flag, "Add_SE_BarCode");
  531. plc_s.Add_SE_BarCodeNum = ini.Read(flag, "Add_SE_BarCodeNum");
  532. PLC_FLAGS.Add(flag, plc_s);
  533. return plc_s;
  534. }
  535. }
  536. catch (Exception ex)
  537. {
  538. Logger.Error(ex, $"[{e.Content}]ERROR-GetPLC_S_GC", loggerName, logger_e);
  539. FormLogShow?.ShowLog($"[{e.Content}]ERROR-GetPLC_S_GC={ex.Message}");
  540. return null;
  541. }
  542. }
  543. }
  544. }