微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式Linux平台下电力载波路由器的软件设计

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

时间:01-19 来源:互联网 点击:

电力载波(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所示。

单个节点的属性如下:
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所示。

(3)对剩下的节点进行二级中继遍历搜索。一般而言,二级中继可以做到对一台区下所有节点的覆盖。剩下的节点要进行中继路径的确定,首先要确定它的父节点(二级中继节点),父节点是从建立好的第二层来选择的;然后确定它的一级中继节点,而一级中继节点是从第

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top