init: 潍柴发动机线 中央控制程序 项目首次入库
This commit is contained in:
320
SCADA/MES_A95/MIS_Funtion.cs
Normal file
320
SCADA/MES_A95/MIS_Funtion.cs
Normal 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)
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user