修改已知问题

This commit is contained in:
2026-01-29 22:15:34 +08:00
parent b940170607
commit 88483b38ad
13 changed files with 860 additions and 378 deletions

View File

@@ -8,6 +8,8 @@
<add key="PLCIP" value="127.0.0.1" />
<add key="PLCPort" value="6000" />
<add key="PLCScan" value="600" />
<add key="WeightUp" value="105.25" />
<add key="WeightDown" value="180.23" />
</appSettings>
</configuration>

View File

@@ -16,7 +16,7 @@ namespace FATrace.App
{
return new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.SqlServer, connectionString)
.UseAutoSyncStructure(true)
.UseAutoSyncStructure(false)
.Build();
}
catch (Exception ex)

View File

@@ -48,7 +48,16 @@ namespace FATrace.App
btnHistoryData = new Button();
TabControlMain = new TabControl();
tabPage2 = new TabPage();
panel4 = new Panel();
btnConfigSave = new Button();
label30 = new Label();
pictureBox5 = new PictureBox();
txtWeightDown = new TextBox();
label29 = new Label();
label31 = new Label();
txtWeightUp = new TextBox();
panel3 = new Panel();
btnReprint = new Button();
pictureBox4 = new PictureBox();
btnWeightPrint = new Button();
txtCode = new TextBox();
@@ -105,7 +114,6 @@ namespace FATrace.App
dtpSearchStartTime = new DateTimePicker();
dataGridView1 = new DataGridView();
label22 = new Label();
btnReprint = new Button();
statusStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
splitContainer1.Panel1.SuspendLayout();
@@ -114,6 +122,8 @@ namespace FATrace.App
((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit();
TabControlMain.SuspendLayout();
tabPage2.SuspendLayout();
panel4.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureBox5).BeginInit();
panel3.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureBox4).BeginInit();
panel2.SuspendLayout();
@@ -333,6 +343,7 @@ namespace FATrace.App
//
// tabPage2
//
tabPage2.Controls.Add(panel4);
tabPage2.Controls.Add(panel3);
tabPage2.Controls.Add(panel2);
tabPage2.Controls.Add(panel1);
@@ -344,6 +355,96 @@ namespace FATrace.App
tabPage2.TabIndex = 1;
tabPage2.UseVisualStyleBackColor = true;
//
// panel4
//
panel4.BorderStyle = BorderStyle.FixedSingle;
panel4.Controls.Add(btnConfigSave);
panel4.Controls.Add(label30);
panel4.Controls.Add(pictureBox5);
panel4.Controls.Add(txtWeightDown);
panel4.Controls.Add(label29);
panel4.Controls.Add(label31);
panel4.Controls.Add(txtWeightUp);
panel4.Dock = DockStyle.Bottom;
panel4.Location = new Point(3, 559);
panel4.Name = "panel4";
panel4.Size = new Size(878, 131);
panel4.TabIndex = 4;
//
// btnConfigSave
//
btnConfigSave.Font = new Font("微软雅黑", 14.25F, FontStyle.Bold, GraphicsUnit.Point, 134);
btnConfigSave.ForeColor = SystemColors.ControlDarkDark;
btnConfigSave.Location = new Point(670, 70);
btnConfigSave.Name = "btnConfigSave";
btnConfigSave.Size = new Size(190, 44);
btnConfigSave.TabIndex = 18;
btnConfigSave.Text = "保存并使用";
btnConfigSave.UseVisualStyleBackColor = true;
btnConfigSave.Click += btnConfigSave_Click;
//
// label30
//
label30.AutoSize = true;
label30.Font = new Font("Microsoft YaHei UI", 14.25F, FontStyle.Bold, GraphicsUnit.Point, 134);
label30.ForeColor = SystemColors.WindowFrame;
label30.Location = new Point(149, 64);
label30.Name = "label30";
label30.Size = new Size(82, 26);
label30.TabIndex = 19;
label30.Text = "下限(g):";
//
// pictureBox5
//
pictureBox5.BackgroundImageLayout = ImageLayout.None;
pictureBox5.Image = Properties.Resources.;
pictureBox5.Location = new Point(5, 7);
pictureBox5.Name = "pictureBox5";
pictureBox5.Size = new Size(35, 35);
pictureBox5.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox5.TabIndex = 21;
pictureBox5.TabStop = false;
//
// txtWeightDown
//
txtWeightDown.Font = new Font("Microsoft YaHei UI", 12F);
txtWeightDown.Location = new Point(231, 63);
txtWeightDown.Name = "txtWeightDown";
txtWeightDown.Size = new Size(76, 28);
txtWeightDown.TabIndex = 18;
txtWeightDown.Text = "0";
//
// label29
//
label29.AutoSize = true;
label29.Font = new Font("Microsoft YaHei UI", 14.25F, FontStyle.Bold, GraphicsUnit.Point, 134);
label29.ForeColor = SystemColors.WindowFrame;
label29.Location = new Point(329, 64);
label29.Name = "label29";
label29.Size = new Size(82, 26);
label29.TabIndex = 16;
label29.Text = "上限(g):";
//
// label31
//
label31.AutoSize = true;
label31.Font = new Font("Microsoft YaHei UI", 18F, FontStyle.Bold);
label31.ForeColor = SystemColors.ControlDarkDark;
label31.Location = new Point(42, 9);
label31.Name = "label31";
label31.Size = new Size(110, 31);
label31.TabIndex = 20;
label31.Text = "称重配置";
//
// txtWeightUp
//
txtWeightUp.Font = new Font("Microsoft YaHei UI", 12F);
txtWeightUp.Location = new Point(414, 63);
txtWeightUp.Name = "txtWeightUp";
txtWeightUp.Size = new Size(76, 28);
txtWeightUp.TabIndex = 15;
txtWeightUp.Text = "200";
//
// panel3
//
panel3.BorderStyle = BorderStyle.FixedSingle;
@@ -362,6 +463,18 @@ namespace FATrace.App
panel3.Size = new Size(878, 176);
panel3.TabIndex = 3;
//
// btnReprint
//
btnReprint.Font = new Font("微软雅黑", 14.25F, FontStyle.Bold, GraphicsUnit.Point, 134);
btnReprint.ForeColor = SystemColors.ControlDarkDark;
btnReprint.Location = new Point(670, 5);
btnReprint.Name = "btnReprint";
btnReprint.Size = new Size(190, 44);
btnReprint.TabIndex = 17;
btnReprint.Text = "重新打印当前";
btnReprint.UseVisualStyleBackColor = true;
btnReprint.Click += btnReprint_Click;
//
// pictureBox4
//
pictureBox4.BackgroundImageLayout = ImageLayout.None;
@@ -488,7 +601,7 @@ namespace FATrace.App
lblRawUseStateTip.BackColor = Color.LightSalmon;
lblRawUseStateTip.Font = new Font("Microsoft YaHei UI", 14.25F, FontStyle.Bold, GraphicsUnit.Point, 134);
lblRawUseStateTip.ForeColor = SystemColors.ButtonHighlight;
lblRawUseStateTip.Location = new Point(159, 102);
lblRawUseStateTip.Location = new Point(168, 106);
lblRawUseStateTip.Name = "lblRawUseStateTip";
lblRawUseStateTip.Size = new Size(247, 34);
lblRawUseStateTip.TabIndex = 11;
@@ -984,18 +1097,6 @@ namespace FATrace.App
label22.Text = "历史数据";
label22.TextAlign = ContentAlignment.MiddleCenter;
//
// btnReprint
//
btnReprint.Font = new Font("微软雅黑", 14.25F, FontStyle.Bold, GraphicsUnit.Point, 134);
btnReprint.ForeColor = SystemColors.ControlDarkDark;
btnReprint.Location = new Point(670, 5);
btnReprint.Name = "btnReprint";
btnReprint.Size = new Size(190, 44);
btnReprint.TabIndex = 17;
btnReprint.Text = "重新打印当前";
btnReprint.UseVisualStyleBackColor = true;
btnReprint.Click += btnReprint_Click;
//
// frmMain
//
AutoScaleDimensions = new SizeF(7F, 17F);
@@ -1020,6 +1121,9 @@ namespace FATrace.App
((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit();
TabControlMain.ResumeLayout(false);
tabPage2.ResumeLayout(false);
panel4.ResumeLayout(false);
panel4.PerformLayout();
((System.ComponentModel.ISupportInitialize)pictureBox5).EndInit();
panel3.ResumeLayout(false);
panel3.PerformLayout();
((System.ComponentModel.ISupportInitialize)pictureBox4).EndInit();
@@ -1119,5 +1223,13 @@ namespace FATrace.App
private TextBox txtOpName;
private Label label28;
private Button btnReprint;
private Label label29;
private TextBox txtWeightUp;
private Label label30;
private TextBox txtWeightDown;
private Panel panel4;
private PictureBox pictureBox5;
private Label label31;
private Button btnConfigSave;
}
}

View File

@@ -1,7 +1,9 @@
using FATrace.App.Model;
using FATrace.Com;
using FATrace.Model;
using NLog;
using System.Data;
using System.Globalization;
using System.Net.NetworkInformation;
using System.Text;
@@ -193,6 +195,16 @@ namespace FATrace.App
public string CurrentOperationNoUserLevel { get; set; } = string.Empty;
/// <summary>
/// 称重上限
/// </summary>
private double WeightUp { get; set; }
/// <summary>
/// 称重下限
/// </summary>
private double WeightDown { get; set; }
/// <summary>
/// 计算扫描 Task
/// </summary>
@@ -220,6 +232,18 @@ namespace FATrace.App
var scaleIp = "192.168.0.80"; // 仪表的 TCP Server IP示例值实际请替换
var scalePort = 10251; // 仪表的 TCP Server 端口(示例值,实际请替换)
if (double.TryParse(ConfigHelper.GetStringOrDefault("WeightUp", "10"), out var weightUp))
{
WeightUp = weightUp;
}
if (double.TryParse(ConfigHelper.GetStringOrDefault("WeightDown", "200"), out var weightDown))
{
WeightDown = weightDown;
}
txtWeightUp.Text = weightUp.ToString();
txtWeightDown.Text = weightDown.ToString();
//日产量初始获取信息
CurDayCount = GetDayCount();
@@ -324,6 +348,8 @@ namespace FATrace.App
}
}
CurDaySgl.CurDay = DateTime.Now.ToString("yyyy-MM-dd");
// 每30秒检测一次服务器与打印机
loop = (loop + 1) % 1000000;
if (loop % 10 == 0)
@@ -662,6 +688,22 @@ namespace FATrace.App
return;
}
if (WeightDown > 0 && WeightUp > 0)
{
if (CurWeight < WeightDown || CurWeight > WeightUp)
{
DialogResult resultRangeCheck = frmMessage.ShowConfirm($"检测到当前重量 {CurWeight:0.###}g 不在配置范围 [{WeightDown:0.###}g, {WeightUp:0.###}g] 内,确定要【打印】操作吗?", "确认操作", this);
if (resultRangeCheck == DialogResult.Cancel)
{
return;
}
else
{
logger.Info("你打印了一个不在配置范围内的重量!!!");
}
}
}
//确认数据
// 显示消息框,并等待用户响应
DialogResult result = frmMessage.ShowConfirm("确定要【打印】操作吗?", "确认操作", this);
@@ -670,16 +712,16 @@ namespace FATrace.App
return;
}
if (CurWeight < 2.0)
{
//确认数据
// 显示消息框,并等待用户响应
DialogResult resultWeightCheck = frmMessage.ShowConfirm("检测到当前的重量小于2g确定要【打印】操作吗", "确认操作", this);
if (resultWeightCheck == DialogResult.Cancel)
{
return;
}
}
//if (CurWeight < 2.0)
//{
// //确认数据
// // 显示消息框,并等待用户响应
// DialogResult resultWeightCheck = frmMessage.ShowConfirm("检测到当前的重量小于2g确定要【打印】操作吗", "确认操作", this);
// if (resultWeightCheck == DialogResult.Cancel)
// {
// return;
// }
//}
//新的剩余重量 Kg
@@ -811,6 +853,7 @@ namespace FATrace.App
var CurDayCountInfo = FSqlContext.FDb.Select<DayCount>().Where(a => a.DayInfo == DateTime.Now.ToString("yyyy-MM-dd")).First();
if (CurDayCountInfo == null)
{
logger.Info($"日产量信息不存在,新建日产量信息");
//当日的日产量信息不存在,第一次的话就新建信息
var ReturnData = FSqlContext.FDb.Insert<DayCount>(new DayCount()
{
@@ -1337,8 +1380,68 @@ namespace FATrace.App
{
logger.Error(String.Format("ErrSource : {0} ErrMsg : {1}", ex.StackTrace.ToString(), ex.Message.ToString()));
}
}
/// <summary>
/// 保存配置到Config并使用
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnConfigSave_Click(object sender, EventArgs e)
{
try
{
var downText = (txtWeightDown.Text ?? string.Empty).Trim();
var upText = (txtWeightUp.Text ?? string.Empty).Trim();
if (string.IsNullOrWhiteSpace(downText) ||
!double.TryParse(downText.Replace('', '.').Replace('。', '.'), NumberStyles.Float, CultureInfo.InvariantCulture, out var down) || down <= 0)
{
MessageBox.Show("请输入有效的下限(g),必须为正数。", "校验失败", MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtWeightDown.Focus();
txtWeightDown.SelectAll();
return;
}
if (string.IsNullOrWhiteSpace(upText) ||
!double.TryParse(upText.Replace('', '.').Replace('。', '.'), NumberStyles.Float, CultureInfo.InvariantCulture, out var up) || up <= 0)
{
MessageBox.Show("请输入有效的上限(g),必须为正数。", "校验失败", MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtWeightUp.Focus();
txtWeightUp.SelectAll();
return;
}
if (down >= up)
{
MessageBox.Show("下限(g)必须小于上限(g)。", "校验失败", MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtWeightDown.Focus();
txtWeightDown.SelectAll();
return;
}
var downStr = down.ToString("0.###", CultureInfo.InvariantCulture);
var upStr = up.ToString("0.###", CultureInfo.InvariantCulture);
ConfigHelper.SetValue("WeightDown", downStr);
ConfigHelper.SetValue("WeightUp", upStr);
WeightDown = down;
WeightUp = up;
txtWeightDown.Text = downStr;
txtWeightUp.Text = upStr;
logger.Info($"称重配置已更新WeightDown={downStr}g, WeightUp={upStr}g");
MessageBox.Show("配置已保存并立即生效。", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
logger.Error(ex, "保存称重配置失败");
MessageBox.Show($"保存配置失败:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}

View File

@@ -11,6 +11,7 @@ namespace FATrace.Model
/// 原料生产 使用信息
/// </summary>
[Table(Name = "RawProUse")]
[Index("idx_RawProUse_WeightTime", "WeightTime")]
public class RawProUse
{
/// <summary>

View File

@@ -50,13 +50,40 @@ namespace FATrace.WPLApp.Services
private void LineSglModel_BoxSprayCodeReqHandle(object? sender, string e)
{
//首先复位PLC信号
KeyencePlcMcNet!.Write("D1100", (Int16)0);
var SetValueResult = KeyencePlcMcNet!.Write("D1100", (Int16)0);
if (!SetValueResult.IsSuccess)
{
//写入失败,重新写入
LogService.Warn("外箱喷码-复位PLC信号失败-执行两次写入0");
KeyencePlcMcNet!.Write("D1100", (Int16)0);
KeyencePlcMcNet!.Write("D1100", (Int16)0);
}
//获取箱子喷码的数据+A
var ReqData = FreeSql.Select<LineTempCode>()
.OrderBy(a => a.Id)
.OrderByDescending(a => a.Id)
.Limit(1)
.ToList();
//无数据再重试一次
if (ReqData.Count <= 0)
{
try
{
Thread.Sleep(50);
}
catch
{
}
ReqData = FreeSql.Select<LineTempCode>()
.OrderByDescending(a => a.Id)
.Limit(1)
.ToList();
LogService.Warn("外箱喷码-不存在请求的数据-重试一次");
}
if (ReqData.Count > 0)
{
var CodeItem = ReqData.FirstOrDefault();
@@ -65,12 +92,15 @@ namespace FATrace.WPLApp.Services
var BoxSprayCodeRev = RevData(BoxSprayCodeSource);
BoxSprayCode = BoxSprayCodeSource;
KeyencePlcMcNet.Write("D1150", BoxSprayCodeRev);
var Result = KeyencePlcMcNet.Write("D1150", BoxSprayCodeRev);
if (!Result.IsSuccess)
{
//写入失败,重新写入
LogService.Warn("外箱喷码-写入条码 D1150 PLC信号失败-执行两次写入条码");
KeyencePlcMcNet.Write("D1150", BoxSprayCodeRev);
}
Console.WriteLine($"外箱喷码:{BoxSprayCodeSource}-发送OK");
//这里需要删除数据吗?还是等扫码后删除,会不会过来新的箱子
}
else
{
@@ -78,13 +108,22 @@ namespace FATrace.WPLApp.Services
KeyencePlcMcNet.Write("D1102", (Int16)1);
Console.WriteLine($"外箱喷码:不存在请求的数据");
AddAlarm("外箱喷码", "不存在请求的数据");
LogService.Warn("外箱喷码-不存在请求的数据");
}
Task.Run(async () =>
{
await Task.Delay(1000).ConfigureAwait(false);
KeyencePlcMcNet!.Write("D1102", (Int16)0);
var Data = KeyencePlcMcNet!.Write("D1102", (Int16)0);
if (!Data.IsSuccess)
{
//写入失败,重新写入
LogService.Warn("外箱喷码-复位D1102PLC信号失败-执行两次写入0");
KeyencePlcMcNet!.Write("D1102", (Int16)0);
KeyencePlcMcNet!.Write("D1102", (Int16)0);
}
//KeyencePlcMcNet.Write("D1150", new Int16[30]);
});
@@ -99,7 +138,14 @@ namespace FATrace.WPLApp.Services
private void LineSglModel_BoxScanCodeReqHandle(object? sender, string e)
{
//首先复位PLC信号
KeyencePlcMcNet!.Write("D1200", (Int16)0);
var SetValueResult = KeyencePlcMcNet!.Write("D1200", (Int16)0);
if (!SetValueResult.IsSuccess)
{
//写入失败,重新写入
LogService.Warn("外箱扫描码请求-复位PLC信号失败-执行两次写入0");
KeyencePlcMcNet!.Write("D1200", (Int16)0);
KeyencePlcMcNet!.Write("D1200", (Int16)0);
}
string BoxScanCode = string.Empty;
BoxScanCode = this.BoxScanCode;
@@ -111,7 +157,14 @@ namespace FATrace.WPLApp.Services
if (IsExist.Count() > 0)
{
//存在条码数据 OK返回PLC结果
KeyencePlcMcNet!.Write("D1210", (Int16)1);
var DataResult = KeyencePlcMcNet!.Write("D1210", (Int16)1);
if (!DataResult.IsSuccess)
{
//写入失败,重新写入
LogService.Warn("外箱扫描码请求-置位D1210PLC信号失败-执行两次写入1");
KeyencePlcMcNet!.Write("D1210", (Int16)1);
KeyencePlcMcNet!.Write("D1210", (Int16)1);
}
Console.WriteLine($"外箱扫描码:{BoxScanCode}-存在找到");
// 加入队列
@@ -181,8 +234,15 @@ namespace FATrace.WPLApp.Services
Task.Run(async () =>
{
await Task.Delay(1000).ConfigureAwait(false);
KeyencePlcMcNet!.Write("D1210", (Int16)0);
await Task.Delay(1200).ConfigureAwait(false);
var DataResult = KeyencePlcMcNet!.Write("D1210", (Int16)0);
if (!DataResult.IsSuccess)
{
//写入失败,重新写入
LogService.Warn("外箱扫描码请求-复位D1210PLC信号失败-执行两次写入0");
KeyencePlcMcNet!.Write("D1210", (Int16)0);
KeyencePlcMcNet!.Write("D1210", (Int16)0);
}
KeyencePlcMcNet.Write("D1250", new Int16[30]);
});
@@ -198,7 +258,14 @@ namespace FATrace.WPLApp.Services
private void LineSglModel_WeightScanCodeHandle(object? sender, string e)
{
//首先复位PLC信号
KeyencePlcMcNet!.Write("D1000", (Int16)0);
var SetValueResult = KeyencePlcMcNet!.Write("D1000", (Int16)0);
if (!SetValueResult.IsSuccess)
{
//写入失败,重新写入
LogService.Warn("称重扫描码-复位PLC信号失败-执行两次写入0");
KeyencePlcMcNet!.Write("D1000", (Int16)0);
KeyencePlcMcNet!.Write("D1000", (Int16)0);
}
if (!string.IsNullOrEmpty(WeightScanCode))
{
@@ -206,24 +273,47 @@ namespace FATrace.WPLApp.Services
if (IsExist.Count() > 0)
{
//存在条码数据 OK返回PLC结果
KeyencePlcMcNet!.Write("D1010", (Int16)1);
var SetValueResult1 = KeyencePlcMcNet!.Write("D1010", (Int16)1);
if (!SetValueResult1.IsSuccess)
{
//写入失败,重新写入
LogService.Warn("称重扫描码-置位数据D1010 PLC信号失败-执行两次写入1");
KeyencePlcMcNet!.Write("D1010", (Int16)1);
KeyencePlcMcNet!.Write("D1010", (Int16)1);
}
Console.WriteLine($"称重扫描码:{WeightScanCode}");
//// 加入队列
//EnqueueMessage(WeightScanCode);
LogService.Info($"称重扫描码:{WeightScanCode}");
var TempData = FreeSql.Insert<LineTempCode>(new LineTempCode()
try
{
Code = WeightScanCode
}).ExecuteAffrows();
var delAff = FreeSql.Delete<LineTempCode>()
.Where(p => p.Id > 0)
.ExecuteAffrows();
var insAff = FreeSql.Insert<LineTempCode>(new LineTempCode()
{
Code = WeightScanCode
}).ExecuteAffrows();
if (insAff <= 0)
{
LogService.Warn($"称重扫描码:{WeightScanCode} 写入临时表 LineTempCode 失败(affrows={insAff})delAff={delAff}");
}
}
catch (Exception ex)
{
LogService.Error($"称重扫描码:{WeightScanCode} 写入临时表 LineTempCode 异常: {ex}");
}
try
{
EventAggregator?.GetEvent<DashboardRefreshEvent>()?.Publish(true);
}
catch
{
}
var Result = FreeSql.Update<RawProUse>()
@@ -254,8 +344,16 @@ namespace FATrace.WPLApp.Services
Task.Run(async () =>
{
await Task.Delay(1000).ConfigureAwait(false);
KeyencePlcMcNet!.Write("D1010", (Int16)0);
await Task.Delay(1200).ConfigureAwait(false);
//KeyencePlcMcNet!.Write("D1010", (Int16)0);
var SetValueResult2 = KeyencePlcMcNet!.Write("D1010", (Int16)0);
if (!SetValueResult2.IsSuccess)
{
//写入失败,重新写入
LogService.Warn("称重扫描码-复位数据D1010 PLC信号失败-执行两次写入0");
KeyencePlcMcNet!.Write("D1010", (Int16)0);
}
KeyencePlcMcNet.Write("D1050", new Int16[30]);
});
@@ -323,7 +421,6 @@ namespace FATrace.WPLApp.Services
}
// 扫描控制
private CancellationTokenSource? _plcScanCts;
private Task? _plcScanTask;
@@ -331,10 +428,6 @@ namespace FATrace.WPLApp.Services
public bool IsScanning => _isScanning;
private bool _disposed = false;
/// <summary>
/// 简单字符串队列FIFO
/// </summary>
private readonly ConcurrentQueue<string> _messageQueue = new();
/// <summary>
/// 产线信号模型
@@ -366,6 +459,7 @@ namespace FATrace.WPLApp.Services
if (connect.IsSuccess)//初始连接状态的显示判断
{
Console.WriteLine($"PLC-连接 OK");
LogService.Error($"PLC-连接 OK");
PlcConnected = true;
try { SysRunService.PlcLinkState = true; SysRunService.SysRunState.ComState = 1; SysRunService.SysRunState.ComMsg = "正常"; } catch { }
}
@@ -400,7 +494,31 @@ namespace FATrace.WPLApp.Services
var token = _plcScanCts.Token;
_isScanning = true;
try { SysRunService.PlcScanState = 1; } catch { }
_plcScanTask = Task.Run(() => PlcScanLoopAsync(period, token), token);
_plcScanTask.ContinueWith(t =>
{
try
{
if (t.IsFaulted)
{
try { SysRunService.PlcScanState = 2; } catch { }
try { LogService.Error($"PLC扫描任务异常退出: {t.Exception}"); } catch { }
}
else if (t.IsCanceled)
{
try { SysRunService.PlcScanState = 0; } catch { }
}
else
{
try { SysRunService.PlcScanState = 0; } catch { }
}
}
catch
{
}
}, TaskScheduler.Default);
}
/// <summary>
@@ -425,6 +543,8 @@ namespace FATrace.WPLApp.Services
_plcScanTask = null;
_plcScanCts?.Dispose();
_plcScanCts = null;
try { SysRunService.PlcScanState = 0; } catch { }
}
}
@@ -513,13 +633,12 @@ namespace FATrace.WPLApp.Services
}
}
catch (OperationCanceledException)
{
break;
}
catch (Exception ex)
{
LogService.Error($"PLC 扫描异常: {ex}");
LogService.Error($"PLC 扫描异常 Exception: {ex.ToString()}");
// 这里属于循环内部异常:循环仍会继续;
// 但若后续由于未捕获异常导致扫描任务退出StartPlcScan 的 ContinueWith 也会做最终状态处理。
}
finally
{
@@ -527,14 +646,23 @@ namespace FATrace.WPLApp.Services
{
await Task.Delay(period, token).ConfigureAwait(false);
}
catch (OperationCanceledException)
catch (OperationCanceledException ex)
{
// 正常停止扫描时会触发取消,这里不应记录为错误。
// 不允许从 finally 中 break/return
// 这里吞掉异常,循环将在下一次 while 判断时依据 token 自动退出
}
}
}
_isScanning = false;
// 退出循环:如果是正常取消,则 StopPlcScanAsync 会把状态置为停止;
// 若是外部未走 StopPlcScanAsync而 token 已取消,也归为停止。
try
{
if (token.IsCancellationRequested) SysRunService.PlcScanState = 0;
}
catch { }
}
/// <summary>

View File

@@ -14,6 +14,14 @@ namespace FATrace.WPLApp.Services
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); // 初始化日志类
private static bool IsQueryNoise(string msg)
{
if (string.IsNullOrWhiteSpace(msg)) return false;
return msg.IndexOf("查询开始", StringComparison.OrdinalIgnoreCase) >= 0
|| msg.IndexOf("查询完成", StringComparison.OrdinalIgnoreCase) >= 0
|| msg.IndexOf("记录数", StringComparison.OrdinalIgnoreCase) >= 0;
}
/// <summary>
/// 调试日志
/// </summary>
@@ -29,8 +37,16 @@ namespace FATrace.WPLApp.Services
/// 适用大部分场景
/// 1.记录日志文件
/// </remarks>
public void Info(string msg) => Logger.Info(msg);
public void Info(string msg, Exception ex) => Logger.Info(ex, msg);
public void Info(string msg)
{
if (IsQueryNoise(msg)) return;
Logger.Info(msg);
}
public void Info(string msg, Exception ex)
{
if (IsQueryNoise(msg)) return;
Logger.Info(ex, msg);
}
/// <summary>
/// 错误日志

View File

@@ -68,6 +68,46 @@ namespace FATrace.WPLApp.Services
set { _PlcLinkState = value;RaisePropertyChanged(); }
}
private int _PlcScanState = 0;
/// <summary>
/// PLC扫描循环状态
/// 0=已停止1=运行中2=异常退出
/// </summary>
public int PlcScanState
{
get { return _PlcScanState; }
set
{
if (_PlcScanState != value)
{
_PlcScanState = value;
switch (value)
{
case 1:
PlcScanMsg = "扫描运行";
break;
case 2:
PlcScanMsg = "扫描异常";
break;
default:
PlcScanMsg = "扫描停止";
break;
}
RaisePropertyChanged();
}
}
}
private string? _PlcScanMsg = "扫描停止";
/// <summary>
/// PLC扫描循环状态消息
/// </summary>
public string? PlcScanMsg
{
get { return _PlcScanMsg; }
set { _PlcScanMsg = value; RaisePropertyChanged(); }
}
private string? _CurUser;
/// <summary>

View File

@@ -41,7 +41,6 @@ namespace FATrace.WPLApp.ViewModels
_ea = ea;
LiveMessages = new ObservableCollection<string>();
LineTempCodes = new ObservableCollection<LineTempCode>();
RefreshCommand = new DelegateCommand(async () => await RefreshStatsAsync());
ClearLogsCommand = new DelegateCommand(() => LiveMessages.Clear());
@@ -168,7 +167,6 @@ namespace FATrace.WPLApp.ViewModels
try
{
await RefreshStatsAsync();
await RefreshLineTempCodesAsync();
}
catch (Exception ex)
{
@@ -206,11 +204,6 @@ namespace FATrace.WPLApp.ViewModels
public bool PlcConnected { get => _plcConnected; set { _plcConnected = value; RaisePropertyChanged(); } }
public ObservableCollection<string> LiveMessages { get; }
/// <summary>
/// 产线临时条码队列(内包扫码入队,外箱扫码确认后出队)
/// </summary>
public ObservableCollection<LineTempCode> LineTempCodes { get; }
#endregion
#region Commands
@@ -285,52 +278,6 @@ namespace FATrace.WPLApp.ViewModels
}
}
/// <summary>
/// 从数据库刷新产线临时队列LineTempCode 表)并同步到 UI。
/// </summary>
private async Task RefreshLineTempCodesAsync()
{
try
{
var list = await Task.Run(() =>
{
return _fsql.Select<LineTempCode>()
.OrderBy(a => a.Id)
.Limit(200)
.ToList();
});
void apply()
{
LineTempCodes.Clear();
foreach (var item in list)
{
LineTempCodes.Add(item);
}
}
var dispatcher = Application.Current?.Dispatcher;
if (dispatcher == null)
{
apply();
return;
}
if (dispatcher.CheckAccess())
{
apply();
}
else
{
await dispatcher.InvokeAsync(apply).Task.ConfigureAwait(false);
}
}
catch (Exception ex)
{
_log.Error($"刷新 LineTempCode 队列失败: {ex}");
}
}
public override async void OnNavigatedTo(Prism.Regions.NavigationContext navigationContext)
{
try
@@ -351,7 +298,6 @@ namespace FATrace.WPLApp.ViewModels
LatestWeightScanCode = _data.WeightScanCode;
LatestBoxScanCode = _data.BoxScanCode;
LatestBoxSprayCode = _data.BoxSprayCode;
await RefreshLineTempCodesAsync();
TryHookConsole();
}
}

View File

@@ -7,7 +7,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:prism="http://prismlibrary.com/"
d:DesignHeight="720"
d:DesignWidth="1280"
d:DesignWidth="1580"
prism:ViewModelLocator.AutoWireViewModel="True"
mc:Ignorable="d">
<Grid Margin="12">
@@ -227,92 +227,100 @@
</Border>
</Grid>
<!-- 底部:预留区域 -->
<Border
Grid.Row="2"
Margin="0,10,0,0"
Padding="12"
Background="#F9FAFB"
BorderBrush="#DDE3EB"
BorderThickness="1"
CornerRadius="6">
<Canvas Margin="-3,0,0,0">
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<!-- 工艺图区域 -->
<Border
Grid.ColumnSpan="2"
Margin="0,10,0,0"
Padding="12"
Background="#F9FAFB"
BorderBrush="#DDE3EB"
BorderThickness="1"
CornerRadius="6" />
<Canvas Margin="0,0,0,0">
<Rectangle
Canvas.Top="136.567"
Canvas.Left="53"
Canvas.Top="136"
Width="62"
Height="97"
HorizontalAlignment="Left"
VerticalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="181"
Canvas.Top="276.816"
Canvas.Left="181.5"
Canvas.Top="321.709"
Width="62"
Height="11"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="181"
Canvas.Top="286.817"
Canvas.Left="181.5"
Canvas.Top="331.71"
Width="62"
Height="11"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="181"
Canvas.Top="296.818"
Canvas.Left="181.5"
Canvas.Top="341.711"
Width="62"
Height="11"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="181"
Canvas.Top="306.902"
Canvas.Left="181.5"
Canvas.Top="351.795"
Width="62"
Height="11"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="181"
Canvas.Top="316.82"
Canvas.Left="181.5"
Canvas.Top="361.713"
Width="62"
Height="11"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="174.5"
Canvas.Top="218.816"
Canvas.Left="175"
Canvas.Top="263.709"
Width="75"
Height="57"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="248.5"
Canvas.Top="234.066"
Canvas.Left="249"
Canvas.Top="278.959"
Width="10"
Height="26"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Label
Canvas.Left="185.13"
Canvas.Top="234.826"
HorizontalAlignment="Left"
Canvas.Left="185.63"
Canvas.Top="279.719"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Content="X光机器" />
<Rectangle
Canvas.Left="165.5"
Canvas.Top="234.066"
Canvas.Left="166"
Canvas.Top="278.959"
Width="10"
Height="26"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Path
@@ -328,370 +336,372 @@
</Path.Data>
</Path>
<Rectangle
Canvas.Left="281.25"
Canvas.Top="88.066"
Canvas.Left="281.75"
Canvas.Top="132.959"
Width="144"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="289.5"
Canvas.Top="88.066"
Canvas.Left="290"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="298.501"
Canvas.Top="88.066"
Canvas.Left="299.001"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="307.502"
Canvas.Top="88.066"
Canvas.Left="308.002"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="316.503"
Canvas.Top="88.066"
Canvas.Left="317.003"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="325.504"
Canvas.Top="88.066"
Canvas.Left="326.004"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="334.51"
Canvas.Top="88.066"
Canvas.Left="335.01"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="343.511"
Canvas.Top="88.066"
Canvas.Left="344.011"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="352.503"
Canvas.Top="88.066"
Canvas.Left="353.003"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="361.504"
Canvas.Top="88.066"
Canvas.Left="362.004"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="370.505"
Canvas.Top="88.066"
Canvas.Left="371.005"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="379.506"
Canvas.Top="88.066"
Canvas.Left="380.006"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="388.507"
Canvas.Top="88.066"
Canvas.Left="389.007"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="397.513"
Canvas.Top="88.066"
Canvas.Left="398.013"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="406.514"
Canvas.Top="88.066"
Canvas.Left="407.014"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="424.251"
Canvas.Top="88.066"
Canvas.Left="424.751"
Canvas.Top="132.959"
Width="70"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="556.251"
Canvas.Top="88.066"
Canvas.Left="556.751"
Canvas.Top="132.959"
Width="297"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="493.242"
Canvas.Top="88.066"
Canvas.Left="493.742"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="502.243"
Canvas.Top="88.066"
Canvas.Left="502.743"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="511.244"
Canvas.Top="88.066"
Canvas.Left="511.744"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="520.25"
Canvas.Top="88.066"
Canvas.Left="520.75"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="529.251"
Canvas.Top="88.066"
Canvas.Left="529.751"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="538.244"
Canvas.Top="88.066"
Canvas.Left="538.744"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="547.25"
Canvas.Top="88.066"
Canvas.Left="547.75"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="564.492"
Canvas.Top="88.066"
Canvas.Left="564.992"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="573.493"
Canvas.Top="88.066"
Canvas.Left="573.993"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="582.494"
Canvas.Top="88.066"
Canvas.Left="582.994"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="591.5"
Canvas.Top="88.066"
Canvas.Left="592"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="600.501"
Canvas.Top="88.066"
Canvas.Left="601.001"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="609.494"
Canvas.Top="88.066"
Canvas.Left="609.994"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="618.5"
Canvas.Top="88.066"
Canvas.Left="619"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="627.493"
Canvas.Top="88.066"
Canvas.Left="627.993"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="636"
Canvas.Top="88"
Canvas.Left="636.5"
Canvas.Top="132.893"
Width="54"
Height="62"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Stroke="Black" />
<Rectangle
Canvas.Left="771.84"
Canvas.Top="88.066"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="780.833"
Canvas.Top="88.066"
Canvas.Left="772.34"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="789.839"
Canvas.Top="88.066"
Canvas.Left="781.333"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="798.832"
Canvas.Top="88.066"
Canvas.Left="790.339"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="807.833"
Canvas.Top="88.066"
Canvas.Left="799.332"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="816.839"
Canvas.Top="88.066"
Canvas.Left="808.333"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="825.84"
Canvas.Top="88.066"
Canvas.Left="817.339"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="834.833"
Canvas.Top="88.066"
Canvas.Left="826.34"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="511.244"
Canvas.Top="149.4"
Canvas.Left="835.333"
Canvas.Top="132.959"
Width="10"
Height="62"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="511.744"
Canvas.Top="194.293"
Width="70"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="852.251"
Canvas.Top="88.066"
Canvas.Left="852.751"
Canvas.Top="132.959"
Width="70"
Height="62"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="852.251"
Canvas.Top="149.4"
Canvas.Left="852.751"
Canvas.Top="194.293"
Width="70"
Height="98"
HorizontalAlignment="Left"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Rectangle
Canvas.Left="929"
Canvas.Top="288"
Canvas.Left="929.5"
Canvas.Top="332.893"
Width="70"
Height="62"
HorizontalAlignment="Left"
VerticalAlignment="Center"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Stroke="Black" />
<Path
Canvas.Left="174.496"
Canvas.Top="87.882"
Canvas.Left="174.996"
Canvas.Top="132.775"
Width="107"
Height="132"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Fill="#FFF4F4F5"
Stretch="Fill"
Stroke="Black">
@@ -700,10 +710,12 @@
</Path.Data>
</Path>
<Path
Canvas.Left="247.74"
Canvas.Top="148.882"
Canvas.Left="248.24"
Canvas.Top="193.775"
Width="34"
Height="71"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Fill="#FFF4F4F5"
Stretch="Fill"
Stroke="Black">
@@ -712,45 +724,45 @@
</Path.Data>
</Path>
<Label
Canvas.Left="437"
Canvas.Top="105"
HorizontalAlignment="Left"
Canvas.Left="437.5"
Canvas.Top="149.893"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Content="称重机" />
<Label
Canvas.Left="525.25"
Canvas.Top="171.762"
HorizontalAlignment="Left"
Canvas.Left="525.75"
Canvas.Top="216.655"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Content="控制柜" />
<Label
Canvas.Left="704.751"
Canvas.Top="106.446"
HorizontalAlignment="Left"
Canvas.Left="705.251"
Canvas.Top="151.339"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Content="封箱机" />
<Label
Canvas.Left="852"
Canvas.Top="189"
Canvas.Left="852.5"
Canvas.Top="233.893"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Content="喷码和扫码" />
<Label
Canvas.Left="8"
Canvas.Top="171.762"
Canvas.Left="61"
Canvas.Top="171"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Content="称重侧" />
<Label
Canvas.Left="943.244"
Canvas.Top="305.133"
HorizontalAlignment="Left"
Canvas.Left="943.744"
Canvas.Top="350.026"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Content="工作站" />
<Label
Canvas.Left="927"
Canvas.Top="147"
HorizontalAlignment="Left"
Canvas.Left="927.5"
Canvas.Top="191.893"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Background="SkyBlue"
Content="喷码数据"
@@ -758,8 +770,8 @@
FontWeight="Bold" />
<TextBlock
x:Name="喷码数据"
Canvas.Left="927"
Canvas.Top="178"
Canvas.Left="927.5"
Canvas.Top="222.893"
Padding="2"
HorizontalAlignment="Center"
VerticalAlignment="Top"
@@ -768,9 +780,9 @@
Text="{Binding LatestBoxSprayCode}"
TextWrapping="Wrap" />
<Label
Canvas.Left="928"
Canvas.Top="207"
HorizontalAlignment="Left"
Canvas.Left="928.5"
Canvas.Top="251.893"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Background="SkyBlue"
Content="外箱扫码数据"
@@ -778,8 +790,8 @@
FontWeight="Bold" />
<TextBlock
x:Name="外箱扫码数据"
Canvas.Left="929"
Canvas.Top="238"
Canvas.Left="929.5"
Canvas.Top="282.893"
Padding="2"
HorizontalAlignment="Center"
VerticalAlignment="Top"
@@ -788,15 +800,15 @@
Text="{Binding LatestBoxScanCode}"
TextWrapping="Wrap" />
<Label
Canvas.Left="634"
Canvas.Top="105"
Canvas.Left="634.5"
Canvas.Top="149.893"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Content="内包扫码" />
<Label
Canvas.Left="639"
Canvas.Top="27"
HorizontalAlignment="Left"
Canvas.Left="639.5"
Canvas.Top="71.893"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Background="SkyBlue"
Content="内包扫码数据"
@@ -804,8 +816,8 @@
FontWeight="Bold" />
<TextBlock
x:Name="内包扫码数据"
Canvas.Left="639"
Canvas.Top="59"
Canvas.Left="639.5"
Canvas.Top="103.893"
Padding="2"
HorizontalAlignment="Center"
VerticalAlignment="Top"
@@ -813,40 +825,67 @@
FontSize="12"
Text="{Binding LatestWeightScanCode}"
TextWrapping="Wrap" />
<ListView
x:Name="LineTempCodeList"
Canvas.Left="1138"
Canvas.Top="5"
Width="420"
Height="425"
<TextBlock
Canvas.Left="33"
Canvas.Top="37"
HorizontalAlignment="Center"
VerticalAlignment="Top"
d:ItemsSource="{d:SampleData ItemCount=5}"
BorderBrush="Gray"
BorderThickness="1"
ItemsSource="{Binding LineTempCodes}">
<ListView.View>
<GridView>
<GridViewColumn
Width="50"
DisplayMemberBinding="{Binding Id}"
Header="序号" />
<GridViewColumn
Width="200"
DisplayMemberBinding="{Binding Code}"
Header="条码" />
<GridViewColumn
Width="150"
DisplayMemberBinding="{Binding CreateTime, StringFormat='MM-dd HH:mm:ss'}"
Header="时间" />
</GridView>
</ListView.View>
</ListView>
FontFamily="/Assets/Fonts/#iconfont"
FontSize="40"
Foreground="DeepSkyBlue"
Text="&#xe9f4;" />
<Label
Canvas.Left="83"
Canvas.Top="32"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Content="布局概要图"
FontSize="32"
FontWeight="Bold"
Foreground="Gray" />
</Canvas>
</Border>
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="3*" />
</Grid.RowDefinitions>
<StackPanel Margin="10" Orientation="Horizontal">
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontFamily="/Assets/Fonts/#iconfont"
FontSize="40"
Foreground="DeepSkyBlue"
Text="&#xe636;" />
<Label
Margin="10,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Content="提示"
FontSize="32"
FontWeight="Bold"
Foreground="Gray" />
</StackPanel>
<StackPanel Grid.Row="1">
<TextBlock>
<Run
FontSize="30"
FontWeight="Bold"
Foreground="DeepSkyBlue">
常见检查事项:
</Run><LineBreak /><LineBreak />
<Run FontSize="24">1.检查产线电气柜上电</Run><LineBreak />
<Run FontSize="24">2.检查软件是否打开</Run><LineBreak />
<Run FontSize="24">3.检查软件底部的状态</Run><LineBreak />
<Run FontSize="24">4.检查喷码器状态</Run><LineBreak />
</TextBlock>
</StackPanel>
</Grid>
</Grid>
</Grid>

View File

@@ -13,7 +13,7 @@
<ColumnDefinition Width="*" />
<ColumnDefinition Width="2*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="2*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
@@ -137,5 +137,43 @@
</StackPanel>
</Border>
<Border Grid.Column="3">
<Border.Style>
<Style BasedOn="{StaticResource BoardStyle}" TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding SysRunService.PlcScanState}" Value="1">
<Setter Property="Background" Value="LimeGreen" />
</DataTrigger>
<DataTrigger Binding="{Binding SysRunService.PlcScanState}" Value="2">
<Setter Property="Background" Value="OrangeRed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<StackPanel Style="{StaticResource StackPanelStyle}">
<Ellipse
Width="10"
Height="10"
Margin="0,0,6,0">
<Ellipse.Style>
<Style TargetType="Ellipse">
<Setter Property="Fill" Value="Red" />
<Style.Triggers>
<DataTrigger Binding="{Binding SysRunService.PlcScanState}" Value="1">
<Setter Property="Fill" Value="Lime" />
</DataTrigger>
<DataTrigger Binding="{Binding SysRunService.PlcScanState}" Value="2">
<Setter Property="Fill" Value="Orange" />
</DataTrigger>
</Style.Triggers>
</Style>
</Ellipse.Style>
</Ellipse>
<TextBlock Style="{StaticResource TextBlockIcon}" Text="&#xe776;" />
<TextBlock Style="{StaticResource TextBlockStyle}" Text="PLC扫描:" />
<TextBlock Style="{StaticResource TextBlockStyle}" Text="{Binding SysRunService.PlcScanMsg}" />
</StackPanel>
</Border>
</Grid>
</UserControl>

View File

@@ -207,19 +207,53 @@
<DataGridTextColumn
Width="100"
Binding="{Binding ShelfLife}"
Header="保质期()" />
Header="保质期()" />
<DataGridTextColumn
Width="120"
Binding="{Binding RawSource}"
Header="原料来源" />
<DataGridTextColumn
Width="120"
Binding="{Binding RemainWeight}"
Binding="{Binding RemainWeight, StringFormat=F5}"
Header="剩余重量(kg)" />
<DataGridTextColumn
Width="120"
Binding="{Binding RawState}"
Header="分拆状态" />
<DataGridTemplateColumn Width="120" Header="分拆状态">
<DataGridTemplateColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="Black" />
<Style.Triggers>
<DataTrigger Binding="{Binding RawState}" Value="2">
<Setter Property="Background" Value="LimeGreen" />
<Setter Property="Foreground" Value="White" />
</DataTrigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="#FF3399FF" />
<Setter Property="Foreground" Value="White" />
</Trigger>
</Style.Triggers>
</Style>
</DataGridTemplateColumn.CellStyle>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock HorizontalAlignment="Center">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="{Binding RawState}" />
<Style.Triggers>
<DataTrigger Binding="{Binding RawState}" Value="0">
<Setter Property="Text" Value="分拆中" />
</DataTrigger>
<DataTrigger Binding="{Binding RawState}" Value="2">
<Setter Property="Text" Value="分拆完成" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn
Width="160"
Binding="{Binding CreateTime, StringFormat=yyyy-MM-dd HH:mm:ss}"

View File

@@ -181,10 +181,33 @@
Margin="0,10,0,10"
AutoGenerateColumns="False"
CanUserAddRows="False"
FontSize="15"
FontSize="16"
IsReadOnly="True"
ItemsSource="{Binding Items}"
RowHeight="34">
<DataGrid.RowStyle>
<Style BasedOn="{StaticResource {x:Type DataGridRow}}" TargetType="DataGridRow">
<Setter Property="Background" Value="LimeGreen" />
<Style.Triggers>
<DataTrigger Binding="{Binding OutTime.Year}" Value="1970">
<Setter Property="Background" Value="White" />
</DataTrigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="#FFBEE6FD" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.CellStyle>
<Style BasedOn="{StaticResource {x:Type DataGridCell}}" TargetType="DataGridCell">
<Setter Property="Background" Value="{Binding RelativeSource={RelativeSource AncestorType=DataGridRow}, Path=Background}" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="#FFBEE6FD" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="FontSize" Value="18" />
@@ -202,11 +225,11 @@
Binding="{Binding RawName}"
Header="原料名称" />
<DataGridTextColumn
Width="260"
Width="280"
Binding="{Binding InBagCode}"
Header="内袋二维码" />
<DataGridTextColumn
Width="260"
Width="300"
Binding="{Binding BoxCode}"
Header="外箱二维码" />
<DataGridTextColumn
@@ -216,19 +239,19 @@
<DataGridTextColumn
Width="100"
Binding="{Binding ShelfLife}"
Header="保质期()" />
Header="保质期()" />
<DataGridTextColumn
Width="100"
Width="120"
Binding="{Binding Weight}"
Header="称重重量(g)" />
<DataGridTextColumn
Width="100"
Binding="{Binding RemainWeight}"
Header="剩余重量(g)" />
<DataGridTextColumn
Width="120"
Binding="{Binding RemainWeight, StringFormat=F5}"
Header="剩余重量(Kg)" />
<DataGridTextColumn
Width="140"
Binding="{Binding StockWeight}"
Header="入库总重量(g)" />
Header="入库总重量(Kg)" />
<DataGridTextColumn
Width="160"
Binding="{Binding WeightTime, StringFormat=yyyy-MM-dd HH:mm:ss}"
@@ -245,10 +268,10 @@
Width="160"
Binding="{Binding OutTime, StringFormat=yyyy-MM-dd HH:mm:ss}"
Header="出库时间" />
<DataGridTextColumn
<!--<DataGridTextColumn
Width="160"
Binding="{Binding CreateTime, StringFormat=yyyy-MM-dd HH:mm:ss}"
Header="创建时间" />
Header="创建时间" />-->
</DataGrid.Columns>
</DataGrid>