您当前的位置:五五电子网电子知识通信技术载波通信嵌入式Linux平台下电力载波路由器的软件设计 正文
嵌入式Linux平台下电力载波路由器的软件设计

嵌入式Linux平台下电力载波路由器的软件设计

点击数:7344 次   录入时间:03-04 11:54:41   整理:http://www.55dianzi.com   载波通信

电力载波(PLC)是电力系统通信的一种基本方式,广泛应用于电力行业的自动化抄表系统中。由于电力载波是利用电力线来作为传输媒介,因此,电力线路的距离长短和用户的用电负荷都会对电力载波通信效果造成影响,而通过载波模块实现对一台区下所有电表的直抄是不可能的。目前常用的解决方法是为每块电表安装带中继转发功能的载波模块,不能直抄的表可以通过距离远近或信号质量较佳的表对其进行中继转发抄收。电力载波通信信道,其载波通信信号衰减大、干扰严重、不稳定,如何根据线路状态以及通信距离的远近自动分配各电表的中继节点并动态维护这些节点是进行中继转发抄收时应解决的问题。因此有必要设计一种电力载波通信路由器以实现对一台区下各节点中继路径的智能制定及其维护,以方便其上级采集器对所有节点的抄收。
1 系统拓扑结构
    载波集抄系统拓扑图如图1所示。


2  电力载波路由器的软件设计
2.1 DLT/645—2007多功能电表通信规约

    本通信规约规定了多功能电表与手持单元(HHU)或其他数据终端设备之间的物理连接、通信链路及应用技术规范,适用于本地系统中多功能电表与手持单元或其他数据终端设备进行点对点或一主多从的数据交换方式[1]。645协议规定了通信采用异步串行的通信方式,其每个字节包含有1个起始位、8个数据位、1个偶校验位及1个停止位,缺省通信速率为2 400 b/s,传输时先传低位,后传高位。应用规定了如图2所示的每一帧的信息格式。

    在图2中,68H为帧的起始符;A0~A5为通信端的物理地址,一共是6个字节;L为数据域的长度;DATA为数据域;16H为帧的结束符;CS表示校验码,校验码是从第1帧起始符开始到校验码之前的所有各字节的模256的和,即各字节二进制算术和,不计超过256的算术值;C为控制码,控制码一共有8位,在保留645协议中对控制码各位定义的基础上,本设计针对中继功能的使用重新定义了控制码。同时为了保障载波通信的可靠性,还省去了645协议中关于后续帧的定义。控制码的格式[2]如图3所示。

2.2 路由算法的设计
     路由的目的是要建立一张各节点的最优路径表,此表记录了台区下每个节点的中继级别、各级的中继地址及目的地址。这种路由表是动态的,存放在RAM中,每隔5 min会自动更新一次。路由表的初始值各项均为0,其格式如图4所示。

    路由表的建立是软件中最核心的部分,本设计采用了多叉树遍历寻优[3]算法,从路由器节点开始逐层搜索。其算法描述如下:
    (1)路由器先将网络中的所有节点建成一个带有头节点的单向链表,然后开始向网络中所有节点依次发送直抄查询命令,并等待回应。若能在规定时间内(10 s)收到节点的应答信息,则表明该节点可以进行直抄;然后将可以进行直抄的电表从链表中删除,并将删除的节点重新组成一个新的链表。路由表建立示意图如图5所示。

www.55dianzi.com

    单个节点的属性如下:
    struct mac_list
    {
    U8_t mac[6];                        //节点的MAC地址
    U8_t flag;
              //flag表示路由表中已建立该MAC对应的路由项
    int use_tim;
  //此项只在中继转发时有用,表示转发过程所花费的时间
    U8_t num;                                            //节点的序号
    U8_t respond_num[10];
                            //记录可以与自身进行通信的电表序号
    struct mac_list *next;
    };
     完成第一次遍历直抄搜索后,建立了以Head 1为首的单向链表(称为第一层)。第一层中的各节点都可以直抄,它们在路由表中只要填写中继级别和目的地址即可。由于是可以直抄的节点,所以中继级别填为0;
    (2)对剩下的节点进行一级中继遍历搜索,依照链表中各节点的序列顺序,依次选取第一层中单个节点作为剩下节点的一级中继,对余下的节点进行转发抄收测试,如图6所示。

    在一级中继节点确定的过程中,第一层中的每个节点都会尝试对剩下的节点进行一级中继转发,若剩下的节点中,存在能对中继转发帧作出回应的节点,则表明该节点可以进行一级中继抄收。通常一个节点的中继抄收路径存在好几条,这时需要通过计算中继抄收时间来选择一条用时最短的路径,这样才能保证采集器抄收时用时最短。经过对剩下节点进行一级中继遍历抄收搜索后,剩下的节点中可以进行一级中继抄收的节点将会组成第二层。同样,第二层由从Head中删除的一级中继抄收节点组成,并顺序存储在以Head2为头节点的链表中,建立好的第二层结构如图7所示。



www.55dianzi.com

    (3)对剩下的节点进行二级中继遍历搜索。一般而言,二级中继可以做到对一台区下所有节点的覆盖。剩下的节点要进行中继路径的确定,首先要确定它的父节点(二级中继节点),父节点是从建立好的第二层来选择的;然后确定它的一级中继节点,而一级中继节点是从第一层中选择的。由图7可知,一级中继路由建立完成之后,第一层与第二层有着确定的连接关系,所以在节点的属性中设置了respond_num数组来记录可以与自身进行通信的电表序号。这样,建立二级中继时可通过比较从路由器发送二级中继转发命令到目的节点作出的响应,即这个通信过程所花费的时间来确定中继路径。建立二级中继的过程示意图如图8所示。

2.3 嵌入式Linux平台下路由器的多线程程序设计
    Linux是一种完全开源的32位操作系统,它几乎支持所有体系架构的处理器。由于它具有开源、可定制、安全、稳定等特征,所以可对其进行裁剪、修改使之能够稳定运行在嵌入式开发平台上。针对电力载波通信路由器的实际应用需求,本设计移植了Linux-2.6.29.4内核至ARM9平台上,并配置了EXT2/VFAT/NFS文件系统及串口和网络通信驱动。为了使路由器能够更快速和稳定地进行路由、路由表动态维护、抄表查询等工作,本文提出了一种多线程的解决方案,利用Linux对多线程的支持很好地解决了各项任务的快速切换、相互通信等问题。

[1] [2]  下一页


本文关键字:嵌入式  路由器  Linux  软件设计  载波通信通信技术 - 载波通信