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

2024-04-18 04:18

本文主要是介绍多路温度采集控制系统(8)网页界面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

嵌入式项目实践–多路温度采集控制系统(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>");elseprintf("<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>","连通");elseprintf("<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>");elseprintf("<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>");elseprintf("<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>");elseprintf("<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>");elseprintf("<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;
}

这篇关于多路温度采集控制系统(8)网页界面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/913744

相关文章

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

使用Python实现网页表格转换为markdown

《使用Python实现网页表格转换为markdown》在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,本文将使用Python编写一个网页表格转Markdown工具,需... 在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,以便在文档、邮件或

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization

Python实现多路视频多窗口播放功能

《Python实现多路视频多窗口播放功能》这篇文章主要为大家详细介绍了Python实现多路视频多窗口播放功能的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下... 目录一、python实现多路视频播放功能二、代码实现三、打包代码实现总结一、python实现多路视频播放功能服务端开