基于GSM的中央空调末端控制器研究
扫描二维码
随时随地手机看文章
为了解决以上问题,本文设计实现了一种基于手机SIM卡GSM网络的中央空调末端风阀异地控制模块。GSM除语音业务外,另有短消息数据传输业务[4-8]。该模块不但可以完成室内温度信息通过GSM网络以短信息的形式报告用户,同时也可以由用户通过该模块发送期望设定室内温度给末端控制器,完成远程控制。
本文以Samsung公司的S3C2410芯片作为处理器,以Linux2.6为嵌入式操作系统,基于PID控制策略,通过手机短信的方式对中央空调末端装置进行远程控制,实现了对室内温度的设置和监控,取得了很好的实际效果。
1 末端控制器系统设计
1.1 控制器系统硬件设计
本文基于ARM9平台,采用Linux嵌入式操作系统,以S3C2410处理器为核心。系统硬件主要由以下模块组成:
(1)GSM/GPRS射频模块。用来与GPRS网络进行通信的射频模块,本文选用Simcom公司推出的工业级GSM/GPRS双频Modem模块SIM300,具有完整的Modem信号,在网络通信时可以作为一个Modem而存在。模块采用串行接口通信,主要为语音传输、短信息和数据业务提供无线接口,带GPRS功能[9]。SIM300芯片的外围电路采用了芯片的典型连接,利用阻容充电和施密特触发器整形获得上电后大约1.5 s低电平延时来启动。
(2)16C550串行接口。16C550是一种用于将并口数据转换成串口数据的高速UART芯片,并自带16位FIFO缓存通道,而且波特率可选。一方面可获得完整的Modem控制,另一方面也是为了获得精准的UART波特率,本文在SIM300射频模块与处理器组成的控制单元进行串行通信时使用16C550芯片。16C550芯片的虚拟地址为0xdb000000,工作在带中断的FIFO方式;其波特率设置为115200,传输无校验,8位数据位,1位停止位,忽略输入BREAK、帧错误和奇偶校验错,使用标准模式传输。
(3)CPU中央处理单元。采用Samsung公司生产的32/16位高性能基于ARM920T内核的RISC微处理器S3C2410,具有低功耗、自带8通道10位ADC和DAC、并支持NAND Flash和SDRAM存储器等特点。该单元包括S3C2410微控制器的最小系统、时钟电路、复位电路等部分。
(4)输入输出单元:模拟房间内的温度传感器信号输入到处理器的A/D转换器;处理器通过PID算法得到的输出量由D/A转换器输出以控制送风执行阀的开度,调整房间内的送风量从而达到调节室内温度的目的。
图1为系统硬件框图。
1.2 控制器系统软件设计
操作系统采用实时性强的Linux2.6内核,编译器使用gcc 4.0.2版本,完成了各个功能模块的接口函数。由于在进行嵌入式系统内核开发时,若交叉编译工具(特别是gcc)版本较低则无法编译高版本内核,版本过高也不行。因此本文为配合要采用的Linux2.6.18内核开发末端控制器,进行定制开发交叉编译环境。具体如下:crosstool-0.43,binutils-2.16.1.tar.bz2,gcc-4.0.2,glibc-2.3.5,glibc-linuxthreads-2.3.5,linux-libc-headers-2.6.12.0,gdb-6.5,生成交叉编译工具为arm-9tdmi-linux-gcc。其中短消息通信线程的初始化和主循环共分为以下4个步骤:
(1)完成串口初始化。系统启动并完成初始化后,开始反复读取16C550芯片发来的串口数据。当GSM模块收到新短信后,通过串口向处理器发送1个字符串。该字符串格式、长度及内容都是固定的,以+CMTI开头,以此为依据判断是否新短信到来。
(2)向SIM300模块发送读取短消息的AT指令,判断短消息内容。首先通过手机号来判断短消息是否由用户发来。如果短消息由用户发来,则判断用户发送的指令,否则直接删除。
(3)如果用户发送的内容是“设定温度XX”(XX代表二位温度值),则将“XX”通过解码函数解码成ASCII字符,再通过换算得到用户期望设置的温度发送给温度控制模块,最后删除该信息。如果用户发送的内容是“查询状态”,则将当前温度值和室内状态以短消息的形式发送给用户手机,最后同样删除该信息。
(4)处理器继续读取串口数据。
短消息通信程序流程如图2所示。
处理器通过串口与GSM模块通信,串行通信的基本参数有:波特率、数据位、停止位及校验方式等。串口驱动程序实现了对串口的读写操作,给应用程序提供发送接收数据的接口。串口正常工作之前,需要进行初始化设置,选择串口工作方式,设置波特率、数据格式及中断,建立数据队列和信号量。应用程序只要调用相应的函数,就可以实现相应的功能。
以串口发送一个字符串为例介绍发送程序,其中buf表示要发送的字符串,nbytes表示字符的个数:
int tty_write(char*buf,int nbytes)
{
int i;
for(i=0;i<nbytes;i++) {
write(tty_fd,&buf[i],1);
usleep(100);
}
return tcdrain(tty_fd);
}
短消息的接收与发送由处理器和SIM300模块通过16C550芯片串行通信完成,处理器向SIM300模块发送AT指令读取或发送短消息。发送中文短信息时,发送的是汉字的UCS2编码,所以在初始化SIM300模块时须发送指令“AT+CMGF=0”,把模块的短消息工作模式设置为PDU模式,以UCS2编码方式发送短消息。同样,SIM300模块收到的短消息也是PDU编码方式,要读取出用户发送的中文指令就必须将消息内容解码成ASCII字符。根据实际应用情况(发送汉字信息较少且固定),从节约系统资源的角度考虑,直接查找汉字的UCS2编码表,查出要发送汉字的UCS2码并发送。
发送短消息首先要向SIM300模块发送整个短消息代码位数的16进制数,之后是短信头代码“001100D”、中国区号“+86”的编码“9168”和发送的目的手机号码。此处的目的手机号码必须是每两位互换得来,由于手机号码是11位,最后一位用“N”补齐,而短消息内容是用UCS2码编写,所以继续发送编码方式代码“0008A7”,最后才是短消息正文的UCS2码。
当有新消息到达时,收到的数据包内封装了消息发送时间、来自的手机号码和消息正文。如果来自的手机号码与预先设置的用户号码不一致则直接将短消息删除;一致则继续判断短消息正文。由于接收到的短消息也是由UCS2编码处理过的中文,所以把消息正文内容与预先约定好的“设定温度”和“当前状态”两种UCS2编码相比较后分别转到相应的处理函数,若与约定的两种编码都不一致,则视为错误消息删除。
本文全部程序代码由C语言编写,短消息发送部分代码如下:
void gprs_msg(char*number,char*msgr)//短信发送函数
{
char ctl[]={26,0};
char head[]=″0011000D9168″;//短信头代码及中国区号
char headmsg[]=″0008A7″;//短信编码方式代码
unsigned int count;
char sum[2];
tty_writecmd(″at″,strlen(″at″));
tty_writecmd(″at″,strlen(″at″));
tty_write(″at+cmgs=″,strlen(″at+cmgs=″));
count=strlen(msgr)/2+14;//计算短信长度
sum[0]=(char)(count/10+48);
sum[1]=(char)(count%10+48);//将短信长度
//解码为16进制
tty_writecmd(sum,2);
tty_write(head,strlen(head));
tty_write(number,strlen(number));
tty_write(headmsg,strlen(headmsg));//发送短信头
tty_write(msgr,strlen(msgr));//发送短信正文
tty_write(ctl,1);
tty_write(″r″,strlen(″r″));//发送短信结束代码
usleep(300000);//进程休眠
printf(″Message sent.n″);
}
上述函数封装了PDU模式发送短消息的头信息和正文字符长度等,参数仅为目的手机号码的PDU编码和短消息正文的UCS2编码。这样做避免了大量的重复代码,也提高了程序的运行效率。
1.3 增量式PID控制策略
PID是一种线性控制器,它根据给定值r(t)与实际输出y(t)构成控制偏差:
式中:KP为比例系数;TI为积分时间常数;TD为微分时间常数。
由于计算机处理的是数字量,控制器的驱动对象是风阀执行器,所以控制系统中使用的控制策略是数字增量式PID。
u(k)=Ae(k)-Be(k-1)+Ce(k-2)
以下是增量式PID控制策略的实现函数:
double PID(double feedback)
{
double Err,pErr,dErr,dU;
Err=Command-feedback;//当前误差
pErr=Err-ppreErr;//比例项增量式误差
dErr=Err-2*preErr+pre2Err;//微分项增量式误差
dU=Proportion*pErr+pDerivative*dErr+ Integral*Err;
//控制量增量
pre2Err=preErr;
preErr=Err;
return dU;
}
2 实验
本实验对象以1.3吨的中央空调系统的实物模型为例,该系统可以模拟中央空调多种运行模式,并可以通过对执行风阀输入模拟信号来调节风阀的具体开度,以此来调整送入房间的送风量,达到控制模拟房间制冷量的目的。本实验对象有2个模拟房间,其中末端装置的驱动阀为TANG TECH TM04~24,温湿度传感器为VECTOR ADS-H1T1。嵌入式控制器的D/A输出的0~4.096 V信号经放大至0~10 V后,直接驱动风阀驱动器。模拟房间的的温湿度传感器输出范围为1~5 V,直接输入处理器内部A/D的AIN[0]脚。
系统提供了两种用户短消息内容的识别,分别是“设定温度XX”和“查询状态”。如用户发送“查询状态”,而当前室内状态为23℃,则系统自动向用户返回短消息“温度:23;状态:正常”。如果室内是异常温度,则系统发送短消息自动报警“温度60;状态警告”。如果用户发送“设定温度23”,则系统将当前室内设定温度改为23℃,并回复“已设定温度23”。此时本地的控制器以PID进行温度控制。
为了使用户可以方便关闭室内控制器,而又不需要增加其他的短消息内容,本文设置了最高温度限制50℃。当用户发送“设定温度”大于49℃时,系统认为用户要求关闭控制器,继而把温度设定点改为OFF,风阀完全关闭,同时返回短消息“已关闭”。采用这种方法,既保证了系统有关闭风阀的功能,又不需要添加新的短消息命令。控制器关闭后,如果用户再次发送短消息设置室内温度为正常范围内的温度,则控制器重新开启。
短消息命令详情见表1。
为了测试系统节能实际效果,在室外温度9℃的条件下开启2个模拟房间的末端控制器,并设置预期室内温度23℃。假定2个房间中,模拟房间一8:00有人,模拟房间二9:00开始有人;通过计算表明,9:00开启模拟房间二的室内控制器要比8:00同时开启2个模拟房间的室内控制器节约全天所耗能量的7%左右。
本文实现了GSM远程控制方法,通过手机短信方式,对中央空调系统末端装置进行控制及对室内温度进行实时监控和管理。实验结果表明,系统可以方便、灵活、快捷、按需调节房间的温度,实现节能。并且,系统可扩充性强,在软件升级后还可实现如末端能量计量等更多功能。