using DataLinkMesWork;
using DC_A95;
using SYNC_SAP_MES;
using System;
using System.Linq;
///
///
///
namespace MesWork
{
///
/// 处理MIS逻辑
///
public partial class MesWorkForm
{
///
/// 处理MIS逻辑
///
///
private void MIS_Funtion(object e)
{
try
{
if (NotHandlerSignal == "1")
{
return;
}
var msgEvent = (OpcData.CustomeEvetnArgs)e;
if (msgEvent.TagValue == null) return;
var tagID = msgEvent.TagID.ToString();
var opCode = msgEvent.OpName.ToString();//工位号
var tagTypeCodeID = (int)msgEvent.TagTypeCodeID;
var tagTypeID = (EnumTagTypeID)msgEvent.TagTypeID;
var isFirstValue = msgEvent.IsFirstValue.ToString().ToLower();
string tagValue;
switch (tagTypeID)
{
case EnumTagTypeID.BOOL:
tagValue = (Convert.ToInt32(msgEvent.TagValue)).ToString();
break;
default:
tagValue = msgEvent.TagValue.ToString();
break;
}
if (ValueT(isFirstValue))
{
//不处理第一次变化的值
return;
}
/*
15 系统健康
5 传递机型(AMS)
66 允许PLC工作(AMS)
34 发动机上线报警标志
20 AMS保存完数据(AMS)
112 发动机上线报警代码
73 机型标志(AMS)
74 变速箱总成编号(AMS)
75 产品型号(AMS)
116 缸体打印码
117 订单号
14 系统健康(PLC)
2 工件到位(PLC)
43 申请零件编号(PLC)
44 传递机型(PLC)
63 禁用MES(PLC)
9 机型标志(PLC)
10 变速箱总成编号(PLC)
11 产品型号(PLC)
80 托盘编号(PLC)
22 0空托盘,1合格件,2不合格件(PLC)
19 质量数据可以读数据(PLC)
21 质量数据工位合格标志(PLC)
23 0正常件,1返修件(PLC)
39 缸体打印码(PLC)
40 订单号(PLC)
120 上线缸体码(PLC)
*/
switch (tagTypeCodeID)
{
case 2://工件到位
if (tagValue == "1")
{
WritePLC_IF(73, opCode, 0);//机型ID
WritePLC_IF(74, opCode, "");//发动机流水号(总成编号)
WritePLC_IF(75, opCode, "");//产品型号,机型号
WritePLC_IF(116, opCode, "");//缸体码
WritePLC_IF(117, opCode, "");//订单号
WritePLC_IF(118, opCode, 0); // 打印位置
MesWorkForm.WritePLC_IF(112, opCode, 0); // 清空报警点位
MesWorkForm.WritePLC_IF(34, opCode, false);
}
else
{
MesWorkForm.WritePLC_IF(112, opCode, 0); // 清空报警点位
MesWorkForm.WritePLC_IF(34, opCode, false);
WritePLC_IF(20, opCode, false); // 保存完成
}
break;
case 14://心跳
WritePLC_IF(15, opCode, tagValue);
break;
case 19://允许保存
if (tagValue == "1")
{
var sortNo_PLC = ReadPLC(9, opCode).ToString();
var engineNo_PLC = ReadPLC(10, opCode).ToString();
var sortName_PLC = ReadPLC(11, opCode).ToString();
var partCode_PLC = ReadPLC(39, opCode).ToString();
var orderNo_PLC = ReadPLC(40, opCode).ToString();
var palletNo_PLC = Convert.ToInt32(ReadPLC(80, opCode).ToString());
MesWork_QC.ProcessData_PartOff(opCode, engineNo_PLC, palletNo_PLC, sortNo_PLC);
MesWork_QC.MesRead(opCode, tagValue, tagID);
WritePLC_IF(20, opCode, true);
}
else
{
WritePLC_IF(5, opCode, false);
WritePLC_IF(66, opCode, false);
WritePLC_IF(20, opCode, false);
}
break;
case 43://申请上线
if (tagValue == "1")
{
//1、是否有下发的订单
//2、是否申请上线
//3、是否满足上线条件
//4、缸体码是否符合生产机型
if (!OPCodes_LineSet.Split(',').Contains(opCode))//非线首
{
return;
}
//SyncFunc_From_SAP.SyncDataOperationTask("手动同步");
PLC_R.Read_LineSet(opCode, out string partCode, out int palletNo);
ExecuteDB.Select_OnLine_Plan_Engine(opCode, partCode, palletNo
, out string engineNo, out int sortNo, out string sortName, out string printCode, out string orderNo
, out int errCode, out string errMessage, out int printPosition);
//*******************在此处验证***************************
//按规则拆解partCode(缸体二维码),再获取BOM,验证该工位物料中是否存在该型号的缸体
//var res_SortType_FromBOM = CALL_Interfalce_WebAPI.Get_BOMs_ByWebAPI(MesWorkForm.LineID_Product, engineNo);
//**********************************************
//上线报警代码:errCode
//0 - 无错误
//1 - PLC逻辑错误,未申请上线
//2 - 没有可用订单
//3 - 扫描缸体码为空或格式错误
//4 - 缸体机型与生产机型不匹配
//5 - AMS写入信息与RFID信息验证不一致
//255 - 未知错误
if (errCode != 0)//获取计划失败
{
PLC_W.Write_LineSetAlarm(opCode, errCode);
LogRecord.LogRecord.Insert_Log(Type_Log.OnLine, opCode, $"发动机上线申请错误:({errCode}){errMessage}");
}
else
{
// 复位报警变量
//112 发动机上线报警代码
//34 发动机上线报警标志
MesWorkForm.WritePLC_IF(112, opCode, 0);
MesWorkForm.WritePLC_IF(34, opCode, false);
WritePLC_IF(73, opCode, sortNo);//机型ID
WritePLC_IF(74, opCode, engineNo);//发动机流水号(总成编号)
WritePLC_IF(75, opCode, sortName);//产品型号,机型号
WritePLC_IF(116, opCode, printCode);//缸体码
WritePLC_IF(117, opCode, orderNo);//订单号
WritePLC_IF(118, opCode, printPosition); // 打印位置
WritePLC_IF(5, opCode, true);
//【PLC读取数据到RFID中,测试用】
//WritePLC_IF(9, opCode, sortNo);//机型ID
//WritePLC_IF(10, opCode, engineNo);//发动机流水号(总成编号)
//WritePLC_IF(11, opCode, sortName);//产品型号,机型号
//WritePLC_IF(39, opCode, partCode);//缸体码
//WritePLC_IF(40, opCode, orderNo);//订单号
LogRecord.LogRecord.Insert_Log(Type_Log.OnLine, opCode, $"上线数据写入成功:engineNo={engineNo};sortNo={sortNo};sortName={sortName};printCode={printCode};orderNo={orderNo}");
}
}
else
{
WritePLC_IF(5, opCode, false);
}
break;
case 44://传递机型
if (tagValue == "1")
{
var sortNo_PLC = ReadPLC(9, opCode).ToString();
var engineNo_PLC = ReadPLC(10, opCode).ToString();
var sortName_PLC = ReadPLC(11, opCode).ToString();
var partCode_PLC = ReadPLC(39, opCode).ToString();
var orderNo_PLC = ReadPLC(40, opCode).ToString();
var palletNo_PLC = Convert.ToInt32(ReadPLC(80, opCode).ToString());
if (OPCodes_LineSet.Split(',').Contains(opCode))//线首
{
var sortNo = ReadPLC(73, opCode).ToString();
var engineNo = ReadPLC(74, opCode).ToString();
var sortName = ReadPLC(75, opCode).ToString();
var partCode = ReadPLC(116, opCode).ToString();
var orderNo = ReadPLC(117, opCode).ToString();
var str = $"{sortNo}|{engineNo}|{sortName}|{partCode}|{orderNo}";
var str_PLC = $"{sortNo_PLC}|{engineNo_PLC}|{sortName_PLC}|{partCode_PLC}|{orderNo_PLC}";
if (str != str_PLC)
{
var errCode = (int)Type_AlarmOnline.Err_RW_Diff;
PLC_W.Write_LineSetAlarm(opCode, errCode);
LogRecord.LogRecord.Insert_Log(Type_Log.Alarm, opCode, $"发动机上线信息读写校验不一致:({errCode})W:{str},R:{str_PLC}");
return;
}
//上线验证完成,消耗计划
ExecuteDB.Update_ExcutePlan_LineSetOK(opCode, engineNo);
WritePLC_IF(66, opCode, true);
LogRecord.LogRecord.Insert_Log(Type_Log.OnLine, opCode, $"【{tagTypeCodeID}】上线下载数据验证成功,流水号消耗成功!opCode={opCode};engineNo={engineNo}");
}
//保存进站数据
MesWork_QC.ProcessData_PartOn(opCode, engineNo_PLC, palletNo_PLC, sortNo_PLC);
WritePLC_IF(66, opCode, true);
}
else
{
WritePLC_IF(66, opCode, false);
}
break;
default:
break;
}
}
catch (Exception err)
{
LogRecord.LogRecord.Insert_Log(Type_Log.Alarm, "", $"MIS_Funtion报错!,,{err.Message}+{err.StackTrace}");
}
}
///
/// 数据库记录信号变化
///
///
private void TagTypeCodeID_TagDataOnChange(object msgEvent)
{
try
{
OpcData.CustomeEvetnArgs e = (OpcData.CustomeEvetnArgs)msgEvent;
string tagValue;
if (e.TagValue == null) return;
switch (e.TagValue.ToString().ToLower())
{
case "1":
case "true":
tagValue = "1";
break;
default:
tagValue = "0";
break;
}
string TagTypeCodeID;
string opName;
string TagID;
string TagValue;
DateTime arrivedTime;
DateTime leavedTime;
int TimeDiff;
opName = e.OpName.ToString();
TagValue = tagValue;
TagTypeCodeID = e.TagTypeCodeID.ToString();
TagID = e.TagID.ToString();
leavedTime = Convert.ToDateTime(e.TimeStamp);
arrivedTime = Convert.ToDateTime(e.TimeStampBefore);
TimeDiff = Convert.ToInt32(e.TagKeepTime);
if (TagTypeCodeID != "14" && TagTypeCodeID != "15")
{
string procedureName;
procedureName = "测量数据设备状态日志_增加数据";
System.Data.SqlClient.SqlParameter[] thisParms = new System.Data.SqlClient.SqlParameter[7];
thisParms[0] = new System.Data.SqlClient.SqlParameter("@工位号", opName);
thisParms[1] = new System.Data.SqlClient.SqlParameter("@信号类型代码", TagTypeCodeID);
thisParms[2] = new System.Data.SqlClient.SqlParameter("@TagID", TagID);
thisParms[3] = new System.Data.SqlClient.SqlParameter("@TagValue", TagValue);
thisParms[4] = new System.Data.SqlClient.SqlParameter("@到达时间", arrivedTime);
thisParms[5] = new System.Data.SqlClient.SqlParameter("@离开时间", leavedTime);
thisParms[6] = new System.Data.SqlClient.SqlParameter("@在线时间", TimeDiff);
DataAccess.ExecuteStoredProcedure(procedureName, ref thisParms);
}
}
catch (Exception err)
{
}
}
}
}