From 6a4463810e276b62356d77c88509fa6fa7af65cf Mon Sep 17 00:00:00 2001 From: kingno <30263@KINGNO> Date: 星期三, 23 七月 2025 15:46:33 +0800 Subject: [PATCH] mes数据逻辑上传完善,缺陷代码完善,添加S4工位的S2结果上传Plc的通信日志mes优化 --- src/Bro.M141.Process/M141Process.cs | 243 +++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 225 insertions(+), 18 deletions(-) diff --git a/src/Bro.M141.Process/M141Process.cs b/src/Bro.M141.Process/M141Process.cs index 3302e67..7d7fa09 100644 --- a/src/Bro.M141.Process/M141Process.cs +++ b/src/Bro.M141.Process/M141Process.cs @@ -94,10 +94,14 @@ PLCBase Plc2; public Thread ThHeartPlc; + public RabbitMQHelper mqtt; + + public override void Open() { base.Open(); + devicestate = true; ML = DeviceCollection.FirstOrDefault(u => u is MachineLearningBase) as MachineLearningBase; if (ML == null) @@ -121,6 +125,15 @@ mysqlhelper.IniDBIP(M141Config.IPforall); RerefreshBasketcode(); + + + if (M141Config.ISupMES) + { + mqtt = new RabbitMQHelper(M141Config.zIP, M141Config.zport, M141Config.zuser, M141Config.zpassword); + mqtt.Connect(M141Config.MESchannel); + } + + } @@ -327,6 +340,27 @@ } + + + try + { + if (Plc1 != null) + { + DateTime dt = DateTime.Now; + Plc1.WriteSingleAddress(10, dt.Year, out _); + Plc1.WriteSingleAddress(11, dt.Month, out _); + Plc1.WriteSingleAddress(12, dt.Day, out _); + Plc1.WriteSingleAddress(13, dt.Hour, out _); + Plc1.WriteSingleAddress(14, dt.Minute, out _); + Plc1.WriteSingleAddress(15, dt.Second, out _); + Plc1.WriteSingleAddress(16, (int)dt.DayOfWeek, out _); + } + } + catch + { + + } + Thread.Sleep(1000); } } @@ -513,18 +547,22 @@ { string detectionName = (ML.InitialConfig as MLInitialConfigBase).DetectionConfigs.FirstOrDefault(u => u.Id == measureBind.DetectionId)?.Name; - - List<DetectResult> detectResults = ML?.RunMLDetectionSync(imgSet, pidList, measureBind.DetectionId, false, null, null, "", products[0].ImagePaths); if (measureBind.WorkPosition == "P1" && M141Config.StationCode == "S5" && detectResults.GetDefectDescList().Count == 0) { - var defecttem = detectResults.SelectMany(u => u.NetResults.SelectMany(m => m.DetectDetails)).Where(u => u.NetName == M141Config.defectname).ToList(); + var defecttem = detectResults.SelectMany(u => u.AllNetResults.SelectMany(m => m.DetectDetails)).Where(u => u.ClassName == M141Config.defectname).ToList(); + List<Netdefectdetail> Netdefectdetails = mysqlhelper.GetNetdefectdetails(products[0].SEQUENCE); - LogAsync(DateTime.Now, EnumHelper.LogLevel.Detail, $"{products[0].SN} 杩涘叆S3S5妫�娴� S3鏁版嵁{Netdefectdetails.Count} S5鏁版嵁{defecttem.Count}"); + LogAsync(DateTime.Now, EnumHelper.LogLevel.Detail, $"{products[0].SN} S3S5妫�娴� S3鏁版嵁{Netdefectdetails.Count} S5鏁版嵁{defecttem.Count}"); + + Netdefectdetails.ForEach(x => + { + LogAsync(DateTime.Now, EnumHelper.LogLevel.Detail, $"{products[0].SN} S3S5妫�娴� S3鏁版嵁{x.name} {x.centerX},{x.centerY} "); + }); int num = 0; foreach (var item1 in defecttem) @@ -532,12 +570,13 @@ double x1 = item1.Rect.Point_LU.X + item1.Rect.Width / 2.0; double y1 = item1.Rect.Point_LU.Y + item1.Rect.Height / 2.0; num++; + //HOperatorSet.AffineTransPoint2d(new HTuple(products[0].Centermatrix.ToArray()), x1, y1, out HTuple qx, out HTuple qy); //HOperatorSet.ProjectiveTransPixel(new HTuple(products[0].Centermatrix.ToArray()), x1, y1, out HTuple qx, out HTuple qy); - LogAsync(DateTime.Now, EnumHelper.LogLevel.Detail, $"{products[0].SN}鍘熷潗鏍噞num} {x1},{y1}"); + LogAsync(DateTime.Now, EnumHelper.LogLevel.Detail, $"{products[0].SN} S3S5妫�娴� 鍘熷潗鏍噞num} {x1},{y1}"); HOperatorSet.ProjectiveTransPixel(new HTuple(products[0].Centermatrix.ToArray()), x1, y1, out HTuple qx, out HTuple qy); - LogAsync(DateTime.Now, EnumHelper.LogLevel.Detail, $"{products[0].SN}鏂板潗鏍噞num} {qx},{qy}"); + LogAsync(DateTime.Now, EnumHelper.LogLevel.Detail, $"{products[0].SN} S3S5妫�娴� 鏂板潗鏍噞num} {qx},{qy}"); Netdefectdetail temc = new Netdefectdetail() @@ -1022,10 +1061,12 @@ if (M141Config.Isreadbasketcode) { p.BasketCode = M141Config.basketcode; + p.Zword = M141Config.zwoid; } else { - p.BasketCode = mysqlhelper.Getbasketcode(p.SEQUENCE, out string sntem); + p.BasketCode = mysqlhelper.Getbasketcode(p.SEQUENCE, out string sntem, out string zword); + p.Zword = zword; p.SN = sntem; p.PID = $"{sntem}_{i}"; if ("NoRead".Equals(p.BasketCode)) @@ -1158,7 +1199,26 @@ //UpdatePositionResultToDB(detail); //var seqData = p.SEQUENCE.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries).ToList(); - ReplyPlcData(positionSet, plcresult); + + if (M141Config.StationCode == "S4" && isOK) + { + ////mysqlhelper.GetS2Result(productList[0].SEQUENCE); + //Plc1.WriteSingleAddress(1526, mysqlhelper.GetS2Result(productList[0].SEQUENCE) ? 1 : 2, out _); + + bool temS2 = mysqlhelper.GetS2Result(p.SEQUENCE); + ReplyPlcData(positionSet, new List<bool>() { temS2 }); + if (!temS2) + { + LogAsync(DateTime.Now, EnumHelper.LogLevel.Action, $"{p.SN} S2宸ョ珯NG鎶涙枡"); + } + } + else + { + ReplyPlcData(positionSet, plcresult); + } + + + mysqlhelper.UpdateProduct(p); if (positionSet.IsLastPosition) { @@ -1170,17 +1230,7 @@ } } }); - //ReplyPlcData(positionSet, plcresult); - if (positionSet.IsLastPosition) - { - if (_ct != null) - { - UpdateCT(null, (float)((DateTime.Now - _ct.Value).TotalSeconds)); - } - _ct = DateTime.Now; - } - //ReplyPlcData(positionName, config.TriggerValue); cameraIds.ForEach(c => { @@ -1191,6 +1241,162 @@ LogAsync(DateTime.Now, EnumHelper.LogLevel.Assist, $"鐩告満{camera.Name}娓呯悊缂撳瓨"); } }); + + //ReplyPlcData(positionSet, plcresult); + if (positionSet.IsLastPosition) + { + if (_ct != null) + { + UpdateCT(null, (float)((DateTime.Now - _ct.Value).TotalSeconds)); + } + _ct = DateTime.Now; + + if (M141Config.ISupMES && (M141Config.MESchannel == -1 || M141Config.MESchannel == 1)) + { + if (M141Config.numpro >= 50) + { + M141Config.numpro = 0; + } + + if (pList[0].Result == "OK") + { + M141Config.numpro++; + } + + //mqtt.demes(productList[0], M141Config.zwoid); + string Msgreceice = Task.Run(() => mqtt.MESForProduceAsync(pList[0], M141Config.mesnum2.ToString(),M141Config.numpro)).Result; + M141Config.mesnum2++; + if (Msgreceice == null) + { + LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"浜у搧{pList[0].PID}鏁版嵁涓婁紶MES寮傚父 杩斿洖鏁版嵁涓簄ull"); + } + else + { + try + { + var obj = JsonConvert.DeserializeObject<AutoLineMacBarcodeQueueBak>(Msgreceice); + + if (obj.zstatus == "200") + { + LogAsync(DateTime.Now, EnumHelper.LogLevel.Assist, $"浜у搧{pList[0].PID}鏁版嵁涓婁紶MES鎴愬姛 {Msgreceice}"); + } + else + { + LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"浜у搧{pList[0].PID}鏁版嵁涓婁紶MES澶辫触 {Msgreceice}"); + } + } + catch + { + LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"浜у搧{pList[0].PID}鏁版嵁涓婁紶MES寮傚父 {Msgreceice}"); + } + } + + + + int numplca = Convert.ToInt32(pList[0].SEQUENCE.Split('_')[0]); + LogAsync(DateTime.Now, EnumHelper.LogLevel.Assist, $"plc缁欏嚭鐨勪骇鍝佸簭鍙蜂负{numplca}"); + + lock (plcnumlock)//1-29999 + { + + if (PlcNumForAll == -1) + { + PlcNumForAll = numplca; + } + + int differ = numplca - PlcNumForAll; + + LogAsync(DateTime.Now, EnumHelper.LogLevel.Assist, $"涓や釜浜у搧涓棿鐨勫樊鍊糳iffer涓簕differ}"); + + if (differ > 1) + { + for (int i = PlcNumForAll + 1; i < numplca; i++) + { + try + { + var plist = mysqlhelper.GetProductList(i + "_1"); + ProductModel newp = new ProductModel(); + newp.SEQUENCE = plist[0].SEQUENCE; + newp.PID = plist[0].PID; + newp.BasketCode = plist[0].BasketCode; + newp.Zword = plist[0].Zword; + newp.Result = "NG"; + newp.SN = plist[0].SN; + var tems = Task.Run(() => mqtt.MESForProduceAsync(newp, M141Config.mesnum2.ToString(), M141Config.numpro)).Result; + M141Config.mesnum2++; + LogAsync(DateTime.Now, EnumHelper.LogLevel.Assist, $"鍓嶇珯NG鎺掓枡浜у搧{newp.PID}鏁版嵁涓婁紶,缁撴灉涓簕newp.Result}"); + + } + catch + { + + } + } + } + else if (differ == -29998 && differ == 1 && differ == 0) + { + LogAsync(DateTime.Now, EnumHelper.LogLevel.Assist, $"鐢熶骇杩囩▼涓湭澶卞幓浜у搧"); + } + else if ( differ<0 && differ>-29998) + { + LogAsync(DateTime.Now, EnumHelper.LogLevel.Assist, $"PlcNumForAll涓簕PlcNumForAll}锛宯umplca涓簕numplca}"); + //浜у搧浠庢柊璁℃暟鏃� + for (int i = PlcNumForAll + 1; i <= 29999; i++) + { + try + { + var plist = mysqlhelper.GetProductList(i + "_1"); + ProductModel newp = new ProductModel(); + newp.SEQUENCE = plist[0].SEQUENCE; + newp.PID = plist[0].PID; + newp.Zword = plist[0].Zword; + newp.BasketCode = plist[0].BasketCode; + newp.Result = "NG"; + newp.SN = plist[0].SN; + var tems = Task.Run(() => mqtt.MESForProduceAsync(newp, M141Config.mesnum2.ToString(), M141Config.numpro)).Result; + M141Config.mesnum2++; + LogAsync(DateTime.Now, EnumHelper.LogLevel.Assist, $"PlcNumForAll锛屽墠绔橬G鎺掓枡涓攑lc瑙﹀彂娓呴浂浜у搧{newp.PID}鏁版嵁涓婁紶,缁撴灉涓簕newp.Result}"); + } + catch + { + + } + } + for (int i = 1; i < numplca; i++) + { + try + { + var plist = mysqlhelper.GetProductList(i + "_1"); + ProductModel newp = new ProductModel(); + newp.SEQUENCE = plist[0].SEQUENCE; + newp.PID = plist[0].PID; + newp.BasketCode = plist[0].BasketCode; + newp.Zword = plist[0].Zword; + newp.Result = "NG"; + newp.SN = plist[0].SN; + var tems = Task.Run(() => mqtt.MESForProduceAsync(newp, M141Config.mesnum2.ToString(), M141Config.numpro)).Result; + M141Config.mesnum2++; + LogAsync(DateTime.Now, EnumHelper.LogLevel.Assist, $"numplca锛屽墠绔橬G鎺掓枡涓攑lc瑙﹀彂娓呴浂浜у搧{newp.PID}鏁版嵁涓婁紶,缁撴灉涓簕newp.Result}"); + } + catch + { + + } + } + } + + + + PlcNumForAll = numplca; + } + + } + + } + + //ReplyPlcData(positionName, config.TriggerValue); + + return pList; @@ -1226,6 +1432,7 @@ newp.SEQUENCE = p.SEQUENCE; newp.PID = p.PID; newp.BasketCode = p.BasketCode; + newp.Zword = p.Zword; newp.Result = p.Result; newp.SN = p.SN; -- Gitblit v1.8.0