274 lines
12 KiB
C#
274 lines
12 KiB
C#
using MesServerWork;
|
||
using System.Collections.Generic;
|
||
using System.Threading;
|
||
using System.Xml.Linq;
|
||
|
||
namespace MesServerFunctions
|
||
{
|
||
public partial class FunctionMES
|
||
{
|
||
//public void FunWork(DoWhatPlc.CustomeEvetnArgs e)
|
||
public void FunWork(string recData)
|
||
{
|
||
|
||
|
||
{
|
||
List<string> dataArray = DoWhatPlc.MessageText.GetCmdStringList(recData);
|
||
//string[] dataArray = recData.Split('|');
|
||
//if (dataArray.Count != 4)
|
||
//return;
|
||
//消息来源
|
||
string m_Source = dataArray[0].ToString();
|
||
//消息类型 Barcode
|
||
string m_Command = dataArray[1].ToString();
|
||
//工位号
|
||
string m_OpName = dataArray[2].ToString();
|
||
//消息参数
|
||
string m_Value = dataArray[3].ToString();
|
||
|
||
DoWhatPlc.CustomeEvetnArgs e = new DoWhatPlc.CustomeEvetnArgs();// = Newtonsoft.Json.JsonConvert.DeserializeObject<DoWhatPlc.CustomeEvetnArgs>(m_Value);
|
||
string tagValue;
|
||
|
||
switch (m_Source)
|
||
{
|
||
case "BarCode":
|
||
e.OpName = m_OpName;
|
||
e.TagValue = m_Value;
|
||
fun_Barcode(e);
|
||
break;
|
||
case "WEB":
|
||
e.OpName = m_OpName;
|
||
e.TagValue = m_Command + "|" + m_Value;
|
||
fun_WebSubmit(e);
|
||
break;
|
||
case "PLC":
|
||
e = Newtonsoft.Json.JsonConvert.DeserializeObject<DoWhatPlc.CustomeEvetnArgs>(m_Value);
|
||
switch (e.TagValue.ToString().ToLower())
|
||
{
|
||
case "false":
|
||
tagValue = "0";
|
||
break;
|
||
case "true":
|
||
tagValue = "1";
|
||
break;
|
||
default:
|
||
tagValue = e.TagValue.ToString();
|
||
break;
|
||
}
|
||
e.TagValue = tagValue;
|
||
switch (e.TagTypeCodeID.ToString())
|
||
{
|
||
//PLC 工件到位
|
||
case "2":
|
||
fun_WorkStart(e);
|
||
break;
|
||
//PLC 允许保存质量数据
|
||
case "19":
|
||
fun_MesRead(e);
|
||
break;
|
||
//MES 保存数据完成
|
||
case "20":
|
||
fun_MesReadOver(e);
|
||
break;
|
||
//PLC 传递机型
|
||
case "44":
|
||
fun_EngineTypeGetOverPLC(e);
|
||
break;
|
||
//MES 合格放行
|
||
case "51":
|
||
fun_ConfirmOkGo(e);
|
||
break;
|
||
//MES 不合格放行
|
||
case "8":
|
||
fun_FalseGo(e);
|
||
break;
|
||
//PLC 工位合格标志
|
||
case "21":
|
||
fun_IsOk(e);
|
||
break;
|
||
//MES保存实时质量数据
|
||
case "65":
|
||
fun_MesSaveNowData(e);
|
||
break;
|
||
//MES 系统健康心跳
|
||
case "14":
|
||
fun_HeartBeatMIS(e);
|
||
break;
|
||
case "63":
|
||
string S_plcStatus;//DBX501.5 PLC直通,1 强制放行 0 正常循环
|
||
MIS_BASE.Read_TagTypeID(63, m_OpName, out S_plcStatus);
|
||
if (S_plcStatus.ToLower() != "true" || S_plcStatus.ToLower() == "1")
|
||
{
|
||
SendMessageFun.SendInfomation("PlcStatus", "0", m_OpName);
|
||
}
|
||
else
|
||
{
|
||
SendMessageFun.SendInfomation("PlcStatus", "1", m_OpName);
|
||
}
|
||
break;
|
||
//MES 允许PLC拧紧工作 时 删除缓存表中数据并且绑定关系
|
||
case "66":
|
||
if(tagValue == "1")
|
||
{
|
||
string QiaoKeCode1 = MIS_BASE.ReadPLC(10, m_OpName).ToString();
|
||
string LunGuCode1 = MIS_BASE.ReadPLC(123, m_OpName).ToString();
|
||
string LunGuCode2 = MIS_BASE.ReadPLC(124, m_OpName).ToString();
|
||
Db.OPA92_DeleteLineData(QiaoKeCode1, LunGuCode1, LunGuCode2);
|
||
}
|
||
break;
|
||
// 两个轮毂到位信号(501.6) 收到时表示PLC此时两个轮毂都已经装上了
|
||
// 这时候判断050 是否存在传递机型 要是有 就给允许工作
|
||
case "76":
|
||
if (tagValue == "1")
|
||
{
|
||
// 判断两个鼓是否都写入到地址了,如果写入了则校验通过返回点 没有就不往下执行了
|
||
string LunGuCode1 = MIS_BASE.ReadPLC(123, m_OpName).ToString();
|
||
string LunGuCode2 = MIS_BASE.ReadPLC(124, m_OpName).ToString();
|
||
string QiaoKeCode1 = MIS_BASE.ReadPLC(10, m_OpName).ToString();
|
||
if ((LunGuCode1 == "0" || LunGuCode1 == "" || LunGuCode1.Length < 5 || LunGuCode1.IndexOf("\0") != -1) || (LunGuCode2 == "0" || LunGuCode2 == "" || LunGuCode2.Length < 5 || LunGuCode2.IndexOf("\0") != -1))
|
||
{
|
||
return;
|
||
}
|
||
|
||
// 判断050 工位是否有传递机型 有的话 允许050工作 同时删除记录表中轮毂号
|
||
MIS_BASE.Read_EngineGetOver_PLC(m_OpName, out bool EngineGetOver_PLC_NextWorkStep);
|
||
MIS_BASE.Read_FixAllow(m_OpName, out bool FixAllow_PLC_NextWorkStep);
|
||
if (EngineGetOver_PLC_NextWorkStep)
|
||
{
|
||
if (!FixAllow_PLC_NextWorkStep)
|
||
{
|
||
// 获取工件编号,将工件编号与轮毂号在存一次
|
||
Db.OPA92_DeleteLineData(QiaoKeCode1, LunGuCode1, LunGuCode2);
|
||
MIS_BASE.Write_FixAllow(m_OpName, true);
|
||
}
|
||
}
|
||
MIS_BASE.WritePLC(27, m_OpName, true); // 返回MES执行完成 若不返回则表示两个鼓数据没有
|
||
}
|
||
break;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
//1.工件到位后,PLC给MES传递机型(DBX0.4)(44),
|
||
//MES判断条码是否全部扫描完成
|
||
//PLC给出允许保存(DBX100.2)(19),MES见到(DBX100.2)(19)为1后给出保存完成(DBX102.2)(20),
|
||
//PLC见到保存完成(DBX102.2)(20)为1后,清空允许保存(DBX100.2)(19),
|
||
//MES见到允许保存(DBX100.2)(19)为0后,清空保存完成(DBX102.2)(20)
|
||
//MES判断总合格标志(INT104)(21)为1后,给出合格放行(DBX2.5)(51)
|
||
/// <summary>
|
||
/// 扫描条码
|
||
/// </summary>
|
||
/// <param name="OpName"></param>
|
||
/// <param name="barcode"></param>
|
||
public void fun_Barcode(DoWhatPlc.CustomeEvetnArgs e)
|
||
{
|
||
ThreadPool.QueueUserWorkItem(Barcode, e);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 传递机型
|
||
/// </summary>
|
||
/// <param name="OpName"></param>
|
||
/// <param name="tagValue"></param>
|
||
public void fun_EngineTypeGetOverPLC(DoWhatPlc.CustomeEvetnArgs e)
|
||
{
|
||
ThreadPool.QueueUserWorkItem(EngineTypeGetOver_PLC, e);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 合格放行
|
||
/// </summary>
|
||
/// <param name="OpName"></param>
|
||
/// <param name="tagValue"></param>
|
||
public void fun_ConfirmOkGo(DoWhatPlc.CustomeEvetnArgs e)
|
||
{
|
||
ThreadPool.QueueUserWorkItem(ConfirmOkGo, e);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 不合格放行
|
||
/// </summary>
|
||
/// <param name="OpName"></param>
|
||
/// <param name="tagValue"></param>
|
||
public void fun_FalseGo(DoWhatPlc.CustomeEvetnArgs e)
|
||
{
|
||
ThreadPool.QueueUserWorkItem(FalseGO, e);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 允许保存
|
||
/// </summary>
|
||
/// <param name="OpName"></param>
|
||
/// <param name="tagValue"></param>
|
||
public void fun_MesRead(DoWhatPlc.CustomeEvetnArgs e)
|
||
{
|
||
ThreadPool.QueueUserWorkItem(MesRead, e);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 保存完成
|
||
/// </summary>
|
||
/// <param name="OpName"></param>
|
||
/// <param name="tagValue"></param>
|
||
public void fun_MesReadOver(DoWhatPlc.CustomeEvetnArgs e)
|
||
{
|
||
ThreadPool.QueueUserWorkItem(MesReadOver, e);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 工件到位离开(清空所有的MES信号)
|
||
/// </summary>
|
||
/// <param name="OpName"></param>
|
||
/// <param name="tagValue"></param>
|
||
public void fun_WorkStart(DoWhatPlc.CustomeEvetnArgs e)
|
||
{
|
||
ThreadPool.QueueUserWorkItem(WorkStart, e);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 处理WEB页面发送过来的请求(m_Command + "|" + m_Value;)
|
||
/// </summary>
|
||
/// <param name="OpName"></param>
|
||
/// <param name="Content"></param>
|
||
public void fun_WebSubmit(DoWhatPlc.CustomeEvetnArgs e)
|
||
{
|
||
ThreadPool.QueueUserWorkItem(WebSubmit, e);
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 工位是否合格
|
||
/// </summary>
|
||
/// <param name="OpName"></param>
|
||
/// <param name="tagValue"></param>
|
||
public void fun_IsOk(DoWhatPlc.CustomeEvetnArgs e)
|
||
{
|
||
ThreadPool.QueueUserWorkItem(IsOk, e);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 系统健康心跳监测
|
||
/// </summary>
|
||
/// <param name="OpName"></param>
|
||
/// <param name="tagValue"></param>
|
||
public void fun_HeartBeatMIS(DoWhatPlc.CustomeEvetnArgs e)
|
||
{
|
||
ThreadPool.QueueUserWorkItem(HeartBeat, e);
|
||
}
|
||
|
||
/// <summary>
|
||
/// MES实时保存质量数据
|
||
/// </summary>
|
||
/// <param name="OpName"></param>
|
||
/// <param name="tagValue"></param>
|
||
public void fun_MesSaveNowData(DoWhatPlc.CustomeEvetnArgs e)
|
||
{
|
||
ThreadPool.QueueUserWorkItem(MesSaveNowData, e);
|
||
}
|
||
|
||
|
||
}
|
||
}
|