CN102681969B - 基于can总线的长帧数据传输方法 - Google Patents
基于can总线的长帧数据传输方法 Download PDFInfo
- Publication number
- CN102681969B CN102681969B CN201110057979.2A CN201110057979A CN102681969B CN 102681969 B CN102681969 B CN 102681969B CN 201110057979 A CN201110057979 A CN 201110057979A CN 102681969 B CN102681969 B CN 102681969B
- Authority
- CN
- China
- Prior art keywords
- message
- packet
- long frame
- thread
- destination node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Small-Scale Networks (AREA)
Abstract
本发明属于计算机应用技术领域,为一种基于CAN总线的长帧数据传输卡的长帧数据传输方法。长帧数据传输卡由DSP芯片、双端口RAM、FLASH存储器、CAN收发器、PCI转换器组成。长帧数据传输方法步骤如下:①将长帧传输卡通过PCI总线连接到计算机上,安装驱动程序;②创建共享内存映射,开辟通信缓冲区;③通过调用DLL接口函数进行相应参数的设置;④广播在线信息;⑤与在线节点建立连接,创建接收线程和发送线程;⑥当用户节点断开连接时,关闭与它的连接,并结束相应的线程。计算机通过本发明可实现在CAN总线上进行长帧数据传输,使用方便简洁,且具有良好的扩展性和实时性,适合在各类电子信息系统中使用。
Description
技术领域
本发明属于计算机应用技术领域,尤其涉及电子信息系统中所需的基于CAN总线的长帧数据传输方法。
背景技术
目前在电子信息系统中,特别是在车辆电子信息系统中,CAN总线技术得到了越来越多的应用,而现有技术只局限于短帧数据在CAN总线上的传输,目前在车电系统中通过CAN总线连接的计算机和外部设备很难进行长帧数据的传输。现有的解决办法多是对应用层协议进行处理,将长帧数据通过应用层软件进行拆分,为了保证拆分后数据包的同一性,必须给拆分后的每一帧数据加上时标。该方法最大的缺点是通用性差、实时性不强、会过多占用有限的CPU资源。随着对电子信息系统的数据量、数据复杂性与数据访问的实时性要求的提高,旧有的处理方法很难满足要求。因此本设计提出一种基于CAN总线的长帧数据传输方法,在板卡上通过DSP实现CAN总线长帧数据的传输,在保证实时性的同时,又不占用上位机的资源。
发明内容
本发明的技术方案是为了解决现有技术中无法通过CAN总线进行长帧数据的传输,提供一种能够支持CAN总线长帧数据传输的方法,该方法适合于各种电子信息系统,特别是车辆电子信息系统,具有通用性强、实时性高等特点。
本发明的技术解决方案是:
设计一种基于CAN总线的长帧数据传输卡,采用即插即用的以DSP作为核心处理器的PCI卡。所述的PCI卡上包括DSP芯片、PCI转换器、CAN收发器、FLASH芯片、双端口RAM、A/D转换器和电源模块。PCI卡通过PCI总线与计算机连接。该方法具体步骤如下:
步骤1:将长帧传输卡通过PCI总线连接到计算机上,安装驱动程序;
步骤2:创建共享内存映射,开辟通信缓冲区;
步骤3:通过调用DLL接口函数进行相应参数的设置;
步骤4:本节点开机后,广播在线信息;
步骤5:与在线节点建立连接,创建接收线程和发送线程;
用户节点应用程序通过调用接口DLL函数进行数据发送,接口函数将数据写入双端口RAM,DSP芯片中的发送线程从双端口RAM中取出后发送信息,接收线程接收信息,如果收到数据,放入双端口RAM,并通过DLL接口直接通过消息发送给应用程序。
具体实现方法为:
程序启动后,新建接收线程、分发线程、长帧发送线程、长帧接收线程;线程之间通过信号量进行同步;各自的属性为:
接收线程:无限循环,收到数据包存到环形接收队列,然后进入等待;
分发线程:无限循环,判断环形接收队列是否有数据包,依次逐包读取,如为短帧,直接通过接口函数输出;如为长帧首包,开启长帧接收任务;不同源节点开启不同长帧接收任务,支持多个源节点同时长帧传输;
长帧发送线程:无限循环,判断环形发送队列是否有数据包,依次逐包发送,直到发送完毕进入等待状态;
长帧接收线程:单任务循环,当分发任务收到发送请求帧后启动,分包数据全部接收完毕后,将收的数据打包,放入数据共享区,通过消息发送到应用程序;如接收过程中发生超时,发送中断命令,自动退出;
当源节点传送一条请求发送消息TP.CM_RTS给目的节点时,连接就开始了;请求发送消息包含了整个消息的字节大小,要传送的独立消息的数目,以及源节点、目的节点编号;
在目的节点接收到请求发送消息后,有两种处理方式,接收连接或者拒绝连接;默认接收连接,目的节点发送一条准备发送消息TP.CM_CTS;准备发送消息包含了目的节点可接收数据包的数目,和将要接收的第一个数据包的序列编号;在刚刚开放连接的时候,数据包的序列编号是1;
如果目的节点当前存储空间不够或数据无效则拒绝连接,目的节点将发送一条放弃连接消息TP.Conn_Abort;
当源节点接收到来自目的节点的准备发送消息TP.CM_CTS,那么认为已经与目的节点建立了连接;当目的节点已经成功传送了准备发送消息TP.CM_CTS作为对一个TP.CM_RTS消息的响应,那么认为已经与源节点建立了连接;否则需要发送连接放弃消息来关闭连接;
如果目的节点收到RTS消息并决定不建立连接,那么发送一条放弃连接消息TP.Conn_Abort;这样让源节点转移到一个新的连接而不必等到超时;
当源节点接收到准备发送消息TP.CM_CTS后,数据传输正式开始;
在传输没有错误的情况下,有两种关闭连接的情形;第一种是广播模式,发送给全局目标地址,第二种是连接模式,发送给一个指定目的节点时;在第一种情形下,接收完数据后将没有关闭连接的操作;在第二种情形下,当接收到数据流的最后一个数据包时,目的节点将发送一个消息结束应答TP.CM_EndofMsgACK给源节点;
在进行广播模式传输时,目的节点不允许使用″放弃连接″消息;在进行连接模式传输时,源节点和目的节点在任何时候使用″放弃连接″消息来终止连接;
两方中的任一方发生如下传输故障会导致连接的关闭:
(1).当收到的最后一个数据包后等待下一个数据包的时间间隔大于T1秒;
(2)当一条CTS消息被发送后等待时间大于T2秒;
(3).当发送了一个数据包后等待CTS或者ACK消息的时间大于T3秒;
(4).在CTS消息后等待下一条CTS来保持连接,但等待时间大于T4秒;
上述原因都将会导致关闭连接发生;在实际传输过程中,无论源节点还是目的节点,由于上述原因决定要关闭连接,都发出一条放弃连接消息;
步骤六:当用户节点断开连接时,广播离线信息,并结束相应的线程。
发明的有益效果:计算机可通过本发明实现通过CAN总线进行长帧数据传输,使用方便,具有良好的扩展性和数据处理的实时性,适合于各种军用电子信息系统,特别是车辆电子信息系统中使用,具有扩展性强,使用简洁的特点。
附图说明
图1为本发明的硬件组成图;
图2为本发明的软件流程图;
图3为基于J1939协议的连接模式下的长帧数据传输框图;
图4为基于J1939协议的广播模式下的长帧数据传输框图。
具体实施方式
下面结合附图,对本发明的实施例作进一步详细说明。
本发明CAN总线通信底层采用CAN2.0B协议规范。帧协议采用CAN扩展帧。由于CAN本身是一个底层协议,仅详细定义了物理层和数据链路层,本身并不完整。很多复杂的应用问题需要更高层次的定义来解决。比如,CAN数据帧一次最多只能传输8字节,而不能传输大于8字节的长帧数据。因此,本发明应用层协议选用SAEJ1939。
J1939协议中的核心是负责数据传输的传输协议。它的功能分为两部分:
(1)数据的拆分打包和重组。一个J1939的报文单元只有8个字节的数据场。因此如果所要发送的数据超过了8字节,就分成几个小的数据包分批发送。数据场的第一个字节从1开始作为报文的序号,后7个字节用来存放数据。所以能发送255×7=1785个字节的数据。报文被接收以后按序号重新组合成原来的数据。
(2)连接管理。主要对节点之间连接的建立和关闭,数据的传送进行管理。其中定义了5种帧结构:发送请求帧、发送清除帧、结束应答帧、连接失败帧以及用来全局接收的广播帧。节点之间的连接通过一个节点向目的地址发送一个发送请求帧而建立。在接收发送请求帧以后,节点如果有足够的空间来接收数据并且数据有效,则发送一个发送清除帧,开始数据的传送。如果存储空间不够或者数据无效等原因,节点需要拒绝连接,则发送连接失败帧,连接关闭。如果数据接收全部完成。则节点发送一个结束应答帧,连接关闭。
本发明应用在军用电子信息系统,特别是车辆电子信息系统,采用如附图1所示的方法进行连接,多个计算机通过CAN总线连接,实现数据传输采用步骤如下:
步骤1:将长帧传输卡通过PCI总线连接到计算机上,安装驱动程序;
步骤2:创建共享内存映射,开辟通信缓冲区;
步骤3:通过调用DLL接口函数进行相应参数的设置;
步骤4:广播在线信息;
步骤5:与在线节点建立连接,创建接收线程和发送线程;具体实现方法为:
程序启动后,新建接收线程、分发线程、长帧发送线程、长帧接收线程。线程之间通过信号量进行同步。各自的属性为:
接收线程:无限循环,收到数据包存到环形接收队列,然后进入等待。
分发线程:无限循环,判断环形接收队列是否有数据包,依次逐包读取,如为短帧,直接通过接口函数输出。如为长帧首包,开启长帧接收任务。不同源点开启不同长帧接收任务,支持多源点同时长帧传输。
长帧发送线程:无限循环,判断环形发送队列是否有数据包,依次逐包发送,直到发送完毕进入等待状态。
长帧接收线程:单任务循环,当分发任务收到发送请求帧后启动,分包数据全部接收完毕后,将收的数据打包,放入数据共享区,通过消息发送到应用程序。如接收过程中发生超时,发送中断命令,自动退出。
结合附图3、4对本发明的最佳实施例做进一步描述:
当源节点传送一条请求发送消息TP.CM_RTS给目的节点时,连接就开始了;请求发送消息包含了整个消息的字节大小,要传送的独立消息的数目,以及源节点、目的节点编号;
在目的节点接收到请求发送消息后,有两种处理方式,接收连接或者拒绝连接;默认接收连接,目的节点发送一条准备发送消息TP.CM_CTS;准备发送消息包含了目的节点可接收数据包的数目,和将要接收的第一个数据包的序列编号;在刚刚开放连接的时候,数据包的序列编号是1;
如果目的节点当前存储空间不够或数据无效则拒绝连接,目的节点将发送一条放弃连接消息TP.Conn_Abort;
当源节点接收到来自目的节点的准备发送消息TP.CM_CTS,那么认为已经与目的节点建立了连接;当目的节点已经成功传送了准备发送消息TP.CM_CTS作为对一个TP.CM_RTS消息的响应,那么认为已经与源节点建立了连接;否则需要发送连接放弃消息来关闭连接;
如果目的节点收到RTS消息并决定不建立连接,那么发送一条放弃连接消息TP.Conn_Abort;这样让源节点转移到一个新的连接而不必等到超时;
当源节点接收到准备发送消息TP.CM_CTS后,数据传输正式开始;
在传输没有错误的情况下,有两种关闭连接的情形;第一种是广播模式,发送给全局目标地址,第二种是连接模式,发送给一个指定目的节点时;在第一种情形下,接收完数据后将没有关闭连接的操作;在第二种情形下,当接收到数据流的最后一个数据包时,目的节点将发送一个消息结束应答TP.CM_EndofMsgACK给源节点;
在进行广播模式传输时,目的节点不允许使用″放弃连接″消息;在进行连接模式传输时,源节点和目的节点在任何时候使用″放弃连接″消息来终止连接;
两方中的任一方发生如下传输故障会导致连接的关闭:
(1).当收到的最后一个数据包后等待下一个数据包的时间间隔大于T1秒;
(2).当一条CTS消息被发送后等待时间大于T2秒;
(3).当发送了一个数据包后等待CTS或者ACK消息的时间大于T3秒;
(4).在CTS消息后等待下一条CTS来保持连接,但等待时间大于T4秒;
上述原因都将会导致关闭连接发生;在实际传输过程中,无论源节点还是目的节点,由于上述原因决定要关闭连接,都发出一条放弃连接消息;
步骤6:当用户节点断开连接时,广播离线信息,并结束相应的线程。
计算机通过本发明可实现基于CAN总线的长帧数据传输,该方法使用方便简洁,具有良好的扩展性和数据处理的实时性,适合于各种军用电子信息系统,特别是车辆电子信息系统中使用。
应当理解的是,上述针对本发明实施例的表述较为详细,并不能因此而认为是对本发明专利保护范围的限制,本发明的专利保护范围应以所附权利要求为准。
Claims (1)
1.一种基于CAN总线长帧数据传输卡实现的长帧数据传输方法,其特征在于,所述的方法包括以下步骤:
步骤一:将长帧传输卡通过PCI总线连接到计算机上,安装驱动程序;
步骤二:创建共享内存映射,开辟通信缓冲区;
步骤三:通过调用DLL接口函数进行相应参数的设置;
步骤四:当用户节点连接上CAN总线时,广播在线信息;
步骤五:与在线节点建立连接,创建接收线程和发送线程;用户节点应用程序通过调用接口DLL函数进行数据发送,接口函数将数据写入双端口RAM,DSP芯片中的发送线程从双端口RAM中取出后发送信息,接收线程接收信息,如果收到数据,放入双端口RAM,并通过DLL接口直接通过消息发送给应用程序;
具体实现方法为:
程序启动后,新建接收线程、分发线程、长帧发送线程、长帧接收线程;线程之间通过信号量进行同步;各自的属性为:
接收线程:无限循环,收到数据包存到环形接收队列,然后进入等待;
分发线程:无限循环,判断环形接收队列是否有数据包,依次逐包读取,如为短帧,直接通过接口函数输出;如为长帧首包,开启长帧接收任务;不同源节点开启不同长帧接收任务,支持多个源节点同时长帧传输;
长帧发送线程:无限循环,判断环形发送队列是否有数据包,依次逐包发送,直到发送完毕进入等待状态;
长帧接收线程:单任务循环,当分发任务收到发送请求帧后启动,分包数据全部接收完毕后,将收的数据打包,放入数据共享区,通过消息发送到应用程序;如接收过程中发生超时,发送中断命令,自动退出;
当源节点传送一条请求发送消息TP.CM_RTS给目的节点时,连接就开始了;请求发送消息包含了整个消息的字节大小,要传送的独立消息的数目,以及源节点、目的节点编号;
在目的节点接收到请求发送消息后,有两种处理方式,接收连接或者拒绝连接;默认接收连接,目的节点发送一条准备发送消息TP.CM_CTS;准备发送消息包含了目的节点可接收数据包的数目,和将要接收的第一个数据包的序列编号;在刚刚开放连接的时候,数据包的序列编号是1;
如果目的节点当前存储空间不够或数据无效则拒绝连接,目的节点将发送一条放弃连接消息TP.Conn_Abort;
当源节点接收到来自目的节点的准备发送消息TP.CM_CTS,那么认为已经与目的节点建立了连接;当目的节点已经成功传送了准备发送消息TP.CM_CTS作为对一个TP.CM_RTS消息的响应,那么认为已经与源节点建立了连接;否则需要发送连接放弃消息来关闭连接;
如果目的节点收到RTS消息并决定不建立连接,那么发送一条放弃连接消息TP.Conn_Abort;这样让源节点转移到一个新的连接而不必等到超时;
当源节点接收到准备发送消息TP.CM_CTS后,数据传输正式开始;
在传输没有错误的情况下,有两种关闭连接的情形;第一种是广播模式,发送给全局目标地址,第二种是连接模式,发送给一个指定目的节点时;在第一种情形下,接收完数据后将没有关闭连接的操作;在第二种情形下,当接收到数据流的最后一个数据包时,目的节点将发送一个消息结束应答TP.CM_EndofMsgACK给源节点;
在进行广播模式传输时,目的节点不允许使用″放弃连接″消息;在进行连接模式传输时,源节点和目的节点在任何时候使用″放弃连接″消息来终止连接;
两方中的任一方发生如下传输故障会导致连接的关闭:
(1).当收到的最后一个数据包后等待下一个数据包的时间间隔大于T1秒;
(2).当一条CTS消息被发送后等待时间大于T2秒;
(3).当发送了一个数据包后等待CTS或者ACK消息的时间大于T3秒;
(4).在CTS消息后等待下一条CTS来保持连接,但等待时间大于T4秒;
上述原因都将会导致关闭连接发生;在实际传输过程中,无论源节点还是目的节点,由于上述原因决定要关闭连接,都发出一条放弃连接消息;
步骤六:当用户节点断开连接时,广播离线信息,并结束相应的线程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110057979.2A CN102681969B (zh) | 2011-03-11 | 2011-03-11 | 基于can总线的长帧数据传输方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110057979.2A CN102681969B (zh) | 2011-03-11 | 2011-03-11 | 基于can总线的长帧数据传输方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102681969A CN102681969A (zh) | 2012-09-19 |
CN102681969B true CN102681969B (zh) | 2015-11-25 |
Family
ID=46813922
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110057979.2A Expired - Fee Related CN102681969B (zh) | 2011-03-11 | 2011-03-11 | 基于can总线的长帧数据传输方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102681969B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106850660B (zh) * | 2017-02-28 | 2020-05-19 | 大连理工大学 | 一种基于SocketCAN的SAE J1939传输协议的设计方法 |
CN111858444A (zh) * | 2020-07-09 | 2020-10-30 | 天津津航计算技术研究所 | Windows系统下基于双口RAM通信的CAN总线驱动设计方法 |
CN111858446A (zh) * | 2020-07-09 | 2020-10-30 | 天津津航计算技术研究所 | Windows系统下基于双口RAM通信的CAN总线通信模块设计方法 |
CN111858445A (zh) * | 2020-07-09 | 2020-10-30 | 天津津航计算技术研究所 | vxworks系统下基于双口RAM通信的CAN总线驱动设计方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1567903A (zh) * | 2003-07-07 | 2005-01-19 | 浙江中控技术股份有限公司 | 基于现场总线的以太网网关及其实现方法 |
CN1838011A (zh) * | 2006-04-04 | 2006-09-27 | 西安电子科技大学 | 基于can总线的分布式控制网络智能管理装置及管理方法 |
CN101398687A (zh) * | 2008-10-10 | 2009-04-01 | 北京科技大学 | 一种小型双足机器人的信息处理平台 |
CN101790017A (zh) * | 2010-01-27 | 2010-07-28 | 哈尔滨工程大学 | 船用气象传真图像接收和处理装置及接收和处理方法 |
CN101825894A (zh) * | 2010-04-30 | 2010-09-08 | 北京航空航天大学 | 一种六氟化硫高压断路器状态智能监测与健康管理系统 |
-
2011
- 2011-03-11 CN CN201110057979.2A patent/CN102681969B/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1567903A (zh) * | 2003-07-07 | 2005-01-19 | 浙江中控技术股份有限公司 | 基于现场总线的以太网网关及其实现方法 |
CN1838011A (zh) * | 2006-04-04 | 2006-09-27 | 西安电子科技大学 | 基于can总线的分布式控制网络智能管理装置及管理方法 |
CN101398687A (zh) * | 2008-10-10 | 2009-04-01 | 北京科技大学 | 一种小型双足机器人的信息处理平台 |
CN101790017A (zh) * | 2010-01-27 | 2010-07-28 | 哈尔滨工程大学 | 船用气象传真图像接收和处理装置及接收和处理方法 |
CN101825894A (zh) * | 2010-04-30 | 2010-09-08 | 北京航空航天大学 | 一种六氟化硫高压断路器状态智能监测与健康管理系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102681969A (zh) | 2012-09-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101442513B (zh) | 实现多种业务处理功能的方法和多核处理器设备 | |
US20130290548A1 (en) | Home gateway, cloud server, and method for communication therebetween | |
CN110545318B (zh) | 一种依赖于gatt和指示进行适配的数据通信方法及系统 | |
CN110545265B (zh) | 一种依赖于att和指示进行适配的数据通信系统及方法 | |
CN102681969B (zh) | 基于can总线的长帧数据传输方法 | |
US20180262560A1 (en) | Method and system for transmitting communication data | |
WO2015103848A1 (zh) | 一种实现Wifi访问网络的方法、系统及终端 | |
WO2022040847A1 (zh) | 通信数据处理方法及装置 | |
CN102207920B (zh) | 一种bvci总线到ahb总线的转换桥 | |
CN104967570A (zh) | 一种智能北斗路由器 | |
CN104333842B (zh) | 一种基于wifi的智能设备节目资源共享方法及其系统 | |
CN115361704A (zh) | 基于基站mac子层直接传输的c2d通信系统及i/o数据通信方法 | |
CN113609059B (zh) | 一种通信系统及通信方法 | |
US7801097B2 (en) | Setting up of a wireless network by determining and utilizing local topology information | |
CN105512005A (zh) | 控制/远程节点与总线监控节点同步工作的电路及方法 | |
CN114095901A (zh) | 通信数据处理方法及装置 | |
CN209608868U (zh) | 应用于无线通信的数据链路层 | |
CN101617509B (zh) | 用于把数据传送给多个控制装置的方法 | |
CN210274135U (zh) | 一种远程连接系统 | |
CN110809046B (zh) | 一种设备配网方法、装置、电子设备及存储介质 | |
CN114362872A (zh) | 一种基于tsn网络的多网协同边缘智能设备 | |
CN202513948U (zh) | 以太网至profibus-dp的主从式协议转换网关 | |
WO2012019376A1 (zh) | 无线通信终端网络设备功能的实现方法及装置 | |
CN202748787U (zh) | Can总线长帧数据处理卡 | |
CN106953771B (zh) | 一种主从设备的角色变换和管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20151125 Termination date: 20160311 |