增加线性工件校准 增加信号变化日志记录
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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}");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user