M182轴承端盖外观缺陷AOI
kingno
2025-09-18 1894ccc4014d813ea60cf276ac066e5870a82566
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
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
            {
 
            }
        }
 
 
 
    }
}