增加CAN的规则功能

This commit is contained in:
2025-08-06 10:34:57 +08:00
parent 82a00d3bf4
commit 71852a6232
3 changed files with 103 additions and 12 deletions

View File

@@ -20,15 +20,17 @@ namespace CapMachine.Wpf.Services
{ {
public HighSpeedDataService HighSpeedDataService { get; } public HighSpeedDataService HighSpeedDataService { get; }
public LogicRuleService LogicRuleService { get; }
/// <summary> /// <summary>
/// 实例化函数 /// 实例化函数
/// </summary> /// </summary>
public CanDriveService(HighSpeedDataService highSpeedDataService, IContainerProvider containerProvider) public CanDriveService(HighSpeedDataService highSpeedDataService, IContainerProvider containerProvider, LogicRuleService logicRuleService)
{ {
ToomossCanDrive = new ToomossCan(containerProvider); ToomossCanDrive = new ToomossCan(containerProvider);
//高速数据服务 //高速数据服务
HighSpeedDataService = highSpeedDataService; HighSpeedDataService = highSpeedDataService;
LogicRuleService = logicRuleService;
//ToomossCanDrive.StartCanDrive(); //ToomossCanDrive.StartCanDrive();
} }
@@ -172,14 +174,26 @@ namespace CapMachine.Wpf.Services
/// <param name="canCmdData"></param> /// <param name="canCmdData"></param>
public void UpdateSpeedCmdData(double SpeedData) public void UpdateSpeedCmdData(double SpeedData)
{ {
//if (SpeedCanCmdData != null)
//{
// SpeedCanCmdData.SignalCmdValue = SpeedData;
//}
if (SpeedCanCmdData != null) if (SpeedCanCmdData != null)
{ {
SpeedCanCmdData.SignalCmdValue = SpeedData; //首先是否判断是有斜率
if (SpeedCanCmdData.LogicRuleDto == null)
{
//没有启动逻辑规则处理
SpeedCanCmdData.SignalCmdValue = SpeedData;
}
else
{
//LogicRuleService.ApplyExpressionFast(SpeedData, SpeedCanCmdData.LogicRuleDto);
SpeedCanCmdData.SignalCmdValue = LogicRuleService.ApplyExpressionFast(SpeedData, SpeedCanCmdData.LogicRuleDto);
//Console.WriteLine($"实时转换后转速值:{SpeedCanCmdData.SignalCmdValue}-SV值:{SpeedData}");
}
} }
//if (EnableCanCmdData != null)
//{
// EnableCanCmdData.SignalCmdValue = 1;
//}
} }
/// <summary> /// <summary>

View File

@@ -37,7 +37,7 @@ namespace CapMachine.Wpf.ViewModels
{ {
public CANConfigViewModel(IDialogService dialogService, IFreeSql freeSql, public CANConfigViewModel(IDialogService dialogService, IFreeSql freeSql,
IEventAggregator eventAggregator, IRegionManager regionManager, SysRunService sysRunService, IEventAggregator eventAggregator, IRegionManager regionManager, SysRunService sysRunService,
ComActionService actionService, ComActionService actionService, LogicRuleService logicRuleService,
ConfigService configService, CanDriveService canDriveService, ConfigService configService, CanDriveService canDriveService,
IMapper mapper, MachineRtDataService machineRtDataService) IMapper mapper, MachineRtDataService machineRtDataService)
{ {
@@ -47,6 +47,7 @@ namespace CapMachine.Wpf.ViewModels
RegionManager = regionManager; RegionManager = regionManager;
SysRunService = sysRunService; SysRunService = sysRunService;
ComActionService = actionService; ComActionService = actionService;
LogicRuleService = logicRuleService;
ConfigService = configService; ConfigService = configService;
CanDriveService = canDriveService; CanDriveService = canDriveService;
Mapper = mapper; Mapper = mapper;
@@ -55,6 +56,8 @@ namespace CapMachine.Wpf.ViewModels
//MachineDataService = machineDataService; //MachineDataService = machineDataService;
DialogService = dialogService; DialogService = dialogService;
EventAggregator.GetEvent<LogicRuleChangeEvent>().Subscribe(LogicRuleChangeEventCall);
WriteNameCbxItems = new ObservableCollection<CbxItems>() WriteNameCbxItems = new ObservableCollection<CbxItems>()
{ {
new CbxItems(){ Key="转速",Text="转速"}, new CbxItems(){ Key="转速",Text="转速"},
@@ -86,7 +89,8 @@ namespace CapMachine.Wpf.ViewModels
new CbxItems(){ Key="通讯PTC模块温度",Text="通讯PTC模块温度"}, new CbxItems(){ Key="通讯PTC模块温度",Text="通讯PTC模块温度"},
}; };
InitLoadCanConfigPro(); InitLoadCanConfigPro();
//初始化写规则下拉框
InitWriteRuleCbx();
} }
@@ -95,6 +99,7 @@ namespace CapMachine.Wpf.ViewModels
/// </summary> /// </summary>
public IFreeSql FreeSql { get; } public IFreeSql FreeSql { get; }
public IEventAggregator EventAggregator { get; } public IEventAggregator EventAggregator { get; }
public LogicRuleService LogicRuleService { get; }
public IRegionManager RegionManager { get; } public IRegionManager RegionManager { get; }
public SysRunService SysRunService { get; } public SysRunService SysRunService { get; }
public ComActionService ComActionService { get; } public ComActionService ComActionService { get; }
@@ -109,6 +114,39 @@ namespace CapMachine.Wpf.ViewModels
public IDialogService DialogService { get; } public IDialogService DialogService { get; }
#region
/// <summary>
/// 逻辑更改事件
/// </summary>
/// <param name="msg"></param>
/// <exception cref="NotImplementedException"></exception>
private void LogicRuleChangeEventCall(string msg)
{
//InitWriteRuleCbx();
}
/// <summary>
/// 初始化写规则下拉框
/// </summary>
private void InitWriteRuleCbx()
{
WriteRuleCbxItems = new ObservableCollection<CbxItems>();
//选择的读写规则
foreach (var itemRule in LogicRuleService.LogicRuleDtos)
{
WriteRuleCbxItems.Add(new CbxItems()
{
Key = itemRule.Id.ToString(),
Text = itemRule.Name
});
}
}
#endregion
#region CanConfigPro #region CanConfigPro
@@ -120,7 +158,7 @@ namespace CapMachine.Wpf.ViewModels
//CAN配置集合数据 //CAN配置集合数据
canLinConfigPros = FreeSql.Select<CanLinConfigPro>().Where(a => a.CANLINInfo == CANLIN.CAN) canLinConfigPros = FreeSql.Select<CanLinConfigPro>().Where(a => a.CANLINInfo == CANLIN.CAN)
.Include(a => a.CANConfigExd) .Include(a => a.CANConfigExd)
.IncludeMany(a => a.CanLinConfigContents) .IncludeMany(a => a.CanLinConfigContents, then => then.Include(b => b.LogicRule))//,then=> then.Include(b=>b.LogicRule) //.IncludeMany(a => a.CanLinConfigContents)
.ToList(); .ToList();
ListCanLinConfigPro = new ObservableCollection<CanLinConfigPro>(canLinConfigPros); ListCanLinConfigPro = new ObservableCollection<CanLinConfigPro>(canLinConfigPros);
@@ -148,6 +186,7 @@ namespace CapMachine.Wpf.ViewModels
MsgName = item.MsgFrameName, MsgName = item.MsgFrameName,
SignalName = item.SignalName, SignalName = item.SignalName,
SignalCmdValue = double.TryParse(item.DefautValue, out double result) == true ? result : 0, SignalCmdValue = double.TryParse(item.DefautValue, out double result) == true ? result : 0,
LogicRuleDto = Mapper.Map<LogicRuleDto>(item.LogicRule),
}); });
//CanDriveService.CmdData.Add(new CanCmdData() //CanDriveService.CmdData.Add(new CanCmdData()
//{ //{
@@ -501,6 +540,7 @@ namespace CapMachine.Wpf.ViewModels
MsgName = item.MsgFrameName, MsgName = item.MsgFrameName,
SignalName = item.SignalName, SignalName = item.SignalName,
SignalCmdValue = double.TryParse(item.DefautValue, out double result) == true ? result : 0, SignalCmdValue = double.TryParse(item.DefautValue, out double result) == true ? result : 0,
LogicRuleDto = Mapper.Map<LogicRuleDto>(item.LogicRule),
}); });
//CanDriveService.CmdData.Add(new CanCmdData() //CanDriveService.CmdData.Add(new CanCmdData()
@@ -708,7 +748,7 @@ namespace CapMachine.Wpf.ViewModels
} }
//(par as SelectionChangedEventArgs)!.AddedItems[0] == null //(par as SelectionChangedEventArgs)!.AddedItems[0] == null
if ((par as SelectionChangedEventArgs)!.AddedItems.Count==0) if ((par as SelectionChangedEventArgs)!.AddedItems.Count == 0)
{ {
return; return;
} }
@@ -993,6 +1033,16 @@ namespace CapMachine.Wpf.ViewModels
set { _WriteNameCbxItems = value; RaisePropertyChanged(); } set { _WriteNameCbxItems = value; RaisePropertyChanged(); }
} }
private ObservableCollection<CbxItems> _WriteRuleCbxItems;
/// <summary>
/// 写入的规格集合
/// </summary>
public ObservableCollection<CbxItems> WriteRuleCbxItems
{
get { return _WriteRuleCbxItems; }
set { _WriteRuleCbxItems = value; RaisePropertyChanged(); }
}
private ObservableCollection<CbxItems> _ReadNameCbxItems; private ObservableCollection<CbxItems> _ReadNameCbxItems;
/// <summary> /// <summary>
@@ -1005,6 +1055,17 @@ namespace CapMachine.Wpf.ViewModels
} }
private ObservableCollection<CbxItems> _ReadRuleCbxItems;
/// <summary>
/// 读取的规格集合
/// </summary>
public ObservableCollection<CbxItems> ReadRuleCbxItems
{
get { return _ReadRuleCbxItems; }
set { _ReadRuleCbxItems = value; RaisePropertyChanged(); }
}
//private string _SelectedWriteName; //private string _SelectedWriteName;
///// <summary> ///// <summary>
///// 选中的写入的Name ///// 选中的写入的Name
@@ -1119,6 +1180,7 @@ namespace CapMachine.Wpf.ViewModels
//直接修改 //直接修改
FreeSql.Update<CanLinRWConfig>(item.Id) FreeSql.Update<CanLinRWConfig>(item.Id)
.Set(a => a.Name, item.Name) .Set(a => a.Name, item.Name)
.Set(a => a.LogicRuleId, item.LogicRuleId)
.Set(a => a.DefautValue, item.DefautValue) .Set(a => a.DefautValue, item.DefautValue)
.ExecuteAffrows(); .ExecuteAffrows();
//ListWriteCanLinRWConfigDto.Remove(SelectedWriteCanLinRWConfigDto); //ListWriteCanLinRWConfigDto.Remove(SelectedWriteCanLinRWConfigDto);

View File

@@ -717,6 +717,21 @@
<TextBlock FontWeight="Bold" Text="默认值" /> <TextBlock FontWeight="Bold" Text="默认值" />
</DataGridTextColumn.Header> </DataGridTextColumn.Header>
</DataGridTextColumn> </DataGridTextColumn>
<DataGridTemplateColumn Width="200" Header="规则名称">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox
DisplayMemberPath="Text"
ItemsSource="{Binding Source={StaticResource Proxy}, Path=Data.WriteRuleCbxItems}"
SelectedValue="{Binding LogicRuleId, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="Key" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns> </DataGrid.Columns>
<i:Interaction.Triggers> <i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged"> <i:EventTrigger EventName="SelectionChanged">