引言
美国东部时间2003年8月14日16时11分,其东北部和加拿大联合电网发生大面积停电事故。负荷损失总计6180万千瓦,停电范围为9300多平方英里,受影响的居民约5000万人。
这次事件造成了巨大的经济损失和社会影响,引起了世界各国的普遍关注。相关报告表明电网二次系统的配置及其协调存在明显缺陷,功能不完善是这次事故爆发的主要原因之一。众所周知,继电保护装置是电网二次系统重点建设的项目,为此开发了利用GPS定时模块来缩小继电保护检测装置在异地双端试验和双端故障定位等方面的时间误差,取得了预期目标。
硬件系统
该系统分为上位机和下位机两大部分,M12作为定时模块接入,其基本的框图如图1所示。
上位机是具有一定配置的PC机,AT89C58作为下位机主控CPU与上位机相连接,完成控制数据与信号数据的交互。与AT89C58相连的可以划分为五个模块,它们分别是:DDS(直接频率合成)模块,采用AD9852来实现;电流电压输出模块,采用TMS320VC5402定点DSP来实现;同步定时模块,采用M12 GPS接收器来实现;开入动作变化量检测模块,采用AT89C2051来实现;开出动作变化量计时模块,采用8255定时器来实现。
本文主要介绍作为同步定时模块的M12是如何与主控设备完成软硬件连接,并且协调工作的。此处硬件的连接是通过标准异步串口来完成的,需要指出的是,M12的标准异步串行接口采用的是3V逻辑电平,而主控设备输出的逻辑电平却是5V,因此采用MAXIM公司生产的MAX3370作为逻辑电平转换模块,起到衔接的作用;主控设备与M12之间采用模拟串行通信。硬件连接简单,主要功能由软件来实现。M12的初始化编程以及定时数据的采集、比较、反馈的详细过程见软件实现。
模块特点
M12接入系统如图2所示。
该系统使用Motorola 公司生产的M21 GPS接收器作为定时源。M12接收器的并行通道已经扩展到12个,提供码跟踪和载波辅助跟踪,可同时跟踪12颗卫星,可串行输出纬度、经度、高度、速度、航向和时间信息。M12接收器的核心硬件MRFIC1504是基于MMC2003的32位RISC控制器。M12接收器提供2.75~3.2V的电压,支持逆向差分,可以通过设置差分基站的方法来改良定位效果。支持RTCM SC-104(美国海用无线电技术委员会)格式的差分功能,NAEA 0183(美国国家海洋电子学会)格式输出,双通信串口,用户可控制的速度滤波器和一个天线检测回路。用户还可以选择使用垂直于电路板或者是平行于电路板的数据/电源连接器。基本的控制流程如图3所示。
在主控设备与M12通信过程中,建议采用其特有的Motorola二进制数据与指令格式,通信速率可以保证在9600bps(取决于M12),而采用NMEA-0183格式时,通信速率只有4800bps,同时在初始化GPS时还需要加入由Motorola二进制转化为NMEA-0183的指令,相比之下较为繁琐,而Motorola二进制是默认通信模式。
在此设计当中,关键的环节在于两个方面,一是M12的初始化,二是主控设备与M12之间采用的模拟串口通信是否可靠。对于M12初始化而言,重点在于理解Motorola二进制数据格式的结构,其次是设置初始化时间。实时时钟是M12的特征之一,它用于缩小TTFF(捕获时间),在主电源被切断而后备电源工作时,数据和时间信息将被存储在RTC寄存器中。因此存在初始化在GPS锁定第一颗卫星之前,或是让让卫星自动搜索两种初始化时间信息的方式。实践证明,第一种方案得到的TTFF较小,所以建议采用。GPS默认提供的是GMT(格林威治时间),因此用户需要根据当地的情况设置时区的偏移量(中国为东8区,+8)。具备以上知识后,就可以从数据包中提取时间信息。此处选用短位置消息。
@@Hbmdyyhmsffffaaaaoooohhhhmmmm VVvvhhddntssrrvvvvvvC<CR><LF>
下面仅仅分析它有关定时信息的部分。
实例如下。
@@Hb021C07D4092D280001121A000000000000 00000000000000000000000000000000000000016088 0000503035463039
转化成16进制的数是021C07D4092D280001,对应的时间是2.28.2004.9:45:40:0001。
对于模拟串口而言,首先应当明确采用哪一种执行方式。其次,就是选定通信波特率。最后就是确定具体的硬件结构。这里采用起始位为1bit,终止位为1bit,无奇偶校验位,波特率为9600,晶振频率为11.0592MHz。处理流程如图4所示。
MRXD代表一个1比特的位地址,它用于检测串口通信起始位,终止位的有效性;MTXD代表一个1比特的位地址,它用于发送串口通信所需的起始位,终止位;CONT代表一个计数器,用于控制所发比特的个数。
源代码。
PCON EQU 87H
HEAD EQU 20H
INT_OK BIT 08H
ORG 0000H
LJMP START
ORG 0023h
LJMP RECIEVE
ORG 0100H
START: MOV PSW,#00H
MOV SP,#70H
MOV TMOD,#20H
MOV TH1,#0FAH
MOV TL1,#0FAH
MOV PCON.#80H
SETB EA
SETB TR1
SETB ES
SETB P1.0
CLR INT_OK
MOV SCON,#70H
MOV DPTR,#TAB1
MOV R7,#11H
SEND1: CLR A
MOVC A,@A+DPTR
MOV SBUF,A
SWAIT1: ;发送@@Gb数据帧,初始化时间偏移
JNB TI,SWAIT1
CLR TI
INC DPTR
DJNZ R7,SEND1
MOV DPTR,#TAB2
MOV R7,#08H
SEND2: CLR A
MOVC A ,@A+DPTR
MOV SBUF,A
SWAIT2: ;发送@@Hb数据帧,启动GPS
JNB TI,SWAIT2
CLR TI
INC DPTR
DJNZ R7,SEND2
MOV R5,#00H
STOP_HERE: ;检测接收到的数据帧是否有效
JNB INT_OK,STOP_HERE
MOV DPTR,#TAB3
MOV RO,#65H
MOV R7,#03H
TIME_1: ;与规定的时间相比较,相等时置中断标志位
CLR A ;不相等时重新接收
MOVC A ,@A+DPTR
MOV @RO,A
INC RO
INC DPTR
DJNZ R7,TIME_1
MOV RO,#36H
MOV R1,#65H
MOV R7,#03H
ACALL CMP
CJNE A ,#00H,WAIT
CPL P1.0
WAIT: CLR INT_OK
AJMP STOP_HERE
RECIEVE: ;接收程序,完成接收,校验,置中断标志位的功能
PUSH PSW
PUSH ACC
CLR ES
CLR RI
MOV PSW,#08H
MOV A,SBUF
CJNE A ,#40H,STOP
RR1: JNB RI,RR1
CLR RI
MOV A ,SBUF
CJNE A ,#40H,STOP;前两个字节若为@@继续,
否则,跳出
MOV RO,#30H
MOV R7,#34H
RR2: JNB RI,RR2
CLR RI
MOV A ,SBUF
MOV @RO,A
INC RO
DJNZ R7,RR2
MOV RO,#30H
MOV R7,#30H
ACALL TEST
MOV A,@RO
CJNE A ,20H,STOP
SETB INT_OK;置中断标志位
STOP: POP ACC
POP PSW
SETB ES
RETI
TEST: MOV A,@RO
MOV 20H,A
INC RO
TT1: MOV A,@RO
XRL 20H,A
INC RO
DJNZ R7,TT1
RET
CMP: MOV A ,@RO
MOV B,A
MOV A,@R1
CJNE A ,B,CMP1
INC R0
INC R1
DJNZ R7,CMP
MOV A,#00H
LJMP CMP3
CMP1: JC CMP2
MOV A,#OFFH
LJMP CMP3
CMP2: MOV A,#01H
CMP3: RET
TAB1: DB
40H,40H,47H,62H,01H,01H,07H,0D4H,0CH,00H,00H,00H,08H, 00H,0D9H,0DH.0AH
TAB2: DB 40H,40H,48H,62H,01H,2BH.0DH,0AH
TAB3: DB 0BH,10H,01H
END