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

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

@@ -52,16 +52,14 @@ namespace MesWork
}
public static void Event_Signal_Log(string opName, int tagTypeCodeID, string value, string tagID)
public static void Event_Signal_Log(string opName, int tagTypeCodeID, string signalName, string value)
{
var ChangeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
var procedureName = "Event_Signal_Log";
var sqlParameter = new SqlParameter[] {
new SqlParameter("@OpName", opName),
new SqlParameter("@TagTypeCodeID", tagTypeCodeID),
new SqlParameter("@Value", value),
new SqlParameter("@ChangeTime",ChangeTime),
new SqlParameter("@TagID", tagID)
new SqlParameter("@SignalName", signalName),
new SqlParameter("@TagValue", value)
};
SqlOperation.ExecuteStoredProcedure(procedureName, sqlParameter, out string errorMessage);
@@ -261,49 +259,37 @@ namespace MesWork
}
/// <summary>
/// 查询指定工位的工具标定配置。
/// 查询指定工位和原始重量匹配的工具标定配置。
/// </summary>
public static bool QueryToolCalibration(string opName, out string toolName, out string calibrationValue, out string formula, out string description, out string msg)
public static bool QueryToolCalibration(string opName, decimal rawWeight, out string toolName, out string formula, out string description, out string msg)
{
toolName = "";
calibrationValue = "";
formula = "";
description = "";
msg = "";
try
var sqlParameter = new SqlParameter[] {
new SqlParameter("@工位号", opName ?? ""),
new SqlParameter("@重量", rawWeight)
};
SqlOperation.ExecuteStoredProcedure("工具管理_查询匹配标定", sqlParameter, out DataTable dt, out string err);
if (dt == null)
{
using (var conn = new SqlConnection(MesWorkForm.ConnectionString))
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = @"
SELECT TOP 1 [工具名称], [重量标定], [计算公式], [说明]
FROM [工具管理]
WHERE [工位号] = @工位号
ORDER BY [ID]";
cmd.Parameters.Add(new SqlParameter("@工位号", opName ?? ""));
conn.Open();
using (var reader = cmd.ExecuteReader())
{
if (!reader.Read())
{
msg = $"未找到[{opName}]工具标定配置";
return false;
}
toolName = reader["工具名称"]?.ToString() ?? "";
calibrationValue = reader["重量标定"]?.ToString() ?? "";
formula = reader["计算公式"]?.ToString() ?? "";
description = reader["说明"]?.ToString() ?? "";
return true;
}
}
}
catch (Exception err)
{
msg = $"查询[{opName}]工具标定配置失败:{err.Message}";
msg = string.IsNullOrWhiteSpace(err) ? $"查询[{opName}]工具标定配置失败" : err;
return false;
}
if (dt.Rows.Count == 0)
{
msg = "";
return false;
}
var row = dt.Rows[0];
toolName = row["工具名称"]?.ToString() ?? "";
formula = row["计算公式"]?.ToString() ?? "";
description = row["说明"]?.ToString() ?? "";
return true;
}
/// <summary>

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}");
}