using HZH_Controls; using OpenCvSharp; using OpenCvSharp.Extensions; using Sunny.UI.Win32; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Diagnostics.Eventing.Reader; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Runtime.Remoting.Messaging; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Forms; using System.Windows.Media.Media3D; using static System.Net.Mime.MediaTypeNames; //using XKRS.Device.SimboVision.SimboHelper; namespace YSDetection { public partial class MainForm : Form { public MainForm() { InitializeComponent(); System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; Control.CheckForIllegalCrossThreadCalls = false; } int SnaptNum = 1; HikCamera hikCamera = new HikCamera(); HikCamera hikCamera2 = new HikCamera(); SerialPortBase serialPortBase = new SerialPortBase(); SiemensPLCTCPDriver siemensPLCTCP = new SiemensPLCTCPDriver(); SimboObjectDetection simboObjectDetection = new SimboObjectDetection(); //PaddleOcrModel paddleOcrModel = new PaddleOcrModel(); string LablePath = "D:\\huarui\\txt\\class.txt"; AutoResetEvent autoResetEvent; AutoResetEvent waitResetEvent; private void MainForm_Load(object sender, EventArgs e) { autoResetEvent = new AutoResetEvent(false); waitResetEvent=new AutoResetEvent(false); siemensPLCTCP.Start(); string PLCAdress3 = "M11.0"; siemensPLCTCP.WriteBool(PLCAdress3, false); string PLCAdress1 = "M12.0"; siemensPLCTCP.WriteBool(PLCAdress1, false); string PLCAdress2 = "M13.0"; siemensPLCTCP.WriteBool(PLCAdress2, false); string PLCAdress4 = "M14.0"; siemensPLCTCP.WriteBool(PLCAdress4, true); SnaptPage.Text = SnaptNum.ToString(); DataSet ds = SQLiteHelper.Query($"select xinghao from lungu"); //cbx.DataSource = ds; DataTableReader rdr = ds.CreateDataReader(); HashSet values = new System.Collections.Generic.HashSet(); while (rdr.Read())//读取表中数据 { values.Add((string)rdr["xinghao"]); } foreach (var item in values) { comboBox1.Items.Add(item); comboBox1.Text = item; } string Dectionstr = "D:\\huarui\\model\\best.onnx"; //string CountryStr = "D:\\Projects\\Documents\\XKOCR\\chinese.json"; if (File.Exists(Dectionstr)) { LablePath = "D:\\huarui\\txt\\class.txt";//标签路径 } else { MessageBox.Show("检测" + Dectionstr + " " + "模型有无"); return; } //初始化检测驱动 simboObjectDetection.Load(Dectionstr, "CPU", "images", 640, 640); //paddleOcrModel.Load(CountryStr, "CPU"); } private void button5_Click(object sender, EventArgs e) { } int PageNum = 0; private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { if (textBox12.Text != "无") { DateTime dt2 = DateTime.Now; FileStream baogao_path = new FileStream("D:\\huarui\\txt\\" + dt2.Year + "_"+dt2.Month + "_" + dt2.Day + "_" + dt2.Hour + "_" + dt2.Minute+ "_检测报告.txt", FileMode.Create); StreamWriter baogao = new StreamWriter(baogao_path, Encoding.Default); string jiancejieguo = "型号:" + textBox12.Text + " 总数: " + textBox13.Text + " 合格数:" + textBox14.Text + " 不合格数:" + textBox15.Text; baogao.Write(jiancejieguo); baogao.Close(); baogao_path.Close(); } else { } allnum = 0; oknum = 0; ngnum = 0; textBox13.Text = ""; textBox14.Text = ""; textBox15.Text = ""; FileStream yuyan_path = new FileStream("D:\\huarui\\txt/xinghao.txt", FileMode.Create); StreamWriter yuyan = new StreamWriter(yuyan_path, Encoding.Default); yuyan.Write(comboBox1.Text); yuyan.Close(); yuyan_path.Close(); string leixing = File.ReadAllText("D:\\huarui\\txt/xinghao.txt"); DataSet ds = SQLiteHelper.Query($"select * from lungu where xinghao='{leixing}'"); //cbx.DataSource = ds; DataTableReader rdr = ds.CreateDataReader(); HashSet values = new System.Collections.Generic.HashSet(); while (rdr.Read())//读取表中数据 { SnaptPage.Text = (string)rdr["chishu"]; textBox6.Text = (string)rdr["luoju"]; textBox1.Text = (string)rdr["luosishu"]; textBox3.Text = (string)rdr["luosichangdu"]; } } bool Ifreturndata = false; static int LJDis = 0; public void SerialPort_DataReceived(byte[] obj) { string msg = string.Empty; //if (rbStringData.Checked) // { // msg = Encoding.Default.GetString(obj); // } // else if (rbHexData.Checked)//16进制 // { //msg = ToHexStrFromByte(obj); msg = BitConverter.ToString(obj).Replace('-', ' '); // } if (obj.Length == 9) { byte[] lastData2 = obj.Skip(3).Take(4).ToArray(); // 从第3位起读4位 // string x0 = obj[3] + obj[4] + obj[5] + obj[6]; string msg2 = ToHexStrFromByte(lastData2); LJDis = HexaToDecimal(msg2); FileStream changdu_path = new FileStream("D:\\huarui\\txt\\changdu.txt", FileMode.Create); StreamWriter changdu = new StreamWriter(changdu_path, Encoding.Default); changdu.Write(LJDis); changdu.Close(); changdu_path.Close(); } else { LJDis = 0; //FileStream changdu_path = new FileStream("D:\\huarui\\txt\\changdu.txt", FileMode.Create); //StreamWriter changdu = new StreamWriter(changdu_path, Encoding.Default); //changdu.Write(LJDis); //changdu.Close(); //changdu_path.Close(); } Ifreturndata = true; //if (tbMessage.InvokeRequired) //{ // tbMessage.Invoke(new Action(() => // { // ShowMessage(msg); // })); //} //else //{ // ShowMessage(msg); //} } /// /// 另一种16进制转10进制的处理方式,Multiplier参与*16的循环很巧妙,对Multiplier的处理很推荐,逻辑统一 /// /// /// public int HexaToDecimal(string HexaDecimalString) { int Decimal = 0; int Multiplier = 1; for (int i = HexaDecimalString.Length - 1; i >= 0; i--) { Decimal += HexaToDecimal(HexaDecimalString[i]) * Multiplier; Multiplier *= 16; } return Decimal; } int HexaToDecimal(char c) { switch (c) { case '0': return 0; case '1': return 1; case '2': return 2; case '3': return 3; case '4': return 4; case '5': return 5; case '6': return 6; case '7': return 7; case '8': return 8; case '9': return 9; case 'A': case 'a': return 10; case 'B': case 'b': return 11; case 'C': case 'c': return 12; case 'D': case 'd': return 13; case 'E': case 'e': return 14; case 'F': case 'f': return 15; } return -1; } /// /// 字节数组转16进制字符串:空格分隔 /// /// /// public string ToHexStrFromByte(byte[] byteDatas) { StringBuilder builder = new StringBuilder(); for (int i = 0; i < byteDatas.Length; i++) { builder.Append(string.Format("{0:X2}", byteDatas[i])); } return builder.ToString().Trim(); } public void OnCameraMatOutPut(DateTime dt, Mat cameraMat, int SnapshotCount) { string fitImageFolder = "D:\\huarui\\pic//"; string fitImageFolder1 = "D:\\huarui\\pic//" + dt.Year + "_" + dt.Month + "_" + dt.Day+"//"; if (!Directory.Exists(fitImageFolder1)) { Directory.CreateDirectory(fitImageFolder1); } cameraMat.ImWrite(fitImageFolder1 + comboBox1.Text + "_" + dt.Year + "_" + dt.Month + "_" + dt.Day + "_" + dt.Hour + "_" + dt.Minute + "_" + dt.Second +"num "+allnum+"_1.jpg"); cameraMat.ImWrite(fitImageFolder + "1.jpg"); FileStream pic1_path = new FileStream("D:\\huarui\\txt\\pic1name.txt", FileMode.Create); StreamWriter pic1 = new StreamWriter(pic1_path, Encoding.GetEncoding("gb2312")); pic1.Write("Current product" + ":" + fitImageFolder1 + comboBox1.Text + "_" + dt.Year + "_" + dt.Month + "_" + dt.Day + "_" + dt.Hour + "_" + dt.Minute + "_" + dt.Second + "num " + allnum+ "_1.jpg"); pic1.Close(); pic1_path.Close(); #region 1.预处理 //Mat PretreatmentMat = new Mat(); //GetContoursPic(cameraMat, PretreatmentMat); #endregion #region 2.YOLO检测 //MLRequest req = new MLRequest(); //req.currentMat = cameraMat.Clone(); //req.ResizeWidth = 640; //req.ResizeHeight = 640; //req.Score = 0.3f; //req.in_lable_path = LablePath;//标签路径 //req.confThreshold = 0.3f;//模型置信度 //req.iouThreshold = 0.4f;//检测IOU //req.out_node_name = "output"; //MLResult mL = simboObjectDetection.RunInferenceFixed(req); //Console.WriteLine(mL.ToString()); #endregion #region 3.OCR识别 //MLRequest reqcut = new MLRequest(); //reqcut.currentMat = cameraMat.Clone(); //MLResult mL = simboObjectDetection.RunInferenceFixed(reqcut); #endregion #region 显示结果比对 //Mat Image1 = Cv2.ImRead("D:/12345.jpg"); //Bitmap _nitmap1 = Image1.ToBitmap(); //pictureBox2.Image = _nitmap1; //Bitmap _nitmap2 = mL.ResultMap; //pictureBox2.Image = _nitmap2; #endregion //显示结果 //pictureBox1.Image = mL.ResultMap; //List ResultDetails = mL.ResultDetails; } public async void yolo(Mat cameraMat) { DateTime dt = DateTime.Now; //string fitImageFolder = "D:\\huarui\\pic//"; string fitImageFolder1 = "D:\\huarui\\pic//" + dt.Year + "_" + dt.Month + "_" + dt.Day + "//"; if (!Directory.Exists(fitImageFolder1)) { Directory.CreateDirectory(fitImageFolder1); } string onename = fitImageFolder1 + comboBox1.Text + "_" + dt.Year + "_" + dt.Month + "_" + dt.Day + "_" + dt.Hour + "_" + dt.Minute + "_" + dt.Second + "num " + allnum + "_1res.jpg"; #region 1.预处理 //Mat PretreatmentMat = new Mat(); //GetContoursPic(cameraMat, PretreatmentMat); #endregion #region 2.YOLO检测 MLRequest req = new MLRequest(); req.currentMat = cameraMat.Clone(); req.ResizeWidth = 640; req.ResizeHeight = 640; req.Score = 0.75f; req.in_lable_path = LablePath;//标签路径 req.confThreshold = 0.6f;//模型置信度 req.iouThreshold = 0.3f;//检测IOU req.out_node_name = "output"; MLResult mL = simboObjectDetection.RunInferenceFixed(req); int shuliang = mL.ResultDetails.Count; Console.WriteLine(shuliang.ToString()); Bitmap resultImage = mL.ResultMap; #endregion #region 3.OCR识别 //MLRequest reqcut = new MLRequest(); //reqcut.currentMat = cameraMat.Clone(); //MLResult mL = simboObjectDetection.RunInferenceFixed(reqcut); #endregion #region 显示结果比对 //Mat Image1 = Cv2.ImRead("D:/12345.jpg"); //Bitmap _nitmap1 = Image1.ToBitmap(); //pictureBox2.Image = _nitmap1; //Bitmap _nitmap2 = mL.ResultMap; //pictureBox2.Image = _nitmap2; #endregion //显示结果 int chishu_shuliang = shuliang - textBox1.Text.ToInt(); if (chishu_shuliang <= 45) { chishu_shuliang = 42; } else if (chishu_shuliang >= 45 && chishu_shuliang <= 49) { chishu_shuliang = 48; } else { chishu_shuliang = shuliang - textBox1.Text.ToInt(); ; } if (textBox4.InvokeRequired) { this.Invoke(new Action(() => { textBox4.Text = chishu_shuliang.ToString(); })); } else { textBox4.Text = "haha"; } if (textBox2.InvokeRequired) { this.Invoke(new Action(() => { textBox2.Text = textBox1.Text; })); } else { textBox2.Text = "haha"; } await Task.Run(() => { if (!this.IsHandleCreated) return; this.Invoke(new Action(() => { pictureBox1.Image = resultImage; })); }); if (pictureBox1.InvokeRequired) { this.Invoke(new Action(() => { pictureBox1.Image = mL.ResultMap; mL.ResultMap.Save("D:\\huarui\\pic\\1RES.jpg"); mL.ResultMap.Save(onename); })); } else { pictureBox1.Image = mL.ResultMap; } //textBox4.Text = chishu_shuliang.ToString(); //textBox2.Text = textBox1.Text; //pictureBox1.Image = mL.ResultMap; //List ResultDetails = mL.ResultDetails; } private string luoju_detect(string path) { //string debugPath = System.Environment.CurrentDirectory; //此c#项目的debug文件夹路径 string pyexePath = @"D:\huarui\demo.exe"; //python文件所在路径,一般不使用绝对路径,此处仅作为例子,建议转移到debug文件夹下 Process p = new Process(); p.StartInfo.FileName = pyexePath;//需要执行的文件路径 p.StartInfo.UseShellExecute = false; //必需 p.StartInfo.RedirectStandardOutput = true;//输出参数设定 p.StartInfo.RedirectStandardInput = true;//传入参数设定 p.StartInfo.CreateNoWindow = true; p.StartInfo.Arguments = path;//参数以空格分隔,如果某个参数为空,可以传入”” p.Start(); string output = p.StandardOutput.ReadToEnd(); //p.WaitForExit();//关键,等待外部程序退出后才能往下执行} //Console.Write(output);//输出 //p.Close(); return output; } //string cam1_savepath = fitImageFolder + comboBox1.Text+dt.Year + dt.Month + dt.Day + dt.Hour + dt.Minute + dt.Second + "_2.jpg"; public void OnCameraMatOutPut2(DateTime dt, Mat cameraMat, int SnapshotCount) { string fitImageFolder = "D:\\huarui\\pic//"; string fitImageFolder1 = "D:\\huarui\\pic//" + dt.Year + "_" + dt.Month + "_" + dt.Day + "//"; if (!Directory.Exists(fitImageFolder1)) { Directory.CreateDirectory(fitImageFolder1); } cameraMat.ImWrite(fitImageFolder1 + comboBox1.Text + "_" + dt.Year + "_" + dt.Month + "_" + dt.Day + "_" + dt.Hour + "_" + dt.Minute + "_" + dt.Second + "num " + allnum+"_2.jpg"); string twoname = fitImageFolder1 + comboBox1.Text + "_" + dt.Year + "_" + dt.Month + "_" + dt.Day + "_" + dt.Hour + "_" + dt.Minute + "_" + dt.Second + "num " + allnum + "_2res.jpg"; cameraMat.ImWrite(fitImageFolder + "2.jpg"); FileStream pic2_path = new FileStream("D:\\huarui\\txt\\pic2name.txt", FileMode.Create); StreamWriter pic2 = new StreamWriter(pic2_path, Encoding.GetEncoding("gb2312")); pic2.Write("Current product" +":"+ fitImageFolder1 + comboBox1.Text + "_" + dt.Year + "_" + dt.Month + "_" + dt.Day + "_" + dt.Hour + "_" + dt.Minute + "_" + dt.Second + "num " + allnum+ "_2.jpg"); pic2.Close(); pic2_path.Close(); #region 1.预处理 //Mat PretreatmentMat = new Mat(); //GetContoursPic(cameraMat, PretreatmentMat); #endregion #region 2.螺距检测 //string juli = ""; string path = "D:\\huarui\\pic\\2.jpg"; var src_images = Cv2.ImRead(path); var src = new Mat(); Cv2.Rotate(src_images, src, RotateFlags.Rotate90Clockwise); src.SaveImage(path); luoju_detect(path); #endregion #region 显示结果 string luoju_res = File.ReadAllText("D:\\huarui\\txt/luoju.txt"); if (luoju_res.ToInt() > 80) { string ju = "1.5"; textBox7.Text = ju; } else { string ju = "1.25"; textBox7.Text = ju; } #endregion //显示结果 string cemain = "D:\\huarui\\pic\\2_result.jpg"; Mat cemian_image = Cv2.ImRead(cemain); Cv2.ImWrite(twoname, cemian_image); pictureBox2.Image = cemian_image.ToBitmap(); } int j = 1; bool previousState = false; // 上一个状态 bool currentState = false; // 当前状态 // 模拟从PLC读取地址值的函数 bool ReadPLCAddress() { int value = siemensPLCTCP.ReadBool("M10.0"); if (value == 1) return true; else return false; } int allnum = 0; int oknum = 0; int ngnum = 0; private void detectbutton_Click(object sender, EventArgs e) { //this.detectbutton.BackColor = System.Drawing.Color.SpringGreen; #if false hikCamera.Snapshot(); hikCamera2.Snapshot(); //string path = "D:\\2.jpg"; //string luju = ""; //luoju_detect(path); Mat cameraMat = Cv2.ImRead("D:\\huarui\\pic\\1.jpg"); yolo(cameraMat); if (LJDis <= 0) while (true) { serialPortBase.Writebty(new byte[] { 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0xC4, 0x0b }, 0, 8); while (true) { if (Ifreturndata) { Ifreturndata = false; break; } Thread.Sleep(2); } if (LJDis > 0) { break; } Thread.Sleep(2); } string lj = File.ReadAllText("D:\\huarui\\txt\\changdu.txt"); if (lj.ToInt() > 2800) { textBox5.Text = "31"; } else if (2610 < lj.ToInt() && lj.ToInt() < 2800) { textBox5.Text = "33"; } else if (2500 < lj.ToInt() && lj.ToInt() < 2600) { textBox5.Text = "33.5"; } else if (2400 < lj.ToInt() && lj.ToInt() < 2500) { textBox5.Text = "35"; } else if (2300 < lj.ToInt() && lj.ToInt() < 2400) { textBox5.Text = "36"; } else if (2200 < lj.ToInt() && lj.ToInt() < 2300) { textBox5.Text = "36.5"; } else if (1800 < lj.ToInt() && lj.ToInt() < 2200) { textBox5.Text = "40.5"; } if (textBox4.Text == SnaptPage.Text) { this.textBox4.BackColor = System.Drawing.Color.SpringGreen; } else { this.textBox4.BackColor = System.Drawing.Color.Red; } if (textBox2.Text == textBox1.Text) { this.textBox2.BackColor = System.Drawing.Color.SpringGreen; } else { this.textBox2.BackColor = System.Drawing.Color.Red; } if (textBox5.Text == textBox3.Text) { this.textBox5.BackColor = System.Drawing.Color.SpringGreen; } else { this.textBox5.BackColor = System.Drawing.Color.Red; } if (textBox6.Text == textBox7.Text) { this.textBox7.BackColor = System.Drawing.Color.SpringGreen; } else { this.textBox7.BackColor = System.Drawing.Color.Red; } if (textBox4.Text == SnaptPage.Text && textBox2.Text == textBox1.Text && textBox5.Text == textBox3.Text && textBox6.Text == textBox7.Text) { string ok = "D:\\huarui\\pic\\ok.jpg"; Mat okimage = Cv2.ImRead(ok); pictureBox3.Image = okimage.ToBitmap(); string pic1_name = File.ReadAllText("D:\\huarui\\txt\\pic1name.txt"); string pic2_name = File.ReadAllText("D:\\huarui\\txt\\pic2name.txt"); textBox9.AppendText(pic1_name + pic2_name + "Detection result:" + "OK" + "\r\n"); string PLCAdress1 = "M11.0"; siemensPLCTCP.WriteBool(PLCAdress1, true); } else { string ng = "D:\\huarui\\pic\\ng.jpg"; Mat ngimage = Cv2.ImRead(ng); pictureBox3.Image = ngimage.ToBitmap(); string pic1_name = File.ReadAllText("D:\\huarui\\txt\\pic1name.txt", Encoding.GetEncoding("gb2312")); string pic2_name = File.ReadAllText("D:\\huarui\\txt\\pic2name.txt", Encoding.GetEncoding("gb2312")); textBox9.AppendText(pic1_name + pic2_name + "Detection result:" + "NG" + "\r\n"); string PLCAdress1 = "M12.0"; siemensPLCTCP.WriteBool(PLCAdress1, true); string PLCAdress1 = "M13.0"; siemensPLCTCP.WriteBool(PLCAdress1, true); } #else try { Task.Run(() => { while (true) { currentState = ReadPLCAddress(); // 检测上升沿 if (currentState && !previousState) { autoResetEvent.Set(); Console.WriteLine("检测到上升沿==触发按钮"); waitResetEvent.WaitOne();//可以删除 } // 更新上一个状态 previousState = currentState; // 延迟一段时间,避免频繁读取 Thread.Sleep(100); // 延迟100毫秒 } }); Task.Run(() => { while (true) { autoResetEvent.WaitOne(); //currentState = ReadPLCAddress(); // 检测上升沿 // if (currentState && !previousState) { // Console.WriteLine("检测到上升沿==触发按钮"); try { #region 检测 textBox9.AppendText("开始检测" + "\r\n"); hikCamera.Snapshot(); hikCamera2.Snapshot(); //string path = "D:\\2.jpg"; //string luju = ""; //luoju_detect(path); Mat cameraMat = Cv2.ImRead("D:\\huarui\\pic\\1.jpg"); yolo(cameraMat); // if (LJDis<=0) allnum = allnum + 1; textBox13.Text = allnum.ToString(); while (true) { serialPortBase.Writebty(new byte[] { 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0xC4, 0x0b }, 0, 8); while (true) { if (Ifreturndata) { Ifreturndata = false; break; } Thread.Sleep(2); } if (LJDis > 0) { break; } Thread.Sleep(2); } string lj = File.ReadAllText("D:\\huarui\\txt\\changdu.txt"); if (lj.ToInt() > 2800) { textBox5.Text = "31"; } else if (2610 < lj.ToInt() && lj.ToInt() < 2800) { textBox5.Text = "33"; } else if (2500 < lj.ToInt() && lj.ToInt() < 2600) { textBox5.Text = "33.5"; } else if (2400 < lj.ToInt() && lj.ToInt() < 2500) { textBox5.Text = "35"; } else if (2300 < lj.ToInt() && lj.ToInt() < 2400) { textBox5.Text = "36"; } else if (2200 < lj.ToInt() && lj.ToInt() < 2300) { textBox5.Text = "36.5"; } else if (1800 < lj.ToInt() && lj.ToInt() < 2200) { textBox5.Text = "40.5"; } if (textBox4.Text == SnaptPage.Text) { this.textBox4.BackColor = System.Drawing.Color.SpringGreen; } else { this.textBox4.BackColor = System.Drawing.Color.Red; } if (textBox2.Text == textBox1.Text) { this.textBox2.BackColor = System.Drawing.Color.SpringGreen; } else { this.textBox2.BackColor = System.Drawing.Color.Red; } if (textBox5.Text == textBox3.Text) { this.textBox5.BackColor = System.Drawing.Color.SpringGreen; } else { this.textBox5.BackColor = System.Drawing.Color.Red; } if (textBox6.Text == textBox7.Text) { this.textBox7.BackColor = System.Drawing.Color.SpringGreen; } else { this.textBox7.BackColor = System.Drawing.Color.Red; } if (textBox4.Text == SnaptPage.Text && textBox2.Text == textBox1.Text && textBox5.Text == textBox3.Text && textBox6.Text == textBox7.Text) { string ok = "D:\\huarui\\pic\\ok.jpg"; Mat okimage = Cv2.ImRead(ok); pictureBox3.Image = okimage.ToBitmap(); string pic1_name = File.ReadAllText("D:\\huarui\\txt\\pic1name.txt"); string pic2_name = File.ReadAllText("D:\\huarui\\txt\\pic2name.txt"); string leixing2 = File.ReadAllText("D:\\huarui\\txt/xinghao.txt"); textBox12.Text = leixing2; oknum = oknum + 1; textBox14.Text = oknum.ToString(); textBox9.AppendText(pic1_name + pic2_name + "Detection result:" + "OK" + "\r\n"); string PLCAdress1 = "M12.0"; siemensPLCTCP.WriteBool(PLCAdress1, false); string PLCAdress2 = "M13.0"; siemensPLCTCP.WriteBool(PLCAdress2, false); string PLCAdress4 = "M14.0"; siemensPLCTCP.WriteBool(PLCAdress4, false); string PLCAdress3 = "M11.0"; siemensPLCTCP.WriteBool(PLCAdress3, true); } else { string ng = "D:\\huarui\\pic\\ng.jpg"; Mat ngimage = Cv2.ImRead(ng); pictureBox3.Image = ngimage.ToBitmap(); string pic1_name = File.ReadAllText("D:\\huarui\\txt\\pic1name.txt", Encoding.GetEncoding("gb2312")); string pic2_name = File.ReadAllText("D:\\huarui\\txt\\pic2name.txt", Encoding.GetEncoding("gb2312")); textBox9.AppendText(pic1_name + pic2_name + "Detection result:" + "NG" + "\r\n"); string leixing2 = File.ReadAllText("D:\\huarui\\txt/xinghao.txt"); textBox12.Text = leixing2; ngnum = ngnum + 1; textBox15.Text = ngnum.ToString(); string PLCAdress4 = "M14.0"; siemensPLCTCP.WriteBool(PLCAdress4, false); string PLCAdress3 = "M11.0"; siemensPLCTCP.WriteBool(PLCAdress3, false); string PLCAdress1 = "M12.0"; siemensPLCTCP.WriteBool(PLCAdress1, true); string PLCAdress2 = "M13.0"; siemensPLCTCP.WriteBool(PLCAdress2, true); } #endregion } catch (Exception ex) { } } waitResetEvent.Set();//可以删除 Thread.Sleep(20); // 延迟100毫秒 } }); } catch(Exception exx) { throw exx; } #endif } private void Camopenbutton_Click(object sender, EventArgs e) { } private void opendevicebutton_Click(object sender, EventArgs e) { string PLCAdress1 = "M11.0"; siemensPLCTCP.WriteBool(PLCAdress1, true); this.opendevicebutton.BackColor = System.Drawing.Color.SpringGreen; try { hikCamera.Start("169.254.177.197");//默认开启相机1 hikCamera2.Start("169.254.21.198");//默认开启相机2 serialPortBase.Init("Com3"); serialPortBase.Start(); } catch (Exception ex) { MessageBox.Show(ex.Message); } hikCamera.OnHImageOutput -= OnCameraMatOutPut; hikCamera.OnHImageOutput += OnCameraMatOutPut; hikCamera2.OnHImageOutput -= OnCameraMatOutPut2; hikCamera2.OnHImageOutput += OnCameraMatOutPut2; serialPortBase.OnDataReceived -= SerialPort_DataReceived; serialPortBase.OnDataReceived += SerialPort_DataReceived; //serialPortBase.WriteStr("1222222222222"); //textBox9.Text.Append("设备开启成功"); textBox9.AppendText("设备开启成功" + "\r\n"); } private void photobutton_Click(object sender, EventArgs e) { hikCamera.Snapshot(); } private void Camclosebutton_Click(object sender, EventArgs e) { //hikCamera.Stop(); } private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { hikCamera.Stop(hikCamera.device); hikCamera2.Stop(hikCamera2.device); DateTime dt1 = DateTime.Now; FileStream baogao_path = new FileStream("D:\\huarui\\txt\\" + dt1.Year + "_" + dt1.Month + "_" + dt1.Day + "_" + dt1.Hour + "_" + dt1.Minute + "_检测报告.txt", FileMode.Create); StreamWriter baogao = new StreamWriter(baogao_path, Encoding.Default); string jiancejieguo ="型号:"+ textBox12.Text + " 总数: "+textBox13.Text + " 合格数: "+textBox14.Text +" 不合格数: "+ textBox15.Text; baogao.Write(jiancejieguo); baogao.Close(); baogao_path.Close(); FileStream log_path = new FileStream("D:\\huarui\\txt\\" + dt1.Year + dt1.Month + dt1.Day + dt1.Hour + "_log.txt", FileMode.Create); StreamWriter log = new StreamWriter(log_path, Encoding.Default); log.Write(textBox9.Text); log.Close(); log.Close(); // hikCamera2.Stop(); string PLCAdress1 = "M12.0"; siemensPLCTCP.WriteBool(PLCAdress1, false); string PLCAdress2 = "M13.0"; siemensPLCTCP.WriteBool(PLCAdress2, false); string PLCAdress4 = "M14.0"; siemensPLCTCP.WriteBool(PLCAdress4, false); string PLCAdress3 = "M11.0"; siemensPLCTCP.WriteBool(PLCAdress3, false); } private void groupBox4_Enter(object sender, EventArgs e) { } private void groupBox3_Enter(object sender, EventArgs e) { } private void label3_Click(object sender, EventArgs e) { } private void groupBox2_Enter(object sender, EventArgs e) { } private void label1_Click(object sender, EventArgs e) { } private void textBox1_TextChanged(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { if (siemensPLCTCP != null) { string PLCAdress = textBox10.Text.ToString(); int value = siemensPLCTCP.ReadBool(PLCAdress); textBox8.Text = value.ToString(); } } private void button2_Click(object sender, EventArgs e) { if (siemensPLCTCP != null) { string PLCAdress = textBox10.Text.ToString(); bool value = textBox11.Text.ToBool(); siemensPLCTCP.WriteBool(PLCAdress, value); } } private void textBox10_TextChanged(object sender, EventArgs e) { } private void button1_Click_1(object sender, EventArgs e) { if (siemensPLCTCP != null) { string PLCAdress = textBox10.Text.ToString(); int value = siemensPLCTCP.ReadBool(PLCAdress); textBox8.Text = value.ToString(); } } private void button2_Click_1(object sender, EventArgs e) { if (siemensPLCTCP != null) { string PLCAdress = textBox10.Text.ToString(); bool value = textBox11.Text.ToBool(); siemensPLCTCP.WriteBool(PLCAdress, value); } } private void button1_Click_2(object sender, EventArgs e) { if (siemensPLCTCP != null) { string PLCAdress = textBox10.Text.ToString(); int value = siemensPLCTCP.ReadBool(PLCAdress); textBox8.Text = value.ToString(); } } private void button2_Click_2(object sender, EventArgs e) { if (siemensPLCTCP != null) { string PLCAdress = textBox10.Text.ToString(); bool value = textBox11.Text.ToBool(); siemensPLCTCP.WriteBool(PLCAdress, value); } } private void button3_Click(object sender, EventArgs e) { string PLCAdress2 = "M13.0"; siemensPLCTCP.WriteBool(PLCAdress2, false); } } }