陈娇AD远程数据采集实训报告.docx

上传人:b****1 文档编号:2909439 上传时间:2023-05-05 格式:DOCX 页数:16 大小:96.91KB
下载 相关 举报
陈娇AD远程数据采集实训报告.docx_第1页
第1页 / 共16页
陈娇AD远程数据采集实训报告.docx_第2页
第2页 / 共16页
陈娇AD远程数据采集实训报告.docx_第3页
第3页 / 共16页
陈娇AD远程数据采集实训报告.docx_第4页
第4页 / 共16页
陈娇AD远程数据采集实训报告.docx_第5页
第5页 / 共16页
陈娇AD远程数据采集实训报告.docx_第6页
第6页 / 共16页
陈娇AD远程数据采集实训报告.docx_第7页
第7页 / 共16页
陈娇AD远程数据采集实训报告.docx_第8页
第8页 / 共16页
陈娇AD远程数据采集实训报告.docx_第9页
第9页 / 共16页
陈娇AD远程数据采集实训报告.docx_第10页
第10页 / 共16页
陈娇AD远程数据采集实训报告.docx_第11页
第11页 / 共16页
陈娇AD远程数据采集实训报告.docx_第12页
第12页 / 共16页
陈娇AD远程数据采集实训报告.docx_第13页
第13页 / 共16页
陈娇AD远程数据采集实训报告.docx_第14页
第14页 / 共16页
陈娇AD远程数据采集实训报告.docx_第15页
第15页 / 共16页
陈娇AD远程数据采集实训报告.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

陈娇AD远程数据采集实训报告.docx

《陈娇AD远程数据采集实训报告.docx》由会员分享,可在线阅读,更多相关《陈娇AD远程数据采集实训报告.docx(16页珍藏版)》请在冰点文库上搜索。

陈娇AD远程数据采集实训报告.docx

陈娇AD远程数据采集实训报告

目录

 

一、源代码0

二、程序完成的主要功能6

三、必要的操作步骤6

四、执行程序的结果(效果图)9

五、参考文献10

六、基于网络远程数据采集实训的心得10

 

一、源代码

1、index.html文件解析:

AD远程采集实验//第一页网页标题

//设置网页背景颜色

AD远程采集实验

2008-12-11

//192.168.1.133/cgi-bin/run.cgi">/*提交表单后跳转到http:

//192.168.1.133/cgi-bin/run.cgi页面*/

/*设置按钮并且居中*/

2、adc.html文件解析:

varXMLdoc;

functionloadXML()

{

if(window.ActiveXObject)//判断浏览器是否支持activeX控件

{

XMLdoc=newActiveXObject("Microsoft.XMLDOM");/*生成一个xmldom对象*/

XMLdoc.async=false;//设置对象属性,是否同步

XMLdoc.load("adc.xml");//使oDom对象指向adc.xml中的内容

getmessage();

}

setTimeout("loadXML()",1000);//每1000毫秒刷新一次

}

functiongetmessage()

{

document.getElementById("ch_0").innerHTML

=XMLdoc.getElementsByTagName("ch_0")[0].childNodes[0].nodeValue;/*获取ch_0的HTML代码*/

document.getElementById("ch_1").innerHTML

=XMLdoc.getElementsByTagName("ch_1")[0].childNodes[0].nodeValue;/*获取ch_1的HTML代码*/

document.getElementById("ch_2").innerHTML

=XMLdoc.getElementsByTagName("ch_2")[0].childNodes[0].nodeValue;/*获取ch_2的HTML代码*/

}

//生成第二个页面

AD远程测试实验

AD远程测试实验

通道0

V

通道1

V

通道2

V

//192.168.1.133/cgi-bin/stop.cgi">

3、Adc.xml文件代码解析:

xmlversion="1.0"encoding="UTF-8"?

>

0.0

1.0

3.0

A

4、run.c文件代码解析:

//服务器后台程序对AD进行采样的程序

#include//调用函数库中的标准输入输出

#include//浮点数处理

#include

#include

#include

voidgetdata(char*buff,intadcfd,intret)

/*读取并且转换三个通道中的AD值*/

{

inttemp;

inti=0,j;

for(j=0;j<3;j++)//控制三个通道的循环

{

ioctl(adcfd,j,0);//操作I/O通道

read(adcfd,&temp,sizeof(int));

temp+=16;

temp=temp/31;

for(;i

{

if((buff[i]=='<')&&(buff[i+1]=='c')&&(buff[i+2]=='h'))

break;

}

buff[i+6]=(temp/10)+48;//将得到的值做数值转换

buff[i+8]=(temp%10)+48;

i++;

}

}

voidlock_set(intfd,inttype)

{

structflocklock;

lock.l_whence=SEEK_SET;

lock.l_start=0;

lock.l_len=0;

lock.l_type=type;

while

(1)

{

if((fcntl(fd,F_SETLK,&lock))==0)

return;

}

}

intmain(void)

{

pid_tpc;

intadcfd,xmlfd,ret;

unsignedcharbuff[150];

inti;

pc=fork();

/*用于打印一些HTML代码,使页面跳转到ADC.HTML,打印完后退出*/

if(pc<0)

{

printf("forkerror!

\n");

return-1;

}

elseif(pc>0)

{

/*打印Html文档*/

printf("Content-type:

text/html\n\n");

printf("\n");

printf("

//192.168.1.133/adc.html\">");

printf("");

exit(0);

}

else

{

setsid();//脱离父进程

chdir("/");//改变当前目录

umask(0);//重设文件权限掩码

for(i=0;i<65535;i++)//关闭设备文件描述符

close(i);

adcfd=open("/dev/adc",O_RDWR);

if(adcfd<0)

{

printf("Cannotopenadcdevice!

\n");

returnadcfd;

}

while

(1)

{

while

(1)

{

xmlfd=open("/var/www/adc.xml",O_RDWR);//打开标志文件

if(xmlfd<0)

{

continue;

}

else

{

lock_set(xmlfd,F_WRLCK);/*给文件上锁,避免其他进程对该文件进行写操作*/

break;

}

}

ret=read(xmlfd,buff,150);

for(i=0;i

if(buff[i]=='$')/*如果用户按下“停止采集”键,则退出程序*/

{

buff[i]='A';

lseek(xmlfd,0,SEEK_SET);//移动文件指针

write(xmlfd,buff,ret);//写入修改后的值

lock_set(xmlfd,F_UNLCK);//给文件上锁,防止被删除

close(xmlfd);

close(adcfd);

return0;

}

getdata(buff,adcfd,ret);

lseek(xmlfd,0,SEEK_SET);

write(xmlfd,buff,ret);

lock_set(xmlfd,F_UNLCK);

close(xmlfd);

sleep

(1);

}

close(xmlfd);

close(adcfd);

return0;

}

}

5、stop.c文件代码解析:

/*这段代码是控制整个程序结束的代码,当程序检测到“$”时,程序结束*/

#include

#include

#include

#include

voidlock_set(intfd,inttype)

{

structflocklock;

lock.l_whence=SEEK_SET;

lock.l_start=0;

lock.l_len=0;

lock.l_type=type;

while

(1)

{

if((fcntl(fd,F_SETLK,&lock))==0)

return;

}

}

intmain(void)

{

intfd,ret;

charbuff[150];

inti;

/*打印HTML页面*/

printf("Content-type:

text/html\n\n");

printf("\n");

printf("

//192.168.1.133\">\n");

printf("");//隔1秒钟后刷新

while

(1)

{

fd=open("../adc.xml",O_RDWR);//打开标志文件

if(fd<0)

continue;

else

{

lock_set(fd,F_WRLCK);/*给文件上锁,避免其他进程对该文件进行写操作*/

break;

}

}

ret=read(fd,buff,150);

for(i=0;i

if((buff[i]=='s')&&(buff[i+1]=='t')&&(buff[i+2]=='o')&&(buff[i+3]=='p'))

break;

buff[i+5]='$';//i+5插入一个$

lseek(fd,0,SEEK_SET);

write(fd,buff,ret);/*写文件,改变文件内容,以便视频采集程序能检测到该变化*/

lock_set(fd,F_UNLCK);

close(fd);//关闭设备文件描述符

return0;

}

二、程序完成的主要功能

这个程序是在点击第一个页面(index.html)上的“查看”按钮后,程序会创建两个线程:

一个主线程,用于打印一些HTML代码,使页面跳转到adc.html页面去,打印完HTML信息后该线程就退出;另一个子线程执行真正的AD数据采集,它读取三个通道的AD值,并对读出来的值进行转换,并将读取的结果写入adc.xml文件中,供用户检索。

同时,这个线程还会检查adc.xml的标签中的内容,如果为’$’,则说明用户按下了“停止采集”按钮,那么就结束程序,否则继续执行。

三、必要的操作步骤

解压arzxvfboa-0.94.13.tar.gz

yqliu29@up-tech:

~/app/web$tarzxvfboa-0.94.13.tar.gz

然后进入源代码目录:

yqliu29@up-tech:

~/app/web$cdboa-0.94.13/src/

修改文件compat.h的第120行:

yqliu29@up-tech:

~/app/web/boa-0.94.13/src$vicompat.h

修改后,第120行的内容如下:

#defineTIMEZONE_OFFSET(foo)foo->tm_gmtoff

即只是去掉了该行的两个’##’字符。

然后修改boa.c:

yqliu29@up-tech:

~/app/web/boa-0.94.13/src$viboa.c

找到该文件的225~227行,注释掉这几行,不然运行的时候会出错。

源文件的修改就完成了,现在开始编译。

首先,运行configure程序对源文件进行配置:

yqliu29@up-tech:

~/app/web/boa-0.94.13/src$./configure

配置完成后,修改Makefile:

yqliu29@up-tech:

~/app/web/boa-0.94.13/src$viMakefile

修改第31行和32行如下:

CC=arm-linux-gcc

CPP=arm-linux-gcc-E

修改完成后,保存文件,运行Make进行编译:

yqliu29@up-tech:

~/app/web/boa-0.94.13/src$make

编译完成后,会在该目录下生成我们需要的可执行文件boa。

然后,编译我们的CGI程序。

CGI程序供两个,一个是run.c,另一个是stop.c,

分别运行如下命令进行编译:

yqliu29@up-tech:

~/app/web$arm-linux-gcc-orun.cgirun.c

yqliu29@up-tech:

~/app/web$arm-linux-gcc-ostop.cgistop.c

编译完成后,会在目录下生成run.cgi和stop.cgi两个应用程序。

Boa运行时需要在/etc/boa目录下有一个boa.conf文件,该文件的全部内容如下:

Port80

#Listen192.68.0.5

Userroot

Group0

ErrorLog/var/log/boa/error_log

AccessLog/dev/null

ServerNamewww.your.org.here

DocumentRoot/var/www

DirectoryIndexindex.html

KeepAliveMax1000

KeepAliveTimeout10

MimeTypes/etc/mime.types

DefaultTypetext/plain

CGIPath/bin:

/usr/bin:

/usr/local/bin

AddTypeapplication/x-httpd-cgicgi

ScriptAlias/cgi-bin//var/www/cgi-bin/

另外,在/etc目录下还需要一个mime.types文件,可以直接从主机上的/etc目录拷贝过来。

运行时需要的目录如下:

/var/www这个是我们的html文件存放的目录

/var/www/cgi-bin这个是CGI程序存放的目录

/var/log/boa/error_log这个是boa服务器存放错误日志的地方

因此,把我们上面提到的index.html、adc.html和adc.xml三个文件拷贝到开发板的/var/www目录下;把刚才编译得到的run.cgi和stop.cgi拷贝到/var/www/sgi-bin目录下;还要在/var/log/boa目录下建立一个error_log文件,命令如下:

[root@up-tech/var/log/boa]pwd

/var/log/boa

[root@up-tech/var/log/boa]toucherror_log

这样,服务器的配置就完成了,把刚才编译得到的boa可执行文件拷贝到/bin目录下,然后执行boa命令,就可以启动boa服务器了:

[root@up-tech/var/log/boa]boa

启动后,在PC机的IE浏览器中输入开发板的IP地址,打开页面。

四、执行程序的结果(效果图)

图一:

图二:

五、参考文献

1、邹思轶.Linux嵌入式设计与应用[M].北京:

清华大学出版社,

2、李善平.Linux与嵌入式系统[M].北京:

清华大学出版社,

3、周强、闫大顺、张永平.网上监测系统Web数据网关设计与实现[J];计算机工程;

4、石洋、孙志挥.基于实时控制的动态Web网页设计[J].计算机工程,

5、王传启,邓文栋,金敏.工控系统中嵌入式Web服务器的计与实现[J].计算机工程与应用,

6、黄英,肖旭,魏急波.基于嵌入式Linux的远程监控系统的计[J].电子工程,

7、谌洪茂,徐猛华.基于嵌入式远程监控系统的设计[J].计机与现代化,

8、李恒超,张家树.基于嵌入式Web的远程监控研究[J].西交通大学学报,

六、基于网络远程数据采集实训的心得

通过为期四周的关于网络的AD远程数据采集实训,我学习到了在数字化高速发展的今天,如何将模拟的信号转化到数字领域显得尤其重要,这就需要数据采集技术。

随着网络技术的发展,以太网越来越能够满足工业上远程数据采集的应用需要。

通过嵌入式Linux系统强大的网络功能搭建一个可以远程访问的数据采集平台,通过浏览器即可实时查看模拟量的变化,工作量适中。

我从一开始的在网上查找资料,到资料的整合,以至于到达到整个实训的目的,应该说在这个过程中,自己还是有点束手无策,不知道如何应用自己身边的资源,但是最后我还是克服了种种困难,把整个实训圆满的完成,它让我明白每一件事情都没有自己想象的那么容易,都必须花费一定的时间来学习,遇到困难要坚持,只有坚持到最后你才知道自己那方面不足,并在学习的过程中提升自己,养成一种学习的习惯,这样在以后的生活工作中,你才能完美的绽放自己。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2