Files
15-WeiChai-WC_CentralControl/SCADA/MES_A95/MIS_Funtion.cs

321 lines
15 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using DataLinkMesWork;
using DC_A95;
using SYNC_SAP_MES;
using System;
using System.Linq;
/// <summary>
///
/// </summary>
namespace MesWork
{
/// <summary>
/// 处理MIS逻辑
/// </summary>
public partial class MesWorkForm
{
/// <summary>
/// 处理MIS逻辑
/// </summary>
/// <param name="e"></param>
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}");
}
}
/// <summary>
/// 数据库记录信号变化
/// </summary>
/// <param name="msg"></param>
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)
{
}
}
}
}