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<int, DateTime> dicplctime = new Dictionary<int, DateTime>();
|
|
[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<bool>() { false, false, false }, pronum);
|
}
|
return msg;
|
}
|
|
|
public override void ReplyPlcData(List<bool> 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
|
{
|
|
}
|
}
|
|
|
|
}
|
}
|