HuaRui/MainForm.cs
2024-08-17 14:06:39 +08:00

1064 lines
40 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<string> values = new System.Collections.Generic.HashSet<string>();
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<string> values = new System.Collections.Generic.HashSet<string>();
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);
//}
}
/// <summary>
/// 另一种16进制转10进制的处理方式Multiplier参与*16的循环很巧妙对Multiplier的处理很推荐逻辑统一
/// </summary>
/// <param name="HexaDecimalString"></param>
/// <returns></returns>
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;
}
/// <summary>
/// 字节数组转16进制字符串空格分隔
/// </summary>
/// <param name="byteDatas"></param>
/// <returns></returns>
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<DetectionResultDetail> 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<DetectionResultDetail> 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);
}
}
}