鱼C论坛

 找回密码
 立即注册
查看: 521|回复: 3

C#中如何解析CAN信号?

[复制链接]
发表于 2023-5-17 14:53:25 | 显示全部楼层 |阅读模式
60鱼币
如下所示:
BO_ 1603 Message_TCU4: 8 Vector__XXX
SG_ Pump_MotorSpeed_16U : 43|16@0+ (1,0) [0|0] "MPa" Vector__XXX
SG_ TCU_FaultNum_8U : 35|8@0+ (1,0) [0|0] "N/A" Vector__XXX
SG_ TCU3_3_Ratio_12U : 31|12@0+ (1,0) [0|0] "N/A" Vector__XXX
SG_ TCU3_2_TargetSecPressure_12U : 11|12@0+ (1,0) [0|0] "N/A" Vector__XXX
SG_ TCU3_1_SecPressure_12U : 7|12@0+ (1,0) [0|0] "MPa" Vector__XXX

这是一帧Motorola 格式数据,接收数据如图
DBC信号.png

请大佬帮忙写个算法包含Motorola 和 intel格式。传入 起始位,长度,接收数据。返回计算值。先感谢了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-17 14:55:15 | 显示全部楼层
CAN信号的解析通常需要根据信号的起始位和长度,以及信号的数据类型和单位来进行计算。以下是C#中解析CAN信号的示例代码:
  1. public static double ParseCanSignal(int startBit, int signalLength, byte[] data, double factor, double offset)
  2. {
  3.     // 将字节数组转换为二进制字符串
  4.     string binaryString = string.Join("", data.Select(b => Convert.ToString(b, 2).PadLeft(8, '0')));
  5.     // 获取信号的二进制字符串
  6.     string signalBinaryString = binaryString.Substring(binaryString.Length - startBit - signalLength, signalLength);
  7.     // 将二进制字符串转换为十进制数值
  8.     int signalValue = Convert.ToInt32(signalBinaryString, 2);
  9.     // 计算信号的实际值
  10.     double signalRealValue = signalValue * factor + offset;
  11.     return signalRealValue;
  12. }
复制代码

其中, startBit 表示信号的起始位, signalLength 表示信号的长度, data 表示接收到的CAN数据字节数组, factor 表示信号的比例因子, offset 表示信号的偏移量。函数返回解析后的信号实际值。

例如,对于上述示例中的 Pump_MotorSpeed_16U 信号,其起始位为43,长度为16,单位为 MPa ,比例因子为1,偏移量为0,则可以通过以下代码解析:
  1. byte[] data = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
  2. double factor = 1;
  3. double offset = 0;
  4. double signalValue = ParseCanSignal(43, 16, data, factor, offset);
  5. Console.WriteLine("Pump_MotorSpeed_16U: {0} MPa", signalValue);
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-17 15:19:19 | 显示全部楼层
isdkz 发表于 2023-5-17 14:55
CAN信号的解析通常需要根据信号的起始位和长度,以及信号的数据类型和单位来进行计算。以下是C#中解析CAN信 ...

别问chatgpt,问了自己算一下再来回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-19 17:34:47 | 显示全部楼层
isdkz 发表于 2023-5-17 14:55
CAN信号的解析通常需要根据信号的起始位和长度,以及信号的数据类型和单位来进行计算。以下是C#中解析CAN信 ...

请勿频繁使用ChatGPT是!!!
还用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-25 08:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表