From 42c4502a8d7c3452983a99c16b1f6833c394a954 Mon Sep 17 00:00:00 2001 From: Tyrone CT Date: Wed, 9 Jul 2025 22:15:19 +0800 Subject: [PATCH] =?UTF-8?q?CAN=20FD=20=E6=B3=A2=E7=89=B9=E7=8E=87=E7=AD=89?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E7=9A=84=E5=A2=9E=E5=8A=A0=E5=92=8C=E8=81=94?= =?UTF-8?q?=E5=8A=A8=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CapMachine.Model/CANLIN/CANFdConfigExd.cs | 53 +++++++++ CapMachine.Model/CANLIN/CanLinConfigPro.cs | 11 +- CapMachine.Wpf/CanDrive/CanFD/ToomossCanFD.cs | 39 ++++++- CapMachine.Wpf/Dtos/CANFdConfigExdDto.cs | 77 +++++++++++++ .../MapperProfile/CANFdConfigExdProfile.cs | 19 ++++ .../Models/LightChart/ChartManager.cs | 2 +- .../Models/Tag/Cell/MeterValueAttrCell.cs | 5 + CapMachine.Wpf/Services/CanDriveService.cs | 1 + CapMachine.Wpf/Services/CanFdDriveService.cs | 2 + .../Services/MachineRtDataService.cs | 15 ++- CapMachine.Wpf/TagConfig/SysTags.json | 61 +++++++++- .../ViewModels/CANConfigViewModel.cs | 1 + .../ViewModels/CANFDConfigViewModel.cs | 107 +++++++++++++++--- CapMachine.Wpf/Views/CANFDConfigView.xaml | 66 ++++++++++- 14 files changed, 430 insertions(+), 29 deletions(-) create mode 100644 CapMachine.Model/CANLIN/CANFdConfigExd.cs create mode 100644 CapMachine.Wpf/Dtos/CANFdConfigExdDto.cs create mode 100644 CapMachine.Wpf/MapperProfile/CANFdConfigExdProfile.cs diff --git a/CapMachine.Model/CANLIN/CANFdConfigExd.cs b/CapMachine.Model/CANLIN/CANFdConfigExd.cs new file mode 100644 index 0000000..4425e27 --- /dev/null +++ b/CapMachine.Model/CANLIN/CANFdConfigExd.cs @@ -0,0 +1,53 @@ +using FreeSql.DataAnnotations; + +namespace CapMachine.Model.CANLIN +{ + /// + /// CAN和LIN的配置信息数据 + /// + [Table(Name = "CANFdConfigExd")] + public class CANFdConfigExd + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 数据波特率 + /// + [Column(Name = "DataBaudRate")] + public int DataBaudRate { get; set; } + + /// + /// 仲裁波特率 + /// + [Column(Name = "ArbBaudRate")] + public int ArbBaudRate { get; set; } + + /// + /// CAN FD标准 ISO是否启用 + /// + [Column(Name = "ISOEnable")] + public bool ISOEnable { get; set; } + + /// + /// 终端电阻 是否启用 + /// + [Column(Name = "ResEnable")] + public bool ResEnable { get; set; } + + /// + /// 周期 + /// + [Column(Name = "Cycle")] + public int Cycle { get; set; } + + /// + /// Dbc文件路径 + /// + [Column(Name = "DbcPath", IsNullable = false, StringLength = 500)] + public string? DbcPath { get; set; } + } +} diff --git a/CapMachine.Model/CANLIN/CanLinConfigPro.cs b/CapMachine.Model/CANLIN/CanLinConfigPro.cs index 249ecb8..9f3b9ad 100644 --- a/CapMachine.Model/CANLIN/CanLinConfigPro.cs +++ b/CapMachine.Model/CANLIN/CanLinConfigPro.cs @@ -45,6 +45,13 @@ namespace CapMachine.Model.CANLIN public List? CanLinConfigContents { get; set; } + /// + /// ///////////////////////////////////////////导航属性 LIN 一对一/////////////////////////////////////////////////////// + /// + public long CANFdConfigExdId { get; set; } // 外键字段,必要 + public CANFdConfigExd CANFdConfigExd { get; set; } + + /// /// ///////////////////////////////////////////导航属性 CAN 一对一/////////////////////////////////////////////////////// /// @@ -52,12 +59,12 @@ namespace CapMachine.Model.CANLIN public CANConfigExd CANConfigExd { get; set; } - - /// /// ///////////////////////////////////////////导航属性 LIN 一对一/////////////////////////////////////////////////////// /// public long LINConfigExdId { get; set; } // 外键字段,必要 public LINConfigExd LINConfigExd { get; set; } + + } } diff --git a/CapMachine.Wpf/CanDrive/CanFD/ToomossCanFD.cs b/CapMachine.Wpf/CanDrive/CanFD/ToomossCanFD.cs index 5216db3..094f92a 100644 --- a/CapMachine.Wpf/CanDrive/CanFD/ToomossCanFD.cs +++ b/CapMachine.Wpf/CanDrive/CanFD/ToomossCanFD.cs @@ -73,6 +73,38 @@ namespace CapMachine.Wpf.CanDrive #region 公共变量 + /// + /// 仲裁波特率 + /// + public uint ArbBaudRate { get; set; } = 500000; + + /// + /// 数据波特率 + /// + public uint DataBaudRate { get; set; } = 2000000; + + /// + /// CAN FD标准 ISO是否启用 + /// + public bool ISOEnable { get; set; } = true; + + /// + /// 终端电阻 是否启用 + /// + public bool ResEnable { get; set; } = true; + + /// + /// 更新配置 + /// + public void UpdateConfig(uint arbBaudRate, uint dataBaudRate, bool iSOEnable, bool resEnable) + { + ArbBaudRate = arbBaudRate; + DataBaudRate = dataBaudRate; + ISOEnable = iSOEnable; + ResEnable = resEnable; + + } + /// /// 设备固件信息 /// @@ -256,7 +288,7 @@ namespace CapMachine.Wpf.CanDrive public void GetCANConfig() { //获取CAN波特率参数 - ret = USB2CANFD.CANFD_GetCANSpeedArg(DevHandle, ref CANConfig, 500000, 2000000); + ret = USB2CANFD.CANFD_GetCANSpeedArg(DevHandle, ref CANConfig, ArbBaudRate, DataBaudRate); if (ret != USB2CANFD.CANFD_SUCCESS) { Console.WriteLine("Get CAN Speed failed!"); @@ -276,7 +308,8 @@ namespace CapMachine.Wpf.CanDrive public void InitCAN() { //初始化CAN - CANConfig.ISOCRCEnable = 1;//使能ISOCRC + CANConfig.ISOCRCEnable = ISOEnable == true ? (byte)1 : (byte)0;//使能ISOCRC + CANConfig.ResEnable = ResEnable == true ? (byte)1 : (byte)0;//使能终端电阻 ret = USB2CANFD.CANFD_Init(DevHandle, WriteCANIndex, ref CANConfig); if (ret != USB2CANFD.CANFD_SUCCESS) { @@ -554,7 +587,7 @@ namespace CapMachine.Wpf.CanDrive //发送CAN数据 int SendedNum = USB2CANFD.CANFD_SendMsg(DevHandle, WriteCANIndex, CanMsg, (Int32)CanMsg.Length); - + if (SendedNum >= 0) { //Console.WriteLine("Success send frames:{0}", SendedNum); diff --git a/CapMachine.Wpf/Dtos/CANFdConfigExdDto.cs b/CapMachine.Wpf/Dtos/CANFdConfigExdDto.cs new file mode 100644 index 0000000..8d4d873 --- /dev/null +++ b/CapMachine.Wpf/Dtos/CANFdConfigExdDto.cs @@ -0,0 +1,77 @@ +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Dtos +{ + public class CANFdConfigExdDto : BindableBase + { + /// + /// 主键 + /// + public long Id { get; set; } + + private int _DataBaudRate; + /// + /// 数据波特率 + /// + public int DataBaudRate + { + get { return _DataBaudRate; } + set { _DataBaudRate = value; RaisePropertyChanged(); } + } + + private int _ArbBaudRate; + /// + /// 仲裁波特率 + /// + public int ArbBaudRate + { + get { return _ArbBaudRate; } + set { _ArbBaudRate = value; RaisePropertyChanged(); } + } + + private bool _ISOEnable; + /// + /// ISO 使能 + /// + public bool ISOEnable + { + get { return _ISOEnable; } + set { _ISOEnable = value; RaisePropertyChanged(); } + } + + private bool _ResEnable; + /// + /// 终端电阻使能 + /// + public bool ResEnable + { + get { return _ResEnable; } + set { _ResEnable = value; RaisePropertyChanged(); } + } + + private int _Cycle; + /// + /// 周期 + /// + public int Cycle + { + get { return _Cycle; } + set { _Cycle = value; RaisePropertyChanged(); } + } + + private string? _DbcPath; + /// + /// Dbc文件路径 + /// + public string? DbcPath + { + get { return _DbcPath; } + set { _DbcPath = value; RaisePropertyChanged(); } + } + } +} diff --git a/CapMachine.Wpf/MapperProfile/CANFdConfigExdProfile.cs b/CapMachine.Wpf/MapperProfile/CANFdConfigExdProfile.cs new file mode 100644 index 0000000..abafe8f --- /dev/null +++ b/CapMachine.Wpf/MapperProfile/CANFdConfigExdProfile.cs @@ -0,0 +1,19 @@ +using AutoMapper; +using CapMachine.Model.CANLIN; +using CapMachine.Wpf.Dtos; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.MapperProfile +{ + public class CANFdConfigExdProfile : Profile + { + public CANFdConfigExdProfile() + { + CreateMap().ReverseMap(); + } + } +} diff --git a/CapMachine.Wpf/Models/LightChart/ChartManager.cs b/CapMachine.Wpf/Models/LightChart/ChartManager.cs index d995146..0f32d34 100644 --- a/CapMachine.Wpf/Models/LightChart/ChartManager.cs +++ b/CapMachine.Wpf/Models/LightChart/ChartManager.cs @@ -602,7 +602,7 @@ namespace CapMachine.Wpf.Models.LightChart //光标注释相对的位置 左上侧 CursorValueDisplay.LocationScreenCoords.Y = 35; - CursorValueDisplay.LocationScreenCoords.X = 1380; + CursorValueDisplay.LocationScreenCoords.X = 1100; //CursorValueDisplay.TargetAxisValues.X = 0; //CursorValueDisplay.TargetAxisValues.Y = 0; diff --git a/CapMachine.Wpf/Models/Tag/Cell/MeterValueAttrCell.cs b/CapMachine.Wpf/Models/Tag/Cell/MeterValueAttrCell.cs index d60bc9e..58aa633 100644 --- a/CapMachine.Wpf/Models/Tag/Cell/MeterValueAttrCell.cs +++ b/CapMachine.Wpf/Models/Tag/Cell/MeterValueAttrCell.cs @@ -28,6 +28,11 @@ namespace CapMachine.Wpf.Models.Tag.Cell /// public string? Address { get; set; } + /// + /// 回写PLC地址,一般是压缩机的参数回写到PLC的地址,比如压缩机母线电流反馈、压缩机母线电压反馈等信息 + /// + public string? ReWritePLCAddress { get; set; } + /// /// 启用 /// diff --git a/CapMachine.Wpf/Services/CanDriveService.cs b/CapMachine.Wpf/Services/CanDriveService.cs index 6c4648d..82ed334 100644 --- a/CapMachine.Wpf/Services/CanDriveService.cs +++ b/CapMachine.Wpf/Services/CanDriveService.cs @@ -374,6 +374,7 @@ namespace CapMachine.Wpf.Services //double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue, out double Result1); //return double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue.Split(" ")[0], out double Result) == true ? Result : 0; return double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue.Split(" ")[0], out double Result) == true ? Result : 0; + } return 0; } diff --git a/CapMachine.Wpf/Services/CanFdDriveService.cs b/CapMachine.Wpf/Services/CanFdDriveService.cs index 575f04f..34f497e 100644 --- a/CapMachine.Wpf/Services/CanFdDriveService.cs +++ b/CapMachine.Wpf/Services/CanFdDriveService.cs @@ -352,6 +352,7 @@ namespace CapMachine.Wpf.Services { //double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue, out double Result1); return double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue.Split(" ")[0], out double Result) == true ? Result : 0; + //return 12.3; } return 0; } @@ -372,6 +373,7 @@ namespace CapMachine.Wpf.Services //double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue, out double Result1); //return double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue.Split(" ")[0], out double Result) == true ? Result : 0; return double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue.Split(" ")[0], out double Result) == true ? Result : 0; + //return 2300; } return 0; } diff --git a/CapMachine.Wpf/Services/MachineRtDataService.cs b/CapMachine.Wpf/Services/MachineRtDataService.cs index b03ff0a..55e4fca 100644 --- a/CapMachine.Wpf/Services/MachineRtDataService.cs +++ b/CapMachine.Wpf/Services/MachineRtDataService.cs @@ -1435,7 +1435,7 @@ namespace CapMachine.Wpf.Services if (TagManger.TryGetPVModel(itemCanLinGroup.Key, out MeterValueAttrCell? CanpVModel)) { CanpVModel!.EngValue = CanDriveService.GetDbcSpeedValueBySpeedName("通讯Cmp转速"); - SiemensDrive.Write(CanpVModel!.Address!.Replace("W", ""), (short)CanDriveService.GetDbcSpeedValueBySpeedName("通讯Cmp转速")); + SiemensDrive.Write(CanpVModel!.ReWritePLCAddress!, (short)CanDriveService.GetDbcSpeedValueBySpeedName("通讯Cmp转速")); //pVModel.EngSrcValue = 0; } break; @@ -1444,7 +1444,7 @@ namespace CapMachine.Wpf.Services if (TagManger.TryGetPVModel(itemCanLinGroup.Key, out MeterValueAttrCell? CanfdpVModel)) { CanfdpVModel!.EngValue = CanFdDriveService.GetDbcSpeedValueBySpeedName("通讯Cmp转速"); - SiemensDrive.Write(CanfdpVModel!.Address!.Replace("W", ""), (short)CanFdDriveService.GetDbcSpeedValueBySpeedName("通讯Cmp转速")); + SiemensDrive.Write(CanfdpVModel!.ReWritePLCAddress!, (short)CanFdDriveService.GetDbcSpeedValueBySpeedName("通讯Cmp转速")); //pVModel.EngSrcValue = 0; } break; @@ -1453,7 +1453,7 @@ namespace CapMachine.Wpf.Services if (TagManger.TryGetPVModel(itemCanLinGroup.Key, out MeterValueAttrCell? LinpVModel)) { LinpVModel!.EngValue = LinDriveService.GetLdfSpeedValueBySpeedName("通讯Cmp转速"); - SiemensDrive.Write(LinpVModel!.Address!.Replace("W", ""), (short)LinDriveService.GetLdfSpeedValueBySpeedName("通讯Cmp转速")); + SiemensDrive.Write(LinpVModel!.ReWritePLCAddress!, (short)LinDriveService.GetLdfSpeedValueBySpeedName("通讯Cmp转速")); } break; default: @@ -1469,25 +1469,28 @@ namespace CapMachine.Wpf.Services //尝试获取模型信息 if (TagManger.TryGetCapPVModelByShortValueTag(itemCanLinGroup.Key, out MeterValueAttrCell? pVModel)) { + //没有这个地址则跳过 + if (String.IsNullOrEmpty(pVModel!.ReWritePLCAddress)) continue; + switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) { case CanLinEnum.Can: //取得压缩机的CANLIN数据到数据集合中 pVModel!.EngValue = CanDriveService.GetDbcValueByName(itemCanLinGroup.Value.NameNoUnit); //写入到PLC中 - SiemensDrive.Write(pVModel!.Address!.Replace("W", ""), (short)(CanDriveService.GetDbcValueByName(itemCanLinGroup.Value.NameNoUnit) * itemCanLinGroup.Value.Precision)); + SiemensDrive.Write(pVModel!.ReWritePLCAddress!, (short)(CanDriveService.GetDbcValueByName(itemCanLinGroup.Value.NameNoUnit) * itemCanLinGroup.Value.Precision)); break; case CanLinEnum.CANFD: //取得压缩机的CANLIN数据到数据集合中 pVModel!.EngValue = CanFdDriveService.GetDbcValueByName(itemCanLinGroup.Value.NameNoUnit); //写入到PLC中 - SiemensDrive.Write(pVModel!.Address!.Replace("W", ""), (short)(CanFdDriveService.GetDbcValueByName(itemCanLinGroup.Value.NameNoUnit) * itemCanLinGroup.Value.Precision)); + SiemensDrive.Write(pVModel!.ReWritePLCAddress!, (short)(CanFdDriveService.GetDbcValueByName(itemCanLinGroup.Value.NameNoUnit) * itemCanLinGroup.Value.Precision)); break; case CanLinEnum.Lin: //取得压缩机的CANLIN数据 pVModel!.EngValue = LinDriveService.GetLdfValueByName(itemCanLinGroup.Value.NameNoUnit); //写入到PLC中 - SiemensDrive.Write(pVModel!.Address!.Replace("W", ""), (short)(LinDriveService.GetLdfValueByName(itemCanLinGroup.Value.NameNoUnit) * itemCanLinGroup.Value.Precision)); + SiemensDrive.Write(pVModel!.ReWritePLCAddress!, (short)(LinDriveService.GetLdfValueByName(itemCanLinGroup.Value.NameNoUnit) * itemCanLinGroup.Value.Precision)); break; case CanLinEnum.No: diff --git a/CapMachine.Wpf/TagConfig/SysTags.json b/CapMachine.Wpf/TagConfig/SysTags.json index 4c91506..87e5eae 100644 --- a/CapMachine.Wpf/TagConfig/SysTags.json +++ b/CapMachine.Wpf/TagConfig/SysTags.json @@ -15,6 +15,7 @@ "RWInfo": "PLCRead", "PVModel": { "Address": "VW15000", + "ReWritePLCAddress": "V14100", "EngValue": 0, "EngValueStr": "", "Block": "PV", @@ -295,7 +296,7 @@ "MaxValue": 10000, "IsMeter": false, "DecimalPoint": 1, - "Precision": 10, + "Precision": 100, "Unit": "℃", "DataType": "Short", "RWInfo": "PLCRead", @@ -317,7 +318,7 @@ "MaxValue": 10000, "IsMeter": false, "DecimalPoint": 1, - "Precision": 10, + "Precision": 100, "Unit": "%", "DataType": "Short", "RWInfo": "PLCRead", @@ -675,12 +676,59 @@ "RWInfo": "PLCRead", "PVModel": { "Address": "VW15060", + "ReWritePLCAddress": "V14102", "EngValue": 0, "EngValueStr": "", "Block": "PV", "BlockIndex": 60 } }, + { + "Id": 320, + "Name": "通讯Cmp母线电压[V]", + "NameNoUnit": "通讯Cmp母线电压", + "EnName": "ComCapBusVol", + "Group": "压缩机", + "MinValue": 0, + "MaxValue": 10000, + "IsMeter": false, + "DecimalPoint": 2, + "Precision": 100, + "Unit": "V", + "DataType": "Short", + "RWInfo": "PLCRead", + "PVModel": { + "Address": "VW15062", + "ReWritePLCAddress": "V14104", + "EngValue": 0, + "EngValueStr": "", + "Block": "PV", + "BlockIndex": 62 + } + }, + { + "Id": 330, + "Name": "通讯Cmp逆变器温度[℃]", + "NameNoUnit": "通讯Cmp逆变器温度", + "EnName": "ComCapInvTemp", + "Group": "压缩机", + "MinValue": 0, + "MaxValue": 10000, + "IsMeter": false, + "DecimalPoint": 2, + "Precision": 100, + "Unit": "℃", + "DataType": "Short", + "RWInfo": "PLCRead", + "PVModel": { + "Address": "VW15064", + "ReWritePLCAddress": "V14106", + "EngValue": 0, + "EngValueStr": "", + "Block": "PV", + "BlockIndex": 64 + } + }, { "Id": 340, "Name": "通讯Cmp相电流[A]", @@ -697,6 +745,7 @@ "RWInfo": "PLCRead", "PVModel": { "Address": "VW15066", + "ReWritePLCAddress": "V14108", "EngValue": 0, "EngValueStr": "", "Block": "PV", @@ -719,6 +768,7 @@ "RWInfo": "PLCRead", "PVModel": { "Address": "VW15068", + "ReWritePLCAddress": "V14110", "EngValue": 0, "EngValueStr": "", "Block": "PV", @@ -741,6 +791,7 @@ "RWInfo": "PLCRead", "PVModel": { "Address": "VW15070", + "ReWritePLCAddress": "V14112", "EngValue": 0, "EngValueStr": "", "Block": "PV", @@ -763,6 +814,7 @@ "RWInfo": "PLCRead", "PVModel": { "Address": "VW15072", + "ReWritePLCAddress": "V14120", "EngValue": 0, "EngValueStr": "", "Block": "PV", @@ -785,6 +837,7 @@ "RWInfo": "PLCRead", "PVModel": { "Address": "VW15074", + "ReWritePLCAddress": "V14122", "EngValue": 0, "EngValueStr": "", "Block": "PV", @@ -807,6 +860,7 @@ "RWInfo": "PLCRead", "PVModel": { "Address": "VW15076", + "ReWritePLCAddress": "V14124", "EngValue": 0, "EngValueStr": "", "Block": "PV", @@ -829,6 +883,7 @@ "RWInfo": "PLCRead", "PVModel": { "Address": "VW15078", + "ReWritePLCAddress": "V14126", "EngValue": 0, "EngValueStr": "", "Block": "PV", @@ -851,6 +906,7 @@ "RWInfo": "PLCRead", "PVModel": { "Address": "VW15080", + "ReWritePLCAddress": "V14128", "EngValue": 0, "EngValueStr": "", "Block": "PV", @@ -873,6 +929,7 @@ "RWInfo": "PLCRead", "PVModel": { "Address": "VW15082", + "ReWritePLCAddress": "V14130", "EngValue": 0, "EngValueStr": "", "Block": "PV", diff --git a/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs b/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs index e877d89..609f82a 100644 --- a/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs +++ b/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs @@ -73,6 +73,7 @@ namespace CapMachine.Wpf.ViewModels new CbxItems(){ Key="通讯Cmp转速",Text="通讯Cmp转速"}, new CbxItems(){ Key="通讯Cmp母线电压",Text="通讯Cmp母线电压"}, new CbxItems(){ Key="通讯Cmp母线电流",Text="通讯Cmp母线电流"}, + new CbxItems(){ Key="通讯Cmp逆变器温度",Text="通讯Cmp逆变器温度"}, new CbxItems(){ Key="通讯Cmp相电流",Text="通讯Cmp相电流"}, new CbxItems(){ Key="通讯Cmp功率",Text="通讯Cmp功率"}, new CbxItems(){ Key="通讯Cmp芯片温度",Text="通讯Cmp芯片温度"}, diff --git a/CapMachine.Wpf/ViewModels/CANFDConfigViewModel.cs b/CapMachine.Wpf/ViewModels/CANFDConfigViewModel.cs index cba1a0c..a74e9b4 100644 --- a/CapMachine.Wpf/ViewModels/CANFDConfigViewModel.cs +++ b/CapMachine.Wpf/ViewModels/CANFDConfigViewModel.cs @@ -52,6 +52,50 @@ namespace CapMachine.Wpf.ViewModels //MachineDataService = machineDataService; DialogService = dialogService; + //仲裁波特率 + ArbBaudRateCbxItems = new ObservableCollection() + { + new CbxItems(){ Key="10000",Text="10 Kbps"}, + new CbxItems(){ Key="20000",Text="20 Kbps"}, + new CbxItems(){ Key="33000",Text="33 Kbps"}, + new CbxItems(){ Key="50000",Text="50Kbps"}, + new CbxItems(){ Key="83000",Text="83 Kbps"}, + new CbxItems(){ Key="100000",Text="100 Kbps"}, + new CbxItems(){ Key="125000",Text="125 Kbps"}, + new CbxItems(){ Key="150000",Text="150 Kbps"}, + new CbxItems(){ Key="200000",Text="200 Kbps"}, + new CbxItems(){ Key="250000",Text="250 Kbps"}, + new CbxItems(){ Key="300000",Text="300 Kbps"}, + new CbxItems(){ Key="400000",Text="400 Kbps"}, + new CbxItems(){ Key="500000",Text="500 Kbps"}, + new CbxItems(){ Key="666000",Text="666 Kbps"}, + new CbxItems(){ Key="800000",Text="800 Kbps"}, + new CbxItems(){ Key="1000000",Text="1.0 Mbps"}, + }; + + //数据波特率 + DataBaudRateCbxItems = new ObservableCollection() + { + new CbxItems(){ Key="100000",Text="100 Kbps"}, + new CbxItems(){ Key="125000",Text="125 Kbps"}, + new CbxItems(){ Key="200000",Text="200 Kbps"}, + new CbxItems(){ Key="250000",Text="250 Kbps"}, + new CbxItems(){ Key="400000",Text="400 Kbps"}, + new CbxItems(){ Key="500000",Text="500 Kbps"}, + new CbxItems(){ Key="666000",Text="666 Kbps"}, + new CbxItems(){ Key="800000",Text="800 Kbps"}, + new CbxItems(){ Key="1000000",Text="1.0 Mbps"}, + + new CbxItems(){ Key="1500000",Text="1.5 Mbps"}, + new CbxItems(){ Key="2000000",Text="2.0 Mbps"}, + new CbxItems(){ Key="3000000",Text="3.0 Mbps"}, + new CbxItems(){ Key="4000000",Text="4.0 Mbps"}, + new CbxItems(){ Key="5000000",Text="5.0 Mbps"}, + new CbxItems(){ Key="6700000",Text="6.7 Mbps"}, + new CbxItems(){ Key="8000000",Text="8.0 Mbps"}, + new CbxItems(){ Key="10000000",Text="10.0 Mbps"}, + }; + WriteNameCbxItems = new ObservableCollection() { new CbxItems(){ Key="转速",Text="转速"}, @@ -70,6 +114,7 @@ namespace CapMachine.Wpf.ViewModels new CbxItems(){ Key="通讯Cmp转速",Text="通讯Cmp转速"}, new CbxItems(){ Key="通讯Cmp母线电压",Text="通讯Cmp母线电压"}, new CbxItems(){ Key="通讯Cmp母线电流",Text="通讯Cmp母线电流"}, + new CbxItems(){ Key="通讯Cmp逆变器温度",Text="通讯Cmp逆变器温度"}, new CbxItems(){ Key="通讯Cmp相电流",Text="通讯Cmp相电流"}, new CbxItems(){ Key="通讯Cmp功率",Text="通讯Cmp功率"}, new CbxItems(){ Key="通讯Cmp芯片温度",Text="通讯Cmp芯片温度"}, @@ -115,7 +160,7 @@ namespace CapMachine.Wpf.ViewModels { //CAN配置集合数据 canLinConfigPros = FreeSql.Select().Where(a => a.CANLINInfo == CANLIN.CANFD) - .Include(a => a.CANConfigExd) + .Include(a => a.CANFdConfigExd) .IncludeMany(a => a.CanLinConfigContents) .ToList(); @@ -126,7 +171,13 @@ namespace CapMachine.Wpf.ViewModels //无数据就返回 if (SelectCanLinConfigPro == null) return; - SelectedCANConfigExdDto = Mapper.Map(SelectCanLinConfigPro!.CANConfigExd); + SelectedCANConfigExdDto = Mapper.Map(SelectCanLinConfigPro!.CANFdConfigExd); + if (SelectedCANConfigExdDto != null) + { + //更新波特率等配置信息 + CanFdDriveService.ToomossCanFDDrive.UpdateConfig((uint)SelectedCANConfigExdDto.ArbBaudRate, + (uint)SelectedCANConfigExdDto.DataBaudRate, SelectedCANConfigExdDto.ISOEnable, SelectedCANConfigExdDto.ResEnable); + } //配置信息 var WirteData = SelectCanLinConfigPro.CanLinConfigContents!.Where(a => a.RWInfo == RW.Write).ToList(); @@ -271,9 +322,10 @@ namespace CapMachine.Wpf.ViewModels var ReturnValue = par.Parameters.GetValue("Name"); //加载默认的数据 CANConfigExd - var InsertCANConfigExd = FreeSql.Insert(new CANConfigExd() + var InsertCANConfigExd = FreeSql.Insert(new CANFdConfigExd() { - BaudRate = 250, + DataBaudRate = 250, + ArbBaudRate = 2000, DbcPath = "请配置DBC路径", Cycle = 100, }).ExecuteInserted(); @@ -283,7 +335,7 @@ namespace CapMachine.Wpf.ViewModels { ConfigName = ReturnValue, CANLINInfo = CANLIN.CANFD, - CANConfigExdId = InsertCANConfigExd.FirstOrDefault()!.Id + CANFdConfigExdId = InsertCANConfigExd.FirstOrDefault()!.Id }).ExecuteInserted(); if (InsertData != null) { @@ -364,7 +416,7 @@ namespace CapMachine.Wpf.ViewModels repo.DbContextOptions.EnableCascadeSave = true; //关键设置 var DeleteData = repo.Select - .Include(a => a.CANConfigExd) + .Include(a => a.CANFdConfigExd) .IncludeMany(a => a.CanLinConfigContents) .Where(a => a.Id == SelectCanLinConfigPro.Id) .ToList(); @@ -372,7 +424,7 @@ namespace CapMachine.Wpf.ViewModels repo.Delete(DeleteData); foreach (var item in DeleteData) { - FreeSql.Delete(item.CANConfigExdId).ExecuteAffrows(); + FreeSql.Delete(item.CANFdConfigExdId).ExecuteAffrows(); } InitLoadCanConfigPro(); } @@ -480,7 +532,13 @@ namespace CapMachine.Wpf.ViewModels SelectCanLinConfigPro = par as CanLinConfigPro; //CANConfigExdDto 数据 - SelectedCANConfigExdDto = Mapper.Map(SelectCanLinConfigPro!.CANConfigExd); + SelectedCANConfigExdDto = Mapper.Map(SelectCanLinConfigPro!.CANFdConfigExd); + if (SelectedCANConfigExdDto!=null) + { + //更新波特率等配置信息 + CanFdDriveService.ToomossCanFDDrive.UpdateConfig((uint)SelectedCANConfigExdDto.ArbBaudRate, + (uint)SelectedCANConfigExdDto.DataBaudRate, SelectedCANConfigExdDto.ISOEnable, SelectedCANConfigExdDto.ResEnable); + } var WirteData = SelectCanLinConfigPro.CanLinConfigContents!.Where(a => a.RWInfo == RW.Write).ToList(); if (WirteData != null && WirteData.Count > 0) @@ -789,16 +847,36 @@ namespace CapMachine.Wpf.ViewModels #region CAN操作 - private CANConfigExdDto _SelectedCANConfigExdDto; + private CANFdConfigExdDto _SelectedCANConfigExdDto; /// /// 选中的CAN操作 /// - public CANConfigExdDto SelectedCANConfigExdDto + public CANFdConfigExdDto SelectedCANConfigExdDto { get { return _SelectedCANConfigExdDto; } set { _SelectedCANConfigExdDto = value; RaisePropertyChanged(); } } + private ObservableCollection _DataBaudRateCbxItems; + /// + /// CAN FD 数据波特率 + /// + public ObservableCollection DataBaudRateCbxItems + { + get { return _DataBaudRateCbxItems; } + set { _DataBaudRateCbxItems = value; RaisePropertyChanged(); } + } + + private ObservableCollection _ArbBaudRateCbxItems; + /// + /// CAN FD 仲裁波特率 + /// + public ObservableCollection ArbBaudRateCbxItems + { + get { return _ArbBaudRateCbxItems; } + set { _ArbBaudRateCbxItems = value; RaisePropertyChanged(); } + } + private DelegateCommand _CanOpCmd; /// /// CAN操作的指令 @@ -844,7 +922,7 @@ namespace CapMachine.Wpf.ViewModels } //CAN DBC配置 有DBC配置的话,则直接加载DBC信息 - if (!string.IsNullOrEmpty(SelectCanLinConfigPro.CANConfigExd.DbcPath)) + if (!string.IsNullOrEmpty(SelectCanLinConfigPro.CANFdConfigExd.DbcPath)) { var DbcData = CanFdDriveService.StartDbc(SelectedCANConfigExdDto.DbcPath); ListCanDbcModel = DbcData; @@ -882,10 +960,13 @@ namespace CapMachine.Wpf.ViewModels //保存Can 配置 if (!string.IsNullOrEmpty(SelectedCANConfigExdDto.DbcPath)) { - var Update = FreeSql.Update() + var Update = FreeSql.Update() .Set(a => a.DbcPath, SelectedCANConfigExdDto.DbcPath) .Set(a => a.Cycle, SelectedCANConfigExdDto.Cycle) - .Set(a => a.BaudRate, SelectedCANConfigExdDto.BaudRate) + .Set(a => a.DataBaudRate, SelectedCANConfigExdDto.DataBaudRate) + .Set(a => a.ArbBaudRate, SelectedCANConfigExdDto.ArbBaudRate) + .Set(a => a.ISOEnable, SelectedCANConfigExdDto.ISOEnable) + .Set(a => a.ResEnable, SelectedCANConfigExdDto.ResEnable) .Where(a => a.Id == SelectedCANConfigExdDto.Id) .ExecuteUpdated(); } diff --git a/CapMachine.Wpf/Views/CANFDConfigView.xaml b/CapMachine.Wpf/Views/CANFDConfigView.xaml index cc7168d..86683c4 100644 --- a/CapMachine.Wpf/Views/CANFDConfigView.xaml +++ b/CapMachine.Wpf/Views/CANFDConfigView.xaml @@ -405,8 +405,70 @@ FontFamily="/Assets/Fonts/#iconfont" FontSize="18" Text="" /> - - + + + + + + + + + + + + + + + + + + + +