数据采集器软件设计
主程序流程
数据采集器在整个系统中有喂狗、计表、时钟校时、用户通断电、CAN总线数据发送和接收、数据存储与读取以及显示等功能,其中喂狗、计表和数据存储及CAN总线数据接收分别采用定时终端、计数中断和外部中断实现,显示功能则为预付费功能而备(本文不作要求),CAN总线数据发送采用查询方式和其他程序功能在主程序中实现。主程序流程如图4所示。
图4 主流程序图
数据采集程序说明
数据采集是将电表转盘每转一圈转化为一个周期电脉冲,单片机将此脉冲累加,从而测得电表消费度数。为了避免停电时造成计数丢失,造成电力公司损失,每计0.1度电时便将累计数据保存于24C02中;根据电度表量程,保存电表计数数据占用3个字节,前2个字节保存整数部分,后1个保存小数部分。同时考虑到24C02擦写寿命,在24C02中开辟240字节专门用于存储电表技术以轮回写入,防止将数据频繁写入固定地址而造成损坏。单片机采用定时计数器中断进行数据采集,以3000r/KWH为例,每转300圈(0.1度)采样一次并保存,程序如下:
void count0() interrupt 1 using 2
{
//工作在16位计数定模式,每计数300个脉冲中断一次,晶振使用12Mhz
tl0=0xD4;
th0=0xFE;
DOTCOUNT++;// 记录小数点后的数据,无符号字符型
if(DOTCOUNT>=10){
COUNT++; //记录整数部分,无符号整型
DOTCOUNT=0;
}
Write24C02(COUNT, DOTCOUNT,2);//2-表示保存数据为电表度数(1-用电高峰时间段设置)
//在此自程序中完成不同时间段(不同计价)分类存储。
}
CAN总线数据收发程序说明
数据采集器数据传输内容较为简单,发送出去的数据主要包括电表度数(占5个字节),接收到的数据多为命令(1-4个字节),而CAN总线每次数据可传输8个字节,因此每数据传输采用1帧即可完成。本设计采用PeliCAN工作模式(29位表示码),利用查询方式发送数据,利用外部中断0接收数据。
数据的发送由CAN控制器根据CAN协议规范自动完成。首先CPU必须将要发送的数据报文传送到CAN控制器发送缓冲器中,并置位命令寄存器中的发送请求标志,程序流程如图5所示。
图5 数据发送流程图
数据接收采用外部中断0接收,CAN控制器接收到一帧数据后,产生中断触发信号,CPU立即响应,将收到的报文接收到字节的接收缓冲器,并置位命令寄存器的释放缓冲区标志RRB。单片机根据接收数据进行命令解析,并做出相应执行。部分程序代码如下:
void INT0( ) interrupt 0 using 1
{
BYTE Length; // CAN 数据长度代码
BYTE i; //下标
bit FF //0 :标准 CAN帧 1:扩展帧
CANDR=RBF; //地址指向SJA1000接收缓冲区
ReceiveMessage[0]=CANDAT; // 读取并保存你帧报文字节
FF=ReceiveMessage[0]&0x80;
//取出帧格式
Length=ReceiveMessage[0]&0x0F;
//取出报文长度
if(Length>0x08) Length=0x08;
ReceiveMessage[1]= CANDAT; //保存报文标识码1
ReceiveMessage[2]= CANDAT; //保存报文标识码2
if(FF){
ReceiveMessage[1]= CANDAT; //保存报文标识码3
ReceiveMessage[2]= CANDAT; //保存报文标识码4
}
For(i=0;i< Length;i++) ReceiveMessage[i+3]= CANDAT; //保存帧数据
CANCON=0x04 // 释放接收缓冲区
}
数据集中器设计方案
数据收集器主要起到转发后台管理服务器和各节点间的数据传输功能,如图6所示。CAN总线控制器模块主要用来向各节点发送或接收相关数据,各节点地址通过程序设置均已被包括在对应报文29位表示码中,数据集中器可以通过广播或点对点向各用户节点发送命令数据。由于用户节点比较多,数据集中上传比较多,因此需要较多的数据接收缓冲区保存,然后通过GSM转发给后台管理服务器完成远程数据交流,因此采用有512字节内存的单片机STC89C51对CAN控制器和GSM模块进行控制。单片机控制GSM模块在Text模式下接收手机短信,短信的收发是通过向串口以文本模式发送AT指令来实现的,其编码转换格式简单,并有较高的转换速率。
图6 数据集中器示意图
结束语
本文主要以电能表为例介绍了远程抄表系统数据采集和转发的设计方案,在此基础上只要稍加修改就可开发出不同抄表系统,如预付费电表系统、远程燃气抄表系统、远程水表抄表系统等。
[录入:admin]
[日期:10-05-17]