增加LIN的规则功能

This commit is contained in:
2025-09-23 22:58:25 +08:00
parent cc96dd600a
commit f6a0a85c0d
4 changed files with 108 additions and 18 deletions

View File

@@ -1,4 +1,5 @@
using System; using CapMachine.Wpf.Dtos;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
@@ -31,5 +32,17 @@ namespace CapMachine.Wpf.LinDrive
/// 没有的话,则给默认值 /// 没有的话,则给默认值
/// </summary> /// </summary>
public double SignalCmdValue { get; set; } public double SignalCmdValue { get; set; }
///// <summary>
///// 逻辑规则Id
///// </summary>
//public long LogicRuleId { get; set; }
/// <summary>
/// CanLinConfig的逻辑转换规则
/// 比如速度下发的数据SV是4000但是下发到CAN的值是40可能是其他的逻辑转换规则这里就是保存其中的逻辑规则
/// </summary>
public LogicRuleDto? LogicRuleDto { get; set; }
} }
} }

View File

@@ -1,15 +1,9 @@
using CapMachine.Model.CANLIN; using CapMachine.Model.CANLIN;
using CapMachine.Wpf.CanDrive;
using CapMachine.Wpf.LinDrive; using CapMachine.Wpf.LinDrive;
using ImTools; using ImTools;
using Prism.Ioc; using Prism.Ioc;
using Prism.Mvvm; using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CapMachine.Wpf.Services namespace CapMachine.Wpf.Services
{ {
@@ -20,15 +14,19 @@ namespace CapMachine.Wpf.Services
{ {
public HighSpeedDataService HighSpeedDataService { get; } public HighSpeedDataService HighSpeedDataService { get; }
public LogicRuleService LogicRuleService { get; }
/// <summary> /// <summary>
/// 实例化函数 /// 实例化函数
/// </summary> /// </summary>
public LinDriveService(HighSpeedDataService highSpeedDataService, IContainerProvider containerProvider) public LinDriveService(HighSpeedDataService highSpeedDataService, IContainerProvider containerProvider, LogicRuleService logicRuleService)
{ {
ToomossLinDrive = new ToomossLin(containerProvider); ToomossLinDrive = new ToomossLin(containerProvider);
//高速数据服务 //高速数据服务
HighSpeedDataService = highSpeedDataService; HighSpeedDataService = highSpeedDataService;
LogicRuleService = logicRuleService;
//ToomossLinDrive.StartLinDrive(); //ToomossLinDrive.StartLinDrive();
} }
@@ -171,16 +169,32 @@ namespace CapMachine.Wpf.Services
/// <param name="canCmdData"></param> /// <param name="canCmdData"></param>
public void UpdateSpeedCmdData(double SpeedData) public void UpdateSpeedCmdData(double SpeedData)
{ {
//if (SpeedLinCmdData != null)
//{
// SpeedLinCmdData.SignalCmdValue = SpeedData;
//}
if (SpeedLinCmdData != null) if (SpeedLinCmdData != null)
{ {
SpeedLinCmdData.SignalCmdValue = SpeedData; //首先是否判断是有斜率
} if (SpeedLinCmdData.LogicRuleDto == null)
//if (EnableLinCmdData != null) {
//{ //没有启动逻辑规则处理
// EnableLinCmdData.SignalCmdValue = 1; SpeedLinCmdData.SignalCmdValue = SpeedData;
//} }
} else
{
//LogicRuleService.ApplyExpressionFast(SpeedData, SpeedCanCmdData.LogicRuleDto);
SpeedLinCmdData.SignalCmdValue = LogicRuleService.ApplyExpressionFast(SpeedData, SpeedLinCmdData.LogicRuleDto);
//Console.WriteLine($"实时转换后转速值:{SpeedCanCmdData.SignalCmdValue}-SV值:{SpeedData}");
}
//if (EnableLinCmdData != null)
//{
// EnableLinCmdData.SignalCmdValue = 1;
//}
}
}
/// <summary> /// <summary>
/// 更新压缩机使能数据 /// 更新压缩机使能数据

View File

@@ -38,7 +38,7 @@ namespace CapMachine.Wpf.ViewModels
/// <param name="machineRtDataService"></param> /// <param name="machineRtDataService"></param>
public LinConfigViewModel(IDialogService dialogService, IFreeSql freeSql, public LinConfigViewModel(IDialogService dialogService, IFreeSql freeSql,
IEventAggregator eventAggregator, IRegionManager regionManager, SysRunService sysRunService, IEventAggregator eventAggregator, IRegionManager regionManager, SysRunService sysRunService,
ConfigService configService, LinDriveService linDriveService, ComActionService comActionService, ConfigService configService, LinDriveService linDriveService, ComActionService comActionService, LogicRuleService logicRuleService,
IMapper mapper, MachineRtDataService machineRtDataService) IMapper mapper, MachineRtDataService machineRtDataService)
{ {
//LogService = logService; //LogService = logService;
@@ -49,6 +49,7 @@ namespace CapMachine.Wpf.ViewModels
ConfigService = configService; ConfigService = configService;
LinDriveService = linDriveService; LinDriveService = linDriveService;
ComActionService = comActionService; ComActionService = comActionService;
LogicRuleService = logicRuleService;
Mapper = mapper; Mapper = mapper;
this.MachineRtDataService = machineRtDataService; this.MachineRtDataService = machineRtDataService;
@@ -95,7 +96,8 @@ namespace CapMachine.Wpf.ViewModels
new CbxItems(){ Key="通讯PTC模块温度",Text="通讯PTC模块温度"}, new CbxItems(){ Key="通讯PTC模块温度",Text="通讯PTC模块温度"},
}; };
InitLoadLinConfigPro(); InitLoadLinConfigPro();
//初始化写规则下拉框
InitWriteRuleCbx();
} }
@@ -109,6 +111,7 @@ namespace CapMachine.Wpf.ViewModels
public ConfigService ConfigService { get; } public ConfigService ConfigService { get; }
public LinDriveService LinDriveService { get; } public LinDriveService LinDriveService { get; }
public ComActionService ComActionService { get; } public ComActionService ComActionService { get; }
public LogicRuleService LogicRuleService { get; }
public IMapper Mapper { get; } public IMapper Mapper { get; }
private MachineRtDataService MachineRtDataService { get; } private MachineRtDataService MachineRtDataService { get; }
@@ -118,6 +121,50 @@ namespace CapMachine.Wpf.ViewModels
public IDialogService DialogService { get; } public IDialogService DialogService { get; }
private ObservableCollection<CbxItems> _WriteRuleCbxItems;
/// <summary>
/// 写入的规格集合
/// </summary>
public ObservableCollection<CbxItems> WriteRuleCbxItems
{
get { return _WriteRuleCbxItems; }
set { _WriteRuleCbxItems = value; RaisePropertyChanged(); }
}
#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 LinConfigPro #region LinConfigPro
@@ -157,6 +204,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),
}); });
//LinDriveService.CmdData.Add(new LinCmdData() //LinDriveService.CmdData.Add(new LinCmdData()
//{ //{
@@ -523,6 +571,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),
}); });
//LinDriveService.CmdData.Add(new LinCmdData() //LinDriveService.CmdData.Add(new LinCmdData()
@@ -1174,6 +1223,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

@@ -813,13 +813,26 @@
</DataGridTextColumn.Header> </DataGridTextColumn.Header>
</DataGridTextColumn> </DataGridTextColumn>
<DataGridTextColumn Binding="{Binding DefautValue}"> <DataGridTextColumn Binding="{Binding DefautValue}">
<DataGridTextColumn.Header> <DataGridTextColumn.Header>
<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">
<prism:InvokeCommandAction Command="{Binding WriteGridSelectionChangedCmd}" CommandParameter="{Binding ElementName=LINWriteDatagrid, Path=SelectedItem}" /> <prism:InvokeCommandAction Command="{Binding WriteGridSelectionChangedCmd}" CommandParameter="{Binding ElementName=LINWriteDatagrid, Path=SelectedItem}" />