基于网络控制的智能小车远程监控系统服务器._第1页
基于网络控制的智能小车远程监控系统服务器._第2页
基于网络控制的智能小车远程监控系统服务器._第3页
基于网络控制的智能小车远程监控系统服务器._第4页
基于网络控制的智能小车远程监控系统服务器._第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、智能小车远程监控系统服务器(第八组)班级:13级嵌入式三班指导老师:张先凤组员:组长:贺豪成员:廖立普目录前言2.2引言2.2编写目的和项目景.2 任务概述3.2目标3.2用户特点3需求的概述.3 适用的范围.3 产品的描述.4利用的基本流程图 socket块.5智能小车服务流程图.6功能需求.7 功能的划分.7性能的需求.8 数据的精度.8 系统的响应时间.8 适应性.8 运行需求.8 用户界面.8 硬件接口.9软件接口.9 属性.9 可使用性.9 保密性.9 可维护性.10 可转移性.10 注视.10基本的操作.10客户端.11服务器.20客户端和服务器.23客户端和服务器的进程的通信.2

2、7客户端和服务器通信.34前言:远程监控是当前蓬勃发展的一项技术,有了远程监控,天文学家可以在地面上控制太空望远镜,外科医生可以在办公室给位于手术室的病人做手术,人们可以在上班或者外出郊游时使用手机或者笔记本控制家里的家具完成他想要的事情,基于这些,可以在小车方面有智能改变,目前小车都是人为手动控制的,事故时有发生,本次项目完成服务器与小车模拟串口通信,利用Socket类的通信功能实现网络控制智能小车,希望可以降低事故发生概率。综合描述:1.引言编写的目的编写本报告的目的是明确本体系统的详细需求,停工给使用单位确定系统分的功能,并在此基础上进行修改和完善,同时作为设计人员进行软件设计的依据和使

3、用单位的验收标准。项目的背景实现一个将各种智能小车和手机控制的功能集合起来的管理信息系统就显得十分必要,即可以让拥有的人感觉舒适,还可以要拥有的人觉得安全放心。2任务的概述2.1目标本系统通过计算机技术实现下车信息和用户信息的管理而且用户还可以对小车进行一些监控,包括的目标如下:上车前可以减少车内部不舒适的感觉提高小车的安全防护改进对自己小车的监控良好的手机与小车的控制。界面简洁操作简便2.2用户特点本系统的最终用户是面向小车拥有者,他具有购买车辆的基本经济基础,是一个固定的操作的用户。系统维护人员是计算机专业人员,熟悉操作系统和数据库,是间隔性用户。2.3需求的概述在智能小车远程监控的系统中

4、,用户为自己建立一个账户,账户内部储存着用户的基本信息,并依据用户发送的指令来对小车来进行监控,对其不同的指令小车会产生不同的效果出来这样的话就可以满足客户的基本需求,然后小车中的基本信息用户也可以通过客户端进行查看,然后用户如果对这些信息需要改进就可以只要按这些基本的功能进行操作然后就进行改进车内的基本环境,用户主要进行这些信号的控制设置,车俩就会有不同的反应和效果。2.3.1适用范围说明:A 我们开发的软件系统叫做智能小车远程监控系统服务器;B 我们的软件主要是实现对智能小车的监控,如果需要的话我们小车还可以防盗。C 本软件需要下载我们软件的基本app还要进行与手机的链接成功的话就可是实现

5、车与手机的智能化合体2.3.2产品的描述我们的这个产品主要是为了实现小车主的舒适和防盗还有远程自动的开关控制,应用目标就是想购买智能小车的广大群众。作用范围小车与机械行业。随着中国人民生活水平的提升车辆的基本交通也要随之进行一些改进和创兴,然后远程智能的监控使得人们可以提前预备车内的环境改进和自动启动,还可以防止车辆的被盗。我们的软件可以与手机android进行链接和绑定,这样你的宝车就能和你如影随行了,2.3.3利用Socket类的通信功能实现网络控制智能小车基本流程图(1)小车服务器程序(2)客户端.socketSocket bindbind connectlistenaccpetWrit

6、e,readWrite,read智能小车服务器流程图(一)car_server(二)car_client_server(三)car_read_write_serial_port模拟输出各种信息Fork(子进程运行car_client_server)client onlineFork(子进程运行exel(car_read_write_serial_port)accept消息队列共享内存通过函数(read_sense_data)将模拟传感数据和小车基本信息传人共享内存 (glb.shm_addr)得到消息队列信息(msgrcv)得到共享内存信息(glb.shm_addr)将其发给客户端将消息传入消

7、息队列(msgsnd)读取客户信息(read)创建次线程(pthread_create) 创建次线程(pthread_create)映射共享内存 (glb.shm_addr)映射共享内存(glb.shm_addr)创建消息队列和共享内存(get_msg_shm)创建消息队列和共享内存(get_msg_shm)Socketbindlisten3功能的需求3.1功能的划分该系统具有以下主要的功能:1. 查看个人的基本信息2. 小车的空调开关3. 小车的灯光开关4. 小车正在行驶5. 小车停止行驶6. 客户端的登录注册7.客户端的关闭4.性能的需求4.1数据的精确度保证车内的基本信息要100%准确,

8、所有在应用域中包含查询关键子的记录都能查到,所有在相应域中不包含查询关键字的记录都不能查到。4.2系统响应时间系统对大部分才操作的应用时间应在2-3秒内。4.3适应性满足运行环境在允许操作系统之间的安全转换和与其他应用的软件的独立运行要求5.运行需求5.1用户界面系统采用对话框方式,多功能窗口运行。5.2硬件接口支持各种安桌手机5.3软件接口小车上的各种rm开发板子6属性6.1可使用性在装载总程序是,正常就运行,异常就停止;登陆时候如果输入错误就会产生错误信息要你重新输入,所以请确保你的输入正确性。6.2保密性本软件作为小车管理辅助设备,它的规模比较小,不需要保密技术;限定一个程序中默写区域的

9、规约,给不同的模块分配不同的功能6.3可维护性 本软件的组成程序为汉语成语设计语言,组构均较简单明知管意义上的较为独立。因此,给予电子化的所构成的硬件的简单可维护的特点,据顶了改软件的简单可维护性。6.4可转移。可转换性可转移的环境是rm7板子的不同;不可修改任何的代码;可用向上兼容的高版本的板子。6.5.数据流图开始运行服务器控制控制客户登陆电脑登陆手机登陆结束客户下线客户端代码#include "./car_server/car_client_server.h"#define SER_PORT 5010#define SERIP INADDR_ANYint skfd =

10、 -1, ret = -1;char client_select100=0;/client selectchar client_control_select=0;/控制客户是否能登录,0为不能登陆,1为可以/客户注册信息struct Information long client_type; char name20; char id_Number20; char number20; char client_control_cmd20;information;/处理错误函数void err_fun(char *file_name, int line, char *fun_name, int er

11、r_no) fprintf(stderr, "in %s, %d %s fail:%sn", file_name, line, fun_name, strerror(err_no); exit(-1);/定义连接的基本协议void socket_fun(int *skfdp)int ret = -1;struct sockaddr_in seraddr;*skfdp = socket(PF_INET, SOCK_STREAM, 0);if(*skfdp < 0) err_fun(_FILE_, _LINE_, "socket", errno);se

12、raddr.sin_family = AF_INET;seraddr.sin_port = htons(SER_PORT);/seraddr.sin_addr.s_addr = inet_addr(SERIP);seraddr.sin_addr.s_addr = htonl(SERIP);/* 向服务器发起连接请求参数2:设置服务器的IP和端口参数3:参数2的结构体大小 */ret = connect(*skfdp, (struct sockaddr *)&seraddr, sizeof(seraddr);if(ret < 0) err_fun(_FILE_, _LINE_, &

13、quot;connect", errno);elseprintf("connect sucess!n"); void signal_fun(int signo)int ret = -1; strcpy(information.client_control_cmd, CLIENT_OFFLINE); ret=write(skfd, &information, sizeof(information);/ret = write(skfd, CLIENT_OFFLINE, sizeof(CLIENT_OFFLINE);if(ret < 0) err_fun(

14、_FILE_, _LINE_, "write", errno);void client_menu() printf("+n"); printf("+n"); printf("+n"); if( client_control_select=1) printf("+ please select to number(1 or 2 or 3) +n"); if( client_control_select=0) printf("+ 请先注册信息(按0) +n"); printf(&q

15、uot;+ 0,register car oneself signal +n"); printf("+ 1,Input control command +n"); printf("+ 2, Car current temperature +n"); printf("+ 3, Car is temperature and command +n"); printf("+n"); printf("+n"); bzero(client_select, sizeof(client_select)

16、; scanf("%s",client_select);void client_control_menu()if(strcmp(information.client_control_cmd, "9") != 0) system("clear");printf("*n");printf("*n");printf("*请选择序号控制智能小车*n");printf("* 0,保存个人执照信息*n");printf("* 1,小车空调关闭 *n"

17、;);printf("* 2,小车空调打开 *n");printf("* 3,小车灯打开 *n");printf("* 4,小车灯关闭 *n");printf("* 5,小车正在行驶 *n");printf("* 6,小车已停止 *n");printf("* 7,返回客户端首页 *n");printf("* 8,客户端关闭 *n");printf("* 9,查看执照信息 *n");printf("*n");print

18、f("*n");int main(void)fd_set readfds; char buf100 = 0; signal(SIGINT, signal_fun);socket_fun(&skfd);/printf("%d22222n",skfd);loop:client_menu();while(1)FD_ZERO(&readfds);FD_SET(0, &readfds);FD_SET(skfd, &readfds); /bzero(&information, sizeof(&information);

19、 ret = select(skfd+1, &readfds, NULL, NULL, NULL);if(ret < 0) err_fun(_FILE_, _LINE_, "select", errno);if(ret > 0) if(strcmp(client_select, "0") = 0&&client_control_select!=1) bzero(&information, sizeof(&information); printf(" 请注册个人信息n"); print

20、f("姓名:n"); scanf("%s",); printf("请输入电话号码:n"); scanf("%s",information.number); printf("请输入身份证:n"); scanf("%s",information.id_Number); /定义协议 / information.client_type=CLIENT_TYPE ; / strcpy(information.client_control_cmd, CLIE

21、NT_ARGISTER); /ret = write(skfd, &information, sizeof(information); system("clear"); printf(" 请稍等正在验证!n"); printf(" 您 ");sleep(2);printf("注 册 ");sleep(2);printf("成 功 !n");sleep(2); if(ret < 0) err_fun(_FILE_, _LINE_, "write", errno);

22、 client_control_select=1; goto loop; else if(strcmp(client_select, "1") = 0&&client_control_select=1)/ client_control_menu();/if(FD_ISSET(0, &readfds)while(1)/sleep(1000);printf("n"); loop1:client_control_menu(); bzero(information.client_control_cmd, sizeof(informatio

23、n.client_control_cmd); scanf("%s", information.client_control_cmd);if(strcmp(information.client_control_cmd, "7") = 0) goto loop;else if(strcmp(information.client_control_cmd, "8") = 0) strcpy(information.client_control_cmd, CLIENT_OFFLINE); write(skfd, &information

24、, sizeof(information); close(skfd); return 0; else if(strcmp(information.client_control_cmd, "9") = 0) printf("执照基本信息:n"); printf("姓名:%sn",); printf("身份证:%sn",information.id_Number); printf("手机号:%sn",information.number); else if(strcm

25、p(information.client_control_cmd, "0") = 0) strcpy(information.client_control_cmd, CLIENT_ARGISTER); ret = write(skfd, &information, sizeof(information); /printf("发送 的序号为: %sn", information.client_control_cmd); if(ret < 0) err_fun(_FILE_, _LINE_, "write", errno);

26、 else if( atoi(information.client_control_cmd)>0&&atoi(information.client_control_cmd)<7)printf("发送的的控制的序号为: %sn", information.client_control_cmd);ret = write(skfd, &information, sizeof(information);/printf("发送 的序号为: %sn", information.client_control_cmd);if(ret

27、< 0) err_fun(_FILE_, _LINE_, "write", errno);else printf("nn client_control_cmd error please input againn "); goto loop1; else if(strcmp(client_select, "2") = 0&&client_control_select=1) /if(FD_ISSET(skfd, &readfds)system("clear"); while(1)/ret

28、= read(skfd, &sense_buf, sizeof(sense_buf);/printf("client-11111-n"); bzero(buf, sizeof(buf);ret = read(skfd, buf, sizeof(buf);if(ret < 0) err_fun(_FILE_, _LINE_, "recv", errno);else if(ret > 0) printf("%sn", buf); else if(strcmp(client_select, "3")

29、= 0&&client_control_select=1) system("clear"); if(FD_ISSET(0, &readfds) /sleep(1000);ret = scanf("%s", information.client_control_cmd);if(ret > 0 && atoi(information.client_control_cmd)>0&&atoi(information.client_control_cmd)<7)printf("输入

30、的控制的序号为: %sn", information.client_control_cmd);ret = write(skfd, &information, sizeof(information);if(ret < 0) err_fun(_FILE_, _LINE_, "write", errno);else if(strcmp(information.client_control_cmd, "8") = 0) system("clear"); strcpy(information.client_control

31、_cmd, CLIENT_OFFLINE); write(skfd, &information, sizeof(information); close(skfd); return 0; else if(strcmp(information.client_control_cmd, "7") = 0) goto loop;printf("输入的控制的序号错误,请重新输入n"); if(FD_ISSET(skfd, &readfds) /ret = read(skfd, &sense_buf, sizeof(sense_buf); /p

32、rintf("client-11111-n"); bzero(buf, sizeof(buf); ret = read(skfd, &buf, sizeof(buf); /printf("如果输入8,将退出客户端n"); /printf("如果输入7,将返回客户端首页n"); if(ret < 0) err_fun(_FILE_, _LINE_, "recv", errno); else if(ret > 0) printf("%sn", buf); else if(clie

33、nt_control_select=0) system("clear"); printf("nn please register car oneself signal n "); else if(client_control_select=1) system("clear"); printf("nn you also register sucess n "); client_menu(); /client_menu();return 0;服务器#include "car_client_server.h&q

34、uot;#define SER_PORT 5010#define SERIP INADDR_ANY/自动获取可用ip#define ERR printf("%s %dn", _FILE_, _LINE_);void err_fun(char *file_name, int line, char *fun_name, int err_no) fprintf(stderr, "in %s, %d %s fail:%sn", file_name, line, fun_name, strerror(err_no);exit(-1);void socket_fun

35、(int *skfdp)int ret = -1;socklen_t optval = 1;struct sockaddr_in seraddr = 0;/* 创建套接字文件参数1:指定协议族参数2:指定套接字类型,SOCK_STREAM表示使用精确收发的协议参数3:如果协议有子协议的话,用来指定子协议,一般写0返回值:成功返回套接字文件描述符 */*skfdp = socket(PF_INET, SOCK_STREAM, 0);if(*skfdp < 0) err_fun(_FILE_, _LINE_, "socket", errno);ret = setsocko

36、pt(*skfdp, SOL_SOCKET, SO_REUSEADDR, (void *)&optval, sizeof(optval);/将optval设置1相当于ip地址可重用if(ret < 0) err_fun(_FILE_, _LINE_, "setsockopt", errno);/* 绑定端口,ip地址到网卡 */seraddr.sin_family = AF_INET; /定义地址族seraddr.sin_port= htons(SER_PORT);/设置端口号 seraddr.sin_addr.s_addr =htonl(SERIP); /设

37、置ip,将字符串转化为可用的ip地址ret = bind(*skfdp, (struct sockaddr *)&seraddr, sizeof(seraddr);/绑定端口if(ret < 0) err_fun(_FILE_, _LINE_, "bind", errno);/* 将skfd被动的用于监听的描述符,然后设置监听队列 */ret = listen(*skfdp, 50);if(ret < 0) err_fun(_FILE_, _LINE_, "listen", errno);int main(void) int skfd = -1, ret = -1, cfd = -1;char tmp130 = 0;/* 提示服务器已经开始运行 */printf("server is runningnn");/* 建立服务器的套接字 */so

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论