实例介绍
【实例简介】
1. 运行概要:
在没有配置文件(第一次运行)或者正确的配置文件(配置文件被错误修改)的条件下,若想正常运行本程序,需要先将正确的配置文件放入本程序的运行程序所处的文件夹中,若无正确的配置文件,则可以先运行程序,然后在设置页面将设置正确的基本信息(注意:MES_IP就是本程序的服务器的IP,IP地址必须跟程序所处的电脑的IP一致,部分信息如:资源代号、设备工站等只能通过切换PLC的基本信息页面来获取,),然后点击保存,之后重新运行程序即可【实例截图】
【核心代码】
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Xml;
using System.IO;
public enum enActionStep
{
None = -1,
LCD_LD = 10086,
ACF_LD,
FPC_LD,
PLASMA,
SL2600S5,
XMD4019,
UL1918,
Alarm
};
namespace MES
{
public partial class MESDlg : Form //此类待完成
{
public MESDlg()
{
InitializeComponent();
}
private bool m_bOnLine = false;
private static List<enActionStep> m_ActionStepList;//处理数据线程的步骤流程链表
private static object m_StepListLock;
private bool m_bPause_Scan;
private bool[] m_bReset;
private SetUp m_Form;
private int m_nLine;
public static int MES_MsgID;
/// <summary>
/// 用于显示各种失败、成功、报警信息
/// </summary>
/// <param name="msg"></param>
/// <param name="bAlarm"></param>
void DisPlayEvent(string strMsg, bool bAlarm)
{
listBox_EventDisplay.ForeColor = bAlarm ? Color.Red : Color.Black;
if (listBox_EventDisplay.Items.Count >= 30)
listBox_EventDisplay.Items.RemoveAt(0);
listBox_EventDisplay.Items.Add(strMsg "\r\n");
}
private void ShowEvent(string msg, bool bAlarm = true)
{
this.BeginInvoke((MethodInvoker)delegate
{
DisPlayEvent(msg, bAlarm);
});
}
/// <summary>
/// 显示各个Sock的各种状态,注:连接PLC的Sock只有连接和断开两种状态,即调用该事件时,第二个参数只有Add和Remove功能
/// </summary>
/// <param name="EndPoint"></param>
/// <param name="bAdd"></param>
private void ConnectEventShow(string EndPoint, enChangeEventType enType)
{
this.listBox_ConnectStatus.Invoke((MethodInvoker)delegate
{
if (enType == enChangeEventType.Add)
listBox_ConnectStatus.Items.Add(EndPoint);
else
{
string strSection = (EndPoint.Split(' '))[0];
foreach (object Item in listBox_ConnectStatus.Items)
{
string node = (string)Item;
if (node.Contains(strSection))//当未触发Add事件时,忽略此次Change事件
{
listBox_ConnectStatus.Items.Remove(node);
if(enType == enChangeEventType.Change)
listBox_ConnectStatus.Items.Add(EndPoint);
break;
}
}
}
});
}
private void ShowMsg_MES(string strTitle, string strMsg)
{
this.dataGridView_MESMsg.Invoke((MethodInvoker)delegate
{
if (dataGridView_MESMsg.Rows.Count > 30)
dataGridView_MESMsg.Rows.RemoveAt(dataGridView_MESMsg.Rows.Count - 2);
dataGridView_MESMsg.Rows.AddCopy(0);
dataGridView_MESMsg.Rows[0].Cells[0].Value = strTitle;
dataGridView_MESMsg.Rows[0].Cells[1].Value = strMsg;
});
}
private void ShowMsg_PLC(string strMsg)
{
this.listBox_PLCMsg.Invoke((MethodInvoker)delegate
{
listBox_PLCMsg.ForeColor = (m_nLine % 2) == 0 ? Color.Green : Color.Black;
m_nLine ;
if (m_nLine >= 50)
m_nLine = 0;
if (listBox_PLCMsg.Items.Count >= 30)
listBox_PLCMsg.Items.RemoveAt(0);
listBox_PLCMsg.Items.Add("从PLC收到数据:" strMsg "\r\n");
});
}
private void MESDlg_Load(object sender, EventArgs e)
{
ConfigMrg.GetInstance().InitSystemCfg();
NetWorkMrg.GetInstance().InitConfig();
DataMrg.GetInstance().InitData_Mrg();
NetWorkMrg.GetInstance().Sock_PLC.EVENTShow_TCP = ShowEvent;
NetWorkMrg.GetInstance().Sock_MES.EVENTShow_TCP = ShowEvent;
NetWorkMrg.GetInstance().Sock_PLC.EVENTConnect_TCP = ConnectEventShow;
NetWorkMrg.GetInstance().Sock_MES.ClientList.ConnectChangeEvent = ConnectEventShow;
NetWorkMrg.GetInstance().Sock_MES.Dic_ConnectType.ConnectChangeEvent = ConnectEventShow;
NetWorkMrg.GetInstance().Sock_MES.Dic_OnLineType.ConnectChangeEvent = ConnectEventShow;
NetWorkMrg.GetInstance().Sock_PLC.Connect(ConfigMrg.GetInstance().ConnectTimeOut_);
NetWorkMrg.GetInstance().Sock_MES.Start_Server();
InitMESDlg();
Thread thr = new Thread(ScanPLC_Thread);
thr.IsBackground = true;
thr.Start();
thr = new Thread(ActionThread);
thr.IsBackground = true;
thr.Start();
}
private void InitMESDlg()
{
MES_MsgID = 0;
m_ActionStepList = new List<enActionStep>();
m_StepListLock = new object();
m_bReset = new bool[5];
m_nLine = 0;
//软件标题和版本号
DateTime Edition = File.GetCreationTime(Application.ExecutablePath);
this.Text = "EPA_" Edition.Year Edition.Month Edition.Day Edition.Hour;
this.Width = Screen.PrimaryScreen.Bounds.Width;
this.Height = Screen.PrimaryScreen.Bounds.Height;
//groupBox外部的各个控件的初始化
button_LogIn.Location = new Point(12, 12);
button_LogIn.Anchor = AnchorStyles.Top | AnchorStyles.Left;
button_SetUp.Location = new Point(button_LogIn.Width button_LogIn.Location.X 5, 12);
button_SetUp.Anchor = AnchorStyles.Left | AnchorStyles.Top;
button_CMDRequest.Location = new Point(button_SetUp.Width button_SetUp.Location.X 5, 12);
button_CMDRequest.Anchor = AnchorStyles.Left | AnchorStyles.Top;
//groupBox_Status和内部控件的初始化
groupBox_Status.Height = this.Height - button_SetUp.Location.Y - button_SetUp.Height - 30;
groupBox_Status.Width = ((this.Width - 30) * 1 / 2) > 350 ? 350 : ((this.Width - 30) * 1 / 2);
groupBox_Status.Location = new Point(12, button_SetUp.Location.Y button_SetUp.Height 10);
groupBox_Status.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Top;
groupBox_Status.Controls.Add(dataGridView_Data);
groupBox_Status.Controls.Add(listBox_ConnectStatus);
groupBox_Status.Controls.Add(button_ChangeACF);
groupBox_Status.Controls.Add(button_CompelUpLoad);
listBox_ConnectStatus.Width = groupBox_Status.Width - 12;
listBox_ConnectStatus.Height = (groupBox_Status.Height - 30) / 4;
listBox_ConnectStatus.Location = new Point(6, 24);
listBox_ConnectStatus.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom;
dataGridView_Data.Width = groupBox_Status.Width - 12;
dataGridView_Data.Height = (groupBox_Status.Height - 30) * 3 / 5;
dataGridView_Data.Location = new Point(listBox_ConnectStatus.Location.X, groupBox_Status.Height - dataGridView_Data.Height - 6);
dataGridView_Data.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
dataGridView_Data.ColumnCount = 2;
dataGridView_Data.Columns[0].HeaderText = "DVID";
dataGridView_Data.Columns[0].ReadOnly = true;
dataGridView_Data.Columns[1].HeaderText = "名称";
dataGridView_Data.Columns[1].ReadOnly = true;
DataGridViewCheckBoxColumn newColumn = new DataGridViewCheckBoxColumn();
newColumn.HeaderText = "上传选择";
dataGridView_Data.Columns.Insert(0, newColumn);
dataGridView_Data.Columns[0].ReadOnly = false;
int i = 0;
foreach (KeyValuePair<string, int> Node in ConfigMrg.GetInstance().Dic_MesDVID)
{
DataGridViewRow Rows = new DataGridViewRow();
dataGridView_Data.Rows.Add(Rows);
dataGridView_Data.Rows[i].Cells[1].Value = Node.Value;
dataGridView_Data.Rows[i].Cells[2].Value = Node.Key;
if (ConfigMrg.GetInstance().DVIDSelectList.Contains(Node.Value))
dataGridView_Data.Rows[i].Cells[0].Value = true;
else
dataGridView_Data.Rows[i].Cells[0].Value = false;
i ;
}
dataGridView_Data.CellStateChanged = CellChange_DataGridView_Data;
button_CompelUpLoad.Location = new Point(listBox_ConnectStatus.Location.X, (dataGridView_Data.Location.Y -
listBox_ConnectStatus.Location.Y - listBox_ConnectStatus.Height) / 2 - button_CompelUpLoad.Height / 2 - 6
listBox_ConnectStatus.Location.Y listBox_ConnectStatus.Height);
button_CompelUpLoad.Anchor = AnchorStyles.Left | AnchorStyles.Bottom;//| AnchorStyles.Top;
button_ChangeACF.Location = new Point(groupBox_Status.Width - button_ChangeACF.Width - 6, button_CompelUpLoad.Location.Y);
button_ChangeACF.Anchor = AnchorStyles.Right | AnchorStyles.Bottom;//| AnchorStyles.Top;
//groupBox_SimulateRun和内部控件初始化
groupBox_SimulateRun.Height = (this.Height - 30) * 3 / 10;
groupBox_SimulateRun.Width = (this.Width - 30) - groupBox_Status.Width;
groupBox_SimulateRun.Location = new Point(groupBox_Status.Location.X groupBox_Status.Width 6, 12);
groupBox_SimulateRun.Anchor = AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom;
groupBox_SimulateRun.Controls.Add(listBox_EventDisplay);
groupBox_SimulateRun.Controls.Add(comboBox_EquipmentNO);
groupBox_SimulateRun.Controls.Add(button_Clear);
groupBox_SimulateRun.Controls.Add(label_Product1);
groupBox_SimulateRun.Controls.Add(label_Product2);
groupBox_SimulateRun.Controls.Add(textBox__Product_In1);
groupBox_SimulateRun.Controls.Add(textBox__Product_In2);
groupBox_SimulateRun.Controls.Add(textBox__Product_Out1);
groupBox_SimulateRun.Controls.Add(textBox__Product_Out2);
groupBox_SimulateRun.Controls.Add(textBox_Difference1);
groupBox_SimulateRun.Controls.Add(textBox_Difference2);
listBox_EventDisplay.Width = groupBox_SimulateRun.Width - 12;
listBox_EventDisplay.Height = (groupBox_SimulateRun.Height - 30) / 2;
listBox_EventDisplay.Location = new Point(6, 24);
listBox_EventDisplay.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
comboBox_EquipmentNO.Location = new Point(6, listBox_EventDisplay.Height 29);
comboBox_EquipmentNO.Anchor = AnchorStyles.Left;
abcd;//comboBox_EquipmentNO增加产线号,并选择对应的ConfigMrg.m_strProductNO的选项,目前产线命名规则未知.
textBox_Difference2.Location = new Point(groupBox_SimulateRun.Width - textBox_Difference2.Width - 6,
groupBox_SimulateRun.Height - textBox_Difference2.Height - 6);
textBox_Difference2.Anchor = AnchorStyles.Right | AnchorStyles.Bottom;
textBox_Difference1.Location = new Point(textBox_Difference2.Location.X, textBox_Difference2.Location.Y - textBox_Difference1.Height - 6);
textBox_Difference1.Anchor = AnchorStyles.Right | AnchorStyles.Bottom;
textBox__Product_Out2.Location = new Point(textBox_Difference2.Location.X - textBox__Product_Out2.Width - 6, textBox_Difference2.Location.Y);
textBox__Product_Out2.Anchor = AnchorStyles.Right | AnchorStyles.Bottom;
textBox__Product_Out1.Location = new Point(textBox_Difference1.Location.X - textBox__Product_Out1.Width - 6, textBox_Difference1.Location.Y);
textBox__Product_Out1.Anchor = AnchorStyles.Right | AnchorStyles.Bottom;
textBox__Product_In2.Location = new Point(textBox__Product_Out2.Location.X - textBox__Product_In2.Width - 6, textBox__Product_Out2.Location.Y);
textBox__Product_In2.Anchor = AnchorStyles.Right | AnchorStyles.Bottom;
textBox__Product_In1.Location = new Point(textBox__Product_Out1.Location.X - textBox__Product_In1.Width - 6, textBox__Product_Out1.Location.Y);
textBox__Product_In1.Anchor = AnchorStyles.Right | AnchorStyles.Bottom;
label_Product2.Location = new Point(textBox__Product_In2.Location.X - label_Product2.Width - 6, textBox__Product_In2.Location.Y 6);
label_Product2.Anchor = AnchorStyles.Right | AnchorStyles.Bottom;
label_Product1.Location = new Point(textBox__Product_In1.Location.X - label_Product1.Width - 6, textBox__Product_In2.Location.Y 6);
label_Product1.Anchor = AnchorStyles.Right | AnchorStyles.Bottom;
button_Clear.Location = new Point(label_Product1.Location.X - button_Clear.Width - 6, textBox__Product_In2.Location.Y);
button_Clear.Anchor = AnchorStyles.Right;
//groupBox_MSG和内部控件的初始化
groupBox_MSG.Height = (this.Height - 30) - groupBox_SimulateRun.Height;
groupBox_MSG.Width = groupBox_SimulateRun.Width;
groupBox_MSG.Location = new Point(groupBox_SimulateRun.Location.X, this.Height - groupBox_MSG.Height - 12);
groupBox_MSG.Controls.Add(dataGridView_MESMsg);
groupBox_MSG.Controls.Add(listBox_PLCMsg);
groupBox_MSG.Anchor = AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Top;
dataGridView_MESMsg.Width = groupBox_MSG.Width - 12;
dataGridView_MESMsg.Height = (groupBox_MSG.Height - 36) * 2 / 5;
dataGridView_MESMsg.Location = new Point(6, 24);
dataGridView_MESMsg.Anchor = AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Left;
dataGridView_MESMsg.ColumnCount = 2;
dataGridView_MESMsg.Columns[0].HeaderText = "消息类型";
dataGridView_MESMsg.Columns[0].ReadOnly = true;
dataGridView_MESMsg.Columns[0].Width = 100;
dataGridView_MESMsg.Columns[1].HeaderText = "消息内容";
dataGridView_MESMsg.Columns[1].ReadOnly = true;
dataGridView_MESMsg.Columns[1].Width = dataGridView_MESMsg.Width - 150;
listBox_PLCMsg.Width = groupBox_MSG.Width - 12;
listBox_PLCMsg.Height = groupBox_MSG.Height - 36 - dataGridView_MESMsg.Height;
listBox_PLCMsg.Location = new Point(dataGridView_MESMsg.Location.X, groupBox_MSG.Height - listBox_PLCMsg.Height - 6);
listBox_PLCMsg.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
}
/// <summary>
/// 扫描PLC获取数据线程
/// </summary>
private void ScanPLC_Thread()
{
m_bPause_Scan = false;
PLC_Client Client = NetWorkMrg.GetInstance().Sock_PLC;
Deal_Data Math = Deal_Data.GetInstance();
DataMrg PData = DataMrg.GetInstance();
Dictionary<enStation, enDataName> Dic_DataName = new Dictionary<enStation, enDataName>();
Dic_DataName.Add(enStation.AOI检测, enDataName.AOI_Data);
Dic_DataName.Add(enStation.本压, enDataName.Press_Data);
Dic_DataName.Add(enStation.报警, enDataName.Alarm_Data);
Dic_DataName.Add(enStation.上料LCD, enDataName.ID);
Dic_DataName.Add(enStation.上料FPC, enDataName.ID);
Dic_DataName.Add(enStation.更换ACF, enDataName.ID);
Dic_DataName.Add(enStation.清洗, enDataName.Other_Data);
int[] NotResetTime = new int[5] {0,0,0,0,0}; //用于记录标志位仍未置位的轮回数,每当扫描一轮回,而标志位仍未置位时,则对应
//的NotResetTime计数值加1,一旦标志位置位成功,对应的NotResetTime计数值将置0
string StrMSG = "";
bool bSucce;
int j;
Run: while(m_bPause_Scan == false)
{
try
{
Dictionary<string, S_StationInfo>[] DicArray = ConfigMrg.GetInstance().Dic_StationInf.ValueToArray();
foreach (Dictionary<string, S_StationInfo> One_Dic in DicArray)
{
S_StationInfo[] StationArray = One_Dic.Values.ToArray();
foreach (S_StationInfo one_Sta in StationArray)
{
if (PData.IsRegisterReset(one_Sta.Station)) //判断寄存器置位。
{//SendCmdToPLC函数内部有转码功能,若接收到转码后的字符串为空,则需把函数内部的转码函数去掉
StrMSG = "";
bSucce = Client.SendCmdToPLC(one_Sta.strSta_CMD.TrimEnd() "\r\n", ref StrMSG);
j = 0;
foreach (string FlagCheck in one_Sta.strCheckWord)
{
if (bSucce && StrMSG.StartsWith(FlagCheck))
{
//解析数据StrMSG,压站位
S_PLC_Data NewData = new S_PLC_Data();
if (Math.AnalysisPLCMsg(StrMSG, Dic_DataName[one_Sta.Station], ref NewData))
{
PData.AddData2List(NewData, one_Sta.Station);
AddNextStep(one_Sta.Sta_Action[j]);
break;
}
}
j ;
}
}
j = 0;
}
}
#region
/*if (PData.IsRegisterReset(enStation.上料LCD)) //若该工位有数据未被处理,不扫描,即PLC寄存器仍未置位。
{
bSucce = Client.SendCmdToPLC("RDS EM11111.D 123", ref StrMSG);
if (bSucce && StrMSG.StartsWith("0001"))
{
S_PLC_Data NewData = new S_PLC_Data();
if(Math.AnalysisPLCMsg(StrMSG, enDataName.ID, ref NewData))
{
PData.AddData2List(NewData, enStation.上料LCD);
AddNextStep(enActionStep.LCD_LD);
}
}
}
if (PData.IsRegisterReset(enStation.上料FPC)) //判断寄存器置位。
{
bSucce = Client.SendCmdToPLC("RDS EM22222.D 123", ref StrMSG);
if (bSucce && StrMSG.StartsWith("0001"))
{
//解析数据StrMSG,压站位
S_PLC_Data NewData = new S_PLC_Data();
if (Math.AnalysisPLCMsg(StrMSG, enDataName.ID, ref NewData))
{
PData.AddData2List(NewData, enStation.上料FPC);
AddNextStep(enActionStep.FPC_LD);
}
}
}
if (PData.IsRegisterReset(enStation.清洗)) //判断寄存器置位。
{
bSucce = Client.SendCmdToPLC("RDS EM33333.D 123", ref StrMSG);
if (bSucce && StrMSG.StartsWith("0001"))
{
//解析数据StrMSG,压站位
S_PLC_Data NewData = new S_PLC_Data();
if (Math.AnalysisPLCMsg(StrMSG, enDataName.ID, ref NewData))
{
PData.AddData2List(NewData, enStation.清洗);
AddNextStep(enActionStep.FPC_LD);
}
}
}
if (PData.IsRegisterReset(enStation.本压))//判断寄存器置位。
{
bSucce = Client.SendCmdToPLC("RDS EM55555.D 123", ref StrMSG);
if (bSucce && StrMSG.StartsWith("0001"))
{
//解析数据StrMSG,压站位
S_PLC_Data NewData = new S_PLC_Data();
if (Math.AnalysisPLCMsg(StrMSG, enDataName.Press_Data, ref NewData))
{
PData.AddData2List(NewData, enStation.本压);
AddNextStep(enActionStep.SL2600S5);
}
}
}
if (PData.IsRegisterReset(enStation.AOI检测)) //判断寄存器置位。
{
bSucce = Client.SendCmdToPLC("RDS EM66666.D 123", ref StrMSG);
if (bSucce && StrMSG.StartsWith("0001"))
{
//解析数据StrMSG,压站位
S_PLC_Data NewData = new S_PLC_Data();
if (Math.AnalysisPLCMsg(StrMSG, enDataName.AOI_Data, ref NewData))
{
PData.AddData2List(NewData, enStation.AOI检测);
AddNextStep(enActionStep.XMD4019);
}
}
}
bSucce = Client.SendCmdToPLC("RDS EM77777.D 123", ref StrMSG);//报警信息扫描
if (bSucce && StrMSG.StartsWith("0001"))
{
//解析数据StrMSG,压站位
S_PLC_Data NewData = new S_PLC_Data();
if (Math.AnalysisPLCMsg(StrMSG, enDataName.Alarm_Data, ref NewData))
{
PData.AddData2List(NewData, enStation.报警);aaa;//现在未增加报警数据链表
AddNextStep(enActionStep.Alarm);
}
}
else if (bSucce && StrMSG.StartsWith("0002"))
{
}*/
#endregion
Thread.Sleep(20);
}
catch(Exception ex)
{
DisPlayEvent(ex.ToString(), true);
}
}
while (m_bPause_Scan)
{
Thread.Sleep(100);
}
goto Run;
}
/// <summary>
/// 从PLC获取数据后各工位对应的处理
/// </summary>
private void ActionThread()
{
enActionStep enStep;
while(true)
{
enStep = GetNextStep();
if (enStep == enActionStep.None)
{
Thread.Sleep(50);
continue;
}
switch(enStep)
{
case enActionStep.LCD_LD:
break;
case enActionStep.FPC_LD:
break;
case enActionStep.ACF_LD:
break;
case enActionStep.PLASMA:
break;
case enActionStep.SL2600S5:
break;
case enActionStep.XMD4019:
break;
case enActionStep.UL1918:
break;
case enActionStep.Alarm:
break;
default:
break;
}
}
}
public static void AddNextStep(enActionStep nextStep)
{
lock (m_StepListLock)
{
m_ActionStepList.Add(nextStep);
}
}
public static enActionStep GetNextStep()
{
if (m_ActionStepList.Count <= 0)
return enActionStep.None;
enActionStep Res;
lock (m_StepListLock)
{
Res = m_ActionStepList.First();
m_ActionStepList.RemoveAt(0);
}
return Res;
}
private void CellChange_DataGridView_Data(object sender, EventArgs e)
{
DataGridViewSelectedCellCollection cells = dataGridView_Data.SelectedCells;
if (cells.Count == 1)
{
DataGridViewCell cell = cells[0];
if (cell.ColumnIndex == 0)
{
ConfigMrg CfgMrg = ConfigMrg.GetInstance();
int nDVID = Convert.ToInt32(dataGridView_Data.Rows[cell.RowIndex].Cells[1].Value);
if (nDVID == CfgMrg.Dic_MesDVID["物料位置"] || nDVID == CfgMrg.Dic_MesDVID["FLOW_ID"] ||
nDVID == CfgMrg.Dic_MesDVID["ROUTE_ID"] || nDVID == CfgMrg.Dic_MesDVID["STEP_ID"] || nDVID == CfgMrg.Dic_MesDVID["时间"])
{
bool CurrentValue = (bool)dataGridView_Data.Rows[cell.RowIndex].Cells[0].Value;
if(CurrentValue == true)
CfgMrg.DVIDSelectList.Remove(nDVID);
else
CfgMrg.DVIDSelectList.Add(nDVID);
CfgMrg.SaveParamCfg_XML(CfgMrg.m_strParamCfgPath);
dataGridView_Data.Rows[cell.RowIndex].Cells[0].Value = !CurrentValue;
dataGridView_Data.ClearSelection();
}
}
}
}
private void button_SetUp_Click(object sender, EventArgs e)
{
SetUp CForm = new SetUp(this);
CForm.ShowDialog();
CForm.Dispose();
CForm = null;
}
private void button_CMDRequest_Click(object sender, EventArgs e)
{
Cmd_Window CForm = new Cmd_Window();
CForm.ShowDialog();
CForm.Dispose();
CForm = null;
}
private void button_CompelUpLoad_Click(object sender, EventArgs e)
{
//触发强制退盘事件Tray Complete Request,即:下料盘满盘时,或者盘未满时,中途强制拿走Tray盘时触发该事件,
}
private void button_ChangeACF_Click(object sender, EventArgs e)
{
//换ACF时触发物料UnMount事件(设备此时是停止运行的),当换料完成时需要通过读取某个扫码枪扫得的ACF条码,然后触发Mount事件并等待MES回复,
//MES回复为PASS时,提醒人员可以继续运行,否则提醒人员重新换ACF,重新换ACF时则再次触发UnMount与Mount事件。
}
private void button_Clear_Click(object sender, EventArgs e)
{
//产品生产统计清零
}
}
/// <summary>
/// 新套接字连接时的状态枚举
/// </summary>
public enum enChangeEventType
{
Add = 99997, //新连接
Change, //用于套接字服务器与视涯客户端,连接上后通过命令改变连接状态时使用
Remove //断开连接
}
/// <summary>
/// 工位中文名枚举
/// </summary>
public enum enStation
{
上料LCD = enActionStep.LCD_LD,
上料FPC = enActionStep.FPC_LD,
更换ACF = enActionStep.ACF_LD,
清洗 = enActionStep.PLASMA,
本压 = enActionStep.SL2600S5,
点胶 = enActionStep.XMD4019,
AOI检测 = enActionStep.UL1918,
报警 = enActionStep.Alarm,
}
aaa;//enStation待修改
}
/*button_LogIn.Location = new Point(12, 12);
button_LogIn.Dock = DockStyle.Left | DockStyle.Top;
button_SetUp.Location = new Point(button_LogIn.Width button_LogIn.Location.X 5, 12);
button_SetUp.Dock = DockStyle.Left | DockStyle.Top;
button_CMDRequest.Location = new Point(button_SetUp.Width button_SetUp.Location.X 5, 12);
button_CMDRequest.Dock = DockStyle.Left | DockStyle.Top;
//groupBox_Status和内部控件的初始化
groupBox_Status.Height = this.Height - button_SetUp.Location.Y - button_SetUp.Height - 30;
groupBox_Status.Width = (this.Width - 30) * 2 / 5;
groupBox_Status.Location = new Point(12, button_SetUp.Location.Y button_SetUp.Height 10);
groupBox_Status.Dock = DockStyle.Bottom | DockStyle.Left;
groupBox_Status.Controls.Add(dataGridView_Data);
groupBox_Status.Controls.Add(listBox_ConnectStatus);
groupBox_Status.Controls.Add(button_ChangeACF);
groupBox_Status.Controls.Add(button_CompelUpLoad);
listBox_ConnectStatus.Location = new Point(6, 24);
listBox_ConnectStatus.Dock = DockStyle.Top;
dataGridView_Data.Location = new Point(listBox_ConnectStatus.Location.X, groupBox_Status.Height - dataGridView_Data.Height - 6);
dataGridView_Data.Dock = DockStyle.Bottom;
dataGridView_Data.ColumnCount = 2;
dataGridView_Data.Columns[0].HeaderText = "DVID";
dataGridView_Data.Columns[0].ReadOnly = true;
dataGridView_Data.Columns[1].HeaderText = "名称";
dataGridView_Data.Columns[1].ReadOnly = true;
DataGridViewCheckBoxColumn newColumn = new DataGridViewCheckBoxColumn();
newColumn.HeaderText = "上传选择";
dataGridView_Data.Columns.Insert(0, newColumn);
dataGridView_Data.Columns[0].ReadOnly = false;
dataGridView_Data.Rows[dataGridView_Data.Rows.Count - 1].ReadOnly = true;
int i = 0;
foreach (KeyValuePair<string, int> Node in ConfigMrg.GetInstance().Dic_MesDVID)
{
DataGridViewRow Rows = new DataGridViewRow();
dataGridView_Data.Rows.Add(Rows);
dataGridView_Data.Rows[i].Cells[1].Value = Node.Value;
dataGridView_Data.Rows[i].Cells[2].Value = Node.Key;
if (ConfigMrg.GetInstance().DVIDSelectList.Contains(i))
dataGridView_Data.Rows[i].Cells[0].Value = true;
else
dataGridView_Data.Rows[i].Cells[0].Value = false;
i ;
}
dataGridView_Data.CellStateChanged = CellChange_DataGridView_Data;
button_CompelUpLoad.Location = new Point(listBox_ConnectStatus.Location.X, (dataGridView_Data.Location.Y -
listBox_ConnectStatus.Location.Y - listBox_ConnectStatus.Height) / 2 - button_CompelUpLoad.Height / 2 - 6);
button_CompelUpLoad.Dock = DockStyle.Left;
button_ChangeACF.Location = new Point(button_CompelUpLoad.Width - button_ChangeACF.Width - 6, button_CompelUpLoad.Location.Y);
button_ChangeACF.Dock = DockStyle.Right;
//groupBox_SimulateRun和内部控件初始化
groupBox_SimulateRun.Height = (this.Width - 30) * 3 / 10;
groupBox_SimulateRun.Width = (this.Width - 30) - groupBox_Status.Width;
groupBox_SimulateRun.Location = new Point(groupBox_Status.Location.X groupBox_Status.Width 6, 12);
groupBox_SimulateRun.Dock = DockStyle.Top | DockStyle.Right | DockStyle.Left;
groupBox_SimulateRun.Controls.Add(richTextBox_EventDisplay);
groupBox_SimulateRun.Controls.Add(comboBox_EquipmentNO);
groupBox_SimulateRun.Controls.Add(button_Clear);
groupBox_SimulateRun.Controls.Add(label_Product1);
groupBox_SimulateRun.Controls.Add(label_Product2);
groupBox_SimulateRun.Controls.Add(textBox__Product_In1);
groupBox_SimulateRun.Controls.Add(textBox__Product_In2);
groupBox_SimulateRun.Controls.Add(textBox__Product_Out1);
groupBox_SimulateRun.Controls.Add(textBox__Product_Out2);
groupBox_SimulateRun.Controls.Add(textBox_Difference1);
groupBox_SimulateRun.Controls.Add(textBox_Difference2);
richTextBox_EventDisplay.Location = new Point(6, 24);
richTextBox_EventDisplay.Dock = DockStyle.Top | DockStyle.Left | DockStyle.Right;
comboBox_EquipmentNO.Location = new Point(6, richTextBox_EventDisplay.Height 29);
comboBox_EquipmentNO.Dock = DockStyle.Left;
abcd;//comboBox_EquipmentNO增加产线号,并选择对应的ConfigMrg.m_strProductNO的选项,目前产线命名规则未知.
textBox_Difference2.Location = new Point(groupBox_SimulateRun.Width - textBox_Difference2.Width - 6,
groupBox_SimulateRun.Height - textBox_Difference2.Height - 6);
textBox_Difference2.Dock = DockStyle.Right | DockStyle.Bottom;
textBox_Difference1.Location = new Point(textBox_Difference2.Location.X, textBox_Difference2.Location.Y - textBox_Difference1.Height - 6);
textBox_Difference1.Dock = DockStyle.Right | DockStyle.Bottom;
textBox__Product_Out2.Location = new Point(textBox_Difference2.Location.X - textBox__Product_Out2.Width - 6, textBox_Difference2.Location.Y);
textBox__Product_Out2.Dock = DockStyle.Right | DockStyle.Bottom;
textBox__Product_Out1.Location = new Point(textBox_Difference1.Location.X - textBox__Product_Out1.Width - 6, textBox_Difference1.Location.Y);
textBox__Product_Out1.Dock = DockStyle.Right | DockStyle.Bottom;
textBox__Product_In2.Location = new Point(textBox__Product_Out2.Location.X - textBox__Product_In2.Width - 6, textBox__Product_Out2.Location.Y);
textBox__Product_In2.Dock = DockStyle.Right | DockStyle.Bottom;
textBox__Product_In1.Location = new Point(textBox__Product_Out1.Location.X - textBox__Product_In1.Width - 6, textBox__Product_Out1.Location.Y);
textBox__Product_In1.Dock = DockStyle.Right | DockStyle.Bottom;
label_Product2.Location = new Point(textBox__Product_In2.Location.X - label_Product2.Width - 6, textBox__Product_In2.Location.Y 6);
label_Product2.Dock = DockStyle.Right | DockStyle.Bottom;
label_Product1.Location = new Point(textBox__Product_In1.Location.X - label_Product1.Width - 6, textBox__Product_In2.Location.Y 6);
label_Product1.Dock = DockStyle.Right | DockStyle.Bottom;
button_Clear.Location = new Point(label_Product1.Location.X - button_Clear.Width - 6, textBox__Product_In2.Location.Y);
button_Clear.Dock = DockStyle.Right;
//groupBox_MSG和内部控件的初始化
groupBox_MSG.Height = (this.Width - 30) - groupBox_SimulateRun.Height;
groupBox_MSG.Width = groupBox_SimulateRun.Width;
groupBox_MSG.Location = new Point(groupBox_SimulateRun.Location.X, this.Height - groupBox_MSG.Height - 12);
groupBox_MSG.Dock = DockStyle.Bottom | DockStyle.Right;
dataGridView_MESMsg.Location = new Point(6, 24);
dataGridView_MESMsg.Dock = DockStyle.Top;
dataGridView_MESMsg.ColumnCount = 2;
dataGridView_MESMsg.Columns[0].HeaderText = "消息类型";
dataGridView_MESMsg.Columns[0].ReadOnly = true;
dataGridView_MESMsg.Columns[0].Width = 100;
dataGridView_MESMsg.Columns[1].HeaderText = "消息内容";
dataGridView_MESMsg.Columns[1].ReadOnly = true;
dataGridView_MESMsg.Columns[1].Width = dataGridView_MESMsg.Width - 150;
richTextBox_PLCMsg.Location = new Point(dataGridView_MESMsg.Location.X, groupBox_MSG.Height - richTextBox_PLCMsg.Height - 6);
richTextBox_PLCMsg.Dock = DockStyle.Bottom;
*/
好例子网口号:伸出你的我的手 — 分享!
网友评论
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


支持(0) 盖楼(回复)
支持(0) 盖楼(回复)