0 引言
近些年来由于电子技术、计算机技术和通信技术的快速发展而加快了各个行业的自动化进程,在电力行业内,也依靠现代化技术改变了传统的手工抄表方法,使得抄表工作在不需要人力的情况下依靠网络和计算机就能快速而准确的完成,提高了抄表过程中数据采集的实时性、可靠性、信息量。目前的自动化抄表系统主要有掌上抄表系统,有线抄表系统和无线抄表系统,其中掌上抄表系统需抄表人员用掌上抄表器抄收数据,因此自动化程度不够;有线系统需要施工布线,既提高了费用又增加了难度;而无线抄表系统虽不需布线,安装也方便,但信号易受外界干扰,数据传输的稳定性较差,容易抄收失败。因此主要研究基于GPRS的无线远程抄表系统,利用GPRS技术连接主站与集中器,从而缩短了布线的范围及长度,并可实时、准确地获取电表数据并上传数据到主站,重点研究基于GPRS的有线集中器的软件设计。
1 系统结构描述
完整的远程抄表系统包括主站、集中器、采集器、载波表、手持终端等,其系统结构如图1所示。
主站是运行抄表系统的计算机,一般放在电力中心,由它来发出命令进行定时抄表、实时抄读或设置相关信息等操作。主站通过GPRS与集中器通信。
集中器负责连接若干个电表或采集器,此范围内的所有电表的抄读工作由集中器统一完成,然后再将结果传送给主站,集中器与主站间通过GPRS连接,下行通过RS 486进行连接。
本文重点介绍集中器中通信软件的设计。
2 集中器通信软件设计
2.1 集中器功能
集中器除了响应主站命令外还要负责对电表的定时抄读,因此设计集中器软件时要明确这2个功能,即:响应主站命令与定时抄表。响应主站命令任务的启动是由主站命令到达触发的,定时抄表任务则应该由集中器内时间触发而启动的,不同的任务对应不同的处理流程。
2.2 响应主站流程
集中器向上与主站连接,向下与各终端进行通信。与主站间的通信集中器处于从属地位,它只有在接收到主站中的命令时才做出操作,而不能主动与主站发起通信;而其与下行终端通信时,集中器处于主动地位,它在适当的时候向下终端发出命令,而不会收到下行的主动请求帧。
图2描述了集中器通信流程,通信的工作始终运行在外围的无限循环中判断和接收主站请求帧,当接收到主站命令后先判断此数据帧是否校验正确,若错误检查错误原因,并根据错误类型设置错误代码,然后发送异常应答帧;否则判断是否是集中器命令,若不是集中器命令则需要判断是否需要转发,需要转发则首先将协议进行转换,然后将命令转发出去,接收到转发响应后再向主站响应;若是集中器命令,则根据操作码对集中器进行相关操作,操作完成后返回响应帧,然后进入下一个循环继续等待主站的命令帧。
2.3 抄表任务流程
定时抄表是集中器的重要功能,通常有抄表日抄表,抄表月抄表,整点抄表;零点抄表等多种类型。集中器首先启动抄表任务功能,然后不断检测当前时间是否符合设定的抄表时间,如果不符合则继续下一轮的检查;否则获取到要抄读的电表信息,然后向电表发送抄读命令帧,收到回复后先验证数据的正确性,如果数据正确则进行相关的入库等操作,否则重发抄读命令(一般设为3次),当数据处理完成后,进行下一轮循环。整个流程如图3所示
2.4 软件模块设计
根据上节介绍的流程,在设计软件的时候将整个系统分为如下几个部分:
主控模块 负责命令的接收,发送,逻辑判断,数据流的控制等总体调度和控制工作。
上行协议解析模块 负责对主站下发的命令进行帧的校验和解析,并将解析的结果保存以便主控的访问。
上行协议封装模块 负责对主站回复帧的封装工作,具体数据由主控模块提供。
集中器操作模块 负责根据主站命令实现对集中器的操作工作。
下行协议封装模块 在需要命令转换时,该模块负责将主站下发的命令翻译成下行协议,在抄读任务启动后负责封装抄读命令。
下行通信模块 负责下行命令的发送和接收。
下行协议的解析模块 负责将下行命令的回复帧进行校验和解析。
数据处理模块 负责将必要的数据存入数据库或从数据库中读取数据。
抄表模块 负责定时启动抄表任务。
整体的系统模型如图4所示。
定时抄表模块使用单独线程实现,在模块中判断当前时间是否符合抄表设定的时间,如果是则将所有要抄读信息发送到下行协议模块封装模块进行封装抄表命令,然后下发出去。在向下通信的过程中使用了两个队列来实现通信和处理的异步性,在对多个表抄读时可提高整体系统的效率。
3 通信软件的实现
该软件系统模拟在Linux操作系统中用C++语言实现,每个模块封装成单独的类,如下所示:
该类对应主控模块,其中成员函数run()中实现主控模块的功能,在系统中构造一个全局的Dispatcher对象以实现对主控模块的访问。
该类对应上行协议的帧,其中提供成员方法Encode()和Decode()来实现对上行协议的封装和解析。在程序中只需创建一个帧的对象就可以通过这些函数实现封装和解析的功能。下行协议采用同样的方法处理:
该类对应集中器操作模块,其中方法Do(int Op_Type)实现具体操作功能,参数Op_Type表示要做的具体操作,在函数内部可以使用switch-case语句判断操作的类型,然后到各个分支执行。
其余模块采用相同的方法进行封装,需要注意的是抄表模块和下行通信模块采用单独线程处理,以实现抄表任务的定时启动和下行数据传输的异步性。下行队列采取封装STL中queue模板来实现,并提供入队,出对,获取队列大小等接口。
4 结语
集中器软件设计的主要任务是实现其的各部分功能。主要功能包括:集中器控制、实时用电数据采集、定时数据采集及存储、数据报文的转发、运行状态记录及指示、通信管理等。采用了模块化设计的通信软件具有稳定性好,效率高等特点,能够进一步加快电力行业自动化的建设。