当前位置: 首页 > news >正文

基于C#的CAN总线通信开发指南

CAN(Control Area NetWork)通信主要用于汽车行业,是Bosch公司开发用于监测,控制汽车。

它是一种汽车总线,成本相对较低,通信介质采用双绞线,采用多主通信的方式进行节点访问。

采用的是短帧结构,有效的字节数是8个,可让汽车实时响应。

可通过CAN收发器让电脑通过USB接口接入CAN网络。

C#实现数据的读写

1、将Kvaser.CanLib.dll引入项目,canlib32.dll放入根目录

2、写入操作

    // 初始化驱动Canlib.canInitializeLibrary();// 打开信道var handle = Canlib.canOpenChannel(1, Canlib.canOPEN_ACCEPT_VIRTUAL);Canlib.canSetBitrate(handle, Canlib.canBITRATE_500K);// 打开总线Canlib.canBusOn(handle);byte[] msg = new byte[]{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};// 发送数据,第一个参数是信道句柄,几乎每个操作都会用到,第二个参数是操作编号,用来区分不同的数据编号// 第三个参数是写入的数据,第四个参数是数据长度,第五个参数是消息标识:1-远程请求;// 2-11位的标准帧,3-29位的扩展帧var status = Canlib.canWrite(handle, 10, msg, 8, 2);if (status == Canlib.canStatus.canOK){this.textBox1.Text = this.textBox1.Text + "写入成功" + Environment.NewLine;}else{this.textBox1.Text = this.textBox1.Text + status.Description() + Environment.NewLine;}// 释放资源Canlib.canBusOff(handle);Canlib.canClose(handle);

3、读取操作

    // 初始化驱动Canlib.canInitializeLibrary();// 打开信道var handle = Canlib.canOpenChannel(1, Canlib.canOPEN_ACCEPT_VIRTUAL);Canlib.canSetBitrate(handle, Canlib.canBITRATE_500K);// 打开总线Canlib.canBusOn(handle);byte[] msg = new byte[8];CancellationTokenSource cts = new CancellationTokenSource();Task.Run(async () => {while (cts.IsCancellationRequested == false){await Task.Delay(1000, cts.Token);// 读取方法的参数和写入的几乎完全一致Canlib.canReadSpecific(handle, 10, msg, out int dlc, out int flag, out long time);this.Invoke(new Action(() =>{this.textBox1.Text = string.Join(",", msg) + Environment.NewLine + this.textBox1.Text;}));}}, cts.Token);

相关文章:

  • 在Postman中高效生成测试接口:从API文档到可执行测试的完整指南
  • windows的rancherDesktop修改镜像源
  • 算法训练营第十一天|150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素
  • 安卓应用卡顿、性能低下的背后原因
  • goner/otel 在Gone框架接入OpenTelemetry
  • stable-diffusion windows本地部署
  • Spring AI 集成 DeepSeek V3 模型开发指南
  • 【C++】C++函数指针详解与实用技巧
  • 小白借助ai对全栈进行浅浅理解(学习笔记)-Lambda、Optional 避免空指针与新的日期时间 API
  • 南邮计科电工电子实验第五次课与非门设计数字锁逻辑电路小测答案
  • 线程池的核心参数和线程创建方式,线程和进程
  • 介绍Unity中的Dictionary
  • 【RAG技术全景解读】从原理到工业级应用实践
  • 树莓派5+Ubuntu24.04 LTS串口通信 保姆级教程
  • Mockoon 使用教程
  • 解决:‘java‘ 不是内部或外部命令,也不是可运行的程序-Java环境变量配置(含JDK8、JDK21安装包一站式配置)
  • 垃圾厌氧堆肥发酵实验台试验装置
  • 直接用字符串方式 split(“。“) 来切句,虽然能把句子拆开,但无法和 BERT 模型的 token 位置对应(embedding 用不上)
  • 两种方法求解最长公共子序列问题并输出所有解
  • Android学习总结之算法篇八(二叉树和数组)
  • 央行:货币与物价的关系受多重因素影响,提振物价的关键在于扩大有效需求
  • 经彩申城!上海网络大V沙龙活动走进闵行
  • 人民日报钟声:中方维护自身发展利益的决心不会改变
  • 两国战机均未侵入对方领空,巴方公布对印回击细节
  • 李云泽:大型保险集团资本补充已经提上日程
  • 安顺市原副市长、市公安局原局长顾长华任贵州省民委副主任