能不能详细介绍下can总线与上位机通信的方式方法,好的话的会再加分,急用 谢谢!

来自:贴吧网友   更新日期:2024-05-17
还是不太理解CAN总线的工作过程,能不能通俗的讲讲?是上位机编程来控制总线工作的吗?控制器接收器发送器

通俗点讲:
逛超市听过寻人广播没?这个应该可以用来说明你的问题。
广播员=上位机
被寻的人=下位机
CAN总线的工作过程相当于这个寻人的过程,首先商场客服按照一定的格式组织打包数据(要说的话),“哪位顾客丢失了钥匙请到服务台认领。”,于是接收到信息的所有顾客,如发现自己丢了钥匙则到服务台认领。
这里,所有的顾客相当于CAN总线中的所有节点,而组织语言的过程相当于CAN总线的通讯协议,需要符合一定的要求(如使用普通话、把需要传达的信息传递清楚),否则其他节点听不懂,而广播那一套系统你可以理解为发送器,所有顾客的听力系统你可以理解为接收器。而单片机就是在与这整个过程中相关的某位管理人员,如单片机的管理内容越多,则对应管理人员的权限越大(比如说权限高的管理人员可以直接将所有节点从总线断开,即将顾客赶出商场)。
这么说能理解吗?

http://www.51c51.com/
CAN全称为Controller Area Network,即控制器局域网,由德国Bosch公司最先提出,是国际上应用最广泛的现场总线之一。最初CAN 被设计作为汽车环境中的通讯,在汽车电子控制装置之间交换信息形成汽车电子控制网络。由于其卓越的性能、极高的可靠性和低廉的价格现已广泛应用于工业现场控制、医疗仪器等众多领域[1][2]。

CAN协议是建立在OSI 7层开放互连参考模型基础之上的。但CAN协议只定义了模型的最下面两层:数据链路层和物理层,仅保证了节点间无差错的数据传输。CAN的应用层协议必须由CAN 用户自行定义,或采用一些国际组织制订的标准协议。应用最为广泛的是DeviceNet和CANopen,分别广泛应用于过程控制和机电控制领域。但此类协议一般结构比较复杂,更适合复杂大型系统的应用。笔者在研制一种基于CAN总线的分布式高频开关电源充电机系统的过程中设计了一种适合于小型控制系统的CAN总线高层通信协议。

2 CAN的特点[3]
CAN 是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率、抗电磁干扰性,而且要能够检测出总线的任何错误。当信号传输距离达10km时,CAN仍可提供高达50kbps 的数据传输速率。
CAN具有十分优越的特点:
(1) 较低的成本与极高的总线利用率;
(2) 数据传输距离可长达10km,传输速率可高达1Mbps[7];
(3) 可靠的错误处理和检错机制,发送的信息遭到破坏后可自动重发;
(4) 节点在错误严重的情况下具有自动退出总线的功能;
(5) 报文不包含源地址或目标地址,仅用标志符来指示功能信息和优先级信息。

3 CAN的技术规范
(1) 帧类型
在CAN总线中,有四种不同的帧类型[4][5]:
·数据帧(Data Frame) 数据帧带有应用数据;
·远程帧(Remote Frame) 通过发送远程帧可以向网络请求数据,启动其他资源节点传送他们各自的数据,远程帧包含6个不同的位域:帧起始、仲裁域、控制域、CRC域、应答域、帧结尾。仲裁域中的RTR位的隐极性表示为远程帧;
·错误帧(Error Frame)错误帧能够报告每个节点的出错,由两个不同的域组成,第一个域是不同站提供的错误标志的叠加,第二个域是错误界定符;
·过载帧(Overload Frame)如果节点的接收尚未准备好就会传送过载帧,由两个不同的域组成,第一个域是过载标志,第二个域是过载界定符。
(2) 数据帧结构
数据帧由以下7个不同的位域(Bit Field)组成:帧起始、仲裁域、控制域、数据域、CRC域、应答域、帧结尾。其标准帧结构如表1所示:

表1 数据帧的结构[4]


·帧起始:标志帧的开始,它由单个显性位构成,在总线空闲时发送,在总线上产生同步作用。
·仲裁域:由11位标识符(ID10-ID0)和远程发送请求位(RTR)组成,RTR位为显性表示该帧为数据帧,隐性表示该帧为远程帧;标识符由高至低按次序发送,且前7位 (ID10-ID4)不能全为显性位。标识符ID用来描述数据的含义而不用于通信寻址,CAN总线的帧是没有寻址功能的。标识符还用于决定报文的优先权,ID值越低优先权越高,在竞争总线时,优先权高的报文优先发送,优先权低报文退出总线竞争。CAN总线竞争的算法效率很高,是一种非破坏性竞争。
·控制域:为数据长度码 (DLC3-DLC0),表示数据域中数据的字节数,不得超过8。
·数据域:由被发送数据组成,数目与控制域中设定的字节数相等,第一个字节的最高位首先被发送。其长度在标准帧中不超过8个字节。
·CRC域:包括CRC(循环冗余码校验)序列(15位)和CRC界定符(1个隐性位),用于帧校验。
l应答域:由应答间隙和应答界定符组成,共两位;发送站发送两个隐性位,接收站在应答间隙中发送显性位。应答界定符必须是隐性位。
·帧结束:由7位隐性位组成。

4 自订CAN高层协议
CAN的高层协议也可理解为应用层协议,是一种在现有的底层协议(物理层和数据链路层)之上实现的协议。由于充电机系统的结构比较简单,网络规模也比较小。因此我们自行制订了一种简单而有效的高层通信协议。

技术规范CAN2.0A规定标准的数据帧有11位标识符,用户可以自行规定其含义,将所需要的信息包含在内。在充电机系统中,每一个节点都有一个唯一的地址,地址码和模块一一对应,通过拨码开关设定,总线上数据的传送也是根据地址进行的。由于本系统规模较小,节点数少于32个,因此为每个模块分配一个5位的地址码,同一系统中地址码不得重复,系统初始化时由外部引脚读入。将标识符ID9-ID5定义为源地址,ID4-ID0定义为目的地址,本协议中从模块的目的地址全填0,表示数据是广播数据,所有节点都可接收,主模块中目的地址根据要进行通信目的模块的地址确定。本通信协议的数据帧格式详见表2。


表2 数据帧格式



理论上源地址和目的地址的范围都是0~31,但由于CAN协议中规定标识符前7位不能全为显性位,所以源地址不能为31,这时实际节点只有31个(0~30)。因此每个系统所含的模块不超过31个。所以源地址和目的地址的范围缩减到0~30。同时上位监控机也要占用一个地址,因此系统中的电源模块不超过30个,设计时根据节点的优先权高低从小到大分配节点地址。ID10位定义为主模块识别码,该位主模块为隐性位,从模块为显性位,以保证主模块通信优先。模块的地址码决定发送数据的优先级。主模块向总线发送的数据有两种:一种是目的地址全部填0的广播数据;另一种是包含特定目的地址的非广播数据。

协议中一帧数据最多能传送8个字节,对于充电机控制系统来说已经足够用了,本系统只用到其中的前5个字节,其余3个节字可用于以后的扩展使用,因此未定义多帧传输方式。

从模块以广播形式向总线发送数据,同时回收自己发送的数据,若检测到所发送与所收到的数据不符,则立即重新发送上一帧数据。从模块发送信息的顺序由主模块的发出的指令决定,以免在总线通信繁忙时优先级较低的模块始终得不到总线通信权。指令的发送顺序按照各从模块的地址顺序进行,即地址较低的从模块首先获得指令,得以发送自己的地址码和电流、温度采样值。如发生冲突,则由CAN控制器自动根据模块的优先级调整发送顺序,在CAN的底层协议中有完善的优先级仲裁算法,因此应用层协议不必考虑此类问题。

对于每个模块,上电1s后若未收到任何通信信息,则按计算延时发送自身的地址码和温度电流采样值。延时时间的计算为[6]:
tdelay=T×ADD
其中:tdelay-为延时发送时间;
T-为单位延时时间常数,该值根据通信速率定义;可以取1个位周期,在波特率为100kHz时为10μs;
ADD-为模块地址编码。

主模块是ID10=0的模块,因此具有最高的优先级。上电后主模块首先向总线广播发送自身的地址码和温度电流采样值,然后即按顺序向从机发送指令,等待从机的回答。主机1秒钟后若未收到任何通信信息则认为该模块出错,发出报警。同样从机1s后若未收到主机任何通信信息则认为主机出错,按照源地址优先级由其余模块中地址最低的模块充当主模块,并将其ID10由1改为0,以获得最高通信优先权。

各模块检测到自身故障时,将切断输出,退出通信,并向上位机报警,同时发出声光报警。

5 结束语
本文中所介绍的CAN高层通信协议,结构简单、使用灵活、可靠性极高,实现也比较容易。很适合在节点数不多、通信可靠性要求高、控制结构较简单的小型控制系统中应用,具有一定的实用价值

CAN与PC 直接是不能通信的,

can要与pc数据交换需要用转换器,常见的有can-232或can-usb

基于can-232的,我设计过,usb的我还没有做过,其实很简单,如果自己做的比较费劲,可以买一个转换器,估计也不是很贵。

自己做的话给你一些思路:
1、可能你需要这个是做采集用的,你先做好基于单片机的采集电路及程序,
2、can转232电路比较成熟,版本大都一个样,mcu+sja1000+82c250
3、转换程序,从网上买或搜索一些,搜索的大都不能用。

can通信仅仅是一个传输介质,不是很高深的东西

OK

CAN总线是一种多主的总线,你可以理解为全双工方式工作(实际上不是),在上层看来与232没有什么不同。

通俗点讲:
逛超市听过寻人广播没?这个应该可以用来说明你的问题。
广播员=上位机
被寻的人=下位机
CAN总线的工作过程相当于这个寻人的过程,首先商场客服按照一定的格式组织打包数据(要说的话),“哪位顾客丢失了钥匙请到服务台认领。”,于是接收到信息的所有顾客,如发现自己丢了钥匙则到服务台认领。
这里,所有的顾客相当于CAN总线中的所有节点,而组织语言的过程相当于CAN总线的通讯协议,需要符合一定的要求(如使用普通话、把需要传达的信息传递清楚),否则其他节点听不懂,而广播那一套系统你可以理解为发送器,所有顾客的听力系统你可以理解为接收器。而单片机就是在与这整个过程中相关的某位管理人员,如单片机的管理内容越多,则对应管理人员的权限越大(比如说权限高的管理人员可以直接将所有节点从总线断开,即将顾客赶出商场)。
这么说能理解吗?

http://www.51c51.com/
CAN全称为Controller Area Network,即控制器局域网,由德国Bosch公司最先提出,是国际上应用最广泛的现场总线之一。最初CAN 被设计作为汽车环境中的通讯,在汽车电子控制装置之间交换信息形成汽车电子控制网络。由于其卓越的性能、极高的可靠性和低廉的价格现已广泛应用于工业现场控制、医疗仪器等众多领域[1][2]。

CAN协议是建立在OSI 7层开放互连参考模型基础之上的。但CAN协议只定义了模型的最下面两层:数据链路层和物理层,仅保证了节点间无差错的数据传输。CAN的应用层协议必须由CAN 用户自行定义,或采用一些国际组织制订的标准协议。应用最为广泛的是DeviceNet和CANopen,分别广泛应用于过程控制和机电控制领域。但此类协议一般结构比较复杂,更适合复杂大型系统的应用。笔者在研制一种基于CAN总线的分布式高频开关电源充电机系统的过程中设计了一种适合于小型控制系统的CAN总线高层通信协议。

2 CAN的特点[3]
CAN 是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率、抗电磁干扰性,而且要能够检测出总线的任何错误。当信号传输距离达10km时,CAN仍可提供高达50kbps 的数据传输速率。
CAN具有十分优越的特点:
(1) 较低的成本与极高的总线利用率;
(2) 数据传输距离可长达10km,传输速率可高达1Mbps[7];
(3) 可靠的错误处理和检错机制,发送的信息遭到破坏后可自动重发;
(4) 节点在错误严重的情况下具有自动退出总线的功能;
(5) 报文不包含源地址或目标地址,仅用标志符来指示功能信息和优先级信息。

3 CAN的技术规范
(1) 帧类型
在CAN总线中,有四种不同的帧类型[4][5]:
·数据帧(Data Frame) 数据帧带有应用数据;
·远程帧(Remote Frame) 通过发送远程帧可以向网络请求数据,启动其他资源节点传送他们各自的数据,远程帧包含6个不同的位域:帧起始、仲裁域、控制域、CRC域、应答域、帧结尾。仲裁域中的RTR位的隐极性表示为远程帧;
·错误帧(Error Frame)错误帧能够报告每个节点的出错,由两个不同的域组成,第一个域是不同站提供的错误标志的叠加,第二个域是错误界定符;
·过载帧(Overload Frame)如果节点的接收尚未准备好就会传送过载帧,由两个不同的域组成,第一个域是过载标志,第二个域是过载界定符。
(2) 数据帧结构
数据帧由以下7个不同的位域(Bit Field)组成:帧起始、仲裁域、控制域、数据域、CRC域、应答域、帧结尾。其标准帧结构如表1所示:

表1 数据帧的结构[4]


·帧起始:标志帧的开始,它由单个显性位构成,在总线空闲时发送,在总线上产生同步作用。
·仲裁域:由11位标识符(ID10-ID0)和远程发送请求位(RTR)组成,RTR位为显性表示该帧为数据帧,隐性表示该帧为远程帧;标识符由高至低按次序发送,且前7位 (ID10-ID4)不能全为显性位。标识符ID用来描述数据的含义而不用于通信寻址,CAN总线的帧是没有寻址功能的。标识符还用于决定报文的优先权,ID值越低优先权越高,在竞争总线时,优先权高的报文优先发送,优先权低报文退出总线竞争。CAN总线竞争的算法效率很高,是一种非破坏性竞争。
·控制域:为数据长度码 (DLC3-DLC0),表示数据域中数据的字节数,不得超过8。
·数据域:由被发送数据组成,数目与控制域中设定的字节数相等,第一个字节的最高位首先被发送。其长度在标准帧中不超过8个字节。
·CRC域:包括CRC(循环冗余码校验)序列(15位)和CRC界定符(1个隐性位),用于帧校验。
l应答域:由应答间隙和应答界定符组成,共两位;发送站发送两个隐性位,接收站在应答间隙中发送显性位。应答界定符必须是隐性位。
·帧结束:由7位隐性位组成。

4 自订CAN高层协议
CAN的高层协议也可理解为应用层协议,是一种在现有的底层协议(物理层和数据链路层)之上实现的协议。由于充电机系统的结构比较简单,网络规模也比较小。因此我们自行制订了一种简单而有效的高层通信协议。

技术规范CAN2.0A规定标准的数据帧有11位标识符,用户可以自行规定其含义,将所需要的信息包含在内。在充电机系统中,每一个节点都有一个唯一的地址,地址码和模块一一对应,通过拨码开关设定,总线上数据的传送也是根据地址进行的。由于本系统规模较小,节点数少于32个,因此为每个模块分配一个5位的地址码,同一系统中地址码不得重复,系统初始化时由外部引脚读入。将标识符ID9-ID5定义为源地址,ID4-ID0定义为目的地址,本协议中从模块的目的地址全填0,表示数据是广播数据,所有节点都可接收,主模块中目的地址根据要进行通信目的模块的地址确定。本通信协议的数据帧格式详见表2。


表2 数据帧格式



理论上源地址和目的地址的范围都是0~31,但由于CAN协议中规定标识符前7位不能全为显性位,所以源地址不能为31,这时实际节点只有31个(0~30)。因此每个系统所含的模块不超过31个。所以源地址和目的地址的范围缩减到0~30。同时上位监控机也要占用一个地址,因此系统中的电源模块不超过30个,设计时根据节点的优先权高低从小到大分配节点地址。ID10位定义为主模块识别码,该位主模块为隐性位,从模块为显性位,以保证主模块通信优先。模块的地址码决定发送数据的优先级。主模块向总线发送的数据有两种:一种是目的地址全部填0的广播数据;另一种是包含特定目的地址的非广播数据。

协议中一帧数据最多能传送8个字节,对于充电机控制系统来说已经足够用了,本系统只用到其中的前5个字节,其余3个节字可用于以后的扩展使用,因此未定义多帧传输方式。

从模块以广播形式向总线发送数据,同时回收自己发送的数据,若检测到所发送与所收到的数据不符,则立即重新发送上一帧数据。从模块发送信息的顺序由主模块的发出的指令决定,以免在总线通信繁忙时优先级较低的模块始终得不到总线通信权。指令的发送顺序按照各从模块的地址顺序进行,即地址较低的从模块首先获得指令,得以发送自己的地址码和电流、温度采样值。如发生冲突,则由CAN控制器自动根据模块的优先级调整发送顺序,在CAN的底层协议中有完善的优先级仲裁算法,因此应用层协议不必考虑此类问题。

对于每个模块,上电1s后若未收到任何通信信息,则按计算延时发送自身的地址码和温度电流采样值。延时时间的计算为[6]:
tdelay=T×ADD
其中:tdelay-为延时发送时间;
T-为单位延时时间常数,该值根据通信速率定义;可以取1个位周期,在波特率为100kHz时为10μs;
ADD-为模块地址编码。

主模块是ID10=0的模块,因此具有最高的优先级。上电后主模块首先向总线广播发送自身的地址码和温度电流采样值,然后即按顺序向从机发送指令,等待从机的回答。主机1秒钟后若未收到任何通信信息则认为该模块出错,发出报警。同样从机1s后若未收到主机任何通信信息则认为主机出错,按照源地址优先级由其余模块中地址最低的模块充当主模块,并将其ID10由1改为0,以获得最高通信优先权。

各模块检测到自身故障时,将切断输出,退出通信,并向上位机报警,同时发出声光报警。

5 结束语
本文中所介绍的CAN高层通信协议,结构简单、使用灵活、可靠性极高,实现也比较容易。很适合在节点数不多、通信可靠性要求高、控制结构较简单的小型控制系统中应用,具有一定的实用价值

  • 18014716559谁了解汽车CAN总线方面的知识?求助,作用及性能
  • 骆典答:摘要:控制器局域网(CAN)是一种有效支持分布式控制或实时控制的现场总线,具有高性能和高可靠性的特点;随着现代汽车技术的发展,CAN技术在汽车电子领域应用日益广泛。文章介绍了符合CAN2.0B协议汽车CAN系统设计方案,着重讨论了以微处理器P89C668为核心的CAN总线智能节点的软硬件实现,推荐一款MOTOROLA的多路开关检测芯片MC339...

  • 18014716559能不能详细介绍下can总线与上位机通信的方式方法,好的话的会再加分...
  • 骆典答:CAN与PC 直接是不能通信的,can要与pc数据交换需要用转换器,常见的有can-232或can-usb 基于can-232的,我设计过,usb的我还没有做过,其实很简单,如果自己做的比较费劲,可以买一个转换器,估计也不是很贵。自己做的话给你一些思路:1、可能你需要这个是做采集用的,你先做好基于单片机的采集...

  • 18014716559CAN总线是干什么用的
  • 骆典答:前端总线是CPU和外界交换数据的最主要通道,因此前端总线的数据传输能力对计算机整体性能作用很大,如果没足够快的前端总线,再强的CPU也不能明显提高计算机整体速度。数据传输最大带宽取决于所有同时传输的数据的宽度和传输频率,即数据带宽=(总线频率×数据位宽)÷8。目前PC机上所能达到的前端总线频率有...

  • 18014716559can总线具有高可靠性、安全性和实时性,其具体表现有哪些?can总线在智能...
  • 骆典答:can总线具有高可靠性、安全性和实时性,其具体表现有:差分信号传输方式、无破坏性仲裁技术、短帧格式和CRC校验、多主机和多从机通讯、易于集成,具体如下:1、差分信号传输方式 CAN总线采用差分信号传输方式,这种方式对于抵抗噪声干扰非常有效,从而保证了数据传输的可靠性。在复杂的工业环境中,噪声和干扰...

  • 18014716559can总线接口处有个绿座,上边有三个针,分别是CANH、CANL、GND,都是什 ...
  • 骆典答:这就保证不会在出现在RS-485网络中的现象,即当系统有错误,出现多节点同时向总线发送数据时,导致总线呈现短路,从而损坏某些节点的现象。而且CAN节点在错误严重的情况下具有自动关闭输出功能,以使总线上其他节点的操作不受影响,从而保证不会出现象在网络中,因个别节点出现问题,使得总线处于“死锁”状态...

  • 18014716559谁能简单讲讲CAN总线的通讯原理?
  • 骆典答:CAN总线通信硬件原理图(采用TJA1050T CAN总线驱动器)F040中内置CAN总线协议控制器,只要外接总线驱动芯片和适当的抗干扰电路就可以很方便地建立一个CAN总线智能测控节点。本设计中采用PHILIP公司的TJA1050T CAN总线驱动器。CAN总线通信硬件原理图如图3所示。图中F040 的CAN信号接收引脚RX和发送引脚TX并不...

  • 18014716559工控新人问下,can总线通讯的工作原理到底是什么呢?
  • 骆典答:此刻,网络中别的的节点都处于接受阶段,所有的节点都要先对其进行接受,经过检查来判别该报文是不是是发给自己的。因为CAN总线是面向内容的编址计划,因此简单构建控制体系对其灵敏地进行装备,使其能够在不修正软硬件的情况下向CAN总线中添加新节点。 望采纳。

  • 18014716559汽车上的can总线和lin总线是怎么回事?谁知道说具体点,谢谢
  • 骆典答:在不需要CAN总线的带宽和多功能的场合,比如智能传感器和制动装置之间的通讯使LIN总线可大大节省成本。CAN是的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。

  • 18014716559CAN总线 上位机
  • 骆典答:CAN总线通信,不是你想像的那么简单,如果只用两条线就能实现,还要SJA1000和PCA89C250吗?同样的道理,上位机也需要SJA1000和PCA89C250做CAN接口,有两种解决方案:一是在电脑上安一个CAN卡,需要买的,由CAN卡接出两条线CANH,CANL,与下位机实现通信,但这种方案不太可靠,那个CAN卡容易出问题,...

  • 18014716559我想问下can总线的传输原理是怎样的呢?
  • 骆典答:感谢题主的邀请,我来说下我的看法:笔者也在百度里看过很多这方面的问题,但结果都是答非所问,说了一大堆CAN总线的百科,并没有说CAN总线的传输原理,下面,我就依照我的知识解答下这个问题:CAN总线是一种主要应用在汽车通讯或者是工业生产控制的通讯总线,总之,它是要传达信息的。不过,不管是...

    有友圈,时尚产品用品的交流,为健康绿色生活提供参考

    Copyright© 有友圈 2024