You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

600 lines
19 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using Estsh.Client.Base;
using System.Configuration;
using MainProgram;
using MainProgram.BLL;
using System.IO;
using System.Net;
using System.Threading;
using System.Net.Sockets;
using Com.Estsh.MES.AssemblyInput;
namespace Estsh.Client.StepLibrary
{
public partial class YYOutPdlineInspection:StepBase
{
private StepLibraryAPP _app = null;
private List<dynamic> _CheckData = null; //绑定数据
private delegate void DeleGrdBind(List<dynamic> dt);
private int _terminalID = 0;
private string _sn = "";
private int Inum = 1;
//PASS间隔限制工位集合
private string _passIntervalLimit = string.Empty;
//PLC信号标识
private string JYFlag = string.Empty; //静音房信号
private string RWFlag = string.Empty; //返工信号
private string FXFlag = string.Empty; //放行信号
public YYOutPdlineInspection()
{
InitializeComponent();
// 有用户界面的工步在初始化时需要设置为不可见
// 开始执行此工步后再置为可见
this.Visible = false;
}
public override bool Do()
{
try
{
// 置为可见并加载到最前端
this.Visible = true;
this.BringToFront();
// 从配置文件中加载工位编号
_terminalID = Convert.ToInt32(Context["terminal_id"].ToString());
_sn = Context["serial_number"].ToString();
_app = new StepLibraryAPP(httpClient);
string _PartNo = _app.GetPartNo(_sn);
string rule = _app.GetRuleNo(_PartNo);
string partLocation = _app.GetPartLoc(_PartNo);
PlcFlow.Enabled = true;
PlcFlow.Start();
// 执行父类的 Do 方法并返回
return base.Do();
}
catch (Exception ex)
{
// 记录日志
using (StreamWriter sw = new StreamWriter("Error_Log_" + DateTime.Now.ToString("yyyyMM") + ".txt", true))
{
sw.WriteLine(string.Format("{0} {1}", "["
+ DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
+ "] ", ex.ToString()));
sw.Flush();
sw.Close();
}
return false;
}
}
public void ForeachPanelControls()
{
string ctrlName = "btnNGType";
for (int i = 1; i <= 16; i++)
{
ctrlName = "btnNGType" + i.ToString();
foreach (Control ctrl in tableLayoutPanel1.Controls)
{
if (ctrl is Button)
{
if (ctrl.Name.Equals(ctrlName))
ctrl.Text = "";
}
}
}
}
private void OutPdlineInspection_Load(object sender, EventArgs e)
{
_sn = Context["serial_number"].ToString();
_app = new StepLibraryAPP(httpClient);
_terminalID = Convert.ToInt32(Context["terminal_id"].ToString());
//校验电检数据
_app.insertDefectData(_sn, _terminalID);
ForeachPanelControls();
LoadDefect();
// 工步执行完成后调用此方法
//Complate(this, e);
}
/// <summary>
/// 下一页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnNextPage_Click(object sender, EventArgs e)
{
Inum++;
LoadDefect();
}
/// <summary>
/// 上一页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnLastPage_Click(object sender, EventArgs e)
{
Inum--;
LoadDefect();
}
/// <summary>
/// 加载不良
/// </summary>
private void LoadDefect()
{
List<dynamic> DefectList = _app.getYYDefectList(_terminalID);
int CountQty = DefectList.Count; //一页有多少行
int PageRows = 16;
int PageCount = (int)Math.Ceiling((double)CountQty / (double)PageRows);//一共有多少页
int RowsEnd = 0;//终止行数
//Inum:当前页数
if (Inum < 1)
{
Inum++;
return;
}
else if (Inum > PageCount)
{
Inum--;
return;
}
//颜色初始化
btnNGType1.BackColor = Color.Gainsboro;
btnNGType2.BackColor = Color.Gainsboro;
btnNGType3.BackColor = Color.Gainsboro;
btnNGType4.BackColor = Color.Gainsboro;
btnNGType5.BackColor = Color.Gainsboro;
btnNGType6.BackColor = Color.Gainsboro;
btnNGType7.BackColor = Color.Gainsboro;
btnNGType8.BackColor = Color.Gainsboro;
btnNGType9.BackColor = Color.Gainsboro;
btnNGType10.BackColor = Color.Gainsboro;
btnNGType11.BackColor = Color.Gainsboro;
btnNGType12.BackColor = Color.Gainsboro;
btnNGType13.BackColor = Color.Gainsboro;
btnNGType14.BackColor = Color.Gainsboro;
btnNGType15.BackColor = Color.Gainsboro;
btnNGType16.BackColor = Color.Gainsboro;
string strInum = Inum.ToString() + "/" + PageCount.ToString();
btnInum.Text = strInum;
ForeachPanelControls();
List<dynamic> SNDefectLDt = new DataTable();
SNDefectLDt = _app.getSNDefect(_sn, _terminalID);
for (int i = 1; i <= Inum * PageRows; i++)
{
int j = 0;
if (Inum > 1)
{
j = i + 16;
}
else
{
j = i;
}
if (CountQty < j)
{
return;
}
string strDefect = DefectList[j - 1]["defect_desc"].ToString();
string button = "btnNGType" + i.ToString();
Button btn = (Button)this.GetType().GetField(button, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.IgnoreCase).GetValue(this);
btn.Text = strDefect;
if (SNDefectLDt.Select("defect_desc" + "='" + strDefect + "'").Length > 0)
{
btn.BackColor = Color.Red;
}
else
{
btn.BackColor = Color.Gainsboro;
}
}
ShowMessage(this, "Green|请检测座椅,并选择不良项!");
}
/// <summary>
/// 新增不良明细
/// </summary>
private void operationDefect(string sn, int terminalID, string defectName, string operationType)
{
if (operationType.ToUpper() == "ADD")
{
_app.addYYSndefect(sn, terminalID, defectName);
}
else if ((operationType.ToUpper() == "DEL"))
{
_app.delYYSndefect(sn, terminalID, defectName);
}
}
/// <summary>
/// 插入或修改不良项
/// </summary>
/// <param name="btnName"></param>
private void defectOperation(string btnName)
{
string button = btnName;
foreach (Control ctrl in tableLayoutPanel1.Controls)
{
if (ctrl is Button)
{
if (ctrl.Name.Equals(button))
{
//ctrl.Text = strDefect;
if (ctrl.BackColor == Color.Gainsboro)
{
if (_app.getDefectDetail( _terminalID,ctrl.Text.ToString()).Count > 0)
{
YYNGFacadeCheck yyNGFacadeCheck = new YYNGFacadeCheck(_app, _sn, _terminalID, ctrl.Text.ToString());
yyNGFacadeCheck.ShowDialog();
if (_app.getSNDefectDetail(_sn, _terminalID, ctrl.Text.ToString()).Count > 0)
{
operationDefect(_sn, _terminalID, ctrl.Text.ToString(), "ADD");
ctrl.BackColor = Color.Red;
ShowMessage(this, "Green|【" + ctrl.Text.ToString() + "】不良,新增成功!");
}
}
else
{
operationDefect(_sn, _terminalID, ctrl.Text.ToString(), "ADD");
ctrl.BackColor = Color.Red;
ShowMessage(this, "Green|【" + ctrl.Text.ToString() + "】不良,新增成功!");
}
}
else if (ctrl.BackColor == Color.Red)
{
if (_app.getDefectDetail(_terminalID, ctrl.Text.ToString()).Count > 0)
{
YYNGFacadeCheck yyNGFacadeCheck = new YYNGFacadeCheck(_app, _sn, _terminalID, ctrl.Text.ToString());
yyNGFacadeCheck.ShowDialog();
if (_app.getSNDefectDetail(_sn, _terminalID, ctrl.Text.ToString()).Count > 0)
{
return;
}
else
{
operationDefect(_sn, _terminalID, ctrl.Text.ToString(), "DEL");
ctrl.BackColor = Color.Gainsboro;
ShowMessage(this, "Green|【" + ctrl.Text.ToString() + "】不良,删除成功!");
}
}
else
{
operationDefect(_sn, _terminalID, ctrl.Text.ToString(), "DEL");
ctrl.BackColor = Color.Gainsboro;
ShowMessage(this, "Green|【" + ctrl.Text.ToString() + "】不良,删除成功!");
}
}
else
{
ctrl.BackColor = Color.Yellow;
}
}
}
}
}
private void btnNGType1_Click(object sender, EventArgs e)
{
defectOperation(btnNGType1.Name);
}
private void btnNGType2_Click(object sender, EventArgs e)
{
defectOperation(btnNGType2.Name);
}
private void btnNGType3_Click(object sender, EventArgs e)
{
defectOperation(btnNGType3.Name);
}
private void btnNGType4_Click(object sender, EventArgs e)
{
defectOperation(btnNGType4.Name);
}
private void btnNGType5_Click(object sender, EventArgs e)
{
defectOperation(btnNGType5.Name);
}
private void btnNGType6_Click(object sender, EventArgs e)
{
defectOperation(btnNGType6.Name);
}
private void btnNGType7_Click(object sender, EventArgs e)
{
defectOperation(btnNGType7.Name);
}
private void btnNGType8_Click(object sender, EventArgs e)
{
defectOperation(btnNGType8.Name);
}
private void btnNGType9_Click(object sender, EventArgs e)
{
defectOperation(btnNGType9.Name);
}
private void btnNGType10_Click(object sender, EventArgs e)
{
defectOperation(btnNGType10.Name);
}
private void btnNGType11_Click(object sender, EventArgs e)
{
defectOperation(btnNGType11.Name);
}
private void btnNGType12_Click(object sender, EventArgs e)
{
defectOperation(btnNGType12.Name);
}
private void btnNGType13_Click(object sender, EventArgs e)
{
defectOperation(btnNGType13.Name);
}
private void btnNGType14_Click(object sender, EventArgs e)
{
defectOperation(btnNGType14.Name);
}
private void btnNGType15_Click(object sender, EventArgs e)
{
defectOperation(btnNGType15.Name);
}
private void btnNGType16_Click(object sender, EventArgs e)
{
defectOperation(btnNGType16.Name);
}
private void btnRework_Click(object sender, EventArgs e)
{
List<dynamic> SNDefectLDt = new DataTable();
SNDefectLDt = _app.getSNDefect(_sn, _terminalID);
if (SNDefectLDt.Count <= 0)
{
ShowMessage(this, "red|【" + _sn + "】没有添加不良项,请选择不良类型!");
return;
}
//余姚返工类型2
StopStep(2);
}
private void btnOk_Click(object sender, EventArgs e)
{
List<dynamic> SNDefectLDt = new DataTable();
SNDefectLDt = _app.getSNDefect(_sn, _terminalID);
if (SNDefectLDt.Count > 0)
{
ShowMessage(this, "red|【" + _sn + "】有不良项,请重新确认!");
return;
}
//更新条码状态为下线
_app.updateStatus(_sn);
try
{
string tres = _app.ProdTrans(0, Context["serial_number"].ToString(), Convert.ToInt32(Context["terminal_id"].ToString()), 0, "C");
if (tres.ToUpper() != "OK")
{
ShowMessage(this, "red|" + tres + "");
}
}
catch (Exception ex)
{
using (StreamWriter sw = new StreamWriter("ProdTrans-" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", true))
{
sw.WriteLine(string.Format("{0} {1} {2}", "["
+ DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
+ "] ProdTrans", Context["serial_number"].ToString(), ex));
sw.Flush();
sw.Close();
}
}
// 工步执行完成后调用此方法
Complate(this, e);
}
/// <summary>
/// 读取PLC信号
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PlcFlow_Tick(object sender, EventArgs e)
{
//静音
JYFlag = _app.YYReadyPlc("OPC_ReadJY", _terminalID).ToString().ToUpper();
//外观不良
RWFlag = _app.YYReadyPlc("OPC_ReadRW", _terminalID).ToString().ToUpper();
//放行
FXFlag = _app.YYReadyPlc("OPC_OK", _terminalID).ToString().ToUpper();
if (JYFlag == "TRUE")
{
bool retSNTravel = _app.InsertSNTravel(_sn, _terminalID, 8);
}
}
private void btnPhoto_Click(object sender, EventArgs e)
{
List<dynamic> SNDefectLDt = new DataTable();
SNDefectLDt = _app.getSNDefect(_sn, _terminalID);
if (RWFlag.ToUpper() == "TRUE")
{
//按钮不合格
if (SNDefectLDt.Count <= 0)
{
ShowMessage(this, "Red|【" + _sn + "】未选不良明细!");
return;
}
}
else
{
//按钮合格
if (SNDefectLDt.Count > 0)
{
_app.UpdateOPCPointValue("OPC_NG", _terminalID, "3");
ShowMessage(this, "Red|【" + _sn + "】产线不良按钮当前状态为“良品”!");
//return;
}
}
// 实名发送
IPEndPoint localIpep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12345); // 本机IP指定的端口号
udpcSend = new UdpClient(localIpep);
Thread thrSend = new Thread(SendMessage);
thrSend.Start(_sn);
ShowMessage(this, "Green|【" + _sn + "】照片拍摄中!");
Thread.Sleep(1000);
List<dynamic> dt = _app.getPhoto(_sn, _terminalID);
if (dt.Count > 0)
{
ShowMessage(this, "Green|【" + _sn + "】拍照成功!");
if (SNDefectLDt.Count > 0)
{
if (_app.IsCurrentSN(_sn) == false)
{
_app.SetSNStatusNG(_sn,1);
}
}
else
{
//更新条码状态为下线
_app.updateStatus(_sn);
try
{
string tres = _app.ProdTrans(0, Context["serial_number"].ToString(), Convert.ToInt32(Context["terminal_id"].ToString()), 0, "C");
if (tres.ToUpper() != "OK")
{
ShowMessage(this, "red|" + tres + "");
}
}
catch (Exception ex)
{
using (StreamWriter sw = new StreamWriter("ProdTrans-" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", true))
{
sw.WriteLine(string.Format("{0} {1} {2}", "["
+ DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
+ "] ProdTrans", Context["serial_number"].ToString(), ex));
sw.Flush();
sw.Close();
}
}
}
//更新条码状态为下线
_app.updateStatus(_sn);
Complate(this, e);
}
else
{
ShowMessage(this, "red|【" + _sn + "】拍照失败,请重新拍照!");
}
}
/// <summary>
/// 用于UDP发送的网络服务类
/// </summary>
private UdpClient udpcSend;
/// <summary>
/// 用于UDP接收的网络服务类
/// </summary>
private UdpClient udpcRecv;
/// <summary>
/// 发送信息
/// </summary>
/// <param name="obj"></param>
private void SendMessage(object obj)
{
string message = (string)obj;
byte[] sendbytes = Encoding.Unicode.GetBytes(message);
IPEndPoint remoteIpep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8848); // 发送到的IP地址和端口号
udpcSend.Send(sendbytes, sendbytes.Length, remoteIpep);
udpcSend.Close();
}
}
}