You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

160 lines
6.2 KiB

3 years ago
  1. using Aborlen.Model;
  2. using Aborlen.Opc.PlcBase;
  3. using FrameWork.Log;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Reflection;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace Aborlen.PlcCommunicationInit
  11. {
  12. public partial class WorkStation: StationBase
  13. {
  14. private void OpcTag_EventTagChanged(string tagId, int tagMarkCode, object tagValue, DateTime timeTrigger)
  15. {
  16. try
  17. {
  18. if (!Convert.ToBoolean(tagValue))
  19. {
  20. return;
  21. }
  22. //判断数据库采集功能配置表(DataCollectConfig) 是否包含当前信号
  23. List<DataCollectConfig> configList = CollectsConfig.Where(p => p.TagMarkCode == tagMarkCode && p.TagConfigCode == ThisStationInfo.TagConfigCode).ToList();
  24. long InsertIndex = 0;
  25. foreach (var configItem in configList)
  26. {
  27. //保存质量数据
  28. //判断是否保存索引
  29. if (configItem.CollectIndexMarkCode > 0)
  30. {
  31. //存在索引 这里统计索引信息
  32. string indexTableName = configItem.CollectIndexTableName;
  33. //索引标志TagMarkId
  34. int indexTagMarkCode = configItem.CollectIndexMarkCode;
  35. //获取索引需要保存的字段
  36. List<DataCollectConfigDetail> stationConfigDetails = StationConfigDetails.Where(p => p.TagConfigCode == configItem.TagConfigCode).ToList();
  37. //通过反射创建表实例 Aborlen.Model.QualityDataInfoIndex
  38. Assembly assembly = Assembly.Load("Aborlen.Model");
  39. Type type = assembly.GetType("Aborlen.Model." + indexTableName);
  40. var instace = Activator.CreateInstance(type);
  41. foreach (var detailItem in stationConfigDetails)
  42. {
  43. //读取对应点数据
  44. if (type.GetProperty(detailItem.TargetColName).PropertyType == typeof(string))
  45. {
  46. type.GetProperty(detailItem.TargetColName).SetValue(instace, Read(detailItem.CollectIndexMarkCode).ToString());
  47. }
  48. else
  49. {
  50. type.GetProperty(detailItem.TargetColName).SetValue(instace, Convert.ToInt32(Read(detailItem.CollectIndexMarkCode)));
  51. }
  52. }
  53. type.GetProperty("StationId").SetValue(instace, ThisStationInfo.StationId);
  54. type.GetProperty("StationCode").SetValue(instace, ThisStationInfo.StationCode);
  55. type.GetProperty("StationName").SetValue(instace, ThisStationInfo.StationName);
  56. InsertIndex = EntityFrameWork.DbHelperMapping[indexTableName + "_Insert"].Invoke(instace);
  57. }
  58. //保存明细数据
  59. //获取表名称
  60. string DetailTableName = configItem.CollectTableName;
  61. //遍历当前工位所有质量数据信号点
  62. foreach (var qualityTagDetails in StationQualityTagDetails.GroupBy(p => p.GroupSerialNumber))
  63. {
  64. foreach (var qualityTagItem in qualityTagDetails)
  65. {
  66. int itemQualityMark = 0;
  67. if (qualityTagItem.SerialType == 1 && qualityTagItem.IsValidate == 0)
  68. {
  69. itemQualityMark = Convert.ToInt32(Read(qualityTagItem.TagId, timeTrigger));
  70. }
  71. else
  72. {
  73. QualityDataInfo qualityDataInfo = new QualityDataInfo();
  74. qualityDataInfo.TagId = qualityTagItem.TagId;
  75. qualityDataInfo.ParentId = InsertIndex;
  76. qualityDataInfo.MeasurePosition = qualityTagItem.MeasurePosition;
  77. qualityDataInfo.MeasureItem = qualityTagItem.MeasureItem;
  78. qualityDataInfo.TagValue = Read(qualityTagItem.TagId, timeTrigger).ToString();
  79. qualityDataInfo.MeasureUnit = qualityTagItem.MeasureUnit;
  80. if (qualityTagItem.IsValidate == 1)
  81. {
  82. qualityDataInfo.UpperLimit = qualityTagItem.UpperLimit;
  83. qualityDataInfo.LowerLimit = qualityTagItem.LowerLimit;
  84. if (Convert.ToDouble(qualityDataInfo.TagValue) > Convert.ToDouble(qualityTagItem.LowerLimit) && Convert.ToDouble(qualityDataInfo.TagValue) < Convert.ToDouble(qualityTagItem.UpperLimit))
  85. {
  86. qualityDataInfo.QualifiedMark = 1;
  87. }
  88. else
  89. {
  90. qualityDataInfo.QualifiedMark = 2;
  91. }
  92. }
  93. else
  94. {
  95. qualityDataInfo.QualifiedMark = itemQualityMark;
  96. }
  97. qualityDataInfo.ItemSerialNumber = qualityTagItem.ItemSerialNumber;
  98. qualityDataInfo.GroupSerialNumber = qualityTagItem.GroupSerialNumber;
  99. qualityDataInfo.CreateTime = DateTime.Now;
  100. QualityDataInfo.Insert(qualityDataInfo);
  101. }
  102. }
  103. }
  104. }
  105. }
  106. catch(Exception ex)
  107. {
  108. LogHelper.WriteLog(LogHelper.GetMethodInfo(), ex);
  109. }
  110. }
  111. }
  112. }