您的位置:首页 > 其它

多路温度采集控制系统(8)网页界面

2016-08-31 10:41 253 查看

嵌入式项目实践–多路温度采集控制系统(8)网页界面

嵌入式开发培训(阶段1)基础应用开发视频地址

多路温度采集系统视频地址

网页界面



网页界面html源码

<TABLE WIDTH=800 BORDER=0 CELLPADDING=0 CELLSPACING=0>
<TR>
<TD COLSPAN=5><IMG SRC="/images/temp_1.jpg" WIDTH=1024 HEIGHT=92></TD>
<TD><IMG SRC="/images/spacer.gif" WIDTH=1 HEIGHT=92></TD>
</TR>
<TR>
<TD COLSPAN=2><IMG SRC="/images/temp_21.jpg" WIDTH=400 HEIGHT=108></TD>
...
</TABLE>


网页界面CGI程序源码

printf("<TABLE WIDTH=800 BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD COLSPAN=5>");
printf("<IMG SRC=\"/images/temp_1.jpg\" WIDTH=1024 HEIGHT=92></TD><TD>");
printf("<IMG SRC=\"/images/spacer.gif\" WIDTH=1 HEIGHT=92></TD></TR><TR>");

if(g_dev->temp_data[0] <= (float)g_dev->temp_max[0])
printf("<TD COLSPAN=2><IMG SRC=\"/images/temp_21.jpg\" WIDTH=400 HEIGHT=108></TD>");
else
printf("<TD COLSPAN=2><IMG SRC=\"/images/temp_22.jpg\" WIDTH=400 HEIGHT=108></TD>");

...


网页同主控通信

首先通过消息队列发送更新数据请求,主控程序更新共享内存,然后读取共享内存数据在网页上显示。

if(msg_send(msgid)==0){
if((shm_dev=(struct st_sys*)set_web_shm())==NULL){
printf("shm_web error\n");
exit(1);
}else{
for(i=0;i<DEF_MAX_CHANNEL;i++){

g_dev->temp_max[i] = shm_dev->temp_max[i];
g_dev->temp_data[i] = shm_dev->temp_data[i];
g_dev->status[i] = shm_dev->status[i] ;
}

g_dev->update_time = shm_dev->update_time;
}
}


网页界面程序代码

HTML函数头文件

#include<stdio.h>

void html_begin(void);
void html_body(void);
void html_body_noimg(void);
void html_end(void);
void html_refresh(char* second, char* url);

/*---------html begin tag-------------*/
void html_begin(void)
{
printf("Content-type:text/html\r\n\r\n");
printf("<html>");
printf("<title>TC90000多路温度采集控制系统</title>");
printf("<link href=\"/noneline.css\" rel=\"stylesheet\" type=\"text/css\">");

}

/*---------html refresh tag-------------*/
void html_refresh(char* second, char* url)
{
printf("<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"%s;URL=%s\">",
second, url);

}

/*---------html body tag-------------*/
void html_body(void)
{
printf("<body background=\"/bg_black.gif\">");
printf("<div align=\"center\">");
}

/*---------html body tag-------------*/
void html_body_noimg(void)
{
printf("<body><div align=\"center\">");
}

/*---------html end tag-------------*/
void html_end(void)
{
printf("</div></body></html>");
}


网页CGI程序


#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include "html.h"

#define DEF_MAX_CHANNEL 4 //采集的路数
//消息队列接收时索引值
#define TEMP_SMG_INDEX_BASE 10
#define WEB_SMG_INDEX 2
#define WEB_UPDATE_SMG_INDEX 3
#define UPDATE_TIME_SMG_INDEX 4

//系统总体数据结构
struct st_sys{
int temp_max[DEF_MAX_CHANNEL]; //设置每路温度报警最大值
float temp_data[DEF_MAX_CHANNEL]; //每路温度
char status[DEF_MAX_CHANNEL]; //每路状态
char update_time; //网页刷新秒数
};

struct st_sys g_dev[1];

//消息队列数据结构
struct st_msg_req{
long int index;
char req;
};

int msg_send(int msgid)
{
struct st_msg_req cmd;
cmd.index = WEB_UPDATE_SMG_INDEX;
cmd.req = 0x1;
if(msgsnd(msgid,(void*)&cmd,1,0)==-1)
return -1;
return 0;
}

int get_msgid(void)
{
int id = -1;
id = msgget((key_t)1234,0666|IPC_CREAT);
if(id == -1){
printf("msgget error\n");
exit(1);
}
return id;
}

void* set_web_shm(void)
{
int shmid;
void* shmaddr=(void*)0;

if((shmid=shmget((key_t)2345,sizeof(struct st_sys),0666|IPC_CREAT))<0){
return NULL;
}else{
if((shmaddr=shmat(shmid,(void*)0,0))==(char *)-1){
return NULL;
}
}

printf("set shm ok...\n");
return shmaddr;
}

char area_name[4][16]={"锅炉区","螺栓区...","电缆区...","汽电区..."};

//在网页上显示四路温度数据
void show_temp_table()
{
int i;
printf("<table width=\"1024\" border=\"0\"><tr>");
for(i=0;i<4;i++){
printf("<td><table width=\"250\" border=\"0\"><tr><td colspan=\"2\" bgcolor=#CCFFFF>");
printf("<div align=center>第%d路</div></td></tr>",i+1);
printf("<tr><td width=\"82\" bgcolor=#33CCFF>监控区域:</td>");
printf("<td width=\"158\" bgcolor=#33CCFF>%s</td></tr>",area_name[i]);
printf("<tr><td bgcolor=#33CCFF>连接状态:</td>");
if(g_dev->status[i]==1)
printf("<td bgcolor=#33CCFF>%s</td></tr>","连通");
else
printf("<td bgcolor=#33CCFF>%s</td></tr>","断开");

printf("<tr><td bgcolor=\"#33CCFF\">当前温度:</td>");
printf("<td bgcolor=\"#33CCFF\">%4.2f</td></tr>",g_dev->temp_data[i]);
printf("<tr><td bgcolor=\"#33CCFF\">报警上限:</td>");
printf("<td bgcolor=\"#33CCFF\">%d</td></tr></table></td>",g_dev->temp_max[i]);
}
printf("</tr></table>");
}

void show_sys_area(void)
{
printf("<TABLE WIDTH=800 BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD COLSPAN=5>");
printf("<IMG SRC=\"/images/temp_1.jpg\" WIDTH=1024 HEIGHT=92></TD><TD>");
printf("<IMG SRC=\"/images/spacer.gif\" WIDTH=1 HEIGHT=92></TD></TR><TR>");

if(g_dev->temp_data[0] <= (float)g_dev->temp_max[0])
printf("<TD COLSPAN=2><IMG SRC=\"/images/temp_21.jpg\" WIDTH=400 HEIGHT=108></TD>");
else
printf("<TD COLSPAN=2><IMG SRC=\"/images/temp_22.jpg\" WIDTH=400 HEIGHT=108></TD>");

if(g_dev->temp_data[1] <= (float)g_dev->temp_max[1])
printf("<TD COLSPAN=2 ROWSPAN=2><IMG SRC=\"/images/temp_31.jpg\" WIDTH=381 HEIGHT=133></TD>");
else
printf("<TD COLSPAN=2 ROWSPAN=2><IMG SRC=\"/images/temp_32.jpg\" WIDTH=381 HEIGHT=133></TD>");

printf("<TD ROWSPAN=4><IMG SRC=\"/images/temp_4.jpg\" WIDTH=243 HEIGHT=409></TD>");
printf("<TD><IMG SRC=\"/images/spacer.gif\" WIDTH=1 HEIGHT=108></TD></TR><TR>");

if(g_dev->status[2]==1){
if(g_dev->temp_data[2] <= (float)g_dev->temp_max[2])
printf("<TD ROWSPAN=3><IMG SRC=\"/images/temp_51.jpg\" WIDTH=193 HEIGHT=301></TD>");
else
printf("<TD ROWSPAN=3><IMG SRC=\"/images/temp_52.jpg\" WIDTH=193 HEIGHT=301></TD>");
}else{
printf("<TD ROWSPAN=3><IMG SRC=\"/images/temp_5.jpg\" WIDTH=193 HEIGHT=301></TD>");
}

if(g_dev->status[3]==1){
if(g_dev->temp_data[3] <= (float)g_dev->temp_max[3])
printf("<TD ROWSPAN=3><IMG SRC=\"/images/temp_61.jpg\" WIDTH=207 HEIGHT=301></TD>");
else
printf("<TD ROWSPAN=3><IMG SRC=\"/images/temp_62.jpg\" WIDTH=207 HEIGHT=301></TD>");
}else{
printf("<TD ROWSPAN=3><IMG SRC=\"/images/temp_6.jpg\" WIDTH=207 HEIGHT=301></TD>");
}

printf("<TD><IMG SRC=\"/images/spacer.gif\" WIDTH=1 HEIGHT=25></TD></TR><TR>");
printf("<TD COLSPAN=2><IMG SRC=\"/images/temp_7.jpg\" WIDTH=381 HEIGHT=141></TD>");
printf("<TD><IMG SRC=\"/images/spacer.gif\" WIDTH=1 HEIGHT=141></TD></TR><TR>");
printf("<TD><IMG SRC=\"/images/temp_8.jpg\" WIDTH=178 HEIGHT=135></TD><TD>");
printf("<IMG SRC=\"/images/temp_9.jpg\" WIDTH=203 HEIGHT=135></TD><TD>");
printf("<IMG SRC=\"/images/spacer.gif\" WIDTH=1 HEIGHT=135></TD></TR></TABLE>");
}

int main(int argc, char *argv[])
{
int i,msgid;
char update_time[4];
struct st_sys* shm_dev;

if((msgid=get_msgid()) < 0){
printf("msg_web id error\n");
}

if(msg_send(msgid)==0){ if((shm_dev=(struct st_sys*)set_web_shm())==NULL){ printf("shm_web error\n"); exit(1); }else{ for(i=0;i<DEF_MAX_CHANNEL;i++){ g_dev->temp_max[i] = shm_dev->temp_max[i]; g_dev->temp_data[i] = shm_dev->temp_data[i]; g_dev->status[i] = shm_dev->status[i] ; } g_dev->update_time = shm_dev->update_time; } }

html_begin();
bzero(update_time,4);
sprintf(update_time,"%d",g_dev->update_time);
html_refresh(update_time,"/cgi-bin/show.cgi"); //页面秒自动刷新

html_body_noimg();

show_sys_area();//显示系统监控区域图片
show_temp_table();//显示多路数据表格

printf("<form method=\"get\" action=\"/cgi-bin/show.cgi\">");
printf("<input type=\"submit\" value=\"刷新状态\"></form>");

html_end();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: