[实习目的]
通过对基于Linux物联网网关控制与数据采集系统的学习,进一步了解了Linux开发环境的架构,以及一些技术的使用方法和具体操作。其中包括了解多线程技术,socket通信技术,以及串口驱动和网口驱动,以及sqlite数据库技术等一些基本的技术。还有就是对所研究的课题的背景以及基本的内容做进一步的了解,增强自己的综合水平,所以说实习就是为毕业设计打好基础,乃至为将来的工作做好准备。
[实习时间]
20XX年2月29日—20XX年3月18日
[实习地点]
XXXX大学
[实习内容]
一、概述
物联网是指通过射频识别(RFID)、红外感应器、GPS、激光扫描器等信息传感设备,按约定的协议,实现任何时间、任何地点、任何物体进行信息交换和通信,以实现智能化识别、定位、跟踪、监控和管理的一种网络。物联网是具有全面感知、可靠传输、智能处理特征的连接物理世界的网络。
物联网网关作为一个新兴的名词,在未来的物联网时代将会扮演非常重要的角色,它将成为连接无线传感网络与传感通信网络的一个纽带,完成无线传感网络、传统通信网络以及其他不同类型网络之间的协议转换,实现局域和广域的数据互联。此外物联网网关还需要具备设备管理功能,运营商通过物联网网关设备可以管理底层的各感知节点,了解各节点的信息,实现远程控制。物联网网关设备是将多种接入手段整合起来,统一互联到接入网络的关键设备。它可满足局部区域短距离通信的接入需求,实现与公共网络的连接,同时完成转发、控制、信令交换和编解码等功能,而终端管理、安全认证等功能保证了物联网业务的质量和安全。物联网网关在未来的物联网时代将会扮演着非常重要的角色,可以实现感知延伸网络与接入网络之间的协议转换,既可以实现广域互联,也可以实现局域互联,将广泛应用于智能家居、智能社区、数字医院、智能交通等各行各业。
所以物联网网管技术的应用在现实生活中是十分广泛的甚至是必不可少的,在此次的实习中我选择了物联网网管控制和数据采集系统这个题目。
二、开发平台
Linux kernel 2.6+FriendlyARM6410+sqlite3
三、参考阅读的相关书籍
《基于物联网的智能网关系统》、《嵌入式Linux驱动程序和系统开发》、《嵌入式实时Linux操作系统开发》、《物联网网关设计基础》、《SQLite嵌入式数据库讲义》。
四、物联网网关控制系统的主要功能及任务
实现功能
1、管理功能:物联网网关首先是具有对各节点属性、状态等信息的获取,其次是对节点的控制功能。
2、协议转换与数据格式标准化:
网关应该要实现传感网络到传统通信网络的协议转换,将协议适配层上传输标准格式数据进行统一的封装,将广域接入层下发的数据解包成标准格式数据,实现命令的解析,之后转换为感知层协议可以识别的信号和控制指令。
3、源寻址技术:
物联网网关接入必然存在跨域通信的要求,因此需要完善的寻址技术,以确保所有节点的信息都能被准确、高效、安全的进行定位和查询。并且随着物联网技术的发展,节点地址的数量会越来越大,编码结构与DNS中的域名结构不同,因此需要有一套与互联网不同的寻址技术。
物联网网关的任务
收集传感器节点的数据,实现无线传感网络数据的采集和存储。实现数据协议的双向转换,将无线传感器数据发送到物联网云平台,或者将收集到的物联网云平台数据转换成无线数据,实现控制。将转换后的数据快速有效的发送到公共网络。
五、设计初期预想
1.网关系统的子系统设计
查阅资料后设计智能网关整体由三个子系统组成,分别是网关子系统、温度采集子系统、监控服务器子系统。
网关子系统:
智能网关的控制中心,是实现网关功能的核心部分,需要具备无线网络和现场总线接入、无线传感网络接入、数据协议转换、无线传感网络管理、数据存储和嵌入式服务器等功能。
温度采集子系统:
温度采集子系统相对于网管子系统较为简单,是整个智能网关系统的数据采集终端,主要实现数据采集功能、无线传感网络接入功能以及数据收发功能。
监控服务器子系统:
是智能网关的监控和管理中心。主要具备智能网关系统管理、数据存储以及数据库查看功能。
2、硬件及软件平台的选择
设计基于FriendlyARM开发平台,底层硬件为6410, 掌握基于6410ARM11的硬件接口,并掌握LINUX下的驱动程序设计原理和测试方法。操作系统底层为LINUX,上层开发平台为LINUX,实现物联网网关的功能。
3、系统通信方式的选择:
系统通信方式的选择主要有两部分,主要是确定采集子系统与网关子系统间的短距无线网络、网关子系统和监控服务器之间的远程无线网络的传输方式。
短距无线网络的通信方式选择
典型的短距离无线系统由一个无线发射器(包括数据源、调制器、RF源、RF功率放大器、天线、电源组成)和一个无线接收器(包括数据接收电路、RF调制器、译码器、RF低噪声放大器、天线、电源)组成。短距无线通信具有低成本,低功耗,对等通信这三个主要特征。有几种发展迅速并得到广泛应用的技术,在这些技术中根据我们实验的要求来选择其中的一种。
因为智能网关采集数据以文本为主,对网络的传输速率需求较低,但需要的网络覆盖范围较广,而且需要稳定运行,而且最好有较低的功耗,看下表的各项对比我们发现,Zigbee技术传输距离远、功耗低、网络容量大、扩展性强更满足功率采集子系统的要求。
远程无线网络的通信方式选择
远程无线网络是为了满足网关子系统和监控服务器子系统间远程数据的传输,在实际生活中常见的技术有无限分组业务(GPRS)、3G技术和卫星通信技术,根据这几种的特点选用3G技术,不仅在传输速率上有保证,系统容量也很大,抗干扰能力和稳定性也可以得到保证。
六、查询资料知识总结
1.Linux多线程通信
Linux多线程是基于Linux操作系统的多线程技术,称为pthread。其中的主要内容就是多任务程序的设计,并发程序设计,网络程序设计等。多线程是一种简洁的多任务操作方式,多线程运行于一个进程中,多个线程可以使用相同的地址空间,可以共享大多数据。对比进程和线程,可以发现线程有以下两个优点。首先,在多线程的设计中,可以避免重复启动进程,只需要在线程之间进行切换,这样就使得所消耗的时间和空间大大减少。其次,使用多线程可以共享同一进程下的数据空间,这样就避免了不同进程之间耗时的通信方式,使得线程之间的通信方便了许多。
总结多线程通信的优点有如下三个:
(1)多线程通信可以提高程序的响应速度,它可以将一个耗时很长的操作置于一个新的线程,避免长时间的等待。
(2)多线程通信可以将不同的线程运行于不同的CPU上,使多CPU系统更加有效,但是需要满足线程的个数小于CPU数的条件。
(3)我们可以将一个比较复杂的进程分为多个线程,使整个程序分为多个相对独立的部分,这样可以改善程序的结构,便于理解修改。
2.互斥锁mutux
在多线程编程中引入互斥锁,是为了保证数据操作的完整性。当互斥锁发挥作用的时候可以保证在一段时间内只有一个线程在执行一段代码。互斥锁的引入可以从另一角度上大大增加程序的效率,防止线程发生错误,并且保证了共享数据操作的完整性。而且互斥锁的加锁和解锁必须由同一个线程来完成。但是互斥锁的使用也有可能会出现死锁的情况:假如两个线程都需要同时占用两个资源,a线程锁定了互斥锁1,b线程了锁定互斥锁2,这时就出现了死锁。
3.Socket通信
Socket通信是指,网络上的两个程序可以通过一个双向协议来实现数据的交换,连接的一端就可以称为一个Socket。其实换句话说Socket也就是一种通过客户-服务器的模式来实现双向通信的技术,通过将双向通信的两端分为客户端和服务器端巧妙地解决了进程之间的通信连接的问题。Socket只是对Tcp/Ip协议栈的操作抽象,而不是简单的映射。
socket连接可以分为三个过程,首先服务器开始监听,其次客户端请求连接,最后服务器确认连接。
1.服务器开始监听:在网络中的服务器开始监听后随时处于等待连接的状态,实时监控是否有来自客户端的请求,但是套接字不会具体的定位客户端,这样的方式可以免漏掉请求内容。
2.客户端请求连接:客户端的套接字提出连接请求,等待目标端服务器的套接字连接。这次的请求与监听不同的是,客户端给出明确的请求目标,以便于准确的建立连接服务。
[实习体会]
实习只有短短的三周,在图书馆对自己的毕业设计学习,查阅资料以及规划的过程充满了乐趣,而且使我的获益匪浅。这次的实习让我明白了“读万卷书,行万里路”的道理,因为只有实践才能让我们所学有所用。没有实践,就没有真的理解,这对于我们的生活也好学习也罢都是实用的一句话。我也深深地体会到了大学期间实习的重要意义。通过这三周的校内实习,我基本上达到了此次实习的目的,不仅加强了理论知识,还提高了发现问题和解决问题的能力。通过这段时间的学习,我把我感兴趣的事情通过查阅资料的方式转换成了自己想要做的毕业设计——物联网网关控制,首先我规划了该设计应该完成的内容达到的效果,从预想的结果出发,设计出了网关的主要任务。其次我通过查阅一些数据将其中的系统大概分为几个子系统更加细化了我的设计内容,并且通过对比规划出了所选择的通信方式,这只是我此次实习学到内容的一部分。
这次校内实习让我受益匪浅,不仅加强了我的实践能力,也使我对计算机程序开发有了更大的兴趣和热情。使我拓宽了知识面,并将所吸收到得知识得以运用,为我的毕业设计打下了基础。这次实习更让我了解到了自己的不足:知识积累的太少,编程技术不熟练以及解决问题的能力不足,不能够很好的使用工具帮助自己等。但我仍然对未来的学习充满信心,我会继续努力,弥补我的不足,发展我的优势,在未来的日子里,静下心来认真学习,踏实做事,多用心,多动脑,加强自己的专业能力,不断地完善自我。
都说实习是每一个大学毕业生必须拥有的一段宝贵经历,而这次实习的意义,对我来说已不再是完成学分、完成任务那么简单,而是我真正在实践中进一步取长补短完善自己的过程,让我学到了很多在课堂上根本就学不到的知识,只有经历过实习我们才会更加知道自己的方向。同样这段时间的学习,让我明白了课内知识与实践结合的重要性。也明白了一个优秀的程序员必须不断的学习,随时总结,找到自己的不足,这样才能逐步提高,让自己迅速的成熟起来。