125 lines
5.7 KiB
C#
125 lines
5.7 KiB
C#
using MesServerWork;
|
||
using MesDataFunction;
|
||
using MisDataFunDll;
|
||
using MisDataSaveDate;
|
||
using System;
|
||
using System.Data;
|
||
|
||
namespace MesServerFunctions
|
||
{
|
||
partial class FunctionMES
|
||
{
|
||
/// <summary>
|
||
/// OP431 保存:按 PLC 允许保存时间生成静置质量数据,正常过站后带质量数据出站。
|
||
/// </summary>
|
||
private void MesRead(object e)
|
||
{
|
||
try
|
||
{
|
||
var msgEvent = (DeviceDriver_BasicData.CustomeEvetnArgs)e;
|
||
string opName = Convert.ToString(msgEvent.OpName);
|
||
int tagValue = Convert.ToInt32(msgEvent.TagValue);
|
||
|
||
if (tagValue != 1)
|
||
{
|
||
MisDataBaseFun.WriteMesReadOver(opName, false);
|
||
MIS_BASE.Write_OpNameIsOk(opName, -99);
|
||
MisDataFun.LogRecording_OP(opName, "INFO", "MIS", "PLC允许保存数据取消!");
|
||
return;
|
||
}
|
||
|
||
MisDataFun.LogRecording_OP(opName, "INFO", "MIS", "PLC允许保存OP431静置数据!");
|
||
|
||
// 读取 PLC 当前产品信息,后续质量数据和出站都以该产品码为准。
|
||
MIS_BASE.GetEngineTypeFromPLC(opName, out int engineTypeID, out string engineType, out string engineID, out int palletCode, out string orderForm);
|
||
if (string.IsNullOrWhiteSpace(engineID))
|
||
{
|
||
WriteManualStaticMesReadError(opName, "PLC产品码为空,无法保存静置数据");
|
||
return;
|
||
}
|
||
|
||
// 保存阶段从 PLC 读取到的已经是最终 PACK 码,只补查订单和机型信息。
|
||
MisDataFun.Moby_Select_PDC(engineID, out orderForm, out engineType, out engineTypeID);
|
||
if (engineTypeID <= 0)
|
||
{
|
||
WriteManualStaticMesReadError(opName, "未查询到产品执行信息:" + engineID);
|
||
return;
|
||
}
|
||
|
||
// PLC 合格标识只保留合格/不合格两种结果。
|
||
MIS_BASE.Read_QualityMask(opName, out int qualityMask);
|
||
qualityMask = NormalizeManualStaticQualityMask(qualityMask);
|
||
|
||
// 组装 OP431 静置质量数据:开始时间、完成时间、时间差、库位号。
|
||
if (!TryBuildManualStaticOutData(engineID, qualityMask, out ManualStaticOutData staticOutData, out string message))
|
||
{
|
||
WriteManualStaticMesReadError(opName, message);
|
||
return;
|
||
}
|
||
|
||
// 保存信号到达时,回写线下静置结束时间和静置时长。
|
||
if (!FinishManualStaticRecord(engineID, staticOutData.FinishTime, staticOutData.Minutes, out message))
|
||
{
|
||
WriteManualStaticMesReadError(opName, message);
|
||
return;
|
||
}
|
||
|
||
// 将四项静置质量数据写入测量数据合格索引和明细表。
|
||
if (!WriteManualStaticOutQualityData(opName, engineID, staticOutData, out message))
|
||
{
|
||
WriteManualStaticMesReadError(opName, message);
|
||
return;
|
||
}
|
||
|
||
// 写正常过站记录后查询 MOM 上传质量数据组。
|
||
MisDataFun.WorkStartInsert(opName, qualityMask);
|
||
MisDataFun.GetPartQualityGroupParams(opName, engineID, out DataTable dtQuality);
|
||
if (dtQuality == null || dtQuality.Rows.Count == 0)
|
||
{
|
||
WriteManualStaticMesReadError(opName, "未查询到OP431静置质量数据组,禁止静默出站:" + engineID);
|
||
return;
|
||
}
|
||
|
||
// 带质量数据调用工厂 MES 出站,返回 13921 时按不合格完成。
|
||
CallWebService.Call_dataCollectForSfcEx(opName, engineID, dtQuality, qualityMask, out string code, out string momMessage);
|
||
if (code == "0")
|
||
{
|
||
MIS_BASE.Write_OpNameIsOk(opName, qualityMask);
|
||
}
|
||
else if (code == "13921")
|
||
{
|
||
qualityMask = 2;
|
||
MIS_BASE.Write_OpNameIsOk(opName, qualityMask);
|
||
MisDataFun.LogRecording_OP(opName, "INFO", "MOM", engineID + " 工厂MES质量判定不合格,按不合格完成OP431过站");
|
||
}
|
||
else
|
||
{
|
||
WriteManualStaticMesReadError(opName, "出站失败:" + engineID + ",错误代码:" + code + ",消息:" + momMessage);
|
||
return;
|
||
}
|
||
|
||
MisDataBaseFun.WriteMesReadOver(opName, true);
|
||
|
||
MisDataFun.LogRecording_OP(opName, "INFO", "MIS", "MES保存OP431静置数据完成!");
|
||
MisDataFun.LogRecording_OP(opName, "INFO", "MIS", "MES工作完成!");
|
||
}
|
||
catch (Exception err)
|
||
{
|
||
MyLog4Net.MyLogHelper.Error("Function1062.MesRead", err.Message);
|
||
MisDataFun.LogRecording_OP(ManualStaticOutOpName, "ERROR", "MesRead", err.Message);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// OP431 保存失败时统一复位保存完成、置 MES 报警并通知页面。
|
||
/// </summary>
|
||
private void WriteManualStaticMesReadError(string opName, string message)
|
||
{
|
||
MisDataBaseFun.WriteMesReadOver(opName, false);
|
||
MIS_BASE.Write_TagValueByTagTypeID(34, opName, true);
|
||
SendMessage.AsyncSendMessage_Notice(opName, "【" + opName + "】" + message);
|
||
MisDataFun.LogRecording_OP(opName, "ERROR", "MesRead", message);
|
||
}
|
||
}
|
||
}
|