HuaRui/MainForm.cs

1064 lines
40 KiB
C#
Raw Permalink Normal View History

2024-08-17 14:06:39 +08:00
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);
}
}
}