24小时论文定制热线

热门毕设:土木工程工程造价桥梁工程计算机javaasp机械机械手夹具单片机工厂供电采矿工程
您当前的位置:论文定制 > 毕业设计论文 >
快速导航
毕业论文定制
关于我们
我们是一家专业提供高质量代做毕业设计的网站。2002年成立至今为众多客户提供大量毕业设计、论文定制等服务,赢得众多客户好评,因为专注,所以专业。写作老师大部分由全国211/958等高校的博士及硕士生设计,执笔,目前已为5000余位客户解决了论文写作的难题。 秉承以用户为中心,为用户创造价值的理念,我站拥有无缝对接的售后服务体系,代做毕业设计完成后有专业的老师进行一对一修改与完善,对有答辩需求的同学进行一对一的辅导,为你顺利毕业保驾护航
代做毕业设计
常见问题

基于Linux的环境智能监测模块的开发与性能测试

添加时间:2018/07/23 来源:计算机系统应用 作者:倪建云 董子昊 张荐
农作物生长状况的好坏将直接影响产量和收成, 如何实时有效地监控农作物的生长参数是当今以农产品为主的企业共同面对的问题.随着计算机系统的飞速发展, 嵌入式系统以其操作系统可移植、实时性好和软硬件可裁剪等特点。
以下为本篇论文正文:

  摘要:基于三星公司生产的ARM11内核的S3C6410, 在移植后的Linux系统下开发设计了环境智能监测模块, 具体开发了基于Qt的底层应用程序界面, 完成模块与现场传感器的串口通信, 获得农作物大棚的温度、CO2、湿度和光照度等参数.利用双缓冲技术, 以像素映射的方式编写了具有缩放功能的曲线显示控件, 实时反映各类参数的整体和局部变化趋势.通过开发字符设备驱动程序, 控制现场继电器设备使环境指标到达适宜标准.利用ASP.NET技术和异步刷新方式在服务器上编写并发布监测网页, 以socket的通信方式完成与智能模块的数据交互, 供用户远程登录访问, 确保农作物生长环境的适宜性和设备运行的安全性.

  关键词:S3C6410; Linux; Qt, 串口通信; socket通信; 字符设备驱动; ASP.NET;

  Abstract:An environment intelligent monitoring module is developed and designed under transplanted Linux system, based on the platform with ARM11 core-based S3C6410 as the main controller. This paper mainly develops intelligent monitoring interface based on Qt. With the serial communication between modules and sensors, users can obtain the parameters such as temperature, CO2, humidity and illuminance etc. in crops greenhouses. By using double buffer technique and pixel mapping, curve display controller is designed to reflect the global and local change trend of all kinds of parameters in the real time. Through developing a character device driver program, this module can control the relay equipment to keep environment indexes to the appropriate standards. Finally, the monitoring web page is designed and published on the server by ASP.NET technology and asynchronous refresh, with socket communication mode to complete data interaction with intelligent module. The users can remote login the system to ensure the suitability of crop growth environment and the safety of the equipment operation.

  Keyword:S3C6410; Linux; Qt, serial port communication; socket communication; character device driver; ASP.NET;

  农作物生长状况的好坏将直接影响产量和收成, 如何实时有效地监控农作物的生长参数是当今以农产品为主的企业共同面对的问题.随着计算机系统的飞速发展, 嵌入式系统以其操作系统可移植、实时性好和软硬件可裁剪等特点, 广泛应用于智能家居、物联网和工控等领域, 开源的特征也使得越来越多的工程师投入到嵌入式系统的开发和完善工作中去.

  农作物监测主要涉及到数据通信和处理两方面的内容, 这就要求所设计的智能监测模块第一要完成现场复杂的测控任务, 这些任务都具有一些实时性要求;第二要完成与局域网相连, 实现远程用户对监测模块的实时访问.因此, 选择的程序框架必须具备跨平台性、模块化和封装性较好的特点, 由于Qt把相关的数据结构和功能函数封装成类, 可同时使用在Windows和Linux系统平台下, 并且信号与槽[1]的引入让设计者不必过多关注对象内部的运行机制, 可以实现一个信号与多个槽的连接, 所以本文在Qt环境下进行软件开发, 完成环境模块的智能监测功能.

  1、环境智能监测模块的设计方案

  为了保证农作物的产量, 实时获取农作物的生长参数, 需要设计环境智能监测平台, 在此平台的基础上, 通过各类通信方法, 实现农作物大棚参数的实时获取和曲线显示、现场设备的控制以及网页的远程监测.

  农作物生长环境智能监测平台如图1所示, 主要包括环境智能监测模块、环境因子采集节点 (现场传感器设备) 、环境控制设备 (现场继电器设备) 和PC机4个组成部分.其中环境智能监测模块是整个平台的核心和枢纽, 它本身基于S3C6410的嵌入式开发套件, 在Qt环境下进行二次开发, 实现与环境因子采集节点的串口通信以及与PC机的SOCKET通信;通过开发字符设备驱动, 完成对现场继电器的自动和手动控制;双缓冲技术解决了曲线连续重绘等复杂问题.上位机网页实现整个平台的远程监测, 采用ASP.NET技术完成网页的生成和发布.

图1 农作物生长环境智能监测平台结构图(略)

  S3C6410是一款基于ARM1176JZF-S内核的16/32位RISC微处理器[2-4], 采用64/32位的内部总线架构, 集成硬件加速、格式编解码以及数据多种通信功能.存储器系统具有多个外部存储器端口、DRAM端口以及Flash端口.除了丰富的内部设备外, S3C6410也扩展了多个硬件外设, 本文采用S3C6410预留的GPIO扩展了控制继电器的应用.

  2、环境智能监测模块的开发设计

  环境智能监测模块[5]的程序设计主要包括串口通信程序、socket通信程序、GPIO字符设备驱动程序和曲线绘制程序4个组成部分.模块程序的运行流程是:监测模块首先打开串口通信程序, 实时获取现场传感器采集的温度、湿度、二氧化碳和光照度;然后启动服务器程序, 打开socket监听, 获得客户端的连接请求后, 建立socket网络连接;同时通过字符设备驱动程序里的Open、Read和Write等操作函数控制现场设备;最后, PC机的ASP.NET网页实时监测智能模块socket传送的4类参数, 并远程控制现场继电器设备.

  本文设计的程序结构图如图2所示.

图2 智能监测模块的程序结构图(略)

  2.1、基于Qt的串口通信程序设计

  在Linux系统中, 串口通信是基于串行端口终端 (Serial Port Terminal) 实现的, 它连接计算机串行接口, 对应的字符设备名称是/dev/tty SAC0、/dev/tty SAC1等, 因此对串口的打开、发送和接收实质上是对串行端口终端设备的操作.

  (1) S3C6410嵌入式系统的/dev路径下存有各类终端设备 (tty) 驱动, 其中串行端口终端tty SAC0用于输出系统的启动配置信息, 本文采用的串口对应于tty SAC3设备名称.

  (2) Qt下的串口通信采用了以下提供的几个库文件:

  qextserialbase.cpp和qextserialbase.h文件定义了一个Qext Serial Base类;

  qextserialport.cpp和qextserialport.h文件定义了一个Qext Serial Port类

图3 是这几个串口通信文件之间的关系框图.(略)

  (3) 完成串行端口终端对象及函数声明, 定义私有槽函数并完成信号与槽的连接.

  posix_Qext Serial Port*mush_control;//定义串口对象connect (timer, SIGNAL (timeout () ) , this, SLOT (send Msg () ) ) ;//定时发送数据

  connect (timer, SIGNAL (timeout () ) , this, SLOT (readcom () ) ) ;//定时读取串口

图3 串口通信文件之间的关系框图(略)

  (4) 初始化串口设置 (波特率、数据位等) , 采用Polling (轮询方式) 读取串口, 轮询机制的读写函数是同步执行的, 可以通过创建定时器, 实时读取串口的事件内容.

  mush_control=new Posix_Qext Serial Port ("/dev/tty SAC3", Qext Serial Base::Pollling) ;//轮询方式操作串口

  mush_control->open (QIODevice::Read Write) ;//读写方式打开串口

  (5) 采用posix_Qext Serial Port类的read All () 函数读取串口缓冲区[6]的所有数据赋值给临时变量, 并利用write () 函数实现二进制字的串口发送.

  2.2、基于Qt的服务器与多客户端间的socket通信程序设计

  在Qt环境下开发TCP网络程序, 需要解决多客户端访问同一服务器[7]的问题, 本文通过新建TCPServer类和TCPSocket类, 分别继承自Qt封装好的QTCPServer类和QTCPSocket类, 完成服务器和套接字的建立与连接, 从而实现了多客户端对远程服务器的实时访问.

  2.2.1、QTCPSocket类介绍

  QTCPSocket类传输的是连续的数据流, 适用于连续的数据传输.首先必须建立一个socket连接到远程的主机和端口, 使用Connect To Host () 函数与服务器进行连接, 一旦建立连接, 将返回一个connected () 信号.

  连接成功后便可以根据需要发送或接收数据, 使用write () 函数写入数据, read () 函数读取数据.当QTCPSocket收到新的数据时, ready Read () 信号就会被发送, 将该信号与处理该信号的槽函数相连, 实现相应的功能;服务器端的QTCPSocket创建是在监听到客户端连接请求时开始的, 利用QTCPSocket类建立客户端的流程图如图4所示.

图4 QTCPSocket类实现客户端的流程图(略)

  2.2.2、QTCPServer类介绍

  QTCPServer类用来处理可能到来的socket连接, 该类直接继承于QObject基类.通过调用listen () 设置服务器, 监听客户端的IP地址和端口;然后关联new Connection () 信号, 当收到客户端连接请求时就发射该信号.在信号槽中, 调用next Pending Connection () 函数实时接收该连接, 然后创建一个QTCPSocket对象与客户端进行通信.

  2.2.3、Qt的socket通信实现方法

  (1) 新建服务器类TCPServer, 继承自QTCPServer, 用于接收客户端的socket请求, 存储所有客户端信息, 并向主窗口发送信息.在这个类中最关键的是实例QTCPServer中的虚函数incoming Connection (int handle) , 重写这个虚函数, 参数为描述Socket ID的int变量, 当有socket请求时就会被系统触发, 该函数在QTCPServer检测到外来socket请求时, 会自动调用.

  (2) 新建TCPSocket类, 继承自QTCPSocket, 控制发送或接收数据, 并向TCPServer类发送相关信号.在TCPServer类的incoming Connection (int handle) 函数中, 通过设置Socket Descriptor, 初始化一个TCPSocket实例, 当有可读数据时, 该类将ready Read () 信号连接到emitready Read () 槽中, 同时发出一个读信号给TCPServer.

  (3) 定时接收和发送数据.当socket连接建立好后, 在TCPServer中将TCPSocket发送的ready Read Socket ( (QTcp Socket*) this) 信号连接到槽函数read Message (QTcp Socket*tcp Socket) , 调用Message SGN (string_read) 消息函数读取socket传送的数据, 同时调用QTcp Socket类的write方法发送服务器处理后的数据.

  2.2.4、QTCPServer类介绍

  QTCPServer类用来处理可能到来的socket连接, 该类直接继承于QObject基类.通过调用listen () 设置服务器, 监听客户端的IP地址和端口;然后关联new Connection () 信号, 当收到客户端连接请求时就发射该信号.在信号槽中, 调用next Pending Connection () 函数实时接收该连接, 然后创建一个QTCPSocket对象与客户端进行通信.

  2.2.5、Qt的socket通信实现方法

  (1) 新建服务器类TCPServer, 继承自QTCPServer, 用于接收客户端的socket请求, 存储所有客户端信息, 并向主窗口发送信息.在这个类中最关键的是实例QTCPServer中的虚函数incoming Connection (int handle) , 重写这个虚函数, 参数为描述Socket ID的int变量, 当有socket请求时就会被系统触发, 该函数在QTCPServer检测到外来socket请求时, 会自动调用.

  (2) 新建TCPSocket类, 继承自QTCPSocket, 控制发送或接收数据, 并向TCPServer类发送相关信号.在TCPServer类的incoming Connection (int handle) 函数中, 通过设置Socket Descriptor, 初始化一个TCPSocket实例, 当有可读数据时, 该类将ready Read () 信号连接到emitready Read () 槽中, 同时发出一个读信号给TCPServer.

  (3) 定时接收和发送数据.当socket连接建立好后, 在TCPServer中将TCPSocket发送的ready Read Socket ( (QTcp Socket*) this) 信号连接到槽函数read Message (QTcp Socket*tcp Socket) , 调用Message SGN (string_read) 消息函数读取socket传送的数据, 同时调用QTcp Socket类的write方法发送服务器处理后的数据.

  2.2.6、双缓冲技术在Qt曲线绘制中的应用

  在完成参数读取功能的基础上, 本文创建一个自定义窗口部件Plott实现了曲线的实时绘制, 通过缩放功能可以比较清楚地显示某段时间内各个环境参数的变化情况, 便于控制现场设备.双缓冲是一种图形用户界面编程技术[8,9], 它实质上是将窗口部件通过脱屏像素映射复制到显示器上, 解决了窗口部件重绘和计算复杂的问题, 同时还可以消除屏幕闪烁.下面介绍双缓冲技术在Qt曲线绘制中的应用.

  (1) 定义QPixmap类型变量, 对整个窗口部件绘制的数据进行复制保存, 为后续的脱屏像素绘图作准备.

  (2) 定义Plot Setting类设置曲线的坐标范围, 以及刻度标识符的数量, 建立曲线的整体框架轮廓.

  (3) 获取实时数据源, 在上述坐标区域内绘制实时曲线.采用容器类QVector<QPoint F>points存储实时数据对应的坐标点, 然后定义Set Curve Data函数, 完成对不同id号的曲线绘制, 其中refresh Pixmap函数是曲线绘制的核心方法.

  void Plott::set Curve Data (int id, const QVector<QPoint F>&data) {

  curve Map[id]=data;//数据存储到容器类中

  refresh Pixmap () ;//通过像素映射完成曲线绘制}

  refresh Pixmap函数主要完成数据到像素的转换, 初始化窗口部件, 通过像素映射的方式, 完成网格和曲线的绘制, 最后在规定的时间内由update () 实时刷新曲线.

  (4) 编写网格绘制函数draw Grid (QPainter*painter) 和曲线绘制函数draw Curves (QPainter*painter) , 前者通过两个循环体绘制网格垂直线和沿x轴方向的标识符, 以及网格水平线和沿y轴方向的标识符, 后者以while循环体的方式遍历构成曲线的每个顶点值, 获取每条曲线的ID号, 最后将曲线顶点保存到一个容器类里, 描点连线.

  (5) 将上述像素映射复制到窗口的 (0, 0) 坐标处, 完成图形的绘制工作.

  为更好地确定实时曲线的局部变化情况, 本文完成了曲线的局部缩放, 本质就是改变曲线对应区域的横轴坐标值, 并定义合适的放大或者缩小倍数, 其功能的实现主要是在adjust Axis函数里, 函数参数分别为max (最大值) 、min (最小值) 和num Ticks (刻度数目) .

  (1) 确定两个标识符的合适距离, 即步长, 并计算总步长;

  (2) 采用以10为底的对数运算外加取整的方式, 求取第一候选步长值, 表示形式为10n, 同理求得第二候选步长值2?10n和第三候选步长值5?10n;

  (3) 利用上述步长值, 推算max (最大值) 、min (最小值) 和num Ticks (刻度数目) , 并最终确定缩放倍数.

  除了上述基本设置外, 还要考虑曲线缩放对各顶点所产生的重绘影响, 这里定义了堆栈QVector<Plot Setting>zoom Stack存放不同缩放等级, 然后整型值cur Zoom在堆栈中保存曲线设置的索引值.图5是环境监测模块实时曲线图.

图5 环境监测模块实时曲线图
图5 环境监测模块实时曲线图

  2.2.9、GPIO字符设备的驱动开发

  GPIO (General Purpose I/O Ports) 是通用输入/输出接口, 它是由GPx CON寄存器配置并选择引脚功能, 并由GPx DAT寄存器读写引脚, 完成高低电平的输出.本文控制的现场设备为继电器, 采用S3C6410芯片的GPF5~GPF10引脚来实现启停控制.由于整个智能模块的开发和设计是在Linux内核的基础上完成的, 模块的各个部分互相联系, 密不可分, 因此需要将GPIO的控制功能以驱动程序的形式编入内核, 一般通过动态加载的方式.

  Linux驱动程序包括字符设备驱动、块设备驱动和网络设备驱动三类, 由于对GPIO的读写过程采用字节流的方式, 因此GPIO属于字符设备, 它的功能实现需要寄托于驱动程序和测试程序两部分.下面介绍这两部分程序的设计过程.

  (1) GPIO字符驱动程序设计.在GPIO驱动程序中, file_operations结构体是字符设备驱动的核心, 应用程序对设备文件的打开、读取和写入操作, 都最终会调用该结构体中对应的.open () 、.read () 和.write () 函数, 实现对底层硬件的相关操作.以下是该结构体的部分组成:

  static struct file_operations dev_fops={

  自动创建的_this_module变量

  .unlocked_ioctl=sbc6410_relay_ioctl, };

  驱动程序通过调用sbc6410_relay_ioctl (struct file*filp, unsigned int cmd, unsigned long arg) 函数来实现对字符设备的引脚配置, 对GPIO字符设备GPx CON寄存器的配置是在入口函数dev_init (void) 函数中进行的, 最后通过misc_register (&misc) 函数将该GPIO设备注册到内核.由于本文采用动态加载的方式, 因此如果想在开机后立即加载mini6410_relay.ko驱动程序, 就需要在嵌入式系统的etc/init.d/rc S路径下, 加入insmod/lib/modules/2.6.38-Friendly ARM/mini6410_rela y.ko”即可实现该功能.

  完成字符驱动程序设计后, 还需制作Makefile配置文件, 由于运行在目标板上, 因此要用交叉编译工具编译[10,11], 编写其中指定的交叉编译工具项目:

  CFLAGS=-Wall-O2

  CC=arm-linux-gcc INSTALL=install

  (2) GPIO字符驱动测试程序设计.主要分为打开驱动设备、操作驱动设备以及关闭驱动设备三部分.

  fd=open ("/dev/relay0", 0) ;//打开设备

  ioctl (fd, on, relay_no) ;//操作该设备, 如输入“relay 0 1”, 表示打开GPF5口

  close (fd) ;//关闭设备

  3、智能监测模块的性能测试

  3.1、通信模块测试

  3.1.1、串口通信模块测试

  智能监测模块的监测功能主要由串口通信模块实现的, 通过RS485总线与现场传感器建立连接, 每隔1s经串口通信程序向传感器发送modbus查询报文, 传感器会立刻返回响应报文, 这时读取并对报文进行分割处理和数学运算, 获得温度、湿度、二氧化碳和光照度.智能模块的实时监测界面如图6所示.

  智能监测模块的监测功能主要由串口通信模块实现的, 通过RS485总线与现场传感器建立连接, 每隔1s经串口通信程序向传感器发送modbus查询报文, 传感器会立刻返回响应报文, 这时读取并对报文进行分割处理和数学运算, 获得温度、湿度、二氧化碳和光照度.智能模块的实时监测界面如图6所示.

图6 智能模块的实时监测界面
图6 智能模块的实时监测界面

  3.1.2、socket通信模块测试

  ASP.NET[12]是一种建立在通用语言上的程序构架, 可在服务器上生成功能强大的web应用程序, 为了满足监测系统远程实时监测的功能, 本文在visual studio2010环境下编写并发布动态网页并以.aspx的格式存储, 可以随时更新网页内容, 但是仅仅拥有一个可调试环境并不能访问远程网页, 而IIS (Internet Information Service) 提供了一个可使用的ASP.NET环境, 因此在服务器上需要安装Internet信息服务 (IIS) .安装完成后, 在“Internet信息服务器”的默认网站下建立一个虚拟目录, 并将生成并发布的web文件存放到该虚拟目录的路径下.右击“默认网站”选项, 选择“属性”命令, 通过对话框设置IP地址、端口以及ASP.NET版本.图7是IIS对ASP.NET网页的配置界面.

图7 IIS对ASP.NET网页的配置界面
图7 IIS对ASP.NET网页的配置界面

  通过以上配置, 远程用户就可以在浏览器的地址栏内输入IP地址, 像访问常规网页一样访问监测站点.为了满足用户实时监测环境参数的需求, 本文在ASP.NET网页中加入定时器控件, 但这会造成网页定时刷新, 从而引起监测界面不断闪烁的问题, 因此引入了异步刷新机制, 采用Update Panel和Script Manager控件只完成参数监测区和状态监测区的实时刷新, 网页的其他部分不再刷新.

  图8是采用异步刷新方法设计的ASP.NET网页应用程序, 分为参数监测区、设备状态指示区和参数控制区三部分, 其中状态指示功能采用了拼接报文的方式, 即在原modbus报文的尾部增加设备状态标志位, 这样有效地实现了农作物生长环境的远程监控.

图8 上位机ASP.NET网页应用程序
图8 上位机ASP.NET网页应用程序

  3.2、驱动模块测试

  GPIO字符设备的驱动模块测试采用LED灯的亮灭模拟现场继电器的通断, 在超级终端里, 输入以下命令行即可实现对GPIO管脚高低电平的切换控制.

  relay0 1 0//relay0设备名1表示设备开//0表示设备号

  对应于Qt的程序代码为:ioctl (m_fd, int (ui->temper->is Checked () ) , 0) ;

  图9为驱动模块实验测试图, 左图的6个LED灯对应右侧界面的6个开关按钮, 由图可以看出, 由于现场环境的温度和湿度低于平均标准, 因此升温控制和加湿器控制的GPIO管脚是处于高电平的, 现场继电器闭合, 打开空调的升温开关和加湿器开关.

图9 GPIO驱动模块的实验测试图
图9 GPIO驱动模块的实验测试图

  4、结语

  本文在ARM11-Linux平台上, 开发了一种环境智能监测模块.编写基于Qt的串口通信、socket通信程序以及字符设备的驱动程序, 实现了现场环境参数的远程采集和传输, 使工作人员能够通过远程网页实时监测现场环境参数以及控制继电器设备.本文后续工作是在ASP.NET网页的基础上, 完成实时数据存储, 实现与数据库之间的数据交互, 便于查看农作物的历史环境参数, 同时增加决策机制, 保障农作物生长环境的稳定性.

  参考文献
  [1]纪君峰.基于QT/E的嵌入式系统研究及应用[硕士学位论文].北京:北京邮电大学, 2008.
  [2]杨晨.基于ARM11和Linux的室内环境监测系统的设计与实现[硕士学位论文].沈阳:沈阳工业大学, 2013
  [3]夏明.基于Linux的嵌入式监控系统软件平台研究与设计[硕士学位论文].南京:南京理工大学, 2007.
  [4]李宇丽.基于ARM的嵌入式Linux系统的研究及应用[硕士学位论文].西安:西安电子科技大学, 2007.
  [5] Kumar PN, Sharma NSM.Design and implementation of ARM intelligent monitoring system using Zigbee.International Journal of Research in Computer and Communication technology, 2012, 1 (7) :465-470.
  [6]严贤, 韩秀玲.基于Qt的串口通信应用研究与实现.微计算机信息, 2012, (8) :114-116.
  [7]黄翩, 张琼, 祝婷.基于Qt的一个服务器多个客户端的TCP通信.电子科技, 2015, 28 (3) :76-78, 82.
  [8] Blanchette J, Summerfield M.C++GUI Programming with Qt4.Beijing:Publishing House of Electronics Industry, 2008.
  [9] Patel U, Chavda V.Real time monitoring system based on embedded Linux application.IJEDR, 2014, 2 (2) :1850-1854.
  [10]王芳, 王凯, 王先超.基于ARM-Linux与DS18B20的温度监测系统.计算机工程与设计, 2010, 31 (12) :2736-2739.
  [11]程科.嵌入式Linux设备驱动程序的设计与研究[硕士学位论文].成都:电子科技大学, 2007.
  [12]匡松, 张淮鑫.C#开发宝典.北京:中国铁道出版社, 2010.

相关内容
相关标签:Linux毕业设计
好优论文定制中心主要为您提供代做毕业设计及各专业毕业论文写作辅导服务。 网站地图
所有论文、资料均源于网上的共享资源以及一些期刊杂志,所有论文仅免费供网友间相互学习交流之用,请特别注意勿做其他非法用途。
如有侵犯您的版权或其他有损您利益的行为,请联系指出,论文定制中心会立即进行改正或删除有关内容!