diff --git a/SCADA/Core/WeightCalibrationHelper.cs b/SCADA/Core/WeightCalibrationHelper.cs
new file mode 100644
index 0000000..0dd8d8b
--- /dev/null
+++ b/SCADA/Core/WeightCalibrationHelper.cs
@@ -0,0 +1,131 @@
+using DynamicExpresso;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+
+namespace MesWork
+{
+ ///
+ /// 重量标定公式计算工具。
+ ///
+ public static class WeightCalibrationHelper
+ {
+ private class CalibrationCache
+ {
+ public string ToolName;
+ public string CalibrationValue;
+ public string Formula;
+ public string Description;
+ public DateTime LoadedAt;
+ }
+
+ private static readonly object CacheLock = new object();
+ private static readonly Dictionary Cache = new Dictionary(StringComparer.OrdinalIgnoreCase);
+ private static readonly TimeSpan CacheLife = TimeSpan.FromSeconds(3);
+
+ public static bool Apply(string opName, decimal rawWeight, out decimal calibratedWeight, out string formula, out string message)
+ {
+ calibratedWeight = rawWeight;
+ formula = "x";
+ message = "";
+
+ if (!TryGetConfig(opName, out CalibrationCache config, out string queryMsg))
+ {
+ message = string.IsNullOrWhiteSpace(queryMsg) ? "未找到工具标定配置" : queryMsg;
+ return false;
+ }
+
+ formula = NormalizeFormula(config.Formula);
+ return TryEvaluateFormula(formula, rawWeight, out calibratedWeight, out message);
+ }
+
+ public static void ClearCache()
+ {
+ lock (CacheLock)
+ {
+ Cache.Clear();
+ }
+ }
+
+ public static bool ValidateFormula(string formula, out string message)
+ {
+ decimal _;
+ return TryEvaluateFormula(NormalizeFormula(formula), 1M, out _, out message);
+ }
+
+ private static string NormalizeFormula(string formula)
+ {
+ return string.IsNullOrWhiteSpace(formula) ? "" : formula.Trim();
+ }
+
+ private static bool TryEvaluateFormula(string formula, decimal xValue, out decimal result, out string message)
+ {
+ result = xValue;
+ message = "";
+
+ if (string.IsNullOrWhiteSpace(formula))
+ {
+ message = "计算公式不能为空,至少填写 x";
+ return false;
+ }
+
+ try
+ {
+ var interpreter = new Interpreter();
+ interpreter.Reference(typeof(Math));
+ interpreter.SetVariable("x", xValue);
+ interpreter.SetVariable("X", xValue);
+
+ object value = interpreter.Eval(formula);
+ if (value == null)
+ {
+ message = "计算公式未返回数值";
+ return false;
+ }
+
+ result = Convert.ToDecimal(value, CultureInfo.InvariantCulture);
+ return true;
+ }
+ catch (Exception err)
+ {
+ message = $"计算公式错误:{err.Message}";
+ return false;
+ }
+ }
+
+ private static bool TryGetConfig(string opName, out CalibrationCache config, out string message)
+ {
+ config = null;
+ message = "";
+ string key = string.IsNullOrWhiteSpace(opName) ? "" : opName.Trim();
+
+ lock (CacheLock)
+ {
+ if (Cache.TryGetValue(key, out config) && DateTime.Now - config.LoadedAt < CacheLife)
+ {
+ return true;
+ }
+ }
+
+ if (!B_DB_Opera.QueryToolCalibration(key, out string toolName, out string calibrationValue, out string formula, out string description, out message))
+ {
+ return false;
+ }
+
+ config = new CalibrationCache
+ {
+ ToolName = toolName,
+ CalibrationValue = calibrationValue,
+ Formula = formula,
+ Description = description,
+ LoadedAt = DateTime.Now
+ };
+
+ lock (CacheLock)
+ {
+ Cache[key] = config;
+ }
+ return true;
+ }
+ }
+}
diff --git a/SCADA/Funtion/B_DB_Opera.cs b/SCADA/Funtion/B_DB_Opera.cs
index d79ed8b..b083ad2 100644
--- a/SCADA/Funtion/B_DB_Opera.cs
+++ b/SCADA/Funtion/B_DB_Opera.cs
@@ -233,9 +233,6 @@ namespace MesWork
}
- // ====================================================================
- // 称重业务数据库方法(调用存储过程,统一 result/msg 返回格式)
- // ====================================================================
///
/// 根据订货号匹配工件管理规则,查询机型参数(加油量/抽油量/密度/残油量上下限)
@@ -263,6 +260,52 @@ namespace MesWork
return false;
}
+ ///
+ /// 查询指定工位的工具标定配置。
+ ///
+ public static bool QueryToolCalibration(string opName, out string toolName, out string calibrationValue, out string formula, out string description, out string msg)
+ {
+ toolName = "";
+ calibrationValue = "";
+ formula = "";
+ description = "";
+ msg = "";
+
+ try
+ {
+ 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}";
+ return false;
+ }
+ }
+
///
/// 插入称重记录
///
diff --git a/SCADA/Funtion/MIS_CurveCollector.cs b/SCADA/Funtion/MIS_CurveCollector.cs
index 5d9166d..f8fc514 100644
--- a/SCADA/Funtion/MIS_CurveCollector.cs
+++ b/SCADA/Funtion/MIS_CurveCollector.cs
@@ -24,6 +24,7 @@ namespace MesWork
public decimal? StableWeight;
public int? StableStartSeq;
public int? StableEndSeq;
+ public DateTime LastCalibrationErrorLogTime;
}
private static readonly ConcurrentDictionary _curveCollectors
@@ -76,7 +77,7 @@ namespace MesWork
}
///
- /// 采集线程:200ms读取一次实时重量,只缓存到内存,保存时一次性写库。
+ /// 采集线程:200ms读取一次实时重量,先按工具标定公式计算,再缓存到内存,保存时一次性写库。
///
private void CurveCollector_Work(CurveCollectorState state)
{
@@ -84,7 +85,17 @@ namespace MesWork
{
try
{
- decimal weight = Convert.ToDecimal(ReadPLC(100220, state.OpName)); // 实时重量点位
+ decimal rawWeight = Convert.ToDecimal(ReadPLC(100220, state.OpName)); // 实时重量点位
+ if (!WeightCalibrationHelper.Apply(state.OpName, rawWeight, out decimal weight, out _, out string msg))
+ {
+ if ((DateTime.Now - state.LastCalibrationErrorLogTime).TotalSeconds >= 5)
+ {
+ state.LastCalibrationErrorLogTime = DateTime.Now;
+ WeighingPage?.AppendLog($"[{state.OpName}] 曲线采样标定失败:{msg}");
+ }
+ Thread.Sleep(CurveCollectorSampleIntervalMs);
+ continue;
+ }
lock (state.BufferLock)
{
state.Buffer.Add(new CurveSamplePoint
@@ -139,7 +150,7 @@ namespace MesWork
}
///
- /// 优先用曲线点计算稳定重量;失败时调用方继续使用PLC锁定重量。
+ /// 优先用已标定曲线点计算稳定重量;失败时调用方继续使用PLC锁定重量。
///
private bool CurveCollector_TryGetStableWeight(string opName, out decimal weight, out int pointCount, out string msg)
{
diff --git a/SCADA/Funtion/MIS_Funtion.cs b/SCADA/Funtion/MIS_Funtion.cs
index dc15e34..6b766a4 100644
--- a/SCADA/Funtion/MIS_Funtion.cs
+++ b/SCADA/Funtion/MIS_Funtion.cs
@@ -177,7 +177,7 @@ namespace MesWork
int stIdx = WeighingPage?.GetStationIndex(opName) ?? 1;
if (!B_DB_Opera.QueryWorkpieceByOrderNo(orderNo, out string matchedModelNo, out decimal addOilQty, out decimal extractOilQty, out decimal density,
- out decimal residualOilUpperLimit, out decimal residualOilLowerLimit))
+ out decimal residualOilUpperLimit, out decimal residualOilLowerLimit)) // 根据订货号 查询基本参数
{
WritePLC_IF(112, opName, 3); // 报警代码=3,机型错误
B_DB_Opera.SaveLog_Response($"【{opName}】工件管理中未找到订货号[{orderNo}]的匹配规则,发动机={engineNo}", AID);
@@ -252,18 +252,26 @@ namespace MesWork
engineNo = parsedProductNo;
}
- if (CurveCollector_TryGetStableWeight(opName, out decimal curveWeight, out int curvePointCount, out string curveMsg))
- {
- weight = curveWeight; // 优先使用曲线稳定段计算重量
- B_DB_Opera.SaveLog_Response($"【{opName}】曲线重量={curveWeight:F3}kg,PLC重量={plcWeight:F3}kg,差值={(curveWeight - plcWeight):F3}kg,点数={curvePointCount}", AID);
- }
- else
- {
- B_DB_Opera.SaveLog_Response($"【{opName}】曲线重量不可用,使用PLC锁定重量={plcWeight:F3}kg,原因={curveMsg}", AID);
- }
-
- long curveWeighingRecordId = 0;
- B_DB_Opera.UpdateStationComplete(engineNo, opName, weight); // 过站记录保存最终采用重量
+ if (CurveCollector_TryGetStableWeight(opName, out decimal curveWeight, out int curvePointCount, out string curveMsg))
+ {
+ weight = curveWeight; // 曲线采样点已按工具标定公式处理,稳定重量不再二次标定
+ B_DB_Opera.SaveLog_Response($"【{opName}】标定曲线重量={curveWeight:F3}kg,PLC锁定重量={plcWeight:F3}kg,点数={curvePointCount}", AID);
+ }
+ else
+ {
+ B_DB_Opera.SaveLog_Response($"【{opName}】曲线重量不可用,使用PLC锁定重量={plcWeight:F3}kg,原因={curveMsg}", AID);
+ decimal rawWeight = plcWeight;
+ if (!WeightCalibrationHelper.Apply(opName, rawWeight, out decimal calibratedWeight, out string calibrationFormula, out string calibrationMsg))
+ {
+ throw new Exception($"工具标定公式处理失败:{calibrationMsg}");
+ }
+ weight = calibratedWeight;
+ B_DB_Opera.SaveLog_Response($"【{opName}】PLC锁定重量标定:原始重量={rawWeight:F3}kg,公式={calibrationFormula},标定后={weight:F3}kg", AID);
+ WeighingPage?.AppendLog($"[{opName}] PLC锁定重量标定:原始={rawWeight:F3}kg,公式={calibrationFormula},结果={weight:F3}kg");
+ }
+
+ long curveWeighingRecordId = 0;
+ B_DB_Opera.UpdateStationComplete(engineNo, opName, weight); // 过站记录保存最终采用重量
string weighType = GetWeighingType(opName);
decimal oilReleaseQty = 0;
decimal residualOilQty = 0;
diff --git a/SCADA/MAIN_PAGE.Designer.cs b/SCADA/MAIN_PAGE.Designer.cs
index 62083f9..fa3835a 100644
--- a/SCADA/MAIN_PAGE.Designer.cs
+++ b/SCADA/MAIN_PAGE.Designer.cs
@@ -219,18 +219,18 @@ namespace MesWork
this.lbl_NavWorkpiece.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lbl_NavWorkpiece.Cursor = System.Windows.Forms.Cursors.Hand;
this.pnl_NavWorkpiece.Controls.Add(this.lbl_NavWorkpiece);
- // ── 导航项:工具管理 ──
+ // ── 导航项:工具标定 ──
this.pnl_NavTool.BackColor = System.Drawing.Color.FromArgb(30, 58, 95);
this.pnl_NavTool.Cursor = System.Windows.Forms.Cursors.Hand;
this.pnl_NavTool.Location = new System.Drawing.Point(1, 206);
this.pnl_NavTool.Size = new System.Drawing.Size(78, 64);
this.pnl_NavTool.Name = "pnl_NavTool";
- this.pnl_NavTool.Tag = "🔧\n工具管理";
+ this.pnl_NavTool.Tag = "🔧\n工具标定";
this.lbl_NavTool.AutoSize = false;
this.lbl_NavTool.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbl_NavTool.Font = new System.Drawing.Font("微软雅黑", 9F);
this.lbl_NavTool.ForeColor = System.Drawing.Color.FromArgb(148, 163, 184);
- this.lbl_NavTool.Text = "🔧\n工具管理";
+ this.lbl_NavTool.Text = "🔧\n工具标定";
this.lbl_NavTool.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lbl_NavTool.Cursor = System.Windows.Forms.Cursors.Hand;
this.pnl_NavTool.Controls.Add(this.lbl_NavTool);
diff --git a/SCADA/Pages/UC_ToolMgmt.Designer.cs b/SCADA/Pages/UC_ToolMgmt.Designer.cs
index e5c784f..b365ead 100644
--- a/SCADA/Pages/UC_ToolMgmt.Designer.cs
+++ b/SCADA/Pages/UC_ToolMgmt.Designer.cs
@@ -57,7 +57,7 @@ namespace MesWork.Pages
this.txt_Search.Name = "txt_Search";
this.txt_Search.Size = new System.Drawing.Size(280, 27);
this.txt_Search.TabIndex = 0;
- this.txt_Search.Text = "输入工具名称搜索...";
+ this.txt_Search.Text = "输入工位号或工具名称搜索...";
this.txt_Search.GotFocus += new System.EventHandler(this.txt_Search_GotFocus);
this.txt_Search.LostFocus += new System.EventHandler(this.txt_Search_LostFocus);
this.txt_Search.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txt_Search_KeyDown);
diff --git a/SCADA/Pages/UC_ToolMgmt.cs b/SCADA/Pages/UC_ToolMgmt.cs
index dead41c..6ad971b 100644
--- a/SCADA/Pages/UC_ToolMgmt.cs
+++ b/SCADA/Pages/UC_ToolMgmt.cs
@@ -7,12 +7,12 @@ using System.Windows.Forms;
namespace MesWork.Pages
{
///
- /// 工具管理页面 — 传感器/工具校准和使用管理
- /// 对应存储过程:工具管理_分页查询、工具管理_新增、工具管理_修改、工具管理_删除
+ /// 工具标定页面 — 固定维护OP10/OP20重量标定公式。
+ /// 对应存储过程:工具管理_分页查询、工具管理_编辑
///
public partial class UC_ToolMgmt : UserControl
{
- private const string SEARCH_HINT = "输入工具名称搜索...";
+ private const string SEARCH_HINT = "输入工位号或工具名称搜索...";
private PagerBar _pager;
public UC_ToolMgmt()
@@ -24,6 +24,9 @@ namespace MesWork.Pages
this.Controls.Remove(pnl_StatusBar);
this.Controls.Add(_pager);
this.Controls.SetChildIndex(_pager, this.Controls.Count - 2);
+ btn_Add.Visible = false;
+ btn_Delete.Visible = false;
+ btn_Edit.Location = btn_Delete.Location;
}
///
@@ -34,14 +37,12 @@ namespace MesWork.Pages
dgv_Data.AutoGenerateColumns = false;
dgv_Data.Columns.Clear();
dgv_Data.Columns.Add(new DataGridViewTextBoxColumn { Name = "ID", HeaderText = "ID", DataPropertyName = "ID", Visible = false });
- dgv_Data.Columns.Add(new DataGridViewTextBoxColumn { Name = "工具名称", HeaderText = "工具名称", DataPropertyName = "工具名称", FillWeight = 110 });
- dgv_Data.Columns.Add(new DataGridViewTextBoxColumn { Name = "说明", HeaderText = "说明", DataPropertyName = "说明", FillWeight = 120 });
- dgv_Data.Columns.Add(new DataGridViewTextBoxColumn { Name = "校准值", HeaderText = "校准值", DataPropertyName = "校准值", FillWeight = 70 });
- dgv_Data.Columns.Add(new DataGridViewTextBoxColumn { Name = "校准时间", HeaderText = "校准时间", DataPropertyName = "校准时间", FillWeight = 90 });
- dgv_Data.Columns.Add(new DataGridViewTextBoxColumn { Name = "使用次数", HeaderText = "使用次数", DataPropertyName = "使用次数", FillWeight = 60 });
- dgv_Data.Columns.Add(new DataGridViewTextBoxColumn { Name = "使用次数变更时间", HeaderText = "次数变更时间", DataPropertyName = "使用次数变更时间", FillWeight = 90 });
- dgv_Data.Columns.Add(new DataGridViewTextBoxColumn { Name = "创建时间", HeaderText = "创建时间", DataPropertyName = "创建时间", FillWeight = 90 });
- dgv_Data.Columns.Add(new DataGridViewTextBoxColumn { Name = "修改时间", HeaderText = "修改时间", DataPropertyName = "修改时间", FillWeight = 90 });
+ dgv_Data.Columns.Add(new DataGridViewTextBoxColumn { Name = "工位号", HeaderText = "工位号", DataPropertyName = "工位号", FillWeight = 70 });
+ dgv_Data.Columns.Add(new DataGridViewTextBoxColumn { Name = "工具名称", HeaderText = "工具名称", DataPropertyName = "工具名称", FillWeight = 120 });
+ dgv_Data.Columns.Add(new DataGridViewTextBoxColumn { Name = "重量标定", HeaderText = "重量标定", DataPropertyName = "重量标定", FillWeight = 90 });
+ dgv_Data.Columns.Add(new DataGridViewTextBoxColumn { Name = "计算公式", HeaderText = "计算公式", DataPropertyName = "计算公式", FillWeight = 150 });
+ dgv_Data.Columns.Add(new DataGridViewTextBoxColumn { Name = "说明", HeaderText = "说明", DataPropertyName = "说明", FillWeight = 180 });
+ dgv_Data.Columns.Add(new DataGridViewTextBoxColumn { Name = "修改时间", HeaderText = "修改时间", DataPropertyName = "修改时间", FillWeight = 100 });
}
public void LoadData(string keyword = "")
@@ -74,27 +75,13 @@ namespace MesWork.Pages
// ── 按钮事件 ──
private void btn_Search_Click(object sender, EventArgs e) { _pager.ResetPage(); LoadData(txt_Search.Text == SEARCH_HINT ? "" : txt_Search.Text.Trim()); }
- private void btn_Add_Click(object sender, EventArgs e) => ShowEditDialog(null);
+ private void btn_Add_Click(object sender, EventArgs e) { }
private void btn_Edit_Click(object sender, EventArgs e)
{
if (dgv_Data.CurrentRow != null) ShowEditDialog(dgv_Data.CurrentRow);
else MessageBox.Show("请先选择一条记录", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
- private void btn_Delete_Click(object sender, EventArgs e)
- {
- if (dgv_Data.CurrentRow == null) { MessageBox.Show("请先选择一条记录", "提示"); return; }
- string name = dgv_Data.CurrentRow.Cells["工具名称"]?.Value?.ToString() ?? "";
- if (MessageBox.Show($"确认删除工具「{name}」?", "确认删除", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
- {
- try
- {
- var parms = new SqlParameter[] { new SqlParameter("@ID", int.Parse(dgv_Data.CurrentRow.Cells["ID"]?.Value?.ToString() ?? "0")) };
- SqlOperation.ExecuteStoredProcedure("工具管理_删除", parms, out string err);
- LoadData();
- }
- catch (Exception ex) { MessageBox.Show($"删除失败:{ex.Message}"); }
- }
- }
+ private void btn_Delete_Click(object sender, EventArgs e) { }
private void btn_Refresh_Click(object sender, EventArgs e) { _pager.ResetPage(); LoadData(""); }
private void dgv_Data_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex >= 0) btn_Edit_Click(sender, e); }
@@ -103,32 +90,41 @@ namespace MesWork.Pages
///
private void ShowEditDialog(DataGridViewRow row)
{
- bool isEdit = row != null;
- using (var dlg = CrudHelper.CreateEditDialog(isEdit ? "修改工具" : "新增工具", 420, 380))
+ if (row == null) return;
+
+ using (var dlg = CrudHelper.CreateEditDialog("修改工具标定", 520, 360))
{
int y = 20;
- var txtName = CrudHelper.AddTextField(dlg, "工具名称:", ref y, isEdit ? row.Cells["工具名称"]?.Value?.ToString() : "");
- var txtDesc = CrudHelper.AddTextField(dlg, "说明:", ref y, isEdit ? row.Cells["说明"]?.Value?.ToString() : "");
- var txtCalVal = CrudHelper.AddTextField(dlg, "校准值:", ref y, isEdit ? row.Cells["校准值"]?.Value?.ToString() : "0");
- var txtCalTime = CrudHelper.AddTextField(dlg, "校准时间:", ref y, isEdit ? row.Cells["校准时间"]?.Value?.ToString() : DateTime.Now.ToString("yyyy-MM-dd"));
- var txtUseCnt = CrudHelper.AddTextField(dlg, "使用次数:", ref y, isEdit ? row.Cells["使用次数"]?.Value?.ToString() : "0");
+ var txtStation = CrudHelper.AddTextField(dlg, "工位号:", ref y, row.Cells["工位号"]?.Value?.ToString(), inputWidth: 320);
+ txtStation.ReadOnly = true;
+ txtStation.BackColor = Color.FromArgb(245, 247, 250);
+ var txtName = CrudHelper.AddTextField(dlg, "工具名称:", ref y, row.Cells["工具名称"]?.Value?.ToString(), inputWidth: 320);
+ var txtCalVal = CrudHelper.AddTextField(dlg, "重量标定:", ref y, row.Cells["重量标定"]?.Value?.ToString(), inputWidth: 320);
+ var txtFormula = CrudHelper.AddTextField(dlg, "计算公式:", ref y, row.Cells["计算公式"]?.Value?.ToString(), inputWidth: 320);
+ var txtDesc = CrudHelper.AddTextField(dlg, "说明:", ref y, row.Cells["说明"]?.Value?.ToString(), inputWidth: 320);
CrudHelper.AddDialogButtons(dlg, ref y);
if (dlg.ShowDialog() == DialogResult.OK)
{
try
{
- string sp = isEdit ? "工具管理_编辑" : "工具管理_增加";
+ if (!WeightCalibrationHelper.ValidateFormula(txtFormula.Text.Trim(), out string formulaMsg))
+ {
+ MessageBox.Show(formulaMsg, "公式错误", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+ return;
+ }
+
var pList = new System.Collections.Generic.List
{
+ new SqlParameter("@ID", int.Parse(row.Cells["ID"]?.Value?.ToString() ?? "0")),
+ new SqlParameter("@工位号", txtStation.Text.Trim()),
new SqlParameter("@工具名称", txtName.Text.Trim()),
+ new SqlParameter("@重量标定", txtCalVal.Text.Trim()),
+ new SqlParameter("@计算公式", txtFormula.Text.Trim()),
new SqlParameter("@说明", txtDesc.Text.Trim()),
- new SqlParameter("@校准值", txtCalVal.Text.Trim()),
- new SqlParameter("@校准时间", DateTime.Parse(txtCalTime.Text)),
- new SqlParameter("@使用次数", int.Parse(txtUseCnt.Text))
};
- if (isEdit) pList.Insert(0, new SqlParameter("@ID", int.Parse(row.Cells["ID"]?.Value?.ToString() ?? "0")));
- SqlOperation.ExecuteStoredProcedure(sp, pList.ToArray(), out string err);
+ SqlOperation.ExecuteStoredProcedure("工具管理_编辑", pList.ToArray(), out string err);
+ WeightCalibrationHelper.ClearCache();
LoadData();
}
catch (Exception ex) { MessageBox.Show($"保存失败:{ex.Message}"); }
@@ -138,7 +134,7 @@ namespace MesWork.Pages
private void btn_Export_Click(object sender, EventArgs e)
{
- CrudHelper.ExportToExcel("工具管理", "工具管理", () =>
+ CrudHelper.ExportToExcel("工具标定", "工具标定", () =>
{
string keyword = CrudHelper.GetSearchKeyword(txt_Search, SEARCH_HINT);
var (pageCountParam, itemCountParam) = PagerBar.CreateOutputParams();
diff --git a/SCADA/Pages/UC_Weighing.cs b/SCADA/Pages/UC_Weighing.cs
index 7b4ba09..193e8af 100644
--- a/SCADA/Pages/UC_Weighing.cs
+++ b/SCADA/Pages/UC_Weighing.cs
@@ -741,6 +741,10 @@ namespace MesWork.Pages
if (wv != null)
{
decimal weight = Convert.ToDecimal(wv);
+ if (WeightCalibrationHelper.Apply(opName, weight, out decimal calibratedWeight, out _, out _))
+ {
+ weight = calibratedWeight;
+ }
string newTxt = Convert.ToDouble(weight).ToString("F2");
if (lblWeight.Text != newTxt) lblWeight.Text = newTxt;
}
diff --git a/SCADA/WC_GKJ_OIL.csproj b/SCADA/WC_GKJ_OIL.csproj
index 88658ca..0e97a83 100644
--- a/SCADA/WC_GKJ_OIL.csproj
+++ b/SCADA/WC_GKJ_OIL.csproj
@@ -165,8 +165,9 @@
-
-
+
+
+
Form
@@ -363,4 +364,4 @@
-
\ No newline at end of file
+