using JinYuan.CommunicationLib.Enum; using JinYuan.DataConvertLib; using JinYuan.Helper; using JinYuan.MES.Enums; using JinYuan.Models; using JinYuan.VirtualDataLibrary; using PLCCommunication; using SqlSugar; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace JinYuan.ControlCenters { public partial class ControlCenter { private void UpAB(ref BGearEntity m) { for (int i = 0; i < 10; i++) { } } #region 保留2位小数 private float SaveTwoNum(float TNum) { //1.2333 0.998 int value = (int)(TNum * 1000) % 10; value = value > 4 ? 10 - value : -value; TNum += ((float)value / 1000); //保留3位小数 TNum = (float)(int)(TNum * 1000) / 1000; return TNum; } #endregion //不良类型 string NG_Type = ""; // 用于备注 string OK_NG = ""; // OK或NG #region 判断总结果 /// /// 判断总结果 /// //private int JudgmentResult(int A, int B, int C, int D, int E, int F, int G, int H, int I, int J, int K, int L, int M, int N) //{ // //条码,芯包重量,芯包侧厚,芯包CCD极性检测,电芯裁切粘连,电芯裁切毛刺,芯包铜焊印位置, // //芯包正面极耳撕裂H,芯包背面极耳撕裂,芯包正面极耳翻折J,芯包背面极耳翻折,测厚压力结果, // //焊前CCD检测结果,铝焊印位置判定结果 // //目前先判断条码,芯包重量,芯包侧厚,芯包CCD极性检测,芯包正面极耳撕裂,芯包正面极耳翻折 // int Result = 0; // OK_NG = "OK"; // if (A == 2 || B == 2 || C == 2 || D == 2 || H == 2 || J == 2) // { // //ed // Result = 2; // OK_NG = "NG"; // } // else if (A == 1 && B == 1 && C == 1 && D == 1 && H == 1 && J == 1) // { // Result = 1; // OK_NG = "OK"; // } // else // { // Result = 1; // OK_NG = "OK"; // } // if (A == 2) // { // NG_Type += "无条码_"; // Result = 2; // } // if (B == 2) // { // NG_Type += "芯包重量1NG_"; // //return 2; // Result = 2; // } // if (C == 2) // { // NG_Type += "芯包侧厚NG_"; // //return 2; // Result = 2; // } // if (D == 2) // { // NG_Type += "芯包CCD极性检测NG_"; // //return 2; // Result = 2; // } // //if (E == 2) // //{ // // NG_Type += "电芯裁切粘连NG_"; // // //return 2; // //} // //if (F == 2) // //{ // // NG_Type += "电芯裁切毛刺NG_"; // // //return 2; // //} // //if (G == 2) // //{ // // NG_Type += "芯包铜焊印位置判定NG_"; // // //return 2; // //} // if (H == 2) // { // NG_Type += "芯包正面极耳撕裂NG_"; // //return 2; // } // //if (I == 2) // //{ // // NG_Type += "芯包背面极耳撕裂NG_"; // // //return 2; // //} // if (J == 2) // { // NG_Type += "芯包正面极耳翻折NG_"; // //return 2; // } // //if (K == 2) // //{ // // NG_Type += "芯包背面极耳翻折NG_"; // // //return 2; // //} // if (L == 2) // { // NG_Type += "测厚压力NG_"; // //return 2; // } // if (M == 2) // { // NG_Type += "焊前CCD检测NG_"; // //return 2; // } // if (N == 2) // { // NG_Type += "铝焊印位置判定NG_"; // //return 2; // } // if (Result == 1) // { // NG_Type += "OK_"; // } // return Result; //} /// /// 判断总结果 /// private int JudgmentResult(int A, int B, int C, int D, int E, int F, int G, int H, int I, int J, int K, int L, int M, int N) { //条码,芯包重量,芯包侧厚,芯包CCD极性检测,电芯裁切粘连,电芯裁切毛刺,芯包铜焊印位置, //芯包正面极耳撕裂H,芯包背面极耳撕裂,芯包正面极耳翻折J,芯包背面极耳翻折,测厚压力结果, //焊前CCD检测结果,铝焊印位置判定结果 //目前先判断条码,芯包重量,芯包侧厚,芯包CCD极性检测,芯包正面极耳撕裂,芯包正面极耳翻折 int Result = 0; OK_NG = "OK"; if (A == 2 || B == 2 || C == 2 || D == 2 || H == 2 || J == 2) { //ed Result = 2; OK_NG = "NG"; } else if (A == 1 && B == 1 && C == 1 && D == 1 && H == 1 && J == 1) { Result = 1; OK_NG = "OK"; } else { Result = 1; OK_NG = "OK"; } if (A == 2) { NG_Type += "无条码_"; Result = 2; } if (B == 2) { NG_Type += "芯包重量1NG_"; //return 2; Result = 2; } if (C == 2) { NG_Type += "芯包侧厚NG_"; //return 2; Result = 2; } if (D == 2) { NG_Type += "芯包CCD极性检测NG_"; //return 2; Result = 2; } //if (E == 2) //{ // NG_Type += "电芯裁切粘连NG_"; // //return 2; //} //if (F == 2) //{ // NG_Type += "电芯裁切毛刺NG_"; // //return 2; //} //if (G == 2) //{ // NG_Type += "芯包铜焊印位置判定NG_"; // //return 2; //} if (H == 2) { NG_Type += "芯包正面极耳撕裂NG_"; //return 2; } //if (I == 2) //{ // NG_Type += "芯包背面极耳撕裂NG_"; // //return 2; //} if (J == 2) { NG_Type += "芯包正面极耳翻折NG_"; //return 2; } //if (K == 2) //{ // NG_Type += "芯包背面极耳翻折NG_"; // //return 2; //} if (L == 2) { NG_Type += "测厚压力NG_"; //return 2; } if (M == 2) { NG_Type += "焊前CCD检测NG_"; //return 2; } if (N == 2) { NG_Type += "铝焊印位置判定NG_"; //return 2; } if (Result == 1) { NG_Type += "OK_"; } return Result; } /// /// 判断总结果 /// private (short, string, string) JudgmentWGJResult(int A, int[,] B, int C) { short Result = 1; var OK_NG = "OK"; var NG_Type = ""; for (int i = 0; i < ConstValue.COUNT_CCD; i++) { if (B[C, i] != 1) { //1OK,2扫码NG,3MES反馈NG,4其他NG Result = 4; OK_NG = "NG"; NG_Type += $"{ConstValue.CCDNameArr[i]}(NG),"; } } if (A == 2) { NG_Type += "无条码,"; Result = 2; OK_NG = "NG"; } return (Result, OK_NG, NG_Type); } //下料不良代码 外观检 public (List, List) NGWGJcode(string[,] lstResult, int index) { List NGcodelist = new List(); List NGmessagelist = new List(); for (int i = 0; i < 20; i++) { var tempStr = lstResult[index, i]; if (tempStr == null) continue; if (tempStr.IndexOf(",") >= 0) { var arr = tempStr.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); foreach (var str in arr) { var strCode = str.PadLeft(3, '0'); if (NGcodelist.Contains($"PFVA{strCode}")) { continue; } NGcodelist.Add($"PFVA{strCode}"); var codeEntity = CommonMethods.listNgCodeEntity.FirstOrDefault(x => strCode == x.ngCode); if (codeEntity != null) { NGmessagelist.Add(codeEntity.ngMessage); } else { NGmessagelist.Add("未匹配不良编号"); } } } } return (NGcodelist, NGmessagelist); } #endregion #region 上料工位(数据处理) /// /// 上料工位 /// int JXCount = 0; Stopwatch sw2 = new Stopwatch(); //上料解析 private void FeedingStation(JYResult bArrays, object plcModel) { Group pf = plcModel as Group; if (bArrays == null) { CommonMethods.PlcLink.WriteInt16(pf.VarList[0].VarAddress, 0);//置位0 CommonMethods.AddLog(false, $"电芯进站PLC有触发信号,但无数据!");//存系统日志 LoggerHelp.WriteLog($"电芯进站PLC有触发信号,但无数据!", "Info"); } if (bArrays.IsSuccess && bArrays.Content != null) { sw2.Restart(); //解析数据 //1257 3个条码 List list = new List();//实体 List listBarCode = GetList(2, "");//电芯条码 //List listNum = GetList(1, "");//进站磁悬浮动子编号 List listRes = GetList(2, 0);//进站电芯反馈结果 byte[] bytes = bArrays.Content.ByteReverse();//高低位转换 byte[] bytes1 = bArrays.Content; // 从D2200开始 #region 数据解析 //电芯条码 //从bytes读取第二位参数到第三位参数的内容 0-19 第四位参数为格式 第五位为规则 //listBarCode[0] = StringLib.GetStringFromByteArrayByEncoding(bArrays.Content, 200, 40, System.Text.Encoding.ASCII).Replace('\0', ' ').Replace('\r', ' ').Replace(" ", "").Trim(); //listBarCode[1] = StringLib.GetStringFromByteArrayByEncoding(bArrays.Content, 240, 40, System.Text.Encoding.ASCII).Replace('\0', ' ').Replace('\r', ' ').Replace(" ", "").Trim(); //listBarCode[2] = StringLib.GetStringFromByteArrayByEncoding(bArrays.Content, 280, 40, System.Text.Encoding.ASCII).Replace('\0', ' ').Replace('\r', ' ').Replace(" ", "").Trim(); //listBarCode[3] = StringLib.GetStringFromByteArrayByEncoding(bArrays.Content, 320, 40, System.Text.Encoding.ASCII).Replace('\0', ' ').Replace('\r', ' ').Replace(" ", "").Trim(); listBarCode[0] = StringLib.GetStringFromByteArrayByEncoding(bytes, 0, 40, System.Text.Encoding.ASCII).Replace('\0', ' ').Replace('\r', ' ').Replace(" ", "").Trim(); listBarCode[1] = StringLib.GetStringFromByteArrayByEncoding(bytes, 40, 40, System.Text.Encoding.ASCII).Replace('\0', ' ').Replace('\r', ' ').Replace(" ", "").Trim(); //listBarCode[2] = StringLib.GetStringFromByteArrayByEncoding(bytes, 80, 40, System.Text.Encoding.ASCII).Replace('\0', ' ').Replace('\r', ' ').Replace(" ", "").Trim(); //listBarCode[0] = "TEST"; //listBarCode[1] = "TEST"; //listBarCode[2] = "TEST"; //listBarCode[3] = "TEST"; #endregion for (int i = 0; i < 2; i++) { //有无条码标志 int CodeFlag = 1; //极限件标志 int ChallengeFlag = 0; AGearEntity m = new AGearEntity(); try { //判断条码是否为空 if (listBarCode[i] == null || listBarCode[i] == "" || listBarCode[i] == "ERROR") { CodeFlag = 0; //continue; } m.TestTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); m.BarCode = listBarCode[i]; //判断是否极限件 查询极限件数据 var EX = CommonMethods.db.QuerySqlList(CommonMethods.dBSQL.GetChallengeCode(listBarCode[i])); for (int j = 0; j < EX.Count; j++) { if (string.Compare(EX[j].ChallengeBarCode, listBarCode[i]) == 0) { m.Remark += "(极限件," + EX[j].CodeMessage + "," + EX[j].WeldingCCD + ")"; ChallengeFlag = 1; } } if (CodeFlag == 1) { List MesMessage = new List(); List mesResType = new List(); if (CommonMethods.mesConfig.isUpMes) { string url = CommonMethods.mesConfig.InPutStationMesUrl; string siteCode = CommonMethods.mesConfig.siteCode; string lineCode = CommonMethods.mesConfig.lineCode; string equipNum = CommonMethods.mesConfig.equipNum; string materialCode = CommonMethods.mesConfig.MaterialCode; string userName = CommonMethods.mesConfig.mesUserName; string modelName = CommonMethods.mesConfig.ModelName; string MesMessage1 = ""; MesResType mesResType1 = MesResType.A; bool Res = CommonMethods.hbgMes.SingleCellInStation(url, siteCode, lineCode, modelName, equipNum, materialCode, userName, listBarCode[i], ref MesMessage1, ref mesResType1); if (MesMessage1.Contains("发生一个或多个错误")) { MesMessage1 = "上传失败"; } else { m.Flag = 1; } if (Res) { m.Result = "OK"; listRes[i] = 1; m.Remark += MesMessage1; } else { m.Result = "NG"; switch (mesResType1) { case MesResType.A:// 停线,设备报警停机 //listRes[i] = 10; listRes[i] = 3; m.Remark += "MES NG"; break; case MesResType.B: //listRes[i] = 9; listRes[i] = 3; m.Remark += "MES NG"; break; case MesResType.C: //listRes[i] = 1; listRes[i] = 3; m.Remark += "MES NG"; break; case MesResType.D: listRes[i] = 1; m.Remark += "MES OK"; break; default: listRes[i] = 3; m.Remark += "MES NG"; break; } if (CommonMethods.sysConfig.OKSwitching) { //调试发OK listRes[i] = 1; //m.Result = "OK"; } m.Remark += MesMessage1; } } else { m.Flag = 0; m.ID = i + 1; m.CNum = m.ID.ToString(); //电芯反馈结果 listRes[i] = 1; m.Result = "OK"; m.Remark += "本地存储"; m.UpState = "未上传"; // m.Remark = "本地存储"; //if (CommonMethods.sysConfig.OKSwitching) //{ // //调试发OK // listRes[j] = 1; // m.Result = "OK"; //} //list.Add(m); } } else { //无条码不上传 m.Flag = 0; m.Result = "NG"; listRes[i] = 2; m.Remark += "无条码"; } //极限件发3给PLC //需要沟通极限 发多少给plc if (ChallengeFlag == 1) { if (string.Compare(EX[0].WeldingCCD, "焊前CCD") == 0) { listRes[i] = 3; } if (string.Compare(EX[0].WeldingCCD, "焊后CCD") == 0) { listRes[i] = 4; } } if (m.Flag == 1) m.UpState = "已上传"; else m.UpState = "未上传"; list.Add(m); } catch (Exception ex) { LoggerHelp.WriteLog($"外观检测进站线程数据解析:{ex}", "SysErrorLog"); } } //if (CommonMethods.sysConfig.OKSwitching) //{ // //调试发OK // listRes[0] = 1; // listRes[1] = 1; // listRes[2] = 1; // listRes[3] = 1; // //m.Result = "OK"; //} JYResult result = CommonMethods.PlcLink.WriteValue("D2100", listRes[0], Data_Type.Short);//调试结果写入PLC CommonMethods.PlcLink.WriteValue("D2101", listRes[1], Data_Type.Short);//调试结果写入PLC //CommonMethods.PlcLink.WriteValue("D2102", listRes[2], Data_Type.Short);//调试结果写入PLC //CommonMethods.PlcLink.WriteValue("D2103", listRes[3], Data_Type.Short);//调试结果写入PLC //CommonMethods.PlcLink.WriteInt16("D2100", listRes[0]);//调试结果OK写入PLC if (result != null) { string strres = $"外观检工位发送给PLC: D2100={listRes[0]},D2101={listRes[1]},"; CommonMethods.AddDataMonitorLog(0, strres); } //写入·结果反馈 //JYResult result = CommonMethods.PlcLink.WriteValue("D2100", listRes.ToArray(), Data_Type.ArrShort);//判断结果写入PLC //JYResult result = CommonMethods.PlcLink.WriteValue("D2100", listRes.ToArray(), Data_Type.ArrShort);//调试结果OK写入PLC Task.Run(() => { SendDateMQTT.Instance.EnterandExitSendMessge(0); }); //读取结果显示 //数据存储 -异步处理 Task.Run(() => { SaveFeedingData(list); }); CommonMethods.PlcLink.WriteInt16(pf.VarList[0].VarAddress, 0);//置位0 sw2.Stop(); ////输出上料数据处理耗时: CommonMethods.AddDataMonitorLog(0, $"外观检测进站共耗时:{sw2.Elapsed.TotalMilliseconds}ms"); } } #region 保存上料数据 /// /// 保存上料数据到数据 /// /// private void SaveFeedingData(List list) { //数据的保存 try { if (list != null && list.Count > 0) { //数据显示 List Blist = list; int i = 0; string strRes = ""; foreach (AGearEntity m in list) { if (true) { //int b1 = CommonMethods.dbServer.Delete(it => it.containerCode == m.DiRFID); Thread.Sleep(10); //int b2 = CommonMethods.dbServer.Delete(it => it.containerCode == m.GaoRFID); //int b1 = CommonMethods.dbServer.Delete(it => it.containerCode == m.BarCode); bool b = CommonMethods.db.AddReturnBool(m); //strRes = b1 > 0 ? ",远删Yes" : ",远删No"; strRes += b; DataTurnover server = new DataTurnover { equipNum = CommonMethods.mesConfig.equipNum, containerCode = m.BarCode, identification = m.BarCode, message = m.Result, Time = DateTime.Now, }; try { //bool res = CommonMethods.dbServer.AddReturnBool(server); //strRes += res == true ? ",远存Yes" : ",远存No"; } catch (Exception ex) { JYResult result = CommonMethods.PlcLink.WriteValue("D80", 1, Data_Type.Short);//反馈PLC结果 CommonMethods.AddDataMonitorLog(1, $"服务器连接失败!解决办法:1、请检查MES网络,2、查看服务器是否正常!!"); LoggerHelp.WriteLog($"服务器连接失败:{ex}", "系统报错"); } } else { strRes = ",不存储"; } //m.Remark = m.Remark + strRes; Blist[i].Remark = m.Remark; i++; } //数据显示 CommonMethods.ShowFeedingDelegate.Invoke(Blist); } else { LoggerHelp.WriteLog($"电芯进站数据List为空", "SysErrorLog"); } } catch (Exception ex) { LoggerHelp.WriteLog($"外观检测上料保存处理异常:{ex}", "SysErrorLog"); } } #endregion #endregion #region NG出站解析 private void NGStation(JYResult bArrays, object plcModel) { Group pf = plcModel as Group; if (bArrays == null) { CommonMethods.PlcLink.WriteInt16(pf.VarList[0].VarAddress, 0);//置位0 CommonMethods.AddLog(false, $"NG出站PLC有触发信号,但无数据!"); LoggerHelp.WriteLog($"NG出站PLC有触发信号,但无数据!", "SysErrorLog"); } } #endregion #region 下料工位(数据处理) //int OutCount = 0; #region //下料解析 预焊检 //private void BlankingStation_YHJ(JYResult bArrays, object plcModel) //{ // Group pf = plcModel as Group; // if (bArrays == null) // { // CommonMethods.PlcLink.WriteInt16(pf.VarList[0].VarAddress, 0);//置位0 // CommonMethods.AddLog(false, $"电芯出站PLC有触发信号,但无数据!"); // LogHelper.Instance.WriteLog($"电芯出站PLC有触发信号,但无数据!", "SysErrorLog"); // } // if (bArrays.IsSuccess && bArrays.Content != null) // { // Random random = new Random(); // //解析数据 // sw2.Restart(); // #region 数据变量定义 // List list = new List();//实体 // //int[] MyRes = new int[2];//AB反馈结果 // int[] MyRes = new int[3];//三个外观检测反馈结果 // #endregion // //高低位转换 // byte[] bytes = bArrays.Content.ByteReverse(); // byte[] bytes1 = bArrays.Content; // List listBarCode = GetList(3, "");//电芯条码 // //List listNum = GetList(1, "");//进站磁悬浮动子编号 // List listRes = GetList(3, 0);//出站电芯反馈结果 // //反馈结果 // #region 电芯解析 // //电芯解析 从3200 开始 // listBarCode[0] = StringLib.GetStringFromByteArrayByEncoding(bArrays.Content, 0, 40, System.Text.Encoding.ASCII).Replace('\0', ' ').Replace('\r', ' ').Replace(" ", "").Trim(); // listBarCode[1] = StringLib.GetStringFromByteArrayByEncoding(bArrays.Content, 40, 40, System.Text.Encoding.ASCII).Replace('\0', ' ').Replace('\r', ' ').Replace(" ", "").Trim(); // listBarCode[2] = StringLib.GetStringFromByteArrayByEncoding(bArrays.Content, 80, 40, System.Text.Encoding.ASCII).Replace('\0', ' ').Replace('\r', ' ').Replace(" ", "").Trim(); // #region 上传MES // //D3100起 // for (int i = 0; i < 3; i++) // { // try // { // BGearEntity m = new BGearEntity(); // AGearEntity TT = new AGearEntity(); // //极限件标志 // int ChallengeFlag = 0; // if (i == 0) // { // //为了同时上传AB消息而增加,后续可能不需要 // UpAB(ref m); // m.A_B = "A芯包"; // //芯包信息1 D3300~D3326 // for (int j = 0; j < 27; j++) // { // m.list_Data1[i, j] = ShortLib.GetShortFromByteArray(bArrays.Content, 280 + j * 2, DataFormat.CDAB); // } // //芯包信息2 D3330~D3356 // for (int j = 0; j < 27; j++) // { // m.list_Data2[i, j] = ShortLib.GetShortFromByteArray(bArrays.Content, 280 + j * 2, DataFormat.CDAB); // } // //芯包信息3 D3360~D3386 // for (int j = 0; j < 27; j++) // { // m.list_Data3[i, j] = ShortLib.GetShortFromByteArray(bArrays.Content, 280 + j * 2, DataFormat.CDAB); // } // //A芯包信息1 D3240~D3262 // for (int j = 0; j < 28; j++) // { // m.list_Data1[i, j] = ShortLib.GetShortFromByteArray(bArrays.Content, 280 + j * 2, DataFormat.CDAB); // } // //A芯包信息2(焊机相关次数) D3300~D3326 // for (int j = 0; j < 19; j++) // { // m.list_Data2[i, j] = IntLib.GetIntFromByteArray(bArrays.Content, 400 + j * 4, DataFormat.CDAB); // } // //A芯包信息3(设定值) D3400~D3506 // for (int j = 0; j < 54; j++) // { // m.list_Data3[i, j] = FloatLib.GetFloatFromByteArray(bArrays.Content, 600 + j * 4, DataFormat.CDAB); // } // //A芯包信息4(实际值) D3550~D3634 // for (int j = 0; j < 47; j++) // { // m.list_Data4[i, j] = FloatLib.GetFloatFromByteArray(bArrays.Content, 900 + j * 4, DataFormat.CDAB); // } // for (int j = 0; j <1; j++) // { // m.list_pan[i, j] = ShortLib.GetShortFromByteArray(bArrays.Content,1088 + j * 2, DataFormat.CDAB); // } // } // else // { // m.A_B = "B芯包"; // //B芯包信息1 D3740~D3762 // for (int j = 0; j < 28; j++) // { // m.list_Data1[i, j] = ShortLib.GetShortFromByteArray(bArrays.Content, 1280 + j * 2, DataFormat.CDAB); // } // //B芯包信息2(焊机相关次数) D3800~D3826 // for (int j = 0; j < 19; j++) // { // m.list_Data2[i, j] = IntLib.GetIntFromByteArray(bArrays.Content, 1400 + j * 4, DataFormat.CDAB); // } // //B芯包信息3(设定值) D3900~D4006 // for (int j = 0; j < 54; j++) // { // m.list_Data3[i, j] = FloatLib.GetFloatFromByteArray(bArrays.Content, 1600 + j * 4, DataFormat.CDAB); // } // //B芯包信息4(实际值) D4050~D4134 // for (int j = 0; j < 47; j++) // { // m.list_Data4[i, j] = FloatLib.GetFloatFromByteArray(bArrays.Content, 1900 + j * 4, DataFormat.CDAB); // } // for (int j = 0; j < 1; j++) // { // m.list_pan[i, j] = ShortLib.GetShortFromByteArray(bArrays.Content, 1188 + j * 2, DataFormat.CDAB); // } // } // //芯包扫码时间 // //m.ScanTime[i] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // //芯包条码 D3200~D3239 // m.CSBYHCODEA = StringLib.GetStringFromByteArrayByEncoding(bytes1, 200 + 40 * i, 40, System.Text.Encoding.ASCII).Replace('\0', ' ').Replace('\r', ' ').Replace(" ", "").Trim(); // //m.CSBYHCODEA = "TEST"; // var EX = CommonMethods.db.QuerySqlList(CommonMethods.dBSQL.GetChallengeCode(m.CSBYHCODEA)); // for (int j = 0; j < EX.Count; j++) // { // if (string.Compare(EX[j].ChallengeBarCode, m.CSBYHCODEA) == 0) // { // m.Remark += "(极限件," + EX[j].CodeMessage + "," + EX[j].WeldingCCD + ")"; // ChallengeFlag = 1; // } // } // //查询进站时间数据 // var w = CommonMethods.db.QuerySqlList(CommonMethods.dBSQL.GetInTime(m.CSBYHCODEA)); // //获取新一行数据 // if (w.Count > 0) // TT = w[w.Count - 1]; // // // //if (w.Count > 0) // // TT = w[0]; // if (TT.TestTime != null) // m.ScanTime[0] = TT.TestTime; // else // m.ScanTime[0] = ""; // //芯包出站时间 // m.ScanTime[1] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // //复投次数 // m.RethrowNum = 0; // if (w.Count > 0) // { // int cccc = w.Count; // m.RethrowNum = cccc - 1; // } // int Code_NG = 0;//条码有无标志 1为有,2为无 // //判断有无条码 // if (m.CSBYHCODEA != null && m.CSBYHCODEA != "" && m.CSBYHCODEA != "ERROR") // Code_NG = 1; // else // Code_NG = 2; // //m.ChannelNo = m.MyNo[i]; // //m.TestTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // //不良代码判定 // List NGcodeList = new List(); // NGcodeList = NGcode(m.list_Data1[i, 10], m.list_Data1[i, 11], m.list_Data1[i, 12], m.list_Data1[i, 15], m.list_Data1[i, 26], m.list_Data1[i, 16] // , m.list_Data1[i, 17], m.list_Data1[i, 18], m.list_Data1[i, 19], m.list_Data1[i, 23], m.list_Data1[i, 24], m.list_Data1[i, 25], m.list_Data1[i, 27]); // //芯包重量1判定结果 // if (m.list_Data1[i, 10] == 1) // m.CSBYHWEIGHTRESULTA1 = "OK"; // else if (m.list_Data1[i, 10] == 2) // m.CSBYHWEIGHTRESULTA1 = "NG"; // else // m.CSBYHWEIGHTRESULTA1 = "OK"; // //芯包侧厚判定结果 // if (m.list_Data1[i, 11] == 1) // m.CSBYHTHICKNESSTESTJUDGERESULTA = "OK"; // else if (m.list_Data1[i, 11] == 2) // m.CSBYHTHICKNESSTESTJUDGERESULTA = "NG"; // else // m.CSBYHTHICKNESSTESTJUDGERESULTA = "OK"; // //芯包CCD极性检测结果 // if (m.list_Data1[i, 12] == 1) // m.CSBYHPOLARITYRESULTA = "OK"; // else if (m.list_Data1[i, 12] == 2) // m.CSBYHPOLARITYRESULTA = "NG"; // else // m.CSBYHPOLARITYRESULTA = "OK"; // //电芯裁切粘连判定结果 // if (m.list_Data1[i, 13] == 1) // m.CSBYHCUTADHESIONJUDGERESULTA = "OK"; // else if (m.list_Data1[i, 13] == 2) // m.CSBYHCUTADHESIONJUDGERESULTA = "NG"; // else // m.CSBYHCUTADHESIONJUDGERESULTA = "OK"; // //电芯裁切毛刺判定结果 // if (m.list_Data1[i, 14] == 1) // m.CSBYHCUTBURRJUDGERESULTA = "OK"; // else if (m.list_Data1[i, 14] == 2) // m.CSBYHCUTBURRJUDGERESULTA = "NG"; // else // m.CSBYHCUTBURRJUDGERESULTA = "OK"; // //芯包铜焊印位置判定结果1 // if (m.list_Data1[i, 15] == 1) // { // m.CSBYHSOLDERJUDGERESULTA = "OK"; // } // else if (m.list_Data1[i, 15] == 2) // { // m.CSBYHSOLDERJUDGERESULTA = "NG"; // } // else // { // m.CSBYHSOLDERJUDGERESULTA = "OK"; // } // //芯包铜焊印位置判定结果2 // if (m.list_Data1[i, 26] == 1) // { // m.CSBYHSOLDERJUDGERESULTA2 = "OK"; // } // else if (m.list_Data1[i, 26] == 2) // { // m.CSBYHSOLDERJUDGERESULTA2 = "NG"; // } // else // { // m.CSBYHSOLDERJUDGERESULTA2 = "OK"; // } // //芯包正面极耳撕裂判定结果 // if (m.list_Data1[i, 16] == 1) // m.CSBYHFRONTEARCRACKLEJUDGERESULTA = "OK"; // else if (m.list_Data1[i, 16] == 2) // m.CSBYHFRONTEARCRACKLEJUDGERESULTA = "NG"; // else // m.CSBYHFRONTEARCRACKLEJUDGERESULTA = "OK"; // //芯包背面极耳撕裂判定结果 // if (m.list_Data1[i, 17] == 1) // m.CSBYHBACKEARCRACKLEJUDGERESULTA = "OK"; // else if (m.list_Data1[i, 17] == 2) // m.CSBYHBACKEARCRACKLEJUDGERESULTA = "NG"; // else // m.CSBYHBACKEARCRACKLEJUDGERESULTA = "OK"; // //芯包正面极耳翻折检测结果 // if (m.list_Data1[i, 18] == 1) // m.CSBYHFRONTEARFLODINGRESULTA = "OK"; // else if (m.list_Data1[i, 18] == 2) // m.CSBYHFRONTEARFLODINGRESULTA = "NG"; // else // m.CSBYHFRONTEARFLODINGRESULTA = "OK"; // //芯包背面极耳翻折检测结果 // if (m.list_Data1[i, 19] == 1) // m.CSBYHBACKEARFLODINGRESULTA = "OK"; // else if (m.list_Data1[i, 19] == 2) // m.CSBYHBACKEARFLODINGRESULTA = "NG"; // else // m.CSBYHBACKEARFLODINGRESULTA = "OK"; // //电芯测厚压力结果 // if (m.list_Data1[i, 23] == 1) // m.ThicknessPressureResult = "OK"; // else if (m.list_Data1[i, 23] == 2) // m.ThicknessPressureResult = "NG"; // else // m.ThicknessPressureResult = "OK"; // //芯包焊前CCD检测结果 // if (m.list_Data1[i, 24] == 1) // m.PreweldResult = "OK"; // else if (m.list_Data1[i, 24] == 2) // m.PreweldResult = "NG"; // else // m.PreweldResult = "OK"; // //芯包铝焊印位置判定结果1 // if (m.list_Data1[i, 25] == 1) // { // m.AluminiumWeldPositionResult1 = "OK"; // } // else if (m.list_Data1[i, 25] == 2) // { // m.AluminiumWeldPositionResult1 = "NG"; // } // else // { // m.AluminiumWeldPositionResult1 = "OK"; // } // //芯包铝焊印位置判定结果2 // if (m.list_Data1[i, 27] == 1) // { // m.AluminiumWeldPositionResult2 = "OK"; // } // else if (m.list_Data1[i, 27] == 2) // { // m.AluminiumWeldPositionResult2 = "NG"; // } // else // { // m.AluminiumWeldPositionResult2 = "OK"; // } // m.CSBYHASCANNINGTIME = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // //m.RingA = m.list_Data1[i, 0];//无环轨编号,不显示 // m.CSBYHWEIGHTNOA1 = m.list_Data1[i, 1]; // m.CSBYHTHICKNESSTESTSTATIONNOA = m.list_Data1[i, 2]; // m.CSBYHTOOLNOA = m.list_Data1[i, 3]; // m.CSBYHCUWELDINGSTATIONNOA1 = m.list_Data1[i, 4]; // m.CSBYHCUWELDINGSTATIONNOA2 = m.list_Data1[i, 5]; // m.CSBYHCUWELDINGSTATIONNOA3 = m.list_Data1[i, 6]; // m.CSBYHALWELDINGSTATIONNOA1 = m.list_Data1[i, 7]; // m.CSBYHALWELDINGSTATIONNOA2 = m.list_Data1[i, 8]; // m.CSBYHALWELDINGSTATIONNOA3 = m.list_Data1[i, 9]; // m.CSBYHCUTABCUTTERNOA = m.list_Data1[i, 21]; // m.CSBYHALTABCUTTERNOA = m.list_Data1[i, 22]; // m.CSBYHCUWELDHEADCOUNTA1 = m.list_Data2[i, 0]; // m.CSBYHCUWELDHEADCOUNTA2 = m.list_Data2[i, 2]; // m.CSBYHCUWELDHEADCOUNTA3 = m.list_Data2[i, 4]; // m.CSBYHCUWELDBASECOUNTA1 = m.list_Data2[i, 1]; // m.CSBYHCUWELDBASECOUNTA2 = m.list_Data2[i, 3]; // m.CSBYHCUWELDBASECOUNTA3 = m.list_Data2[i, 5]; // m.CSBYHALWELDHEADCOUNTA1 = m.list_Data2[i, 6]; // m.CSBYHALWELDHEADCOUNTA2 = m.list_Data2[i, 8]; // m.CSBYHALWELDHEADCOUNTA3 = m.list_Data2[i, 10]; // m.CSBYHALWELDBASECOUNTA1 = m.list_Data2[i, 7]; // m.CSBYHALWELDBASECOUNTA2 = m.list_Data2[i, 9]; // m.CSBYHALWELDBASECOUNTA3 = m.list_Data2[i, 11]; // m.CSBYHCUTABCUTTERCOUNTA = m.list_Data2[i, 12]; // m.CSBYHALTABCUTTERCOUNTA = m.list_Data2[i, 13]; // m.CopperWeldHeadLife = m.list_Data2[i, 14]; // m.CopperWeldSeatLife = m.list_Data2[i, 15]; // m.AluminiumWeldHeadLife = m.list_Data2[i, 16]; // m.AluminiumWeldSeatLife = m.list_Data2[i, 17]; // m.CuttingKnifeLife = m.list_Data2[i, 18]; // m.CSBYHPROCESSNAME = "超声波预焊接"; // m.CSBYHSCHEDULE = CommonMethods.strClass; // m.CSBYHINSTATIONTIME = m.ScanTime[0]; // m.CSBYHOUTSTATIONTIME = m.ScanTime[1]; // m.CSBYHWEIGHTA1MAXSETTING = SaveTwoNum(m.list_Data3[i, 0]); // m.CSBYHWEIGHTA1MINSETTING = SaveTwoNum(m.list_Data3[i, 1]); // m.CSBYHTHICKNESSTESTPRESSUREMAXSETTINGA = SaveTwoNum(m.list_Data3[i, 2]); // m.CSBYHTHICKNESSTESTPRESSUREMINSETTINGA = SaveTwoNum(m.list_Data3[i, 3]); // m.CSBYHTHICKNESSTESTPRESSUREMAXSIZEA = SaveTwoNum(m.list_Data3[i, 4]); // m.CSBYHTHICKNESSTESTPRESSUREMINSIZEA = SaveTwoNum(m.list_Data3[i, 5]); // m.CSBYHCUWELDINGPRESSUREMAXSETTING1 = SaveTwoNum(m.list_Data3[i, 6]);//压力最大 // m.CSBYHCUWELDINGPRESSUREMINSETTING = SaveTwoNum(m.list_Data3[i, 7]);//压力最小值 // m.CSBYHCUWELDINGPRESSUREMAXSETTING2 = SaveTwoNum(m.list_Data3[i, 14]);//压力只有一个设定值,显示该值 // m.CSBYHCUWELDINGPRESSUREMAXSETTING3 = SaveTwoNum(m.list_Data3[i, 22]);//压力只有一个设定值,显示该值 // m.CSBYHCUWELDINGPOWERMAXSETTING1 = SaveTwoNum(m.list_Data3[i, 8]); // m.CSBYHCUWELDINGPOWERMAXSETTING2 = SaveTwoNum(m.list_Data3[i, 16]); // m.CSBYHCUWELDINGPOWERMAXSETTING3 = SaveTwoNum(m.list_Data3[i, 24]); // m.CSBYHCUWELDINGPOWERMINSETTING1 = SaveTwoNum(m.list_Data3[i, 9]); // m.CSBYHCUWELDINGPOWERMINSETTING2 = SaveTwoNum(m.list_Data3[i, 17]); // m.CSBYHCUWELDINGPOWERMINSETTING3 = SaveTwoNum(m.list_Data3[i, 25]); // m.CSBYHCUWELDINGENERGYMAXSETTING1 = SaveTwoNum(m.list_Data3[i, 10]); // m.CSBYHCUWELDINGENERGYMAXSETTING2 = SaveTwoNum(m.list_Data3[i, 18]); // m.CSBYHCUWELDINGENERGYMAXSETTING3 = SaveTwoNum(m.list_Data3[i, 26]); // m.CSBYHCUWELDINGENERGYMINSETTING1 = SaveTwoNum(m.list_Data3[i, 11]); // m.CSBYHCUWELDINGENERGYMINSETTING2 = SaveTwoNum(m.list_Data3[i, 19]); // m.CSBYHCUWELDINGENERGYMINSETTING3 = SaveTwoNum(m.list_Data3[i, 27]); // m.CSBYHCUWELDINGAMPLITUDEMAXSETTING1 = SaveTwoNum(m.list_Data3[i, 12]); // m.CSBYHCUWELDINGAMPLITUDEMAXSETTING2 = SaveTwoNum(m.list_Data3[i, 20]); // m.CSBYHCUWELDINGAMPLITUDEMAXSETTING3 = SaveTwoNum(m.list_Data3[i, 28]); // m.CSBYHCUWELDINGAMPLITUDEMINSETTING1 = SaveTwoNum(m.list_Data3[i, 13]); // m.CSBYHCUWELDINGAMPLITUDEMINSETTING2 = SaveTwoNum(m.list_Data3[i, 21]); // m.CSBYHCUWELDINGAMPLITUDEMINSETTING3 = SaveTwoNum(m.list_Data3[i, 29]); // m.CSBYHALWELDINGPRESSUREMAXSETTING1 = SaveTwoNum(m.list_Data3[i, 30]);// // m.CSBYHALWELDINGPRESSUREMINSETTING = SaveTwoNum(m.list_Data3[i, 31]);// // m.CSBYHALWELDINGPRESSUREMAXSETTING2 = SaveTwoNum(m.list_Data3[i, 38]);// // m.CSBYHALWELDINGPRESSUREMAXSETTING3 = SaveTwoNum(m.list_Data3[i, 46]);// // m.CSBYHALWELDINGPOWERMAXSETTING1 = SaveTwoNum(m.list_Data3[i, 32]); // m.CSBYHALWELDINGPOWERMAXSETTING2 = SaveTwoNum(m.list_Data3[i, 40]); // m.CSBYHALWELDINGPOWERMAXSETTING3 = SaveTwoNum(m.list_Data3[i, 48]); // m.CSBYHALWELDINGPOWERMINSETTING1 = SaveTwoNum(m.list_Data3[i, 33]); // m.CSBYHALWELDINGPOWERMINSETTING2 = SaveTwoNum(m.list_Data3[i, 41]); // m.CSBYHALWELDINGPOWERMINSETTING3 = SaveTwoNum(m.list_Data3[i, 49]); // m.CSBYHALWELDINGENERGYMAXSETTING1 = SaveTwoNum(m.list_Data3[i, 34]); // m.CSBYHALWELDINGENERGYMAXSETTING2 = SaveTwoNum(m.list_Data3[i, 42]); // m.CSBYHALWELDINGENERGYMAXSETTING3 = SaveTwoNum(m.list_Data3[i, 50]); // m.CSBYHALWELDINGENERGYMINSETTING1 = SaveTwoNum(m.list_Data3[i, 35]); // m.CSBYHALWELDINGENERGYMINSETTING2 = SaveTwoNum(m.list_Data3[i, 43]); // m.CSBYHALWELDINGENERGYMINSETTING3 = SaveTwoNum(m.list_Data3[i, 51]); // m.CSBYHALWELDINGAMPLITUDEMAXSETTING1 = SaveTwoNum(m.list_Data3[i, 36]); // m.CSBYHALWELDINGAMPLITUDEMAXSETTING2 = SaveTwoNum(m.list_Data3[i, 44]); // m.CSBYHALWELDINGAMPLITUDEMAXSETTING3 = SaveTwoNum(m.list_Data3[i, 52]); // m.CSBYHALWELDINGAMPLITUDEMINSETTING1 = SaveTwoNum(m.list_Data3[i, 37]); // m.CSBYHALWELDINGAMPLITUDEMINSETTING2 = SaveTwoNum(m.list_Data3[i, 45]); // m.CSBYHALWELDINGAMPLITUDEMINSETTING3 = SaveTwoNum(m.list_Data3[i, 53]); // //m.pan = m.list_pan[i, 0]; // m.CSBYHWEIGHTA1 = SaveTwoNum(m.list_Data4[i, 0]); // m.CSBYHTHICKNESSTESTPRESSUREA = SaveTwoNum(m.list_Data4[i, 1]); // m.CSBYHTHICKNESSTESTPRESSURESIZEA = SaveTwoNum(m.list_Data4[i, 2]); // m.CSBYHCUTABLENGTHA = SaveTwoNum(m.list_Data4[i, 3]); // m.CSBYHCUTABWIDTHA = SaveTwoNum(m.list_Data4[i, 4]); // m.CSBYHALTABLENGTHA = SaveTwoNum(m.list_Data4[i, 5]); // m.CSBYHALTABWIDTHA = SaveTwoNum(m.list_Data4[i, 6]); // m.CSBYHCUTADHESIONRESULTA = SaveTwoNum(m.list_Data4[i, 7]); // m.CSBYHCUTBURRRESULTA = SaveTwoNum(m.list_Data4[i, 8]); // m.CSBYHTOPTOSOLDERDISTANCEA = SaveTwoNum(m.list_Data4[i, 9]); // m.CSBYHTOPTOSOLDERDISTANCEA2 = SaveTwoNum(m.list_Data4[i, 45]); // m.CSBYHSOLDERTOEARDISTANCEA = SaveTwoNum(m.list_Data4[i, 10]); // m.CSBYHFRONTEARCRACKLERESULTA = SaveTwoNum(m.list_Data4[i, 11]); // m.CSBYHBACKEARCRACKLERESULTA = SaveTwoNum(m.list_Data4[i, 12]); // m.AluminumToWeld1 = SaveTwoNum(m.list_Data4[i, 44]); // m.AluminumToWeld2 = SaveTwoNum(m.list_Data4[i, 46]); // m.CSBYHCUPRESSUREA1 = SaveTwoNum(m.list_Data4[i, 13]); // m.CSBYHCUPOWERA1 = SaveTwoNum(m.list_Data4[i, 14]); // m.CSBYHCUENERGYA1 = SaveTwoNum(m.list_Data4[i, 15]); // m.CSBYHCUAMPLITUDEA1 = SaveTwoNum(m.list_Data4[i, 16]); // m.CSBYHCUTIMEA1 = SaveTwoNum(m.list_Data4[i, 17]); // m.CSBYHCUPRESSUREA2 = SaveTwoNum(m.list_Data4[i, 18]); // m.CSBYHCUPOWERA2 = SaveTwoNum(m.list_Data4[i, 19]); // m.CSBYHCUENERGYA2 = SaveTwoNum(m.list_Data4[i, 20]); // m.CSBYHCUAMPLITUDEA2 = SaveTwoNum(m.list_Data4[i, 21]); // m.CSBYHCUTIMEA2 = SaveTwoNum(m.list_Data4[i, 22]); // m.CSBYHCUPRESSUREA3 = SaveTwoNum(m.list_Data4[i, 23]); // m.CSBYHCUPOWERA3 = SaveTwoNum(m.list_Data4[i, 24]); // m.CSBYHCUENERGYA3 = SaveTwoNum(m.list_Data4[i, 25]); // m.CSBYHCUAMPLITUDEA3 = SaveTwoNum(m.list_Data4[i, 26]); // m.CSBYHCUTIMEA3 = SaveTwoNum(m.list_Data4[i, 27]); // m.CSBYHALPRESSUREA1 = SaveTwoNum(m.list_Data4[i, 28]); // m.CSBYHALPOWERA1 = SaveTwoNum(m.list_Data4[i, 29]); // m.CSBYHALENERGYA1 = SaveTwoNum(m.list_Data4[i, 30]); // m.CSBYHALAMPLITUDEA1 = SaveTwoNum(m.list_Data4[i, 31]); // m.CSBYHALTIMEA1 = SaveTwoNum(m.list_Data4[i, 32]); // m.CSBYHALPRESSUREA2 = SaveTwoNum(m.list_Data4[i, 33]); // m.CSBYHALPOWERA2 = SaveTwoNum(m.list_Data4[i, 34]); // m.CSBYHALENERGYA2 = SaveTwoNum(m.list_Data4[i, 35]); // m.CSBYHALAMPLITUDEA2 = SaveTwoNum(m.list_Data4[i, 36]); // m.CSBYHALTIMEA2 = SaveTwoNum(m.list_Data4[i, 37]); // m.CSBYHALPRESSUREA3 = SaveTwoNum(m.list_Data4[i, 38]); // m.CSBYHALPOWERA3 = SaveTwoNum(m.list_Data4[i, 39]); // m.CSBYHALENERGYA3 = SaveTwoNum(m.list_Data4[i, 40]); // m.CSBYHALAMPLITUDEA3 = SaveTwoNum(m.list_Data4[i, 41]); // m.CSBYHALTIMEA3 = SaveTwoNum(m.list_Data4[i, 42]); // m.ThicknessMeasureDisplacement = m.list_Data4[i, 43]; // //条码,芯包重量,芯包侧厚,芯包CCD极性检测,电芯裁切粘连,电芯裁切毛刺,芯包焊印位置, // //芯包正面极耳撕裂,芯包背面极耳撕裂,芯包正面极耳翻折,芯包背面极耳翻折 // MyRes[i] = JudgmentResult(Code_NG, m.list_Data1[i, 10], m.list_Data1[i, 11], // m.list_Data1[i, 12], m.list_Data1[i, 13], m.list_Data1[i, 14], m.list_Data1[i, 15], // m.list_Data1[i, 16], m.list_Data1[i, 17], m.list_Data1[i, 18], m.list_Data1[i, 19], // m.list_Data1[i, 23], m.list_Data1[i, 24], m.list_Data1[i, 25]); // m.Result = MyRes[i]; // m.CSBYHOUTSTATIONJUDGMENTRESULT = m.judgment_result[i] = OK_NG; ; // m.Remark += NG_Type; // NG_Type = "";//清除上一次不良字符串 // OK_NG = ""; //清除上一次结果 // list.Add(m); // string ur2 = CommonMethods.mesConfig.ResultProcessParamMesUrl; // string siteCode1 = CommonMethods.mesConfig.siteCode; // string lineCode1 = CommonMethods.mesConfig.lineCode; // string equipNum1 = CommonMethods.mesConfig.equipNum; // string materialCode1 = CommonMethods.mesConfig.MaterialCode; // string userName1 = CommonMethods.mesConfig.mesUserName; // MesUploadType unloadType = MesUploadType.DD; // string Mesage = ""; // //加判断无条码不上传mes 1为有条码 // if (Code_NG == 1) // { // string MesMessage = ""; // MesResType mesResType = MesResType.C; // if (CommonMethods.mesConfig.isUpMes) // { // string url = CommonMethods.mesConfig.OutStationMesUrl; // string siteCode = CommonMethods.mesConfig.siteCode; // string lineCode = CommonMethods.mesConfig.lineCode; // string equipNum = CommonMethods.mesConfig.equipNum; // string materialCode = CommonMethods.mesConfig.MaterialCode; // string userName = CommonMethods.mesConfig.mesUserName; // int type = 1; // //int type = 1; // //string materialLotCodeLocator = ""; // bool Res = CommonMethods.hbgMes.OutboundInformations(url, siteCode, lineCode, equipNum, materialCode, userName, m, ref MesMessage, ref mesResType, NGcodeList); // //bool Res = CommonMethods.hbgMes.SingleCellOutStation(url, siteCode, lineCode, equipNum, materialCode, userName, m,) // if (MesMessage.Contains("发生一个或多个错误")) // { // MesMessage = "上传失败,"; // } // else // { // m.Flag = 1; // } // if (Res) // { // //MES出站判定结果 // m.Result = MyRes[i]; // //芯包重量1判定结果 // if (m.list_Data1[i, 10] == 2) { m.Remark += "芯包重量NG,"; } // //芯包侧厚判定结果 // if (m.list_Data1[i, 11] == 2) { m.Remark += "芯包侧厚NG,"; } // //芯包CCD极性检测结果 // if (m.list_Data1[i, 12] == 2) { m.Remark += "芯包CCD极性检测NG,"; } // m.Remark += MesMessage; // } // else // { // switch (mesResType) // { // case MesResType.A:// 停线,设备报警停机 // //m.listRes[i] = 10; // m.Result = MyRes[i] = 2; // //m.Remark = MesMessage[i]; // break; // case MesResType.B://不停机,MEs NG品要排出,要给PLC发NG信号 // //m.listRes[i] = 9; // m.Result = MyRes[i] = 2; // //m.Remark = MesMessage[i]; // break; // case MesResType.C://可忽略 // //m.listRes[i] = 1; // m.Result = MyRes[i] = 2; // //m.Remark = MesMessage[i]; // break; // default: // m.Result = MyRes[i] = 2; // break; // } // //芯包重量1判定结果 // if (m.list_Data1[i, 10] == 2) { m.Remark += "芯包重量NG,"; } // //芯包侧厚判定结果 // if (m.list_Data1[i, 11] == 2) { m.Remark += "芯包侧厚NG,"; } // //芯包CCD极性检测结果 // if (m.list_Data1[i, 12] == 2) { m.Remark += "芯包CCD极性检测NG,"; } // m.Remark += MesMessage; // } // bool Res1 = CommonMethods.hbgMes.ProducResultParam(ur2, siteCode1, lineCode1, equipNum1, materialCode1, userName1, m, unloadType, ref Mesage); // if (m.Flag == 1) // m.UpState = "已上传"; // else // m.UpState = "未上传"; // } // else // { // m.Result = MyRes[i]; // m.Remark += "本地存储"; // m.UpState = "未上传"; // } // if (CommonMethods.sysConfig.OKSwitching) // { // //调试发OK // m.Result = MyRes[i] = 1; // //m.Result = "OK"; // } // } // else // { // m.Result = MyRes[i] = 2; // m.Remark += "本地存储"; // //芯包重量1判定结果 // if (m.list_Data1[i, 10] == 2) { m.Remark += ",芯包重量NG"; } // //芯包侧厚判定结果 // if (m.list_Data1[i, 11] == 2) { m.Remark += ",芯包侧厚NG"; } // //芯包CCD极性检测结果 // if (m.list_Data1[i, 12] == 2) { m.Remark += ",芯包CCD极性检测NG"; } // m.UpState = "未上传"; // } // //极限件发3给PLC // if (ChallengeFlag == 1) // { // if (string.Compare(EX[0].WeldingCCD, "焊前CCD") == 0 || string.Compare(EX[0].WeldingCCD, "焊前ccd") == 0) // { // MyRes[i] = 3; // } // if (string.Compare(EX[0].WeldingCCD, "焊后CCD") == 0 || string.Compare(EX[0].WeldingCCD, "焊后ccd") == 0) // { // MyRes[i] = 4; // } // } // } // catch (Exception ex) // { // LogHelper.Instance.WriteError($"外观检测出站线程数据解析:{ex}", "SysErrorLog"); // } // } // #endregion // JYResult result1 = null; // JYResult result2 = null; // if (pf.IsFeedbackPlc) // { // //result1 = CommonMethods.PlcLink.WriteValue(pf.VarList[2].VarAddress, MyRes[0], Data_Type.Short);//判断结果写入PLC // //result2 = CommonMethods.PlcLink.WriteValue(pf.VarList[3].VarAddress, MyRes[1], Data_Type.Short);//判断结果写入PLC // //if (CommonMethods.sysConfig.OKSwitching) // { // //调试发OK // //MyRes[0] = 1; // //MyRes[1] = 1; // Thread.Sleep(500); // result1 = CommonMethods.PlcLink.WriteValue(pf.VarList[2].VarAddress, MyRes[0], Data_Type.Short);//判断结果写入PLC // result2 = CommonMethods.PlcLink.WriteValue(pf.VarList[3].VarAddress, MyRes[1], Data_Type.Short);//判断结果写入PLC // } // //else // //{ // // //将mes反馈的结果发给PLC // // Thread.Sleep(500); // // result1 = CommonMethods.PlcLink.WriteValue(pf.VarList[2].VarAddress, MyRes[0], Data_Type.Short);//判断结果写入PLC // // result2 = CommonMethods.PlcLink.WriteValue(pf.VarList[3].VarAddress, MyRes[1], Data_Type.Short);//判断结果写入PLC // //} // } // JYResult result3 = CommonMethods.PlcLink.WriteValue(pf.VarList[0].VarAddress, 0);//置位0 // CommonMethods.AddDataMonitorLog(0, $"发送信息给PLC:{result1.IsSuccess},{MyRes[0]},{MyRes[1]}"); // LogHelper.Instance.WriteLog($"发送信息给PLC:{result1.IsSuccess},{MyRes[0]},{MyRes[1]}"); // Task.Run(() => { SendDateMQTT.Instance.EnterandExitSendMessge(1); }); // //数据存储 - 异步处理 // Task.Run(() => // { // SaveBlankingData(list); // }); // sw2.Stop(); // ////输出下料数据处理耗时: // CommonMethods.AddDataMonitorLog(0, $"外观检测出站共耗时:{sw2.Elapsed.TotalMilliseconds}ms"); // } //} #endregion //下料解析 外观检 private void BlankingStation(JYResult bArrays, object plcModel) { Group pf = plcModel as Group; if (bArrays == null) { CommonMethods.PlcLink.WriteInt16(pf.VarList[0].VarAddress, 0);//置位0 CommonMethods.AddLog(false, $"电芯出站PLC有触发信号,但无数据!"); LoggerHelp.WriteLog($"电芯出站PLC有触发信号,但无数据!", "SysErrorLog"); } if (bArrays.IsSuccess && bArrays.Content != null) { Random random = new Random(); //解析数据 sw2.Restart(); #region 数据变量定义 List list = new List();//实体 //int[] MyRes = new int[2];//AB反馈结果 int[] MyRes = new int[2];//三个外观检测反馈结果 #endregion //高低位转换 byte[] bytes = bArrays.Content.ByteReverse(); byte[] bytes1 = bArrays.Content; List listBarCode = GetList(2, "");//电芯条码 //List listNum = GetList(1, "");//进站磁悬浮动子编号 List listRes = GetList(2, 0);//出站电芯反馈结果 //反馈结果 #region 电芯解析 //电芯解析 从3200 开始 listBarCode[0] = StringLib.GetStringFromByteArrayByEncoding(bytes, 0, 40, System.Text.Encoding.ASCII).Replace('\0', ' ').Replace('\r', ' ').Replace(" ", "").Trim(); listBarCode[1] = StringLib.GetStringFromByteArrayByEncoding(bytes, 40, 40, System.Text.Encoding.ASCII).Replace('\0', ' ').Replace('\r', ' ').Replace(" ", "").Trim(); //listBarCode[2] = StringLib.GetStringFromByteArrayByEncoding(bytes, 80, 40, System.Text.Encoding.ASCII).Replace('\0', ' ').Replace('\r', ' ').Replace(" ", "").Trim(); #endregion #region 上传MES //D3200起 for (int i = 0; i < 2; i++) { try { BGearEntity m = new BGearEntity(); AGearEntity TT = new AGearEntity(); //极限件标志 int ChallengeFlag = 0; //芯包信息1 D3300~D3326 //芯包信息2 D3330~D3356 //芯包信息3 D3360~D3386 for (int j = 0; j < ConstValue.COUNT_CCD; j++) { m.CCD_Data[i, j] = ShortLib.GetShortFromByteArray(bArrays.Content, 200 + i * 30 * 2 + j * 2, DataFormat.CDAB); } //3400 m.CCD_FLATNESS = FloatLib.GetFloatFromByteArray(bArrays.Content, 400 + i * 30 * 2, DataFormat.CDAB); short fatResult = ShortLib.GetShortFromByteArray(bArrays.Content, 600 + i * 30 * 2, DataFormat.CDAB); m.CCDFLATNESSResult = ConstValue.JudgeResult(fatResult); #region 注释掉的采集数据 by clm 20260812 ////3400 //m.Thickness1 = FloatLib.GetFloatFromByteArray(bArrays.Content, 400 + i * 30 * 2, DataFormat.CDAB); //m.ThicknessResult1 = FloatLib.GetFloatFromByteArray(bArrays.Content, 400 + i * 30 * 2 + 2 * 2, DataFormat.CDAB).ToString(); ////3500 //m.flatness_setpoint = FloatLib.GetFloatFromByteArray(bArrays.Content, 600 + i * 30 * 2, DataFormat.CDAB).ToString(); //m.flatness_actual = FloatLib.GetFloatFromByteArray(bArrays.Content, 600 + i * 30 * 2 + 2 * 2, DataFormat.CDAB).ToString(); //厚度3400 //for (int j = 0; j < 3; j++) //{ // m.Thickness_Data[i, j] = FloatLib.GetFloatFromByteArray(bArrays.Content, 400 + i * 30 * 2 + j * 4, DataFormat.CDAB); //} ////厚度plc 3500 //for (int j = 0; j < 3; j++) //{ // m.Thickness_PLCData[i, j] = ShortLib.GetShortFromByteArray(bArrays.Content, 500 + i * 30 * 2 + j * 2, DataFormat.CDAB); //} //不良ng编号4300 //for (int j = 0; j < 20; j++) //{ // m.CCD_NgNo[i, j] = ShortLib.GetShortFromByteArray(bArrays.Content, 2200 + i * 30 * 2 + j * 2, DataFormat.CDAB); //} //for (int j = 0; j < 27; j++) //{ // m.CCD_NgNo[i, j] = StringLib.GetStringFromByteArrayByEncoding(bArrays.Content, (7800 * 2 + j * 40 * 2 + i * 2 * 1000), 20 * 2, System.Text.Encoding.ASCII). // Replace('\0', ' ').Replace('\r', ' ').Replace(" ", "").Trim(); // //ShortLib.GetShortFromByteArray(bArrays.Content, 6800 *2 + j * 2, DataFormat.CDAB); //} #endregion //芯包扫码时间 //m.ScanTime[i] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); m.BarCode = listBarCode[i]; //m.CSBYHCODEA = "TEST"; #region 极限件查询 //var EX = CommonMethods.db.QuerySqlList(CommonMethods.dBSQL.GetChallengeCode(m.BarCode)); //for (int j = 0; j < EX.Count; j++) //{ // if (string.Compare(EX[j].ChallengeBarCode, m.BarCode) == 0) // { // m.Remark += "(极限件," + EX[j].CodeMessage + "," + EX[j].WeldingCCD + ")"; // ChallengeFlag = 1; // } //} #endregion //查询进站时间数据 var w = CommonMethods.db.QuerySqlList(CommonMethods.dBSQL.GetInTime(m.BarCode)); //获取新一行数据 if (w.Count > 0) TT = w[w.Count - 1]; // //if (w.Count > 0) // TT = w[0]; if (TT.TestTime != null) m.ScanTime[0] = TT.TestTime.Replace('/', '-'); else m.ScanTime[0] = ""; //芯包出站时间 m.ScanTime[1] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //复投次数 m.RethrowNum = 0; if (w.Count > 0) { int cccc = w.Count; m.RethrowNum = cccc - 1; } int Code_NG = 0;//条码有无标志 1为有,2为无 //判断有无条码 if (m.BarCode != null && m.BarCode != "" && m.BarCode != "ERROR") Code_NG = 1; else Code_NG = 2; //m.ChannelNo = m.MyNo[i]; //m.TestTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //不良代码判定 //List NGcodeList = new List(); //NGcodeList = NGcode(m.list_Data1[i, 10], m.list_Data1[i, 11], m.list_Data1[i, 12], m.list_Data1[i, 15], m.list_Data1[i, 26], m.list_Data1[i, 16] // , m.list_Data1[i, 17], m.list_Data1[i, 18], m.list_Data1[i, 19], m.list_Data1[i, 23], m.list_Data1[i, 24], m.list_Data1[i, 25], m.list_Data1[i, 27]); // var (NGcodeList, NGmessage) = NGWGJcode(m.CCD_Data, i); //电芯CCD判定结果 #region //电芯CCD判定结果 1 0K 0NG 2缺图 m.CCD1 = m.CCD_Data[i, 0]; m.CCD2 = m.CCD_Data[i, 1]; m.CCD3 = m.CCD_Data[i, 2]; m.CCD4 = m.CCD_Data[i, 3]; m.CCD5 = m.CCD_Data[i, 4]; m.CCD6 = m.CCD_Data[i, 5]; m.CCD7 = m.CCD_Data[i, 6]; m.CCD8 = m.CCD_Data[i, 7]; m.CCD9 = m.CCD_Data[i, 8]; m.CCD10 = m.CCD_Data[i, 9]; m.CCD11 = m.CCD_Data[i, 10]; m.CCD12 = m.CCD_Data[i, 11]; m.CCD13 = m.CCD_Data[i, 12]; //m.CCD14 = m.CCD_Data[i, 13]; //m.CCD15 = m.CCD_Data[i, 14]; //m.CCD16 = m.CCD_Data[i, 15]; //m.CCD17 = m.CCD_Data[i, 16]; //m.CCD18 = m.CCD_Data[i, 17]; //m.CCD19 = m.CCD_Data[i, 18]; //m.CCD20 = m.CCD_Data[i, 19]; m.CCDResult1 = m.CCD_Data[i, 0] == 1 ? "OK" : (m.CCD_Data[i, 0] == 0 ? "NG" : "缺图"); m.CCDResult2 = m.CCD_Data[i, 1] == 1 ? "OK" : (m.CCD_Data[i, 1] == 0 ? "NG" : "缺图"); m.CCDResult3 = m.CCD_Data[i, 2] == 1 ? "OK" : (m.CCD_Data[i, 2] == 0 ? "NG" : "缺图"); m.CCDResult4 = m.CCD_Data[i, 3] == 1 ? "OK" : (m.CCD_Data[i, 3] == 0 ? "NG" : "缺图"); m.CCDResult5 = m.CCD_Data[i, 4] == 1 ? "OK" : (m.CCD_Data[i, 4] == 0 ? "NG" : "缺图"); m.CCDResult6 = m.CCD_Data[i, 5] == 1 ? "OK" : (m.CCD_Data[i, 5] == 0 ? "NG" : "缺图"); m.CCDResult7 = m.CCD_Data[i, 6] == 1 ? "OK" : (m.CCD_Data[i, 6] == 0 ? "NG" : "缺图"); m.CCDResult8 = m.CCD_Data[i, 7] == 1 ? "OK" : (m.CCD_Data[i, 7] == 0 ? "NG" : "缺图"); m.CCDResult9 = m.CCD_Data[i, 8] == 1 ? "OK" : (m.CCD_Data[i, 8] == 0 ? "NG" : "缺图"); m.CCDResult10 = m.CCD_Data[i, 9] == 1 ? "OK" : (m.CCD_Data[i, 9] == 0 ? "NG" : "缺图"); m.CCDResult11 = m.CCD_Data[i, 10] == 1 ? "OK" : (m.CCD_Data[i, 10] == 0 ? "NG" : "缺图"); m.CCDResult12 = m.CCD_Data[i, 11] == 1 ? "OK" : (m.CCD_Data[i, 11] == 0 ? "NG" : "缺图"); m.CCDResult13 = m.CCD_Data[i, 12] == 1 ? "OK" : (m.CCD_Data[i, 12] == 0 ? "NG" : "缺图"); //m.CCDResult14 = m.CCD_Data[i, 13] == 1 ? "OK" : (m.CCD_Data[i, 13] == 0 ? "NG" : "缺图"); //m.CCDResult15 = m.CCD_Data[i, 14] == 1 ? "OK" : (m.CCD_Data[i, 14] == 0 ? "NG" : "缺图"); //m.CCDResult16 = m.CCD_Data[i, 15] == 1 ? "OK" : (m.CCD_Data[i, 15] == 0 ? "NG" : "缺图"); //m.CCDResult17 = m.CCD_Data[i, 16] == 1 ? "OK" : (m.CCD_Data[i, 16] == 0 ? "NG" : "缺图"); //m.CCDResult18 = m.CCD_Data[i, 17] == 1 ? "OK" : (m.CCD_Data[i, 17] == 0 ? "NG" : "缺图"); //m.CCDResult19 = m.CCD_Data[i, 18] == 1 ? "OK" : (m.CCD_Data[i, 18] == 0 ? "NG" : "缺图"); //m.CCDResult20 = m.CCD_Data[i, 19] == 1 ? "OK" : (m.CCD_Data[i, 19] == 0 ? "NG" : "缺图"); string[] ccdArr = new string[] { m.CCDResult1, m.CCDResult2, m.CCDResult3, m.CCDResult4, m.CCDResult5, m.CCDResult6, m.CCDResult7, m.CCDResult8, m.CCDResult9, m.CCDResult10, m.CCDResult11, m.CCDResult12, m.CCDResult13, m.CCDFLATNESSResult }; int okCount = ccdArr.Count(it => it.Equals("OK")); if (okCount == ccdArr.Length) { m.IsAllCcdOK = "OK"; } else { m.IsAllCcdOK = "NG"; } #region 注释代码 //m.CCDResult21 = m.CCD_Data[i, 20] == 1 ? "OK" : (m.CCD_Data[i, 20] == 0 ? "NG" : "缺图"); //m.CCDResult22 = m.CCD_Data[i, 21] == 1 ? "OK" : (m.CCD_Data[i, 21] == 0 ? "NG" : "缺图"); //m.CCDResult23 = m.CCD_Data[i, 22] == 1 ? "OK" : (m.CCD_Data[i, 22] == 0 ? "NG" : "缺图"); //m.CCDResult24 = m.CCD_Data[i, 23] == 1 ? "OK" : (m.CCD_Data[i, 23] == 0 ? "NG" : "缺图"); //m.CCDResult25 = m.CCD_Data[i, 24] == 1 ? "OK" : (m.CCD_Data[i, 24] == 0 ? "NG" : "缺图"); //m.CCDResult26 = m.CCD_Data[i, 25] == 1 ? "OK" : (m.CCD_Data[i, 25] == 0 ? "NG" : "缺图"); //m.CCDResult27 = m.CCD_Data[i, 26] == 1 ? "OK" : (m.CCD_Data[i, 26] == 0 ? "NG" : "缺图"); #endregion m.CCD1NgCode = m.CCD_NgNo[i, 0]; m.CCD2NgCode = m.CCD_NgNo[i, 1]; m.CCD3NgCode = m.CCD_NgNo[i, 2]; m.CCD4NgCode = m.CCD_NgNo[i, 3]; m.CCD5NgCode = m.CCD_NgNo[i, 4]; m.CCD6NgCode = m.CCD_NgNo[i, 5]; m.CCD7NgCode = m.CCD_NgNo[i, 6]; m.CCD8NgCode = m.CCD_NgNo[i, 7]; m.CCD9NgCode = m.CCD_NgNo[i, 8]; m.CCD10NgCode = m.CCD_NgNo[i, 9]; m.CCD11NgCode = m.CCD_NgNo[i, 10]; m.CCD12NgCode = m.CCD_NgNo[i, 11]; m.CCD13NgCode = m.CCD_NgNo[i, 12]; m.CCD14NgCode = m.CCD_NgNo[i, 13]; m.CCD15NgCode = m.CCD_NgNo[i, 14]; m.CCD16NgCode = m.CCD_NgNo[i, 15]; m.CCD17NgCode = m.CCD_NgNo[i, 16]; m.CCD18NgCode = m.CCD_NgNo[i, 17]; m.CCD19NgCode = m.CCD_NgNo[i, 18]; m.CCD20NgCode = m.CCD_NgNo[i, 19]; m.CCD21NgCode = m.CCD_NgNo[i, 20]; m.CCD22NgCode = m.CCD_NgNo[i, 21]; m.CCD23NgCode = m.CCD_NgNo[i, 22]; m.CCD24NgCode = m.CCD_NgNo[i, 23]; m.CCD25NgCode = m.CCD_NgNo[i, 24]; m.CCD26NgCode = m.CCD_NgNo[i, 25]; m.CCD27NgCode = m.CCD_NgNo[i, 26]; #endregion m.CSBYHASCANNINGTIME = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); m.CSBYHPROCESSNAME = "外观检测"; m.CSBYHSCHEDULE = CommonMethods.strClass; m.CSBYHINSTATIONTIME = m.ScanTime[0]; m.CSBYHOUTSTATIONTIME = m.ScanTime[1]; m.MaterialCode = CommonMethods.mesConfig.MaterialCode; //m.Thickness1 = SaveTwoNum(m.Thickness_Data[i, 0]); //m.Thickness2 = SaveTwoNum(m.Thickness_Data[i, 1]); //m.Thickness3 = SaveTwoNum(m.Thickness_Data[i, 2]); m.ChannelNo = i + 1; { //此处预留 m.out_battery_grade = "";//出入站条码等级 m.in_battery_grade = ""; m.appearance_standard = ""; } //条码,芯包重量,芯包侧厚,芯包CCD极性检测,电芯裁切粘连,电芯裁切毛刺,芯包焊印位置, //芯包正面极耳撕裂,芯包背面极耳撕裂,芯包正面极耳翻折,芯包背面极耳翻折 if (Code_NG == 1) { for (int ii = 0; ii < ConstValue.COUNT_CCD; ii++) { if (m.CCD_Data[i, ii] != 1) { //1OK,2扫码NG,3MES反馈NG,4其他NG MyRes[i] = 4; break; } } } else MyRes[i] = 2;//扫码NG var judementResult = JudgmentWGJResult(1, m.CCD_Data, i); if (m.CCDFLATNESSResult != "OK") { //1OK,2扫码NG,3MES反馈NG,4其他NG judementResult.Item1 = 4; OK_NG = "NG"; NG_Type += $"{ConstValue.CCDSpecialDic["CCD_FLATNESS_RESULT"]}(NG),"; } MyRes[i] = judementResult.Item1; OK_NG = judementResult.Item2; NG_Type = judementResult.Item3; m.Result = MyRes[i]; m.CSBYHOUTSTATIONJUDGMENTRESULT = m.judgment_result[i] = OK_NG; m.Remark += NG_Type; NG_Type = "";//清除上一次不良字符串 OK_NG = ""; //清除上一次结果 list.Add(m); string ur2 = CommonMethods.mesConfig.ResultProcessParamMesUrl; string siteCode = CommonMethods.mesConfig.siteCode; string lineCode = CommonMethods.mesConfig.lineCode; string equipNum = CommonMethods.mesConfig.equipNum; string materialCode = CommonMethods.mesConfig.MaterialCode; string userName = CommonMethods.mesConfig.mesUserName; string modelName = CommonMethods.mesConfig.ModelName; MesUploadType unloadType = MesUploadType.DD; string Mesage = ""; //加判断无条码不上传mes 1为有条码 if (Code_NG == 1) { string MesMessage = ""; MesResType mesResType = MesResType.C; if (CommonMethods.mesConfig.isUpMes) { string url = CommonMethods.mesConfig.OutStationMesUrl; int type = 1; //int type = 1; //string materialLotCodeLocator = ""; var (NGcodeList, NGmessage) = NGWGJcode(m.CCD_NgNo, i); bool Res = CommonMethods.hbgMes.OutboundInformations(url, siteCode, lineCode, equipNum, modelName, materialCode, userName, m, ref MesMessage, ref mesResType, NGcodeList, NGmessage); //bool Res = CommonMethods.hbgMes.SingleCellOutStation(url, siteCode, lineCode, equipNum, materialCode, userName, m,) if (MesMessage.Contains("发生一个或多个错误")) { MesMessage = "出战上传失败,"; } else { m.Flag = 1; } if (Res) { //MES出站判定结果 m.Result = MyRes[i]; ////芯包重量1判定结果 //if (m.list_Data1[i, 10] == 2) { m.Remark += "芯包重量NG,"; } ////芯包侧厚判定结果 //if (m.list_Data1[i, 11] == 2) { m.Remark += "芯包侧厚NG,"; } ////芯包CCD极性检测结果 //if (m.list_Data1[i, 12] == 2) { m.Remark += "芯包CCD极性检测NG,"; } m.Remark += MesMessage; } else { switch (mesResType) { case MesResType.A:// 停线,设备报警停机 //m.listRes[i] = 10; // m.Result = MyRes[i] = 2; m.Result = MyRes[i] = 3; m.Remark += "MES NG"; break; case MesResType.B://不停机,MEs NG品要排出,要给PLC发NG信号 //m.listRes[i] = 9; // m.Result = MyRes[i] = 2; m.Result = MyRes[i] = 3; m.Remark += "MES NG"; break; case MesResType.C://可忽略 //m.listRes[i] = 1; // m.Result = MyRes[i] = 2; m.Result = MyRes[i] = 1; m.Remark += "MES Alerm OK"; break; case MesResType.D://可忽略 //m.listRes[i] = 1; // m.Result = MyRes[i] = 2; m.Result = MyRes[i] = 1; m.Remark += "MES OK"; break; default: m.Remark += "MES NG"; m.Result = MyRes[i] = 3; break; } ////芯包重量1判定结果 //if (m.list_Data1[i, 10] == 2) { m.Remark += "芯包重量NG,"; } ////芯包侧厚判定结果 //if (m.list_Data1[i, 11] == 2) { m.Remark += "芯包侧厚NG,"; } ////芯包CCD极性检测结果 //if (m.list_Data1[i, 12] == 2) { m.Remark += "芯包CCD极性检测NG,"; } m.Remark += MesMessage; } //发送产品结果参数给MES bool Res1 = CommonMethods.hbgMes.ProducResultParam(ur2, siteCode, lineCode, equipNum, materialCode, userName, m, unloadType, ref Mesage); if (Mesage.Contains("发生一个或多个错误")) { m.Remark += "结果参数上传失败,"; } else { m.Flag1 = 1; } list[i].PlcResult = MyRes[i]; #region 排出 5 厚度NG电芯 6 外观NG电芯, //if (list[i].PlcResult != 1) //{ // //厚度不良分档 5 测厚不良 6 外观不良 // if (list[i].CCD19 != 1) // { // m.Result = MyRes[i] = 5; // list[i].Remark += $",测厚度NG"; // } // else // { // //外观不良分档 // m.Result = MyRes[i] = 6; // list[i].Remark += $",外观检NG不良"; // } //} #endregion if (m.Flag == 1) m.UpState = "已上传"; else m.UpState = "未上传"; } else { m.Result = MyRes[i]; m.Remark += "本地存储"; m.UpState = "未上传"; } if (CommonMethods.sysConfig.OKSwitching) { //调试发OK m.Result = MyRes[i] = 1; //m.Result = "OK"; } } else { m.Result = MyRes[i] = 2; m.Remark += "本地存储"; ////芯包重量1判定结果 //if (m.list_Data1[i, 10] == 2) { m.Remark += ",芯包重量NG"; } ////芯包侧厚判定结果 //if (m.list_Data1[i, 11] == 2) { m.Remark += ",芯包侧厚NG"; } ////芯包CCD极性检测结果 //if (m.list_Data1[i, 12] == 2) { m.Remark += ",芯包CCD极性检测NG"; } m.UpState = "未上传"; } #region//极限件发3给PLC //if (ChallengeFlag == 1) //{ // if (string.Compare(EX[0].WeldingCCD, "焊前CCD") == 0 || string.Compare(EX[0].WeldingCCD, "焊前ccd") == 0) // { // MyRes[i] = 3; // } // if (string.Compare(EX[0].WeldingCCD, "焊后CCD") == 0 || string.Compare(EX[0].WeldingCCD, "焊后ccd") == 0) // { // MyRes[i] = 4; // } //} #endregion } catch (Exception ex) { LoggerHelp.WriteLog($"外观检测出站线程数据解析:{ex}", "SysErrorLog"); } } #endregion JYResult result1 = null; JYResult result2 = null; //JYResult result3 = null; if (pf.IsFeedbackPlc) { //result1 = CommonMethods.PlcLink.WriteValue(pf.VarList[2].VarAddress, MyRes[0], Data_Type.Short);//判断结果写入PLC //result2 = CommonMethods.PlcLink.WriteValue(pf.VarList[3].VarAddress, MyRes[1], Data_Type.Short);//判断结果写入PLC // if (CommonMethods.sysConfig.OKSwitching) { //调试发OK //MyRes[0] = 1; //MyRes[1] = 1; Thread.Sleep(500); result1 = CommonMethods.PlcLink.WriteValue(pf.VarList[2].VarAddress, MyRes[0], Data_Type.Short);//判断结果写入PLC result2 = CommonMethods.PlcLink.WriteValue(pf.VarList[3].VarAddress, MyRes[1], Data_Type.Short);//判断结果写入PLC //result3 = CommonMethods.PlcLink.WriteValue(pf.VarList[4].VarAddress, MyRes[2], Data_Type.Short);//判断结果写入PLC } //else //{ // //将mes反馈的结果发给PLC // Thread.Sleep(500); // result1 = CommonMethods.PlcLink.WriteValue(pf.VarList[2].VarAddress, MyRes[0], Data_Type.Short);//判断结果写入PLC // result2 = CommonMethods.PlcLink.WriteValue(pf.VarList[3].VarAddress, MyRes[1], Data_Type.Short);//判断结果写入PLC //} } JYResult result4 = CommonMethods.PlcLink.WriteValue(pf.VarList[0].VarAddress, 0);//置位0 CommonMethods.AddDataMonitorLog(0, $"发送信息给PLC:{result1.IsSuccess},{MyRes[0]},{MyRes[1]}"); LoggerHelp.WriteLog($"发送信息给PLC:{result1.IsSuccess},{MyRes[0]},{MyRes[1]}"); Task.Run(() => { SendDateMQTT.Instance.EnterandExitSendMessge(1); }); //数据存储 - 异步处理 Task.Run(() => { SaveBlankingData(list); }); sw2.Stop(); ////输出下料数据处理耗时: CommonMethods.AddDataMonitorLog(0, $"外观检测出站共耗时:{sw2.Elapsed.TotalMilliseconds}ms"); } } /// /// 电池结果判断 /// /// /// /// private ushort GetResult(AGearEntity m, ref string strErr) { //strErr = ""; //bool b = m.YaLiValue <= 2 ? true : false;//压力值结果NG //if (b) //{ // strErr = "良品"; // return 1; //} //if (!b) //{ // strErr = "压力值NG"; // return 5; //} return 1; } #region 保存下料数据 /// /// 保存下料数据到数据 /// /// private void SaveBlankingData(List list) { //数据的保存 try { if (list != null && list.Count > 0) { //数据显示 List Blist = list; int i = 0; string strRes = ""; foreach (BGearEntity m in list) { bool b = CommonMethods.db.AddReturnBool(m); if(!b) { strRes = ",不存储"; } m.Remark = m.Remark + strRes; Blist[i].Remark = m.Remark; i++; } //数据显示 CommonMethods.ShowBlankingDelegate.Invoke(Blist); } else { LoggerHelp.WriteLog($"电芯出站数据List为空", "SysErrorLog"); } } catch (Exception ex) { LoggerHelp.WriteLog($"电芯出站数据保存异常:{ex}", "SysErrorLog"); } } #endregion #endregion #region 创建空的数组List public List GetList(int num, T data) { List list = new List(); for (int i = 0; i < num; i++) { list.Add(data); } return list; } public List GetMesType(int Num) { List mesResTypes = new List(); for (int i = 0; i < Num; i++) { mesResTypes.Add(MesResType.UnKnow); } return mesResTypes; } /// /// PLC内批量写\0 /// /// /// public string GetString_0(int Num) { string ff = ""; for (int i = 0; i < Num; i++) { ff = ff.Insert(ff.Length, "\0"); } return ff; } public string GetBarCodeNum(int Num) { string CodeNo = ""; int CodeLenth = Num.ToString().Length; switch (CodeLenth) { case 1: return CodeNo = $"00000{Num}"; case 2: return CodeNo = $"0000{Num}"; case 3: return CodeNo = $"000{Num}"; case 4: return CodeNo = $"00{Num}"; case 5: return CodeNo = $"0{Num}"; default: return CodeNo = $"{Num}"; } } #endregion #region 下料不良代码 public List NGcode(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m) { //芯包重量、测厚位移、极性、铜焊印位置1、铜焊印位置2、正面极耳撕裂、背面极耳撕裂、 //正面极耳翻折、背面极耳翻折、测厚压力、焊前CCD、铝焊印位置1、铝焊印位置2 List NGcodelist = new List(); if (a == 2 || b == 2) NGcodelist.Add("ETPP120"); if (j == 2) NGcodelist.Add("ETPP119"); if (c == 2) NGcodelist.Add("ETPP005"); if (d == 2 || e == 2 || l == 2 || m == 2) NGcodelist.Add("ETPP118"); if (f == 2 || g == 2) NGcodelist.Add("ETPP106"); if (h == 2 || i == 2) NGcodelist.Add("ETPP108"); if (k == 2) NGcodelist.Add("ETPA111"); return NGcodelist; } //下料不良代码 外观检 public (List, List) NGWGJcode(int[,] lstResult, int index) { List NGcodelist = new List(); List NGmessagelist = new List(); for (int i = 0; i < 16; i++) { if (lstResult[index, i] != 0) { var strCode = lstResult[index, i].ToString().PadLeft(3, '0'); NGcodelist.Add($"PFVA{strCode}"); var codeEntity = CommonMethods.listNgCodeEntity.FirstOrDefault(x => strCode == x.ngCode); if (codeEntity != null) { NGmessagelist.Add(codeEntity.ngMessage); } else { NGmessagelist.Add("未知错误"); } } } return (NGcodelist, NGmessagelist); } #endregion #region NG下料不良代码 public List NGCarcode(int a, int b, int c) { //芯包重量、测厚位移、极性 List NGcodelist = new List(); if (a == 2) NGcodelist.Add("ETPP120"); if (b == 2) NGcodelist.Add("ETPP120"); if (c == 2) NGcodelist.Add("ETPP105"); return NGcodelist; } #endregion } }