行业知识
linux网络项目——基于WebServer的工业数据采集项目
2026-11-15 07:31:31
来源:互联网转载
一、项目目标和框图
项目目标:实现通过网页控制信息采集和通过网页控制灯泡和蜂鸣器的亮灭
二、项目分析
1.服务器源码分析
- 初始化服务器
- 循环等待连接,连接后创建线程,调用线程函数msg_request,在函数中调用handler_msg函数分析请求
- 在handler_msg函数中,先查看请求协议内容,其次获取请求方法、URL、参数,判断请求方法,对need_handler赋值,确定请求资源路径,如果请求地址没有携带任何资源,则默认返回index.html文件,如果资源不存在,返回404,如果需要处理(get带参数、post)调用handle_request函数,如果不需要(get请求不带参数且资源存在),调用echo_www函数,直接返回资源
- handle_request函数主要获取post数据,调用parse_and_process函数处理正文内容
2. 结合Modbus部分整体流程分析
三、核心功能代码
1.采集传感器数据
modbus采集程序和webserver共同建立共享内存,modbus读取传感器得到的数据,将数据写入共享内存中;webserver将数据从共享内存中读出;
//modbus采集传感器void *handler_thread(void *arg){ key_t key; int shmid; struct msp *p; //创建key值 key = ftok("1.txt", 'x'); if (key dest); printf("%d %d %d %d\n", p->dest[0], p->dest[1], p->dest[2], p->dest[3]); //让从线程不退出,进程状态l也就是多线程 sleep(2); } return NULL;} //webserver服务器static int handler_get(int sock, const char *input){ key_t key; int shmid; struct msp *p; //创建key值 key = ftok("1.txt", 'x'); if (key dest[1], p->dest[2], p->dest[3]); printf("g:%d X:%dY:%dZ:%d\n", p->dest[0], p->dest[1], p->dest[2], p->dest[3]); char reply_buf[HTML_SIZE] = {0}; printf("handler_get\n"); printf("%d %d%d%d\n", p->dest[0], p->dest[1], p->dest[2], p->dest[3]); sprintf(reply_buf, "%d %d %d %d", p->dest[0], p->dest[1], p->dest[2], p->dest[3]); printf("resp = %s\n", reply_buf); send(sock, reply_buf, strlen(reply_buf), 0); return 0;} 2.控制灯泡和蜂鸣器
网页发出控制命令给webserver服务器控制灯和蜂鸣器的信息,webserver和modbus采集器用相同的条件建立两个程序间的消息队列,建立通信,将控制灯泡和蜂鸣器的信息传递给modbus采集器,modbus采集器用相关信息控制灯泡和蜂鸣器的开关
//modbus采集器void *handler_thread2(void *arg){ key_t key; int msgid; key = ftok(".", 9); if (key ctx2, 1, dest[1]); }// //让从线程不退出,进程状态l也就是多线程 return NULL;} //webserver服务器static int handler_set(int sock, const char *input){ key_t key; int msgid; key = ftok(".", 9); if (key
下一篇:深度解析,Weka源码探索与解析