diff --git a/CapMachine.Wpf/CanDrive/ToomossCan.cs b/CapMachine.Wpf/CanDrive/ToomossCan.cs
index c908574..de14f9c 100644
--- a/CapMachine.Wpf/CanDrive/ToomossCan.cs
+++ b/CapMachine.Wpf/CanDrive/ToomossCan.cs
@@ -618,7 +618,7 @@ namespace CapMachine.Wpf.CanDrive
// 预先计算固定值
long CycleInTicks = (long)(SendCycle * TicksPerMs);
//临时测试用
- long lastTicks = Stopwatcher.ElapsedTicks;
+ //long lastTicks = Stopwatcher.ElapsedTicks;
//IsCycleSend
while (IsCycleSend && !token.IsCancellationRequested)
{
@@ -664,8 +664,9 @@ namespace CapMachine.Wpf.CanDrive
}
// 使用Stopwatch记录实际的执行间隔,而不是DateTime
- Console.WriteLine($"--实际间隔(ms): {(Stopwatcher.ElapsedTicks - lastTicks) / TicksPerMs:F3}, 目标: {SendCycle}");
- lastTicks = Stopwatcher.ElapsedTicks;
+ //Console.WriteLine($"--实际间隔(ms): {(Stopwatcher.ElapsedTicks - lastTicks) / TicksPerMs:F3}, 目标: {SendCycle}");
+ //lastTicks = Stopwatcher.ElapsedTicks;
+
//Console.WriteLine($"--当前时间(毫秒): {DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}");
diff --git a/CapMachine.Wpf/Services/CanDriveService.cs b/CapMachine.Wpf/Services/CanDriveService.cs
index 2089729..666ddd2 100644
--- a/CapMachine.Wpf/Services/CanDriveService.cs
+++ b/CapMachine.Wpf/Services/CanDriveService.cs
@@ -134,12 +134,12 @@ namespace CapMachine.Wpf.Services
get { return _AutoSpeedSv; }
set
{
- if (value!= _AutoSpeedSv)
+ if (value != _AutoSpeedSv)
{
_AutoSpeedSv = value;
RaisePropertyChanged();
}
-
+
}
}
@@ -225,19 +225,33 @@ namespace CapMachine.Wpf.Services
}
///
- /// 更新压缩机使能数据
+ /// 更新压缩机使能数据 自动时的赋值数据
///
///
public void UpdateCapEnableCmdData(bool IsEnable)
{
if (!ToomossCanDrive.IsCycleSend) return;
- if (!CanAutoHand) return;
- if (EnableCanCmdData != null)
+ if (CanAutoHand)
{
- EnableCanCmdData.SignalCmdValue = IsEnable ? 1 : 0;
+ if (EnableCanCmdData != null)
+ {
+ EnableCanCmdData.SignalCmdValue = IsEnable ? 1 : 0;
+ }
}
}
+ ///
+ /// 更新压缩机使能数据 手动时的赋值数据
+ ///
+ ///
+ public void UpdateCapEnableCmdDataByHand(bool IsEnable)
+ {
+ if (EnableCanCmdData != null)
+ {
+ EnableCanCmdData.SignalCmdValue = IsEnable ? 1 : 0;
+ Console.WriteLine("压缩机使能:" + IsEnable);
+ }
+ }
///
/// 发送消息给CAN 驱动
diff --git a/CapMachine.Wpf/Services/DataRecordService.cs b/CapMachine.Wpf/Services/DataRecordService.cs
index 5de2716..9f66915 100644
--- a/CapMachine.Wpf/Services/DataRecordService.cs
+++ b/CapMachine.Wpf/Services/DataRecordService.cs
@@ -296,75 +296,85 @@ namespace CapMachine.Wpf.Services
///
private async void ListenRecoredChannelAction()
{
+
while (await RecoredChannelInfo.Reader.WaitToReadAsync())
{
- if (RecoredChannelInfo.Reader.TryRead(out var recordChannelData))
+ try
{
- ////第一次计时
- //stopwatch.Start(); //启动Stopwatch
-
- //新增数据
- CacheRecordData.Add(recordChannelData);
- MaxCacheCellCount++;
-
- //先判断缓存的单元大小,防止每次都检查删除,数据达到时间范围外的话,则删除,即是600次后进行一次判断删除
- if (MaxCacheCellCount >= 600)
+ if (RecoredChannelInfo.Reader.TryRead(out var recordChannelData))
{
- //不在缓存的时间范围内的话,则删除数据
- if (CacheRecordData.Where(a => a.CreateTime <= DateTime.Now.AddSeconds(-ConfigService.ChartRtDataCacheTimeSec)).Any())
+ ////第一次计时
+ //stopwatch.Start(); //启动Stopwatch
+
+ //新增数据
+ CacheRecordData.Add(recordChannelData);
+ MaxCacheCellCount++;
+
+ //先判断缓存的单元大小,防止每次都检查删除,数据达到时间范围外的话,则删除,即是600次后进行一次判断删除
+ if (MaxCacheCellCount >= 600)
{
- CacheRecordData.RemoveAll(a => a.CreateTime <= DateTime.Now.AddSeconds(-ConfigService.ChartRtDataCacheTimeSec));
+ //不在缓存的时间范围内的话,则删除数据
+ if (CacheRecordData.Where(a => a.CreateTime <= DateTime.Now.AddSeconds(-ConfigService.ChartRtDataCacheTimeSec)).Any())
+ {
+ CacheRecordData.RemoveAll(a => a.CreateTime <= DateTime.Now.AddSeconds(-ConfigService.ChartRtDataCacheTimeSec));
+ }
+ MaxCacheCellCount = 0;
}
- MaxCacheCellCount = 0;
+
+ //ConcurrentQueueData.
+
+ //Prism发布数据
+ _EventAggregator.GetEvent().Publish(recordChannelData.DeepClone());
+
+ //判断集合的数据是否达到要求
+ //if (CacheRecordData.Count >= MaxCacheCount)
+ //{
+ //CacheRecordData可能存在多个表格数据,依据表名进行分类
+
+ //考虑多个表结构
+ //var GroupTableData = CacheRecordData.GroupBy(a => a.TableName).ToList();
+
+ //foreach (var ItemData in GroupTableData)
+ //{
+ //表名称
+ //var TableName = ItemData.Key;
+ //当前表格的数据
+ //var Datas = ItemData.Select(item => item.Data).ToList();
+
+ //var Datas = recordChannelData.Select(item => item.Data).ToList();
+
+ //List models = Datas.Select(dict => ConvertToCsvRecordModel(dict)).ToList();
+
+ //转换到CSV的数据
+ var models = ConvertToCsvRecordModel(recordChannelData.Data);
+ //填充工况名称
+ models.WorkCond = ConfigService.CurExpInfo.Name;
+
+ //数据库保存
+ //zeroDbContext.Insert(Datas);
+
+ //CSV文件保存
+ SaveToCsv(new List() { models });
+ //}
+
+ //CacheRecordData.Clear();
+
+ //Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss:fff")}-{LineName}-保存成功!");
+ //}
+
+ //stopwatch.Stop(); //停止Stopwatch
+ //Console.WriteLine("保存数据耗时::{0}", stopwatch.Elapsed.TotalSeconds.ToString());
+ //stopwatch.Reset();
}
-
- //ConcurrentQueueData.
-
- //Prism发布数据
- _EventAggregator.GetEvent().Publish(recordChannelData.DeepClone());
-
- //判断集合的数据是否达到要求
- //if (CacheRecordData.Count >= MaxCacheCount)
- //{
- //CacheRecordData可能存在多个表格数据,依据表名进行分类
-
- //考虑多个表结构
- //var GroupTableData = CacheRecordData.GroupBy(a => a.TableName).ToList();
-
- //foreach (var ItemData in GroupTableData)
- //{
- //表名称
- //var TableName = ItemData.Key;
- //当前表格的数据
- //var Datas = ItemData.Select(item => item.Data).ToList();
-
- //var Datas = recordChannelData.Select(item => item.Data).ToList();
-
- //List models = Datas.Select(dict => ConvertToCsvRecordModel(dict)).ToList();
-
- //转换到CSV的数据
- var models = ConvertToCsvRecordModel(recordChannelData.Data);
- //填充工况名称
- models.WorkCond = ConfigService.CurExpInfo.Name;
-
- //数据库保存
- //zeroDbContext.Insert(Datas);
-
- //CSV文件保存
- SaveToCsv(new List() { models });
- //}
-
- //CacheRecordData.Clear();
-
- //Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss:fff")}-{LineName}-保存成功!");
- //}
-
-
- //stopwatch.Stop(); //停止Stopwatch
- //Console.WriteLine("保存数据耗时::{0}", stopwatch.Elapsed.TotalSeconds.ToString());
- //stopwatch.Reset();
}
+ catch (Exception ex)
+ {
+ LogService.Error($"时间:{DateTime.Now.ToString()}-【ListenRecoredChannelAction】-{ex.Message}");
+ }
+
}
+
+
}
///
@@ -459,7 +469,7 @@ namespace CapMachine.Wpf.Services
catch (Exception ex)
{
//CycleTimer.Start(); //执行完毕后再开启器
- LogService.Info($"时间:{DateTime.Now.ToString()}-【PwAnalyze-CycleAction】-{ex.Message}");
+ LogService.Error($"时间:{DateTime.Now.ToString()}-【PwAnalyze-CycleAction】-{ex.Message}");
}
}
diff --git a/CapMachine.Wpf/Services/HighSpeedDataService.cs b/CapMachine.Wpf/Services/HighSpeedDataService.cs
index ec0c10a..9a0ddac 100644
--- a/CapMachine.Wpf/Services/HighSpeedDataService.cs
+++ b/CapMachine.Wpf/Services/HighSpeedDataService.cs
@@ -175,40 +175,48 @@ namespace CapMachine.Wpf.Services
{
while (await CycleChannelInfo.Reader.WaitToReadAsync())
{
- if (CycleChannelInfo.Reader.TryRead(out var CycleChannelData))
+ try
{
- ////第一次计时
- //stopwatch.Start(); //启动Stopwatch
-
- //新增数据
- CacheHighFragMsg.AddRange(CycleChannelData);
- MaxCacheCellCount++;
-
- if (MaxCacheCellCount >= 600)
+ if (CycleChannelInfo.Reader.TryRead(out var CycleChannelData))
{
- //CSV文件保存
- SaveToCsv(CacheHighFragMsg);
- CacheHighFragMsg.Clear();
- MaxCacheCellCount = 0;
+ ////第一次计时
+ //stopwatch.Start(); //启动Stopwatch
+
+ //新增数据
+ CacheHighFragMsg.AddRange(CycleChannelData);
+ MaxCacheCellCount++;
+
+ if (MaxCacheCellCount >= 600)
+ {
+ //CSV文件保存
+ SaveToCsv(CacheHighFragMsg);
+ CacheHighFragMsg.Clear();
+ MaxCacheCellCount = 0;
+ }
+
+ //}
+
+ //CacheRecordData.Clear();
+
+ //Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss:fff")}-{LineName}-保存成功!");
+ //}
+
+
+ //stopwatch.Stop(); //停止Stopwatch
+ //Console.WriteLine("保存数据耗时::{0}", stopwatch.Elapsed.TotalSeconds.ToString());
+ //stopwatch.Reset();
}
-
- //}
-
- //CacheRecordData.Clear();
-
- //Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss:fff")}-{LineName}-保存成功!");
- //}
-
-
- //stopwatch.Stop(); //停止Stopwatch
- //Console.WriteLine("保存数据耗时::{0}", stopwatch.Elapsed.TotalSeconds.ToString());
- //stopwatch.Reset();
+ }
+ catch (Exception ex)
+ {
+ LogService.Error($"时间:{DateTime.Now.ToString()}-【ListenCycleChannelAction】-{ex.Message}");
}
}
+
}
#endregion
-
+
#region CSV Helper 数据保存CSV
diff --git a/CapMachine.Wpf/Services/HightDriveMsgService.cs b/CapMachine.Wpf/Services/HightDriveMsgService.cs
index 279f53c..6560b5a 100644
--- a/CapMachine.Wpf/Services/HightDriveMsgService.cs
+++ b/CapMachine.Wpf/Services/HightDriveMsgService.cs
@@ -62,7 +62,7 @@ namespace CapMachine.Wpf.Services
///
/// 是否启用CAN报文显示
///
- private bool _IsDisplayEnabled=true;
+ private bool _IsDisplayEnabled = true;
public bool IsDisplayEnabled
{
get { return _IsDisplayEnabled; }
@@ -241,9 +241,11 @@ namespace CapMachine.Wpf.Services
///
private async Task ProcessMessagesAsync()
{
- try
+
+ while (await ReceiveChannel.Reader.WaitToReadAsync(TaskCancellationTokenSource.Token))
{
- while (await ReceiveChannel.Reader.WaitToReadAsync(TaskCancellationTokenSource.Token))
+
+ try
{
// 清空列表但保留容量
MessageBatch.Clear();
@@ -280,16 +282,18 @@ namespace CapMachine.Wpf.Services
await Task.Delay(20);
}
}
+ catch (OperationCanceledException ex)
+ {
+ // 服务被取消,正常退出
+ LogService.Error($" 服务被取消,正常退出: {ex.Message}");
+ }
+ catch (Exception ex)
+ {
+ LogService.Error($"消息处理任务异常: {ex.Message}");
+ }
+
}
- catch (OperationCanceledException ex)
- {
- // 服务被取消,正常退出
- LogService.Error($" 服务被取消,正常退出: {ex.Message}");
- }
- catch (Exception ex)
- {
- LogService.Error($"消息处理任务异常: {ex.Message}");
- }
+
}
///
diff --git a/CapMachine.Wpf/Services/MachineRtDataService.cs b/CapMachine.Wpf/Services/MachineRtDataService.cs
index 1c4c978..aced06b 100644
--- a/CapMachine.Wpf/Services/MachineRtDataService.cs
+++ b/CapMachine.Wpf/Services/MachineRtDataService.cs
@@ -2272,7 +2272,7 @@ namespace CapMachine.Wpf.Services
//dynamic dad=10;
-
+
InitialPLCCom();
//拓展的参数信息
@@ -2741,25 +2741,25 @@ namespace CapMachine.Wpf.Services
if (item.StateOperateResult.IsSuccess)
{
item.State = item.StateOperateResult.Content;
- //根据PLC得到执行的步骤数据,更新到CAN和LIN的数据
- if (item.Name!.Equals("使能"))
- {
- switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
- {
- case CanLinEnum.Can:
- //获取PLC的使能状态,更新到CAN的使能状态
- CanDriveService.UpdateCapEnableCmdData(item.State);
- //itemTag.Value.EngPvValue = 0;
- break;
- case CanLinEnum.Lin:
- //获取PLC的使能状态,更新到LIN的使能状态
- LinDriveService.UpdateCapEnableCmdData(item.State);
- //itemTag.Value.EngPvValue = 0;
- break;
- default:
- break;
- }
- }
+ //根据PLC得到执行的步骤数据,更新到CAN和LIN的数据,压缩的使能时来自于程序的步骤配置,不再接受PLC的指令数据
+ //if (item.Name!.Equals("使能"))
+ //{
+ // switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
+ // {
+ // case CanLinEnum.Can:
+ // //获取PLC的使能状态,更新到CAN的使能状态
+ // CanDriveService.UpdateCapEnableCmdData(item.State);
+ // //itemTag.Value.EngPvValue = 0;
+ // break;
+ // case CanLinEnum.Lin:
+ // //获取PLC的使能状态,更新到LIN的使能状态
+ // LinDriveService.UpdateCapEnableCmdData(item.State);
+ // //itemTag.Value.EngPvValue = 0;
+ // break;
+ // default:
+ // break;
+ // }
+ //}
}
}
@@ -3062,6 +3062,13 @@ namespace CapMachine.Wpf.Services
{
foreach (var itemStepExd in ProRunChannelData.ListStepExd)
{
+ //压缩机使能的参数直接给压缩机触发
+ if (itemStepExd.Name.Contains("压缩机使能"))
+ {
+ CanDriveService.UpdateCapEnableCmdData((bool)itemStepExd.Value);
+ continue;
+ }
+
var DataAdrees = ListPlcExdConfigCell.FirstOrDefault(a => a.Name == itemStepExd.Name);
if (DataAdrees != null)
{
diff --git a/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs b/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs
index 8dfff35..43e6987 100644
--- a/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs
+++ b/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs
@@ -534,6 +534,7 @@ namespace CapMachine.Wpf.ViewModels
MsgName = item.MsgFrameName,
SignalName = item.SignalName,
SignalCmdValue = double.TryParse(item.DefautValue, out double result) == true ? result : 0,
+ LogicRuleDto = Mapper.Map(item.LogicRule),
});
//CanDriveService.CmdData.Add(new CanCmdData()
@@ -1075,7 +1076,7 @@ namespace CapMachine.Wpf.ViewModels
//ToDo cmd
CanDriveService.CanHandEnable = (bool)Data!;
//给使能数据
- CanDriveService.UpdateCapEnableCmdData(CanDriveService.CanHandEnable);
+ CanDriveService.UpdateCapEnableCmdDataByHand((bool)Data!);
}
}
diff --git a/CapMachine.Wpf/Views/CANConfigView.xaml b/CapMachine.Wpf/Views/CANConfigView.xaml
index a1aadbe..261c41a 100644
--- a/CapMachine.Wpf/Views/CANConfigView.xaml
+++ b/CapMachine.Wpf/Views/CANConfigView.xaml
@@ -609,7 +609,7 @@
Margin="10,0,0,0"
Command="{Binding CanAutoHandCmd}"
CommandParameter="{Binding RelativeSource={RelativeSource Self}}"
- FontSize="11"
+ FontSize="8"
ToolTip="自动时:接受程序步骤的转速控制;手动时:手动发送转速数据">