网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计下载 > 电气工程与自动化类别 > 正文

嵌入式系统在多点温度控制中的应用

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

以下是网学网为您推荐的电气工程与自动化类别-嵌入式系统在多点温度控制中的应用,希望本篇文章对您学习有所帮助。

QQ交谈客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn

 

第五章 PC侧程序的设计
根据第四章的论述,为了实现对系统的监控和在线升级,需要在PC机侧完成相应的功能,同时也可以把系统的相关信息发送给PC机加以存储,以备以后分析利用。把测的温度值存储起来,在PC机上加以分析,有利于获得系统的特点,总结经验,更好的调节PID参数,完成对系统更有效快速的控制。
PC机侧程序的设计主要由两部分组成:通讯部分和ISP功能部分。根据它们的具体情况在实现时使用不同的协议。通信部分,要完成对系统的实时监控,既要发送控制命令,调节系统的运行状态和参数,也要读取相关信息,加以分析。由于信息类型较多,实现起来较复杂。相对而言ISP功能部分简单,除了对系统在线编程时要发送大量的数据信息外,其它的命令如片擦除、页擦除和保护功能,仅发送相关的命令即可完成。
在整个实际开发过程中,使用了如下开发条件:
    开发环境:Windows 2000 Server
    开发工具:Microsoft Visual C++ 6.0
在设计中使用了多线程技术。在Windows的一个进程内,通常包含一个或多个线程,线程是指进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享所有的进程资源,包括打开的文件、信号标识及动态分配的内存等等。一个进程内的所有线程使用同一个32位地址空间,而这些线程的执行由系统调度程序控制,调度程序决定哪个线程可执行和什么时候执行线程,线程有优先级别,优先权较低的线程必须等到优先权较高的线程执行完任务后再执行。在多处理器的机器上,调度程序可以把多个线程放到不同的处理器上运行,这样可以使处理器的任务平衡,也提高系统的运行效率。
5.1 PC机侧串行通信程序的设计
  使用MFC开发是较普遍的VC++编程方法。在VC++6.0下,MFC应用程序的线程由CWinThread对象表示。VC++把线程分为两种:用户界面线程和工作者线程。用户界面线程能够提供界面和用户交互,通常用于处理用户输入并响应各种事件和消息;而工作者线程主要用来处理程序的后台任务,程序一般不需要直接创建CWinThread对象,通过调用AfxBeginThread()函数就会自动创建一个CWinThread对象,从而开始一个进程。创建上述的两种线程都利用这个函数。
  线程的终止取决于下列事件之一:线程函数返回;线程调用ExitThread()退出;异常情况下用线程的句柄调用TerminateThread()退出;线程所属的进程被终止。
5.1.1程序设计的关键技术
多线程编程在串口通信中的应用中要考虑的问题:
1).串口通信对线程同步的要求
因为同一进程的所有线程共享进程的虚拟地址空间,而在Windows 9X/NT/2000系统下线程是汇编级中断,所以有可能多个线程同时访问同一个对象。这些对象可能是全局变量,MFC的对象,MFC的API等。
串口通信中,对于每个串口对象,只有一个缓冲区,发送和接收都要用到,必须建立起同步机制,使得在一个时候只能进行一种操作,否则通信就会出错。进行串口通信处理的不同线程之间需要协调运行。如果一个线程必须等待另一个线程结束才能运行,则应该挂起该线程以减少对CPU资源的占用,通过另一进程完成后发出的信号(线程间通信)来激活。
串口通信的几个特点决定了必须采用措施来同步线程的执行。为此,VC++提供了同步对象来协调多线程的并行,常用的有以下几种:
CSemaphore:信号灯对象,允许一定数目的线程访问某个共享资源,常用来控制访问共享资源的线程数量。
Cmutex:互斥量对象,一个时刻至多只允许一个线程访问某资源,未被占用时处于有信号状态,可以实现对共享资源的互斥访问。
CEvent:事件对象,用于使一个线程通知其他线程某一事件的发生,所以也可以用来封锁对某一资源的访问,直到线程释放资源使其成为有信号状态。适用于某一线程等待某事件发生才能执行的场合。

CCriticalSection:临界区对象,将一段代码置入临界区,只允许最多一个线程进入执行这段代码。一个临界区仅在创建它的进程中有效。

 

5.1.2.1 主要函数介绍
   1).串口设备初始化
初始化函数首先获得串口设备句柄,然后对其进行通信参数设置,包抱设置输入/输出缓冲区大小、超时控制和事件监视等。其中用到的函数有:
²       打开串口函数:
HANDLE CreateFile(
LPCTSTR lpFileName,//被打开的串口名,如“COM1”、“COM2”等
DWORD   dwDesiredAccess,//访问模式(读写模式)
DWORD   dwSharedMode,//共享模式
DWORD   LPSECURITY_ATTRIBUTES lpSecurityAttributes//安全描述符地址
DWORD   dwCreationDistribute,//如何打开文件
        DWORD   dwFlagsAndAttributes,//文件属性,
        HANDLE hTemplateFile//模板文件句柄
);
如果函数调用成功,则返回一个打开的串口句柄,否则返回INVALID_HANDLE_VALUE。
²       设置串口状态函数
先调用函数BOOL GetCommState(HANDLE hFile,LPDCB lpDCB)获得上面返回的串口句柄的确省dcb结构,修改相关参数后在调用
BOOL SetCommState(HANDLE hFile,LPDCB lpDCB)
函数完成对串口状态的设置。
其中,lpDCB是指向DCB结构的指针。DCB结构的参数项很多,主要包括波特率、数据位数、奇偶检验、停止位的设置等。如果函数调用成功则返回值为TRUE,否则返回值为FALSE。
²       缓冲区设置函数
可以调用下面的函数重新分配发送和接收缓冲区的大小。
BOOL SetupComm(HANDLE hFile,DWORD dwInQueue,DWORD dwOutQueue);
²       清除缓冲区函数
BOOL PurgeComm(HANDLE hFile,DWORD dwFlags)
如清除发送缓冲区,则参数dwFlags设置位PURGE_TX_CLEAR;如清除接收缓冲区,则参数dwFlags设为PURGE_RX_CLEAR。
²       创建监视事件函数
HANDLE CreateEvent(LPSECURITY_ATRRIBUTES lpEventAttributes,//事件的安全属性指针,为NULL时,不能被继承
BOOL bManualReset,//手工重置事件
BOOL bInitialState,//初始化状态,
LPCTSTR lpName);//事件对象的指针
在程序中,创建了三个人工重置、没发信号的事件
²       线程创建函数
利用函数CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL )来创建线程函数。参数pfnThreadProc为全局函数名,pParam为传递给全局函数的参数,与其保持一致。其他使用默认值。
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT

本文选自计算机毕业设计http://myeducs.cn
论文文章部分只是部分简介,如需了解更多详情请咨询本站客服!QQ交谈QQ3710167

  • 上一篇资讯: 医院病床呼叫系统
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师