基于以太网和CAN总线的楼宇自动化系统设计
rioHighRdy(最高优先级任务优先级)的值,即把最高就绪任务优先级设置为新的当前任务优先级。
3)将原任务TCB的第一个成员(指向栈顶的指针*OSTCB-StkPtr)的值修改为当前SP寄存器的值,以便再次返回。
4)获取最高优先级的任务控制块中第一个成员(指向堆栈栈顶指针*OSTCBStkPtr)的值并将其保存到SP寄存器中。
5)将OSTCBCur的值修改为新就绪最高优先级任务的任务控制块地址。
6)将新任务的PC地址、通用寄存器数据、CPU状态出栈,开始执行新的任务。
因为任务切换是将当前任务的基本信息保存起来(入任务栈),并加载新任务的基本信息(出栈),而这些信息很大一部分都被存储在CPU的寄存器中,因此根据处理器的不同,此函数在实现上略有差异,一般都采用汇编语言实现。
3.2 编写设备驱动程序
设备驱动程序主要包括以太网和CAN软件包,以太网驱动主要是初始化LPC2478内部以太网模块的一些重要的寄存器如MAC配置寄存器、MAC地址寄存器、命令寄存器、状态寄存器、中断状态寄存器等等。以太网模块内部采用DMA方式读取数据,分别使用接收、发送描述符数组来表示接收和发送的数据块。以太网模块发送和接受数据的流程如图2所示。
CAN的初始化包括初始化时钟分频寄存器,同时选择能支持扩展帧的PeliCAN模式,设置接收中断,采用中断来接收数据,设置总线时序寄存器、输出控制寄存器等。初始化CAN流程图如图3所示。
3.3 嵌入式TCP/IP协议栈的实现方法
嵌入式TCP/IP协议栈同样由套接字来实现,主要包括IP、ARP、ICMP、TCP、UDP协议等等。TCP/IP模型结构分为4层,由上到下分别是:应用层、运输层、网络层、物理和数据链路层。数据从应用层发出,经过套接字封装,传输至数据链路层,交由以太网发送模块处理。同样的,以太网接收模块收到的数据,经过解包,最终交由应用层接收。考虑到系统实时性,我们采用UDP传输协议进行数据和命令的传送。编写UDP通信的任务时分为服务器方式和客户机方式两种,服务器方式是先接收到数据再进行处理,而客户机则是先发生数据,然后等待回应处理。UDP进程的流程如图4所示。
数据报的接收是通过一个任务来进行的。该任务优先级较高,可以通过时问片来触发,也可以通过中断来触发。Rec_Packet()函数是底层的驱动程序函数,它在接收时调用了Rec_Ethemet_Packed()函数进行以太网层处理,而Rec_Ethemet_Packed()函数又调用了IP_PROCESS()函数。IP层的处理由IP_PROESS()函数执行,它将UDP报通过消息队列交给UDP处理任务去执行。
数据报的发送与数据报的接收是一个相反的过程,是由上层协议函数调用下层协议函数来进行的。上层UDP处理函数或Socket接口函数都是通过调用Send_Ip_Frame()函数来发送IP报的,而Send_Ip_Frame()函数则调用Send_Ip_To_LLC()函数来处理IP地址对应MAC地址的事情,然后Send_Ip_To_LLC()再调用Send_Ethemet_Frame()函数,把对应的MAC地址写入发送区,最后调用驱动程序的发送函数Send_Packet()。
4 关键部位实验验证
设备节点样机如图5所示,它带有一个DS18B20数字温度传感器,实时将温度数据通过CAN传输至上位机,再通过局域网传至主控计算机;具有多路I/O接口(可外接继电器),能接收上位机命令改变I/O口的输出。上位机使用ARM核心板外扩通信接口作为实验板,主控机使用路由器接入,控制界面由VC++编写。实验时将IP地址设为一固定的私有IP,网关IP设为内置交换机的TP-LINK路由器IP,设置好路由器工作方式后即可运行。以温度采集与继电器控制为例,验证了主控机对设备节点的监控和管理功能,表明该方案技术切实可行。
5 结束语
提出了一种实时性较高、实用性较强的楼宇自动化控制系统解决方案,并对关键技术进行了验证。系统技术成熟,易于维护和扩展,可以将建筑内各种机电设备的信息进行分析、归类、处理、判断,对各系统设备进行集中监控和管理,使各下属设备协调有序的工作,并及时处理故障。
- 以太网接入技术简介(01-09)
- 以太网技术的发展(01-24)
- 基于PC104总线的嵌入式以太网卡设计(01-31)
- 下一代SDH技术发展趋势及应用分析(中)(01-05)
- PLC(电力线通信)技术简介(01-08)
- 电信接入网设备的安全和过压防护测试(01-08)