基于CAN总线的modbus通信设计.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于 CAN总线的 modbus通信设计 基于 CAN 总线的 modbus 通信设计 摘要 :CAN 总线就是由德国 BOSCH 公司开发了的 ,其主要用于汽车计算机控 制系统 ,而在工业控制领域较少适用 ,在工业领域用的最多的就是 RS485 总线。 CAN 总线较 RS485 总线具有网络各节点之间的数据通信实时性强 ,开发周期 短 ,已形成国际标准的现场总线等优点。 因此 CAN 总线就是比较有前途的现 场总线之一 , 在工业控制领域代替 RS485 就是有可能的。 为了能简单地应用 CAN 总线代替 RS485 总线 ,如果采用比如 CANopen 等协议使得设备变得复杂化 ,那么有没有简单点的协议?很多做过工业设备 的工程师都熟悉 MODBUS 协议 , 在 RS485 总线上跑的最多的协议就就是 MODBUS, 如果我们在 CAN 总线上运行 MODBUS 协议 ,那么做过 RS485 的 工程师就能很快地转移过来 ,减少了开发难度。 所以本文就以 CAN 总线上跑 MODBUS 协议为目的对数据网络层协议进行设计。 概念 :MODBUS 有主从概念 ,CAN 总线支持多主 ,在这里我们把主机叫做客户端 , 从机叫做服务器。在 CAN 总线上采用客户端服务器的概念。 在进行协议介绍前先对 CAN MODBUS 进行简单的介绍。 MODBUS: 阅读过 MODBUS 协议的人都知道 modbus 有 ASCII 与 RTU 模式 ,其中 RTU 模式用的较多 ,一个数据包在网络上传输我们必须知道包的 开始与结束 , 在 RTU 模式中数据包就是以至少 3、 5 个字符的静默时间开始 与结束的 ,如果信息结束前存在超过 1、 5 个字符以上的间隔时间则出错。 为了检测这些时间间隔 ,在程序上将变得很被动。 ASCII 虽然有专用的开始 结束标志符 , 但就是 ASCII 需要把一个字节数据传换为两个字符发送所以其 效率低。所以还就是得采用 RTU 模式 , 但得根据 CAN 总线的特点解决数据 包开始结束标志的定义。 CAN 总线 :CAN 总线的数据传输就是以帧为单位的 ,一个帧包含标识符、 数据段 CRC 等 ,标识符表示该帧的发送优先级 ,数据段包含实际的数据 ,数据 长度从 1 到 8 字节 ,CRC 对该帧进行校验 , 因为帧中包含了数据校验功能 ,所 以在 CAN 上跑 modbus 就不需要再对数据进行 CRC 校验。在这里我们瞧到 CAN 总线就是有优先级这个概念 ,但就是没有出现像 modbus 这样有地址的 概念 ,CAN 总线上标识符段表示的就是该帧的优先级 ,它面向的就是数据 ,而 modbus 面向的就是设备 ,每个数据包中都有地址 ,如果我们把地址放在 CAN 帧的数据段中那么所有设备都必须接收每一帧 ,然后对数据进行解析 , 如果 网络负载比较大的就是时候 ,这对设备不利。 CAN 控制器一般都能对特定的 标识符段进行过滤 ,那么我们为什么不能把标识符段作为设备的地址 , 然后 设备对特定的标识符进行过滤 ,这样就减少了设备的负担。但就是如果标识 符段作为目的地址 ,那么 CAN 总线上就不能有两个主机 ,应为 CAN 总线规定 不能有两个相同标识符的帧同时发送。既然标识符符不能作为目的地址 ,那 么就实现不了设备对数据的过滤。 我的解决办法就是把帧的标识符段分为 两部分 ,一部分为发送方地址 ,另一部分为接收方地址 , 其中接收方地址在标 识符的高端。 这样我们就能通过表标识符段知道这帧数据就是谁发给谁的 , 对于接收方它通过设置过滤器只接收表识符高端数据为自己地址的帧 ,这样 就解决了 CAN 总线中地址的概念。 这个地址还表示的设备的优先级 ,地址越 小优先级就越高 ,接收方地址与发送方地址就决定这帧的发送优先级。标识 符段分为标准帧与扩展帧 ,标准帧的标识符为 11bit, 扩展帧的标识符为 29bit, 基于  CAN总线的  modbus通信设计 按照接收方地址加发送方地址的分配方法标准帧的地址范围为 32 个地址 ,如果用扩展帧的来分配地址范围为 0~16383, 共计 标识符  0~31, 共计 16384 个地址。 接收方地址  发送方地址 因为一帧最多能发送 8 字节数据 ,因此要发送超过 8 字节的数据就必须使 用多帧 ,为了能适应多任务环境 , 我们在把帧的数据段的前两自己数据用作 特殊用途 :第一字节表示帧数据的 ID, 其 bit7 为 1:表示服务器返回的数据帧 , 0:表示客户端请求的数据帧 ;第二字节表示着一帧在这个数据包中的相对为位置 ,其 bit7 为 1: 表示这就是最

文档评论(0)

zsmfjh + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档