using Bro.Common.Base; using Bro.Common.Helper; using Bro.Common.Interface; using Bro.Common.Model; using Bro.M135.Common; using Bro.M141.Process; using HalconDotNet; using NPOI.SS.Formula.Functions; using NPOI.XSSF.Streaming.Values; using System.Collections.Concurrent; using System.Net.Sockets; using System.Text.RegularExpressions; using static Org.BouncyCastle.Crypto.Engines.SM2Engine; using static Org.BouncyCastle.Math.EC.ECCurve; using static ScottPlot.Plottable.PopulationPlot; namespace Bro.M141_AOI1.Process { [Process("AOI1", EnumHelper.DeviceAttributeType.Device)] public class AOI1Process : M141Process { #region constructor public AOI1Process() : base() { } public AOI1Process(string productCode) : base(productCode) { } #endregion AOI1Config ConfigAOI1 => Config as AOI1Config; //Thread ThHeartPlc; public override void Open() { base.Open(); } string Productcode = DateTime.Now.ToString("yyyyMMddHHmmss"); Dictionary dicplctime = new Dictionary(); [ProcessMethod("", "PositionCheck_P1", "工位1检测", InvokeType.TestInvoke)] public ResponseMessage PositionCheck_P1(IOperationConfig config, IDevice invokeDevice, IDevice sourceDevice) { if (config.TriggerValue == 1) { Productcode = DateTime.Now.ToString("yyyyMMddHHmmssfff"); } int pronum = Plc1.Read(ConfigAOI1.Pronumaddress, 1, out _)[0]; LogAsync(DateTime.Now, EnumHelper.LogLevel.Detail, $"产品计时开始 plc料号 {pronum} "); dicplctime[pronum] = DateTime.Now; config.TriggerStr = "1#," + config.TriggerValue + ",Str," + Productcode; ResponseMessage msg = RunImageCheck_plc(config, pronum); msg.IsReply = false; if (msg.Result != 1) { ReplyPlcData(new List() { false, false, false }, pronum); } return msg; } public override void ReplyPlcData(List result, int pronum) { try { pronum = pronum * 10; if (result.Count == 3) { Plc1.WriteSingleAddress(ConfigAOI1.Finresult1, pronum + (result[0] ? 1 : 2), out _); Plc1.WriteSingleAddress(ConfigAOI1.Finresult2, pronum + (result[1] ? 1 : 2), out _); Plc1.WriteSingleAddress(ConfigAOI1.Finresult3, pronum + (result[2] ? 1 : 2), out _); Plc1.WriteSingleAddress(ConfigAOI1.Plcover, 1, out _); LogAsync(DateTime.Now, EnumHelper.LogLevel.Detail, $"产品计时结束 plc料号 {pronum} 结果{pronum + (result[0] ? 1 : 2)},{pronum + (result[1] ? 1 : 2)},{pronum + (result[2] ? 1 : 2)} 总用时 {(DateTime.Now - dicplctime[pronum / 10]).TotalMilliseconds}ms "); } else { Plc1.WriteSingleAddress(ConfigAOI1.Finresult1, pronum + 2, out _); Plc1.WriteSingleAddress(ConfigAOI1.Finresult2, pronum + 2, out _); Plc1.WriteSingleAddress(ConfigAOI1.Finresult3, pronum + 2, out _); Plc1.WriteSingleAddress(ConfigAOI1.Plcover, 1, out _); LogAsync(DateTime.Now, EnumHelper.LogLevel.Detail, $"产品计时结束 plc料号 {pronum} 结果{pronum + 2},{pronum + 2},{pronum + 2} 总用时 {(DateTime.Now - dicplctime[pronum/10]).TotalMilliseconds}ms "); LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"测试结果数量异常!!!!!!!!"); } } catch { } } } }