新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于DeviceNet总线的从设备通迅适配器设计

基于DeviceNet总线的从设备通迅适配器设计

作者: 时间:2012-11-29 来源:网络 收藏


send (Sbuffer,6);
}
}
break;
case 0x85;
{if (buffer[6]= =0x02)
Sbuffer[0]=0x85;
Sbuffer[1]=0x64;
Sbuffer[2]=0x8e;
Sbuffer[3]=0x00;
Sbuffer[4]=0x00;
send (Sbuffer,6);
}
else
{Sbuffer[0]=0x85;
Sbuffer[1]=0x64;
Sbuffer[2]=0x00;
Sbuffer[3]=0x8e;
Sbuffer[4]=0x01;
Sbuffer[5]=0x00;
send (Sbuffer,6);
}
}
break;
case 0x87;
Sbuffer[0]=0x85;
Sbuffer[1]=0x64;
Sbuffer[2]=0x00;
Sbuffer[3]=0x90;
Sbuffer[4]=0x50;
Sbuffer[5]=0x00;
send (Sbuffer,6);
break;
case 0xA0;
Sbuffer[0]=0x78;
Sbuffer[1]=0xA1;
Sbuffer[2]=0x07;
send (Sbuffer,3);
break;
case 0xA1;
Sbuffer[0]=0x78;
Sbuffer[1]=0xA1;
Sbuffer[2]=0x07;
send (Sbuffer,3);
break;
}
}
void main ()
{
config1 ();
XBYTE[0x4000]=0x22; //operation mode
While (1)
{;}
}

3 DeviceNet通讯适配器的收发中断和时钟中断的设计
  CAN控制器和微处理器的数据交换可以使用中断方式和周期轮询的方式。从响应速度和执行的效率来讲,我们的应用环境使用中断的方式。因此我们必须编写自己的收发中断处理函数,其功能是将CAN控制器缓冲区中的报文拷贝到一个临时的全局缓冲区,并将该缓冲区作为高层协议处理和底层收发处理的一个接口,这样的设计具有良好的可扩展性。如果将来使用其它厂家的CAN控制器,所做的修改也仅仅是改动一些与具体硬件相应的几个底层函数。我们只要定义好互相通讯的接口,就可以将软件和硬件进行分离,在团队开发的环境中可以加快工作的进度和效率。
  另外,通讯协议中经常要用到一些定时的功能,因而我们也需要在底层编写一个定时中断处理程序,该函数使用一个硬件定时器,以一个最小的计时单位周期性的为上层应用提供计时状态。


图2 SJA1000的初始化流程

4 DeviceNet通讯适配器的报文收发程序和分段服务
  这里所讲的报文收发协议对不同的通讯协议有不同的定义。另外,CAN的数据长度不能超过8个字节,如何支持大于8个字节的报文要涉及到分段服务。分段协议信息由一个字节组成,其中高2位表示分段的类型,低6位作为分段的计数器,用来标识每个数据包,其计算方式是:fragmentCount=(fragmentcount+1) mod 64。下面是具体的分段的类型:


  因此,在程序的设计中应当加入对分段服务协议的支持。
  对于发送报文的处理与接收的过程是一个逆向过程。需要注意的是编写程序的时候要严格按照DeviceNet协议规范的定义,否则将产生不可预测的错误,为将来的协议一致性测试和底层调试都带来许多麻烦。

5 DeviceNet通讯适配器的主程序的设计
  软件由头文件、初始化程序、功能子程序和主程序组成。
软件的组成结构提供了硬件和软件升级的方便。软件中将与主处理器、CAN控制器等硬件接口的部分比较独立地设计,而主程序和功能子程序主要集中于协议的完成。对将来的硬件改型和可能的协议修改都提供了较大的方便。
  软件以Franklin C51语言编写,通过伟福E51L单片机开发装置进行调试。
软件结构图如下:



5.1 软件功能分解
  软件由头文件、初始化程序、功能子程序和主程序组成。其功能分解如下:
  头文件:定义所有的参数、类结构和函数,定义要使用的硬件资源(如定时器和寄存器等)变量名称;
初始化程序:完成对主处理器的内存及硬件(如堆栈、定时器等)初试化,完成CAN控制器的初始化。
功能子程序:详见各模块介绍。
主程序组成:主控制流程。

5.2 软件各模块功能详述
  模块按以下四个部分来介绍:头文件,初始化程序,功能子程序,主程序
  说明:泵和阀的实现程序非常类似,两者只相差一些参数,故此处以泵的源程序作为例子进行各个程序段的分析和说明。(详见源程序)

5.2.1 头文件
其主要操作为:
包含(include)要使用的其它头文件: reg51.h 51系列寄存器头文件
absacc.h 51系列硬件资源头文件
string.h C语言的字符操作头文件
定义(define)要使用的用户自定义数据类型;定义类(class)ID;定义连接的类型;
定义各实例(instacne)ID和定时器数量;定义全局状态(status)字对应位的内容;
定义全局事件(event)字对应位的内容;定义DeviceNet错误代码和附加错误代码;
定义DeviceNet服务代码;定义分段(fragment)值;定义连接状态;其它附加的定义;
  类结构定义: Identity,DeviceNet,Connection,Message Router,Assembly,Discrete Output,
Analog Input,Analog Output

5.2.2 初始化程序
  其主要操作为:SJA1000初始化;定时器初始化;各结构对象初试化;

5.2.3 功能子程序
  其主要操作为:具体定义在主程序中调用的各子程序;双口RAM中断子程序;定时器中断子程序;

5.2.4 主程序
  当实现所有的功能模块以后,最重要的是如果构造一个有机的主程序模块,将这些零散的模块组织起来,进行系统的初始化工作。另外还要设计一个优化的循环体周期性的执行以对DeviceNet网络上的报文产生动作。
  因为我们实现的是一个从站适配器,一般在轮询的情况下只对主设备的请求报文产生相应的应答,而不会主动发送报文,除了上电时的重复MAC ID例行检测。如何构造循环体是关键,我们这里采用了事件的方式,主循环体周期对网络事件的不同可能的状态产生动作。程序中定义不同的网络事件,主程序循环体对代表这些事件的标志位不停的轮询,当某个标志位因网络事件的触发而被置1的时候,主程序就进入相应的子程序进行对应事件的操作。操作完毕之后清楚标志位,退回到主程序循环中继续轮询所有的事件标志位。
其主要操作为:设置数据缓冲区;定义全局变量;开时钟;开中断;进行主循环;

结束语
  由本通讯适配器已于2002年3月13日在日本京都ASTEM RI通过ODVA一致性测试,其FCS已经成功的应用于2001年第2届北京中国国际现场总线技术交流会暨展览会,第3届上海国际工业博览会,吴忠仪表智能调节阀,东莞垃圾焚烧发电厂中的给水控制系统中。由于采用现场总线技术,取得了显著的经济效益。
晶振相关文章:晶振原理
上拉电阻相关文章:上拉电阻原理

上一页 1 2 3 4 下一页

关键词: DeviceNet总线 从设备 通迅适配器

评论


相关推荐

技术专区

关闭