计算机控制工程复习含答案资料.docx
- 文档编号:24983297
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:14
- 大小:42.31KB
计算机控制工程复习含答案资料.docx
《计算机控制工程复习含答案资料.docx》由会员分享,可在线阅读,更多相关《计算机控制工程复习含答案资料.docx(14页珍藏版)》请在冰豆网上搜索。
计算机控制工程复习含答案资料
计算机控制工程复习题
一、填空题
1.根据计算机在控制中的典型应用,可将计算机控制系统划分为操作指导控制系统、直接数字控制系统、监督控制系统、分布式控制系统和现场总线控制系统。
2.计算机控制系统由硬件和软件两部分组成。
3.假设比特率为Bbps,一次谐波频率为B/8Hz,普通语音级线路截至频率为3000Hz,则允许通过最高谐波次数为24000/B。
4.数字通信系统主要技术指标为传输速率、出错率、信道容量。
5.实现数据交换方法主要有电路交换、报文交换及分组交换。
6.RS232串口标准传输方式为单端收发,RS485标准传输方式为平衡传输方式。
7.常用的软件调试方式有强行排错法、回溯排错法、归纳排错法及演绎排错法。
8.MSComm控件传输数据类型可分为纯文本数据和二进制数据。
9.使用WinAPI编写串口通信程序读写操作有同步和异步两种方式。
10.基于WinAPI串口通信程序数据接受主要有查询和事件驱动两种方式。
11.Windows多线程编程方式主要有Win32API、标准C库以及MFC类库三种方式。
12.在Windows多线程编程方式中,线程之间主要采用全局变量和自定义消息两种方式进行通信。
13.Win32API提供临界区、互斥对象、信号量及事件对象实现线程之间的同步。
14.控制网络和信息网络集成主要采用网络互联、动态数据交换及数据库技术。
15.软件体系结构主要包括B/S、C/S及单机三种模式。
二、简单题
1、试阐述网络体系结构、层次模型及协议之间的关系。
参考答案:
层次模型决定是网络模型的分层数及每层的功能定义;协议描述对等层之间的数据传输方式;网络体系结构包括层次模型及协议两个方面。
2、试阐述协议、服务、接口之间的关系;
参考答案:
服务即功能;接口即调用方式;协议则是服务的实现方式。
三者是紧密相关的。
3、在计算机和单片机通信过程中,考虑下位机(单片机)程序为测试程序,上位机(PC)程序为被测试程序,试举例说明二者正常数据采集(通信)过程。
参考答案:
4、试说明MSComm控件RThreshold属性含义。
参考答案:
该属性是一个阈值。
当接受缓冲区中字符数达到阈值时,MSComm控件产生OnComm事件,并且CommEvent属性会设置为ComEvReceive,即接受事件。
若设置为0时,则不论接受缓冲区中有多少字符,都不会产生OnComm事件。
5、试说明MSComm控件SThreshold属性含义。
参考答案:
该属性是一个阈值。
当发送缓冲区中的字符数达到阈值时,MSComm控件将产生OnComm事件,并且CommEvent属性被设置为CommEvSend值。
6、假设串口采用半双工方式,使用一问一答方式通信协议,接受数据长度存在10字节、15字节和20字节三种可能性的情况下,简要说明接受数据的实际处理方法。
参考答案:
置RThreshold为10,在OnComm事件中预读10个字节,判断是否完整帧。
若是完整帧,则设置InputLen为0或10,然后使用GetInput()读取即可。
否则设置InputLen为5,然后GetInput()读取,与前10个字节合并一帧,判断是否完整。
如是非完整帧则设置InputLen为5,然后GetInput()读取。
7、假设串口采用半双工方式,使用一问一答方式通信协议,接受数据长度长度不确定的情况下,简要说明接受数据实际处理方法:
参考答案:
数据通常包含有特定格式的数据头,可以通过数据头计算出整个数据帧的长度。
假定这些特定格式的数据头长度为10字节。
按照下述步骤处理:
设置RThreshold=10,在OnComm事件中首先设置InputLen=10,使用GetInput()函数读取缓冲区,并根据读取数据判断整个数据帧长度。
然后读取InBufferSize属性值,并判断该值是否为整个数据帧长度与10之差;若不是,则反复读取,直至该值为整个数据帧长度与10之差。
此时设置InputLen=0或InBufferSize值,并使用GetInput()函数读取缓冲区,将读取数据与前10个数据合并成一个完整的数据帧。
8、简要说明采用MSComm控件进行串口数据采集程序设计步骤。
参考答案:
加载控件;初始化及打开串口;事件处理;关闭串口;通信协议约定。
9、简要说明在基于对话框程序中使用MSComm控件的操作步骤。
参考答案:
拖放控件图标至窗口,创建控件ID;在对话框头文件申明CMSComm类变量及引用控件类头文件;创建CMSComm实例;建立控件事件响应代码框架。
10、简要说明WinAPI串口通信同步查询编程方式操作步骤。
参考答案:
CreateFile(非重叠方式);初始化串口句柄;WriteFile(发送数据);ReadFile(读取数据);CloseFile(关闭串口)。
11、简要说明WinAPI串口通信异步重叠I/O查询编程方式操作步骤。
参考答案:
定义全局变量;创建串口;发出读写操作;读写线程函数的建立;关闭串口;
12、简要说明Windows编程中HANDLE(句柄)的概念。
参考答案:
指针包含的是引用对象的内存地址,而句柄则是由系统所管理的引用标识,该标识可以被系统重新定位到一个内存地址上。
这种间接访问对象的模式增强了系统对引用对象的控制。
13、简要说明Windows多线程编程概念。
参考答案:
每个正在系统上运行的程序都是一个进程。
每个进程包含一到多个线程。
进程也可能是整个程序或者是部分程序的动态执行。
线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。
也可以把它理解为代码运行的上下文。
所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。
通常由操作系统负责多个线程的调度和执行。
线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同的工作,称为多线程。
线程和进程的区别在于子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定。
线程的运行中需要使用计算机的内存资源和CPU。
13、简要说明Windows中线程和进程的关系。
参考答案:
进程:
进程是一个程序实例;进程占据4GB地址空间,在该空间存放应用程序执行所需要的各种资源;Win32进程没有活力,是静态的。
线程:
线程是CPU调度计算任务的最小单位;Win32进程创建时,会自动创建一个主线程;主线程可以创建其它线程(辅助线程)。
14、简要说明Windows中终止线程的方法。
参考答案:
终止线程有三种方法:
线程函数自然退出;内部使用退出函数AfxEndThread\ExitThread\_endthread;外部使用TerminateThread函数。
15、如何在MFC类库中使用自定义消息实现线程之间通信?
参考答案:
(1)声明自定义消息:
在头文件顶部加入消息名称声明:
constWM_THREADMSG=WM_USER+100;
(2)声明消息响应函数:
在头文件
//}}AFX_MSG和“DECLARE_MESSAGE_MAP()”之间声明消息响应函数:
Afx_msgLONGOnThreadMsg(WPARAMwParam,
LPARAM,lParam)
(3).建立消息连接:
在实现文件//}}AFX_MSG_MAP和
“END_MESSAGE_MAP()”之间:
ON_MESSAGE(WM_THREADMSG,OnThreadMsg)
(4).编写消息响应函数:
在实现文件中,添加消息函数函数的实现体:
LONGCMyClass:
:
OnThreadMsg(WPARAMwParam,LPARAMlParam){
//加入响应函数的具体处理代码
}
(5).寄送自定义消息:
BOOLPostMessage(HWNDhWnd,UINTMsg,
WPARAMwParam,LPARAMlParam);
16、简要说明OSI/RM模型中物理层定义。
参考答案:
利用物理传输介质为数据链路层提供物理连接,以透明地传送比特流。
物理层实际上是设备之间的物理接口,它规定了机械特性、电气特性、功能特性及过程特性。
17、简要说明OSI/RM模型中数据链路层的主要功能。
参考答案:
提供可靠的比特流传输服务。
18、简要说明TCP/IP层次模型。
参考答案:
应用层、传输层(TCP/UDP)、互联网层、主机至网络层。
19、简要说明局域网参考模型中MAC子层的主要功能。
参考答案:
决定广播信道中信道分配协议的子层。
三、程序题及设计题
1、MSComm控件输入和读出数据均为VARIANT数据类型,考虑传输数据为纯文本,试编程实现从接受缓冲区中读取字符(给出C++代码片段)。
参考答案:
VARIANTinput;
charcharInput[100];
intcounts=m_COMM.GetInBufferCount();//m_COMM为MSComm控件对象
If(counts>0){
input=m_COMM.GetInput();
}
ASSERT(input.vt==VT_BSTR);
CStringstrInput(input.bstrVal)
strcpy(charInput,strInput);
2、MSComm控件输入和读出数据均为VARIANT数据类型,考虑传输数据为二进制,试编程实现从接受缓冲区中读取二进制数据(给出C++代码片段)。
参考答案:
VARIANTinput;
BYTErxdata[2048];
COleSafeArraysafeArray;
input=m_COMM.GetInput();//其中m_COMM为MSComm控件对象
safeArray=input;
longlen=safeArray.GetOneDimSize();
for(longk=0;k safeArray.GetElement(&k,rxdata+k); } 3.基于多线程技术、事件驱动方式实现串口双机数据通信程序,该程序即可作为发送方使用也可作为接受方使用。 其中传输数据小于64M;请求包、普通数据包、结束包及响应包帧格式表示如下。 请求包: 普通数据包: 结束包: 响应包: 请设计事件处理函数和消息响应函数的流程图。 参考答案: 事件处理函数处理流程图 消息响应函数处理流程图: 其中发送状态1态: 发送操作已经开始,请求包已经发出;2态: 第一个普通数据包已经发出,等待接受方响应;3态: 结束数据包已发送,等待接受方响应; 接受0态: 等待发送方请求包;1态: 等待接受普通或结束数据包。 四、程序阅读题 1、 HANDLEhCOM; hCOM=CreateFile(“COM2”, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, NULL); if(hCOM! =INVALID_HANDLE_VALUE){ SetupComm(hCOM,1024,1024); DCBmyDCB; GetCommState(hCOM,&myDCB); myDCB.BaudRate=CBR_19200; myDCB.fBinary=TRUE; myDCB.fParity=TRUE; myDCB.ByteSize=8; myDCB.Parity=ODDPARITY; myDCB.StopBit=ONESTOPBIT; SetCommState(hCOM,&myDCB);} Else{ AfxMessageBox(“创建串口失败! ”); } 参考答案: HANDLEhCOM;//申明句柄; hCOM=CreateFile(“COM2”,//使用串口2; GENERIC_READ|GENERIC_WRITE,//读写方式,可以接受及发送; 0,//不允许共享; NULL,//默认安全属性; OPEN_EXISTING,//打开已有端口,不能创建); //非重叠操作; NULL);//无模板文件 if(hCOM! =INVALID_HANDLE_VALUE){//成功创建 SetupComm(hCOM,1024,1024);//设置输入输出缓冲区大小 DCBmyDCB;//声明DCB数据结构 GetCommState(hCOM,&myDCB);//获取默认DCB设置 myDCB.BaudRate=CBR_19200;//波特率为19200 myDCB.fBinary=TRUE;//二进制通信方式 myDCB.fParity=TRUE;//允许奇偶校验 myDCB.ByteSize=8;//数据位为8 myDCB.Parity=ODDPARITY;//奇校验 myDCB.StopBit=ONESTOPBIT;//使用1位停止位 SetCommState(hCOM,&myDCB);}//设置通信参数。 Else{ AfxMessageBox(“创建串口失败! ”);//报错 } 2.设hCOM以重叠I/O方式打开,试解释说明下列代码的功能 DWORDThreadProcRead(LPVOIDpParam){ BYTEmyByte[20]; CStringmyStr; DWORDdwRes; DWORDdwRead; BOOLfRes; charmyChar[10]; Rol.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); if(Rol.hEvent==NULL){return-1;} if(Read,&myByte,3,NULL,&Rol)){ //AfxMessageBox(“成功读出! ”); }else{ dwRes=WaitForSingleObject(Rol.hEvent,5000); switch(dwRes){ CASEWAIT_OBJECT_0: if(! GetOverlappedResult(hCom,&Rol,&dwRead,TRUE){ //操作失败 }else{ //操作成功完成 } break; CASEWAIT_TIMEOUT: //读操作失败 break; default: //加入默认情况下的处理代码 break; } } CloseHandle(Rol.hEvent); return0; 参考答案: 在读线程函数中,首先应初始化重叠结构Rol的成员hEvent,将其设置为无信号状态。 (当读操作完成或出现通信错误时,该变量会被自动设置为有信号状态。 )接着使用ReadFile()函数发出读命令。 若该函数返回TRUE,说明读操作已经完成,可以处理读取的数据。 或该读函数返回FALSE,说明读操作未完成。 此时使用WaitForSingleObject()函数等待读操作的结果。 根据返回结构的不同,采取相应的处理代码。 3.解释说明相应变量及语句的含义。 实现文件中定义如下全局变量: HANDLEhCom; HANDLEhWnd; DWORDdwThreadID;// (1) HANDLEhThreadEvent;// (2) DWORDThreadProcEvent(LPVOIDpParam);//(3) boolhEventRun;//(4) boolfStopMsg;//(5) OVERLAPPEDEol={0};//(6) OVERLAPPEDWol={0}; OVERLAPPEDRol={0}; ThreadProcEvent定义如下: DWORDThreadProcEvent(LPVOIDpParam){ DWORDdwEvtMask,dwRes; Eol.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);//(7) while(fEventRun){//(8) WaitCommEvent(hCom,&dwEvtMask,&Eol);//(9) dwRes=WaitForSingleObject(Eol.hEvent,100);//(10) switch(dwRes){ caseWAIT_OBJECT_0: //(11) switch(dwEvtMask){ caseEV_RXDATA: //(12) if(! fStopMsg){ fStopMsg=true;//(13) : : PostMessage(hWnd,WM_MYMSG,0,(LPARAM)EX_RXCHAR);//(14) } break; caseEV_TXEMPTY: //(15) AfxMessageBox(“sendbufferisempty”); //添加相应处理代码 break; } break; } } returntrue; } 参考答案: (1)事件线程标识; (2)事件线程句柄; (3)事件线程函数; (4)事件线程函数内循环体执行条件; (5)事件线程停止向主线程发送消息的标志。 (6)事件线程Overlapped结构; (7)创建事件对象,设置为默认安全属性,手工重置,初始状态无信号,匿名事件对象; (8)允许循环体执行; (9)等待指定串口设备事件发生; (10)等待指定事件对象为有信号状态或延时100ms; (11)指定事件对象为有信号状态; (12)接受到一个字符并放入输入缓冲区; (13)阻塞消息;使得主线程有足够事件读取字符; (14)向主线程发送消息,从而使主线程执行真正的读取字符操作; (15)字符输出完毕。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机控制 工程 复习 答案 资料