init: 潍柴发动机线 中央控制程序 项目首次入库

This commit is contained in:
XingCheng3
2026-06-08 12:05:16 +08:00
commit 196c66b9ff
547 changed files with 379162 additions and 0 deletions

View File

@@ -0,0 +1,320 @@
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)
{
}
}
}
}