摘要:提出了一种使用以太网技术和CAN技术实现楼宇自动化的方案,并给出了软硬件的具体实现办法。该方案由主控计算机、以太网通讯节点以及现场CAN节点构成一个分层网络控制系统,其中以太网节点由路由器和嵌入了TCP/IP协议栈的嵌入式系统构成,现场CAN节点由单片机、AD/DA转换模块、CAN模块、传感器及执行机构组成。系统具有容错性好、实时性高,管理方便等优势,可实现智能遥控,故障发现,集中管理等功能。
关键词:以太网;
CAN总线;楼宇自动化;控制系统
随着现代化城市建设的发展,出现了越来越多的高层建筑,如何统一管理和监控建筑内公用的机电设备,成为当今楼宇自动化研究的热点方向之一。以“分散控制,集中管理”为基本思想,设计了一种基于以太网和CAN总线的楼宇自动化控制系统。采用分层管理和控制,与传统控制结构相比,每个现场设备节点都具有通信和控制能力,各自可以独立控制而不依赖于主控计算机,同时也具有简单的故障自动修复功能,因而只要控制规律确定以后,平时主控机只需要监视设备节点既可,这样就提高了整个系统的自动化水平。所选的以太网和CAN总线的组合,相比其他总线,软硬件技术成熟、安全可靠、传输速度快且成本低廉、易于扩展和维护。
1、网络结构设计
系统结构如图1所示。系统设计两层网络,第1层是以太网,由路由器和交换机组成,负责连接主控机和各个区域的上位机,各上位机内嵌简单的TCP/IP协议栈,通过以太网将其下的设备节点的状态实时的反馈到主控机中,也可以接受主控机发送出的控制指令。以太网提供了冗余网络结构,主控机的位置可以随时移动,通过新的路由器接入网络即可。第2层是CAN网络,由CAN控制器和收发器组成,负责连接设备节点,将采集到的数据传送至上位机,并接收上位机的命令消息。由于上位机实际上起到了一个网关的作用,因此两层网络结构扩大了通信的带宽,减轻了总线的负担。再加上CAN*的非破坏性总线仲裁技术,即使在网络负重很大的情况下,也不会出现网络瘫痪情况。
2、硬件方案
上位机以NXPLPC2478为主芯片,由电源稳压模块、以太网收发器,隔离变压器、CAN收发器等组成。LPC2478以ARM7为内核,它包括1个10/100以太网媒体访问控制器(MAC)、1个带4kB终端RAM的USB全速设备/主机/OTG控制器、4个UART、两路CAN通道、1个SPI接口、2个同步串行端口、3个I2C接口和1个I2S接口。同时还带有1个4MHz的片内振荡器、98kBRAM、以及一个外部存储器控制器来支持上述的各种串行通信接口。电源稳压模块将输入电源电压滤波并稳定在3.3V左右,可以防止电压瞬时的下降导致的程序跑飞。CAN收发器采用PCA82C250,以太网接口用常见的的RJ45型网线接口。
设备节点使用STC89C52单片机作为微控制器,外扩SJA1000为CAN控制器,为便于调试,扩展电平转换芯片MAX232作为备用调试通道。根据不同需要,还要连接不同的传感器和其他执行机构,比如中央空调系统,可连接DS18B20温度传感器将温度采集并以数字量直接传送给STC89C52,STC89C52则按预先设置好的方案,控制压缩机工作。必要时可以由主控机发送控制命令,修改预先设置的方案参数。
将上位机的网口连接至交换机网口,路由器的LAN口也和交换器连接,路由器的WAN口连接进入楼宇局域网。
3、软件架构
软件由主控机人机接口界面、上位机软件、设备节点软件组成。上位机软件包括嵌入式TCP/IP协议簇、以太网收发软件包、CAN收发软件包等,设备节点软件包括CAN模块、数据采集分析模块等组成。
3.1移植μC/OS-Ⅱ实时操作系统的方法
上位机既要和主控机通信,又要负责管理下属的设备节点,负载较大。移植μC/OSⅡ操作系统可以使上位机具有多任务运行的功能。μC/OS-Ⅱ是一个完整的,可移植、固化、裁剪的占先式实时多任务内核。它包含了任务调度、任务管理、时间管理、内存管理和任务间的通信和同步等基本功能。μC/OS-Ⅱ采用的是可剥夺型实时多任务内核,可剥夺型的实时内核在任何时候都运行就绪了的zui高优先级的任务。
在ARM下移植μC/OS-Ⅱ操作系统主要是修改μC/OS-Ⅱ中一部分与CPU相关的汇编代码,这里主要是任务上下文的切换代码。
任务切换发生在任务调度的时候,μC/OS-Ⅱ下任务调度的时机主要有以下几种情况:1)高优先级的任务因为需要某种临界资源,主动请求挂起,让出处理器,此时将调度就绪状态的zui高优先级任务并执行。2)高优先级的任务因为时钟节拍到来,在时钟中断的处理程序中,内核发现更高优先级的任务就绪,获得了执行条件,则在中断后直接切换到更高优先级任务执行。
任务切换就是保存前一个任务的基本信息,同时读取新任务在上一次被切换时保存的这些信息。调度器将前一任务的上述信息保存在该任务的栈空间中,其目的是为了下次运行时能够恢复到被切换时的状态,调度器将从该任务的栈空间中读取上述信息,从而从该任务上次被中断的位置继续执行,其基本过程如下:
1)将当前任务的PC位置、通用寄存器数据、CPU状态入栈。
2)将全局变量OSPrioCur(当前任务优先级变量)的值修改为全局变量OSPrioHighRdy(zui高优先级任务优先级)的值,即把zui高就绪任务优先级设置为新的当前任务优先级。
3)将原任务TCB的*个成员(指向栈顶的指针*OSTCB-StkPtr)的值修改为当前SP寄存器的值,以便再次返回。
4)获取zui高优先级的任务控制块中*个成员(指向堆栈栈顶指针*OSTCBStkPtr)的值并将其保存到SP寄存器中。
5)将OSTCBCur的值修改为新就绪zui高优先级任务的任务控制块地址。
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层,由上到下分别是:应用层、运输层、网络层、物理和数据链路层。数据从应用层发出,经过套接字封装,传输至数据链路层,交由以太网发送模块处理。同样的,以太网接收模块收到的数据,经过解包,zui终交由应用层接收。考虑到系统实时性,我们采用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地址写入发送区,zui后调用驱动程序的发送函数Send_Packet()。
4、关键部位实验验证
设备节点样机如图5所示,它带有一个DS18B20数字温度传感器,实时将温度数据通过CAN传输至上位机,再通过局域网传至主控计算机;具有多路I/O接口(可外接继电器),能接收上位机命令改变I/O口的输出。上位机使用ARM核心板外扩通信接口作为实验板,主控机使用路由器接入,控制界面由VC++编写。实验时将IP地址设为一固定的私有IP,网关IP设为内置交换机的TP-LINK路由器IP,设置好路由器工作方式后即可运行。以温度采集与继电器控制为例,验证了主控机对设备节点的监控和管理功能,表明该方案技术切实可行。
5、结束语
提出了一种实时性较高、实用性较强的楼宇自动化控制系统解决方案,并对关键技术进行了验证。系统技术成熟,易于维护和扩展,可以将建筑内各种机电设备的信息进行分析、归类、处理、判断,对各系统设备进行集中监控和管理,使各下属设备协调有序的工作,并及时处理故障。