增加线性工件校准 增加信号变化日志记录

This commit is contained in:
XingCheng3
2026-05-13 00:30:32 +08:00
parent 1e908cf72f
commit 14ff9fa4c3
10 changed files with 2182 additions and 2040 deletions

View File

@@ -39,6 +39,12 @@ namespace MesWork
tagValue = msgEvent.TagValue.ToString();
break;
}
// ── 监控变量变化记录(首次值除外,不影响主流程)──
if (!ValueT(isFirstValue))
{
var signalName = string.IsNullOrWhiteSpace(alarmMsg) ? tagID : alarmMsg;
SaveSignalChangeLog(opName, tagTypeCodeID, signalName, tagValue);
}
// ── 报警处理编码900~2000──
if (tagTypeCodeID >= 900 & tagTypeCodeID < 2000)
{
@@ -61,7 +67,8 @@ namespace MesWork
switch (tagTypeCodeID)
{
case 2: // 工件到位/离开
WritePLC_IF(112, opName, 0); // 报警代码清空
// WritePLC_IF(112, opName, 0); // 报警代码清空
ClearStationDisplay(opName);
break;
case 14: // PLC心跳 → 回写PC心跳
WritePLC_IF(15, opName, tagValue);
@@ -108,6 +115,22 @@ namespace MesWork
WeighingPage?.AppendLog(errMsg);
}
}
/// <summary>
/// 记录监控变量变化异常不影响PLC主流程。
/// </summary>
private void SaveSignalChangeLog(string opName, int tagTypeCodeID, string signalName, string tagValue)
{
try
{
B_DB_Opera.Event_Signal_Log(opName, tagTypeCodeID, signalName, tagValue);
}
catch
{
// 变化记录失败不干涉PLC信号主流程
}
}
// ====================================================================
// 称重交互核心方法
// ====================================================================
@@ -123,6 +146,35 @@ namespace MesWork
// Hanging模式
return opName == "OP10" ? "放油前" : "放油后";
}
/// <summary>
/// 清除工位显示信息(工件离开时调用)
/// </summary>
private void ClearStationDisplay(string opName)
{
try
{
int stIdx = WeighingPage?.GetStationIndex(opName) ?? 1;
// 清除工件信息
WeighingPage?.UpdateStationInfo(stIdx, "", "", "");
// 清除油量参数信息
WeighingPage?.UpdateOilInfo(stIdx, 0, 0, 0, 0, 0);
// 清除结果信息
WeighingPage?.UpdateOilResult(stIdx, 0, 0);
WeighingPage?.ClearSaveResult(stIdx);
}
catch (Exception err)
{
WeighingPage?.AppendLog($"[{opName}] 清除显示异常:{err.Message}");
}
}
/// <summary>
/// 码块数据转换:将产品编号统一转大写,并拆分出订货号与产品编号
/// 支持格式:
@@ -192,7 +244,7 @@ namespace MesWork
if (!B_DB_Opera.QueryWorkpieceByOrderNo(orderNo, out string matchedModelNo, out decimal addOilQty, out decimal extractOilQty, out decimal density,
out decimal residualOilUpperLimit, out decimal residualOilLowerLimit)) // 根据订货号 查询基本参数
{
WritePLC_IF(112, opName, 3); // 报警代码=3机型错误
// WritePLC_IF(112, opName, 3); // 报警代码=3机型错误
LogWeighingFallback(opName, engineNo, "请求工作", $"订货号[{orderNo}]未匹配到工件参数使用PLC机型[{modelNo}]继续允许工作", AID);
// 兜底机制参数资料缺失不再卡PLC请求保存时若无法正常更新记录会生成异常完成记录。
WritePLC_IF(66, opName, true);
@@ -213,7 +265,7 @@ namespace MesWork
// 空中放油后:查找最新放油前记录(无论是否完成,支持多次测量)
if (!B_DB_Opera.QueryWeighingBeforeOil(engineNo, out _, out decimal preWeight, out _, out _, out _))
{
WritePLC_IF(112, opName, 3);
// WritePLC_IF(112, opName, 3);
LogWeighingFallback(opName, engineNo, "请求工作-放油后", "未找到放油前记录,继续允许工作,保存时按异常放油后记录处理", AID);
}
else
@@ -235,7 +287,7 @@ namespace MesWork
}
else
{
WritePLC_IF(112, opName, 1); // 报警代码=1获取数据失败
// WritePLC_IF(112, opName, 1); // 报警代码=1获取数据失败
engineNo = string.IsNullOrWhiteSpace(rawCodeBlock) ? $"未知产品_{opName}_{DateTime.Now:yyyyMMddHHmmss}" : rawCodeBlock.Trim();
LogWeighingFallback(opName, engineNo, "请求工作", $"码块数据转换失败,原始码值=[{rawCodeBlock}],仍允许工作", AID);
// 兜底机制:产品解析失败时仍给允许工作,后续保存阶段会按异常产品记录并判不合格。
@@ -245,7 +297,7 @@ namespace MesWork
}
catch (Exception err)
{
WritePLC_IF(112, opName, 1); // 报警代码=1获取数据失败
//WritePLC_IF(112, opName, 1); // 报警代码=1获取数据失败
B_DB_Opera.SaveLog_Response($"【{opName}】请求工作处理失败:{err.Message}", AID);
}
}
@@ -295,6 +347,7 @@ namespace MesWork
long curveWeighingRecordId = 0;
B_DB_Opera.UpdateStationComplete(engineNo, opName, weight); // 过站记录保存最终采用重量
WeighingPage?.UpdateFinalWeight(WeighingPage?.GetStationIndex(opName) ?? 1, weight);
string weighType = GetWeighingType(opName);
decimal oilReleaseQty = 0;
decimal residualOilQty = 0;
@@ -393,7 +446,7 @@ namespace MesWork
catch (Exception err)
{
CurveCollector_EndSegment(opName, 0);
WritePLC_IF(112, opName, 2); // 报警代码=2保存失败
// WritePLC_IF(112, opName, 2); // 报警代码=2保存失败
B_DB_Opera.SaveLog_Response($"【{opName}】保存处理失败:{err.Message}", AID);
WeighingPage?.AppendLog($"[{opName}] ❌ 保存异常:{err.Message}");
}