新闻中心

EEPW首页>嵌入式系统>设计应用> 基于CAN总线的高压开关柜状态监测单元通讯模块

基于CAN总线的高压开关柜状态监测单元通讯模块

作者: 时间:2012-08-03 来源:网络 收藏


  5通讯模块的软件实现
  软件是通讯模块设计的核心,与一般使用高级语言编写的软件不同的是嵌入式系统的软件要和硬件直接打交道,是对硬件直接操作,因此对硬件要熟练掌握才能编写出实用的代码。
  SJA1000控制器寄存器数量众多,幸运的是许多文章对它们的用法都作了介绍,有的还给出了其具体的代码,笔者只简单介绍一下验收滤波寄存器。使用验收滤波器,可以使监测单元只接收需要的帧,屏蔽不需要的。这里的应用是将验收滤波器配置成双滤波方式,即控制器只接收目的地址与监测单元地址相符的或者与监测单元广播地址相符的帧,从而节约监测单元的资源。
  下面即以监测单元的发送为例,简述通讯模块软件的设计思路。当监测单元有数据发送时(如绝缘数据),可通过下列步骤完成发送的全过程:①将数据按应用层报文的格式进行封装。②应用层报文相对链路层来讲是链路层的数据,在链路层把应用层的报文按照SJA1000的CAN帧的格式进行拆分。CAN每次只能传送8个有效字节,在拆分时按照上文的标识符定义,将报文拆成有序的CAN帧,这样接受的一方就能按照标识符将一系列属于同一应用层报文的帧进行拆封。③把已拆分好的CAN帧按照标识符定义的帧序数发送出去。发送一帧之前需要检查SJA1000控制器状态寄存器(SR)的状态,这包括检查控制器发送状态,接收状态以及发送缓冲器锁定状态,当控制器处于空闲状态(不在发送状态、不在接收状态并且发送缓冲器被释放),就将需发送的帧写入发送缓冲区并启动发送。发送下一帧重复执行以上过程即可。
  接受过程执行与发送过程相反的操作,可以简述为:接受CAN帧;拆封CAN帧为应用层报文;解析报文得到数据。


  6.CAN控制器异常情况的处理
  SJA1000控制器在长期工作中,由于内在及外在的因素不可避免的会产生错误,从而使控制器不能正常工作。为了控制器能够长期正常工作,使控制器从错误中恢复过来。控制器提供了相应的寄存器来进行错误的分析和诊断,这包括接收(发送)错误计数器、错误报警限制寄存器、错误代码捕捉寄存器、仲裁丢失捕捉寄存器以及状态寄存器的几位。同时中断寄存器的几位用来报告产生的错误,由程序对错误进行处理。这些寄存器具体的定义可参阅相关文献。
  在实际应用时主要有两种从错误状态恢复到正常工作状态的方法。
  (1)有错误发生时,在中断服务程序里根据中断寄存器(中断方式,中断使能寄存器除唤醒和接收中断外均打开)的各位的状态,再结合相应的寄存器即可以进行分析和诊断了。例如出现应答通道故障时则会产生总线错误中断,检查错误代码捕捉寄存器,就可知道是产生了应答通道故障。该方法的优点是知道错误具体是什么而采取对应的措施,缺点是编程比较麻烦,对协议和控制器都要十分熟悉。
  (2)控制器一有错误发生就重新初始化(中断方式,中断使能寄存器除唤醒和接收中断外均打开),让控制器重新正常运行,该方法优点是简单易行,缺点是没有考虑到错误发生的原因,不能作进一步的分析和诊断。
  为了简化设计,笔者采取的是后一种方案。

  7.结语
  (1)CAN作为一种有效支持分布式通信的现场总线,具有高的可靠性和实时性,同时又有简单、易用以及性价比高的优点,因此选择CAN作为监测单元通讯模块的解决方案。
  (2)在研究分析CAN协议的基础上,根据实际情况对CAN的标识符作了定义,且制定了应用层的协议,并给出了软硬件的设计思路以及异常情况的处理方法。
  (3)在实验室的调试运行表明,采用作为监测单元通讯模块的解决方案取得了良好的效果。


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭