DataServices 现场调试OK
This commit is contained in:
@@ -1,13 +1,15 @@
|
||||
using AutoMapper;
|
||||
using FATrace.Model;
|
||||
using FATrace.WPLApp.Events;
|
||||
using FATrace.WPLApp.ModelDto;
|
||||
using FATrace.WPLApp.Models;
|
||||
using HslCommunication;
|
||||
using HslCommunication.Profinet.Keyence;
|
||||
using Prism.Events;
|
||||
using Prism.Mvvm;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Windows;
|
||||
using ComConfigHelper = FATrace.Com.ConfigHelper;
|
||||
using Prism.Events;
|
||||
using FATrace.WPLApp.Events;
|
||||
|
||||
namespace FATrace.WPLApp.Services
|
||||
{
|
||||
@@ -17,13 +19,14 @@ namespace FATrace.WPLApp.Services
|
||||
/// </summary>
|
||||
public class DataServices : BindableBase, IDisposable
|
||||
{
|
||||
public DataServices(ILogService logService, IFreeSql freeSql, IEventAggregator eventAggregator, SysRunService sysRunService)
|
||||
public DataServices(ILogService logService, IFreeSql freeSql, IEventAggregator eventAggregator, IMapper mapper, SysRunService sysRunService, CsvServices csvServices)
|
||||
{
|
||||
LogService = logService;
|
||||
FreeSql = freeSql;
|
||||
EventAggregator = eventAggregator;
|
||||
Mapper = mapper;
|
||||
SysRunService = sysRunService;
|
||||
|
||||
CsvServices = csvServices;
|
||||
LineSglModel = new LineSglModel();
|
||||
LineSglModel.WeightScanCodeHandle += LineSglModel_WeightScanCodeHandle;
|
||||
LineSglModel.BoxSprayCodeReqHandle += LineSglModel_BoxSprayCodeReqHandle;
|
||||
@@ -32,6 +35,10 @@ namespace FATrace.WPLApp.Services
|
||||
PLCLinkInitial();
|
||||
StartPlcScan();
|
||||
//var DD= RevData("DYG05030013,20250923,802,3,01,0001,");
|
||||
|
||||
//var dd1= RevData("DYG05030013,251111,10193,6,01,3");
|
||||
//var dd2 = RevData("DYG05030013,251111,2116,6,01,3");
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -53,9 +60,13 @@ namespace FATrace.WPLApp.Services
|
||||
if (ReqData.Count > 0)
|
||||
{
|
||||
var CodeItem = ReqData.FirstOrDefault();
|
||||
KeyencePlcMcNet.Write("D1150", RevData(CodeItem!.Code + ",A"));
|
||||
|
||||
Console.WriteLine($"外箱喷码:{CodeItem.Code}-发送OK");
|
||||
var BoxSprayCodeSource = CodeItem!.Code + ",A";
|
||||
var BoxSprayCodeRev = RevData(BoxSprayCodeSource);
|
||||
|
||||
KeyencePlcMcNet.Write("D1150", BoxSprayCodeRev);
|
||||
|
||||
Console.WriteLine($"外箱喷码:{BoxSprayCodeSource}-发送OK");
|
||||
|
||||
//这里需要删除数据吗?还是等扫码后删除,会不会过来新的箱子
|
||||
|
||||
@@ -65,6 +76,7 @@ namespace FATrace.WPLApp.Services
|
||||
//不存在请求的数据,报错
|
||||
KeyencePlcMcNet.Write("D1102", (Int16)1);
|
||||
Console.WriteLine($"外箱喷码:不存在请求的数据");
|
||||
AddAlarm("外箱喷码", "不存在请求的数据");
|
||||
}
|
||||
|
||||
|
||||
@@ -72,10 +84,9 @@ namespace FATrace.WPLApp.Services
|
||||
{
|
||||
await Task.Delay(1000).ConfigureAwait(false);
|
||||
KeyencePlcMcNet!.Write("D1102", (Int16)0);
|
||||
|
||||
//KeyencePlcMcNet.Write("D1150", new Int16[30]);
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -89,17 +100,20 @@ namespace FATrace.WPLApp.Services
|
||||
//首先复位PLC信号
|
||||
KeyencePlcMcNet!.Write("D1200", (Int16)0);
|
||||
|
||||
string BoxScanCode = string.Empty;
|
||||
BoxScanCode = this.BoxScanCode;
|
||||
|
||||
if (!string.IsNullOrEmpty(BoxScanCode))
|
||||
{
|
||||
//var IsExist = FreeSql.Select<RawProUse>().Where(a => a.BoxCode == BoxScanCode);
|
||||
var IsExist = FreeSql.Select<RawProUse>().Where(a => a.BoxCode!.Contains(BoxScanCode));// 内包和外包一样的条码测试用 ???????????????
|
||||
var IsExist = FreeSql.Select<RawProUse>().Where(a => a.BoxCode == BoxScanCode);
|
||||
//var IsExist = FreeSql.Select<RawProUse>().Where(a => a.BoxCode!.Contains(BoxScanCode));// 内包和外包一样的条码测试用 ???????????????
|
||||
if (IsExist.Count() > 0)
|
||||
{
|
||||
//存在条码数据 OK,返回PLC结果
|
||||
KeyencePlcMcNet!.Write("D1210", (Int16)1);
|
||||
|
||||
Console.WriteLine($"外箱扫描码:{BoxScanCode}-存在找到");
|
||||
//// 加入队列
|
||||
// 加入队列
|
||||
//EnqueueMessage(WeightScanCode);
|
||||
LogService.Info($"外箱扫描码:{BoxScanCode}");
|
||||
|
||||
@@ -109,28 +123,40 @@ namespace FATrace.WPLApp.Services
|
||||
.ExecuteAffrows();
|
||||
if (DeleteResult > 0)
|
||||
{
|
||||
Console.WriteLine($"外箱扫描码:{WeightScanCode}-删除临时队列数据成功");
|
||||
LogService.Info($"外箱扫描码:{WeightScanCode}-删除临时队列数据成功");
|
||||
Console.WriteLine($"外箱扫描码:{BoxScanCode}-删除临时队列数据成功");
|
||||
LogService.Info($"外箱扫描码:{BoxScanCode}-删除临时队列数据成功");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"外箱扫描码:{WeightScanCode}-删除临时队列数据失败");
|
||||
LogService.Info($"外箱扫描码:{WeightScanCode}-删除临时队列数据失败");
|
||||
Console.WriteLine($"外箱扫描码:{BoxScanCode}-删除临时队列数据失败");
|
||||
LogService.Info($"外箱扫描码:{BoxScanCode}-删除临时队列数据失败");
|
||||
AddAlarm("外箱扫描", $"{BoxScanCode}-删除临时队列数据失败");
|
||||
}
|
||||
|
||||
var Result = FreeSql.Update<RawProUse>()
|
||||
var UpdatedResult = FreeSql.Update<RawProUse>()
|
||||
.Set(p => p.OutTime, DateTime.Now)
|
||||
.Where(p => p.BoxCode == BoxScanCode + ",A")//外箱二维码就是外箱扫描码
|
||||
.ExecuteAffrows();
|
||||
if (Result > 0)
|
||||
.Where(p => p.BoxCode == BoxScanCode)//外箱二维码就是外箱扫描码
|
||||
.ExecuteUpdated();
|
||||
if (UpdatedResult.Count() > 0)
|
||||
{
|
||||
Console.WriteLine($"外箱扫描码:{WeightScanCode}更新时间成功");
|
||||
LogService.Info($"外箱扫描码:{WeightScanCode}更新时间成功");
|
||||
var Data = CsvServices.ExportSingle(Mapper.Map<RawProUserCsvDto>(UpdatedResult.First()), true);
|
||||
if (Data != null && !string.IsNullOrEmpty(Data))
|
||||
{
|
||||
Console.WriteLine($"外箱扫描码:{BoxScanCode} CSV文件生成");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"外箱扫描码:{BoxScanCode} CSV文件失败!");
|
||||
}
|
||||
|
||||
Console.WriteLine($"外箱扫描码:{BoxScanCode}更新时间成功");
|
||||
LogService.Info($"外箱扫描码:{BoxScanCode}更新时间成功");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"外箱扫描码:{WeightScanCode}更新时间失败");
|
||||
LogService.Warn($"外箱扫描码:{WeightScanCode}更新时间失败");
|
||||
Console.WriteLine($"外箱扫描码:{BoxScanCode}更新时间失败");
|
||||
LogService.Warn($"外箱扫描码:{BoxScanCode}更新时间失败");
|
||||
AddAlarm("外箱扫描", $"{BoxScanCode}更新时间失败");
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -138,14 +164,16 @@ namespace FATrace.WPLApp.Services
|
||||
//不存在条码数据 NG,返回PLC结果报警
|
||||
KeyencePlcMcNet!.Write("D1210", (Int16)2);
|
||||
|
||||
Console.WriteLine($"外箱扫描码:{WeightScanCode}-未发现外箱扫码数据在数据库中");
|
||||
LogService.Warn($"外箱扫描码:{WeightScanCode}-未发现外箱扫码数据在数据库中");
|
||||
Console.WriteLine($"外箱扫描码:{BoxScanCode}-未发现外箱扫码数据在数据库中");
|
||||
LogService.Warn($"外箱扫描码:{BoxScanCode}-未发现外箱扫码数据在数据库中");
|
||||
AddAlarm("外箱扫描", $"{BoxScanCode}-未发现外箱扫码数据在数据库中");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"外箱扫描码为空");
|
||||
LogService.Warn("外箱扫描码为空");
|
||||
AddAlarm("外箱扫描", "外箱扫描码为空");
|
||||
}
|
||||
|
||||
Task.Run(async () =>
|
||||
@@ -155,7 +183,10 @@ namespace FATrace.WPLApp.Services
|
||||
|
||||
KeyencePlcMcNet.Write("D1250", new Int16[30]);
|
||||
});
|
||||
try { EventAggregator?.GetEvent<DashboardRefreshEvent>()?.Publish(true); } catch { }
|
||||
|
||||
//try { EventAggregator?.GetEvent<DashboardRefreshEvent>()?.Publish(true); } catch { }
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -200,6 +231,7 @@ namespace FATrace.WPLApp.Services
|
||||
{
|
||||
Console.WriteLine($"称重扫描码:{WeightScanCode}更新时间失败");
|
||||
LogService.Warn($"称重扫描码:{WeightScanCode}更新时间失败");
|
||||
AddAlarm("称重扫描", $"{WeightScanCode}更新时间失败");
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -209,6 +241,7 @@ namespace FATrace.WPLApp.Services
|
||||
|
||||
Console.WriteLine($"称重扫描码:{WeightScanCode}-未发现内包扫码数据在数据库中");
|
||||
LogService.Warn($"称重扫描码:{WeightScanCode}-未发现内包扫码数据在数据库中");
|
||||
AddAlarm("称重扫描", $"{WeightScanCode}-未发现内包扫码数据在数据库中");
|
||||
}
|
||||
|
||||
Task.Run(async () =>
|
||||
@@ -225,6 +258,7 @@ namespace FATrace.WPLApp.Services
|
||||
{
|
||||
Console.WriteLine($"称重扫描码为空");
|
||||
LogService.Warn("称重扫描码为空");
|
||||
AddAlarm("称重扫描", "称重扫描码为空");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -232,7 +266,9 @@ namespace FATrace.WPLApp.Services
|
||||
public ILogService LogService { get; }
|
||||
public IFreeSql FreeSql { get; }
|
||||
public IEventAggregator EventAggregator { get; }
|
||||
public IMapper Mapper { get; }
|
||||
public SysRunService SysRunService { get; }
|
||||
public CsvServices CsvServices { get; }
|
||||
|
||||
private bool _plcConnected;
|
||||
public bool PlcConnected
|
||||
@@ -281,27 +317,6 @@ namespace FATrace.WPLApp.Services
|
||||
/// </summary>
|
||||
private readonly ConcurrentQueue<string> _messageQueue = new();
|
||||
|
||||
/// <summary>
|
||||
/// 入队:将字符串加入 FIFO 队列(先进先出)。允许空字符串,不允许 null。
|
||||
/// </summary>
|
||||
/// <param name="message">要加入队列的字符串</param>
|
||||
/// <exception cref="ArgumentNullException">当 message 为 null 时抛出</exception>
|
||||
public void EnqueueMessage(string message)
|
||||
{
|
||||
if (message is null) throw new ArgumentNullException(nameof(message));
|
||||
_messageQueue.Enqueue(message);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 出队:尝试从 FIFO 队列取出一个字符串。
|
||||
/// </summary>
|
||||
/// <param name="message">输出参数:若成功则为取出的字符串;若失败(队列为空)则为 default</param>
|
||||
/// <returns>是否成功取出</returns>
|
||||
public bool TryDequeueMessage(out string message)
|
||||
{
|
||||
return _messageQueue.TryDequeue(out message);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 产线信号模型
|
||||
/// </summary>
|
||||
@@ -327,7 +342,6 @@ namespace FATrace.WPLApp.Services
|
||||
KeyencePlcMcNet.Port = Port;
|
||||
KeyencePlcMcNet.ConnectClose();
|
||||
|
||||
|
||||
KeyencePlcMcNet.ConnectTimeOut = 3000; // 连接3秒超时
|
||||
OperateResult connect = KeyencePlcMcNet.ConnectServer();
|
||||
if (connect.IsSuccess)//初始连接状态的显示判断
|
||||
@@ -443,7 +457,7 @@ namespace FATrace.WPLApp.Services
|
||||
OperateResultWeightScanCode = KeyencePlcMcNet!.ReadString("D1050", 20);
|
||||
if (OperateResultWeightScanCode.IsSuccess)
|
||||
{
|
||||
WeightScanCode = RevData(OperateResultWeightScanCode.Content).Replace("\r", "").Replace("\n", "");
|
||||
WeightScanCode = RevData(OperateResultWeightScanCode.Content).Replace("\r", "").Replace("\n", "").Trim();
|
||||
}
|
||||
OperateResultWeightScanSgl = KeyencePlcMcNet!.ReadInt16("D1000");
|
||||
if (OperateResultWeightScanSgl.IsSuccess)
|
||||
@@ -462,7 +476,8 @@ namespace FATrace.WPLApp.Services
|
||||
OperateResultBoxScanCode = KeyencePlcMcNet!.ReadString("D1250", 20);
|
||||
if (OperateResultBoxScanCode.IsSuccess)
|
||||
{
|
||||
BoxScanCode = RevData(OperateResultBoxScanCode.Content).Replace("\r", "").Replace("\n", "");
|
||||
BoxScanCode = RevData(OperateResultBoxScanCode.Content).Replace("\r", "").Replace("\n", "").Trim();
|
||||
//BoxScanCode = OperateResultBoxScanCode.Content.Replace("\r", "").Replace("\n", "");
|
||||
}
|
||||
OperateResultBoxScanSgl = KeyencePlcMcNet!.ReadInt16("D1200");
|
||||
if (OperateResultBoxScanSgl.IsSuccess)
|
||||
@@ -558,7 +573,7 @@ namespace FATrace.WPLApp.Services
|
||||
/// <summary>
|
||||
/// 把字符串对调
|
||||
/// </summary>
|
||||
private string RevData(string Code)
|
||||
public string RevData(string Code)
|
||||
{
|
||||
// 需求:PLC 字符串按“字”(2字节)进行高低字节对调,导致 ABCDEF -> BADCFE
|
||||
// 纠正方式:按两个字符一组交换顺序,奇数长度保留最后一个字符
|
||||
@@ -578,6 +593,8 @@ namespace FATrace.WPLApp.Services
|
||||
else
|
||||
{
|
||||
// 奇数长度,最后一个字符原样保留
|
||||
//sb.Append((char)0x0);
|
||||
sb.Append('\0');
|
||||
sb.Append(src[i]);
|
||||
}
|
||||
}
|
||||
@@ -585,5 +602,25 @@ namespace FATrace.WPLApp.Services
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 写入历史报警
|
||||
/// </summary>
|
||||
private void AddAlarm(string category, string message)
|
||||
{
|
||||
try
|
||||
{
|
||||
FreeSql.Insert(new HistoryAlarm
|
||||
{
|
||||
Category = category,
|
||||
Message = message,
|
||||
CreateTime = DateTime.Now
|
||||
}).ExecuteAffrows();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogService.Error($"写入历史报警失败: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user