3.3 CGI程序 为了在嵌入式IED上实现网络通信功能,除了为其安装Boa服务器之外,还要编写特定的程序才能显现它的网络通信功能。 本文中的嵌入式IED采用CGI程序来利用Boa服务器与变电站层计算机进行交互。
CGI是运行在Boa服务器与本机或或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上,这里的CGI运行在装有Boa服务器的IED上。在物理上,CGI是一段程序,它运行在Server上,提供同客户端 Html页面的接口。它解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CGI程序使网页具有交互功能。
本文在这里用C语言作为编程语言,编写一个简单的通过控制IED的某个开关量信息“switch”的CGI程序。计算机通过CGI请求访问装有Boa服务器和CGI程序的ARM嵌入式系统,来控制IED的开关量信息。从而实现站控层计算机对IED进行简单的访问和控制的过程。
控制IED的开关量信息“switch”的CGI程序流程图和源代码如下:
#include
#define OPEN 1
#define CLOSE 0
int main(int argc, char **argv)
{
int fd;
int switch;
int i,j,k;
char *data;
data = getenv("QUERY_STRING");
printf("Content-type:text/html\n\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("
IED CGI TEST
\n");fd = open("/dev/switch",0);
//打开switch驱动
if(fd == -1)
{
printf("wrong\r\n");
exit(-1);
}
sscanf(data,"switch=%d",&switch);
if(switch == 1) //如果按下“TurnOn”按钮,打开SWITCH,同时将按钮字符改为“TurnOff”
{
printf("TurnOff");
ioctl(fd, OPEN);
}
}
else //如果按下“TurnOff”按钮,关闭SWITCH,同时将按钮字符改为“TurnOn”
{
printf("TurnOn");
ioctl(fd, CLOSE);
}
close(fd); //关闭SWITCH驱动
printf("
return 0;
}
程序编写完成后保存为ied.c。接着对其进行编译。在Linux终端中输入下列语句:
#arm-linux-gcc ied.c –o ied.cgi
最后开启webserver,我们就可以通过网页来控制IED的开关switch了,在PC网页浏览器里调入CGI的URL(http://BoardIP/cgi-bin/ied.cgi?switch=1)就可以访问该CGI并且可以控制开关switch了。如图,点击TurnOff按钮可以关闭switch,再次点击则打开switch开关。