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

通信协议_C#实现CAN通信

CAN协议

  • CAN(Controller Area Network)即控制器局域网络。
  • 特点
  1. 多主网络:网络上的任何节点都可以主动发送数据,不需要一个固定的主节点。
  2. 双绞线:使用双绞线作为通信介质,支持较远的通信距离。
  3. 差分信号:使用差分信号传输,增强了抗干扰能力。
  4. 非破坏性仲裁:多个节点同时发送数据时,具有更高优先级(较低ID)的帧会获得总线控制权。
  5. 错误检测:具有错误检测和容错机制,能够检测出传输错误并自动重传。
  6. 数据帧:标准数据帧长度为8字节,扩展数据帧可以更长。
  7. 传输速率:通常在125 kbps至1 Mbps之间,高速CAN可达5 Mbps。
  • 工作原理
  1. 帧格式:CAN协议定义了多种帧类型,包括数据帧、远程帧、错误帧和过载帧。
  2. 仲裁:通过帧ID进行仲裁,ID越低优先级越高。
  3. 位速率:所有节点必须以相同的位速率通信。
  • CAN协议中主要帧类型的格式:
1. 数据帧

数据帧用于传输实际的数据。

2. 远程帧

远程帧用于请求发送具有特定ID的数据帧。

数据帧和远程帧格式:
帧起始 | 仲裁场 | 控制场 | 数据场 | CRC场 | ACK场 | 帧结束1位    1-2字节   1字节    0-8字节   3字节   2位    7位
3. 错误帧

当某个节点检测到错误时,它会发送错误帧来中断当前传输。

错误帧格式:
错误标志 | 错误界定符6位         8位
4. 过载帧

过载帧用于在需要更多时间来处理接收到的帧时暂时停止总线活动:

过载帧格式:
过载标志 | 过载界定符6位         8位

基于Kvaser实现CAN通信

配置环境:1.官网下载KvaserCANKing,KvaserCANDriver,KvaserCANDll ->
2.进行安装 -> 3.开启驱动 -> 4.开启CANKing -> 5.新建项目。

在这里插入图片描述
配置VS项目:1.在下载的DLL文件中找到Kvaser.Canlib库 -> 2.将此库导入vs项目 ->
3.将项目构建为X86 -> 4.将canlib32.dll放入项目文件的debug文件夹中 -> 5.重构项目

在这里插入图片描述
发送消息Demo:

    {//初始化Can对象Canlib.canInitializeLibrary();//打开通道,获取句柄int handle = Canlib.canOpenChannel(0, Canlib.canOPEN_ACCEPT_VIRTUAL);//通过句柄设置波特率Canlib.canSetBitrate(handle, Canlib.canBITRATE_500K);//打开连接Canlib.canBusOn(handle);//发送byte[] dates = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };//句柄,消息标识符,数据,数据位,帧类型Canlib.canWrite(handle, 456, dates, 8, Canlib.canMSG_STD);//关闭连接Canlib.canBusOff(handle);}

接收消息Demo:

  {//初始化Can对象Canlib.canInitializeLibrary();//打开通道,获取句柄int handle = Canlib.canOpenChannel(1, Canlib.canOPEN_ACCEPT_VIRTUAL);//通过句柄设置波特率Canlib.canSetBitrate(handle, Canlib.canBITRATE_500K);//打开连接Canlib.canBusOn(handle);//接受byte[] dates = new byte[8];Canlib.canRead(handle, out int id, dates, out int dlc, out int flag, out long time).ToString();textBox1.Text= BitConverter.ToString(dates)+id.ToString();Canlib.canClose(handle);}

实现功能:
在这里插入图片描述

  • 接触过的通信协议Demo合集
http://www.lryc.cn/news/403217.html

相关文章:

  • 【AI工具基础】—B树(B-tree)
  • STM32智能仓库管理系统教程
  • 空间计算开发:Volu的集成开发工具包
  • 02-Redis未授权访问漏洞
  • Linux——多路复用之poll
  • 【AI资讯】7.19日凌晨OpenAI发布迷你AI模型GPT-4o mini
  • 3.设计模式--创建者模式--工厂模式
  • IOT 的 10 种常见协议、组网模式、特点及其使用场景浅析
  • 【Android】 dp与sp,加冕为王
  • R语言画散点图-饼图-折线图-柱状图-箱线图-直方图-曲线图-热力图-雷达图
  • 影响转化率的多元因素分析及定制开发AI智能名片S2B2C商城系统小程序的应用案例
  • 数据仓库中事实表设计的关键步骤解析
  • .net6 core Worker Service项目,使用Exchange Web Services (EWS) 分页获取电子邮件收件箱列表,邮件信息字段
  • 通过 EMR Serverless Spark 提交 PySpark 流任务
  • 【Linux网络】epoll实现的echo服务器{nocopy类/智能指针/echo服务器}
  • [数据集][目标检测]拐杖检测数据集VOC+YOLO格式2778张1类别
  • 长按加速- 解决react - setInterval下无法更新问题
  • 路网双线合并单线——ArcGIS 解决方法
  • 【.NET全栈】ASP.NET开发Web应用——ADO.NET数据访问技术
  • 【机器学习】无监督学习和自监督学习
  • 蓝牙新篇章:WebKit的Web Bluetooth API深度解析
  • 2024可信数据库发展大会:TDengine CEO 陶建辉谈“做难而正确的事情”
  • Guns v7.3.0:基于 Vue3、Antdv 和 TypeScript 打造的开箱即用型前端框架
  • 掌握构建艺术:在Gradle中配置自定义的源代码管理(SCM)
  • 如何在 Mac 上下载安装植物大战僵尸杂交版? 最新版本 2.2 详细安装运行教程问题详解
  • ​前端Vue组件技术实践:打造自定义精美悬浮菜单按钮组件
  • 数据仓库的一致性维度
  • 【ffmpeg命令】RTMP推流
  • 人工智能大模型发展的新形势及其省思
  • Linux云计算 |【第一阶段】SERVICES-DAY4