做导购网站有哪些,建筑业管理平台登录,新闻稿撰写,谢岗仿做网站CAN协议
CAN#xff08;Controller Area Network#xff09;即控制器局域网络。特点#xff1a;
多主网络#xff1a;网络上的任何节点都可以主动发送数据#xff0c;不需要一个固定的主节点。双绞线#xff1a;使用双绞线作为通信介质#xff0c;支持较远的通信距离。…CAN协议
CANController Area Network即控制器局域网络。特点
多主网络网络上的任何节点都可以主动发送数据不需要一个固定的主节点。双绞线使用双绞线作为通信介质支持较远的通信距离。差分信号使用差分信号传输增强了抗干扰能力。非破坏性仲裁多个节点同时发送数据时具有更高优先级较低ID的帧会获得总线控制权。错误检测具有错误检测和容错机制能够检测出传输错误并自动重传。数据帧标准数据帧长度为8字节扩展数据帧可以更长。传输速率通常在125 kbps至1 Mbps之间高速CAN可达5 Mbps。
工作原理
帧格式CAN协议定义了多种帧类型包括数据帧、远程帧、错误帧和过载帧。仲裁通过帧ID进行仲裁ID越低优先级越高。位速率所有节点必须以相同的位速率通信。
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合集