MXComponent_XYK_PM.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Threading;
  5. using System.Threading.Tasks;
  6. using ProjectBase.Data.BaseDAL;
  7. using ProjectBase.Data.Logs;
  8. using SIMDP.BLL;
  9. using SIMDP.Device;
  10. using SIMDP.Model;
  11. using SIMDP.Util;
  12. using ACTMULTILib;
  13. namespace SIMDP.Project
  14. {
  15. class MXComponent_XYK_PM : MXComponent_XYK
  16. {
  17. #region 重写父类函数
  18. public override void actionOpen()
  19. { }
  20. public override void actionStart()
  21. { }
  22. public override void actionStop()
  23. { }
  24. bool pcHeartBeat = false;
  25. public override void actionTimer()
  26. {
  27. try
  28. {
  29. // 心跳信号
  30. pcHeartBeat = !pcHeartBeat;
  31. bool res1 = Write("PC心跳信号", pcHeartBeat);
  32. // 轮询监控节点
  33. foreach (var p in monitorPoints)
  34. {
  35. short value;
  36. if (!Read(p, out value)) continue;
  37. if (value != Convert.ToInt16(p.value))
  38. {
  39. p.value = value;
  40. if (p.proc != null)
  41. p.proc.Invoke(this, new object[] { value });
  42. }
  43. }
  44. redis.Publish<string>(SysEnvironment.OpcDataChannel, "");
  45. }
  46. catch (Exception ex)
  47. {
  48. LogHelper.log.Error("读取PLC信号发生异常:" + ex.Message);
  49. actEasyIF.Close();
  50. SetRedisPlcDisConnect();
  51. }
  52. }
  53. #endregion
  54. #region 生产过程_小压溃
  55. public void 小压溃主压机压装完成(object value)
  56. {
  57. bool signal = Convert.ToBoolean(value);
  58. LogHelper.log.Debug("小压溃主压机压装完成: signal = " + signal.ToString());
  59. if (!signal)
  60. {
  61. Write("主读取完成", false);
  62. 主压机结果 = false;
  63. 主压机关联流水号 = 0;
  64. 主压机加工步骤号 = 0;
  65. return;
  66. }
  67. if (signal)
  68. {
  69. Read("主压机结果", out 主压机结果);//true
  70. Read("主压机关联流水号", out 主压机关联流水号);//工件流水号
  71. Read("主压机加工步骤号", out 主压机加工步骤号);//3
  72. }
  73. //队列里无数据,报警并反馈完成
  74. if (process_XYK[小压溃工序.主压机].Count == 0)
  75. {
  76. Tool.LogAndNotice("生产过程报警", 3, "小压溃工序.主压机: 生产序列无数据");
  77. Write("主读取完成", true);
  78. return;
  79. }
  80. //队列里有数据,进行处理
  81. ProductionData_XYK data = process_XYK[小压溃工序.主压机][0];
  82. data.dict["主压机结果"] = 主压机结果 ? "OK" : "NG";
  83. LogHelper.log.Debug("更新主压机结果: " + 主压机结果.ToString());
  84. BLLFactory<BlProductData>.Instance.Update(data.toModel(), data.model.DataId);
  85. //更新最终压装结果
  86. data.dict["最终压装结果"] = data.dict["辅助压机结果一"] == "OK"
  87. && data.dict["辅助压机结果二"] == "OK"
  88. && data.dict["主压机结果"] == "OK" ? "OK" : "NG";
  89. LogHelper.log.Debug("更新最终压装结果: " + data.dict["最终压装结果"]);
  90. BLLFactory<BlProductData>.Instance.Update(data.toModel(), data.model.DataId);
  91. process_XYK[小压溃工序.主压机].RemoveAt(0);
  92. process_XYK[小压溃工序.打标].Add(data);
  93. Write("主读取完成", true);
  94. }
  95. #endregion
  96. }
  97. }