资源描述
计算机控制工程计算机控制工程计算机控制工程第五章第五章 WinAPI串口编程串口编程 事件驱动方式事件驱动方式3 同步查询方式同步查询方式1 重叠重叠IO方式方式2 编程实例编程实例接受接受4 编程实例编程实例-发送发送5 程序发布程序发布6计算机控制工程第五章第五章 WinAPI串口编程串口编程WinAPI串口通信程序设计具有很强的灵活性。串口通信程序设计具有很强的灵活性。数据接收主要分为两种方式:数据接收主要分为两种方式:查询式(或定时)查询式(或定时)串口编程方式;串口编程方式;事件驱动事件驱动串口编程方式串口编程方式数据读写操作主要分为两种方式:数据读写操作主要分为两种方式:同步方式同步方式 异步重叠操作方式异步重叠操作方式当读写时间较长时,当读写时间较长时,主程序被挂起主程序被挂起计算机控制工程第一节第一节 同步查询方式编程方法同步查询方式编程方法1、CreateFile()函数函数是是一一个个通通用用的的创创建建或或打打开开文文件件的的函函数数,在在WinAPI编编程程中中,它它不不仅仅仅仅可可以以操操作作文文件件,也也可可以以操操作作串串口口。使使用用该该函数可以打开一个串口,并返回一个句柄。函数可以打开一个串口,并返回一个句柄。计算机控制工程HANDLE CreateFile LPCTSTRlpFileName,DWORDdwDesiredAccess,DWORDdwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes,DWORDdwCreationDispositionDWORDdwFlagsAndAttributes,HANDLEhTemplateFile第一节第一节 同步查询方式编程方法同步查询方式编程方法用字符串标识打开的用字符串标识打开的串口编号,如串口编号,如“COM1COM1”GENERIC_READ|GENERIC_WRITE共享模式:共享模式:0;不允;不允许共享许共享安全属性:安全属性:NULL,默认安全属性默认安全属性OPEN_EXISTING,只能打开默认串口。只能打开默认串口。FILE_ATTRIBUTE_NORMAL:FILE_ATTRIBUTE_OVERLAPPED:重叠操作重叠操作NULL计算机控制工程第一节第一节 同步查询方式编程方法同步查询方式编程方法2、SetupComm()函数函数设置串口输入缓冲区及输出缓冲区大小设置串口输入缓冲区及输出缓冲区大小BOOL SetupComm HANDLEhFile,DWORDdwInQueue,DWORDdwOutQueue指向一个串口设备指向一个串口设备句柄句柄指示输入缓冲区大小,指示输入缓冲区大小,单位字节。单位字节。指示输出缓冲区大小,指示输出缓冲区大小,单位字节。单位字节。计算机控制工程第一节第一节 同步查询方式编程方法同步查询方式编程方法3、DCB数据结构数据结构串串口口通通信信中中,使使用用该该数数据据结结构构存存放放通通信信参参数数。由由于于该该结结构构包包括括通通信信参参数数很很多多,逐逐个个设设置置不不方方便便。通通常常做做法法是是将将当当前前设设置置值值读读出出到到一一个个DCB结结构构中中,然然后后根根据据需需要要修修改改该该DCB结结构构中中某某些些参参数数,再再用用该该结结构构来来设设置置串串口口通通信参数信参数。通常需要设置:。通常需要设置:BuadRate,fBinary,fParity,ByteSize,Parity,StopBits。参阅:参阅:http:/ 同步查询方式编程方法同步查询方式编程方法4、SetCommState()函数函数BOOL SetCommState()HANDLE hFile,/设置串口句柄设置串口句柄LPDCB lpDCB /指向指向DCB结构变量指针结构变量指针5、GetCommState()函数函数BOOL GetCommState()HANDLE hFile,/设置串口句柄设置串口句柄LPDCB lpDCB /指向指向DCB结构变量指针结构变量指针计算机控制工程第一节第一节 同步查询方式编程方法同步查询方式编程方法6、举例说明、举例说明HANDLE hCOM;/申明句柄;申明句柄;hCOM=CreateFile(“COM2”,/使用串口使用串口2;GENERIC_READ|GENERIC_WRITE,/读写方式;读写方式;0,/不允许共享;不允许共享;NULL,/默认安全属性;默认安全属性;OPEN_EXISTING,/打开(而非创建);打开(而非创建);FILE_ATTRIBUTE_NORMAL,/非重叠操作;非重叠操作;NULL);/无模板文件无模板文件计算机控制工程第一节第一节 同步查询方式编程方法同步查询方式编程方法if(hCOM!=INVALID_HANDLE_VALUE)SetupComm(hCOM,1024,1024);DCB myDCB;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(“创建串口失败!创建串口失败!”););计算机控制工程关闭串口关闭串口二第一节第一节 同步查询方式编程方法同步查询方式编程方法BOOL CloseHandle(HANDLE hObject);发送数据发送数据三BOOL WriteFile(HANDLE hFile,LPVOID lpBuffer,DWORDnNumberOfBytesToWrite,LPDWORD lpNumberOfBytesWriteen,LPOVERLAPED lpOverlapped);指向重叠结构变量的指针,使用重叠结构时指向重叠结构变量的指针,使用重叠结构时必须设置该成员,否则为必须设置该成员,否则为NULL计算机控制工程接受数据接受数据四第一节第一节 同步查询方式编程方法同步查询方式编程方法BOOL ReadFile(HANDLE hFile,LPVOIDlpBuffer,DWORDnNumberOfBytesToRead,LPDWORD lpNumberOfBytesRead,LPOVERLAPPEdlpOverlapped);计算机控制工程第一节第一节 同步查询方式编程方法同步查询方式编程方法定时接受数据的方法定时接受数据的方法五要要实实现现定定时时接接受受数数据据,需需要要使使用用定定时时器器,然然后后将将接接受受数数据的操作放在定时器的响应事件函数中。据的操作放在定时器的响应事件函数中。1.编编写写定定时时器器响响应应函函数数。为为全全局局函函数数,不不属属于于任任何何类类,直接在直接在cpp文件中书写。文件中书写。VOID CALLBACK TimerProc(HWND hwnd,/发出定时器消息窗口的句柄发出定时器消息窗口的句柄 UINT uMsg,/WM_TIMER消息消息UINT idEvent,/定时器定时器IDDWORD dwTime)/当前系统时间当前系统时间/加入操作代码加入操作代码计算机控制工程第一节第一节 同步查询方式编程方法同步查询方式编程方法2.启动定时器。启动定时器。UINT SetTimer(HWNDhWnd;/与定时器关联串口句柄与定时器关联串口句柄UINTnIDEvent;/定时器标识符定时器标识符 UINTuElapse;/定时时间值定时时间值TIMERPROClpTimerFunc/定时器响应函数地址指针定时器响应函数地址指针););3.关闭定时器。关闭定时器。BOOL KillTimer(HWNDhWnd;/与定时器关联串口句柄与定时器关联串口句柄UINTnIDEvent;/定时器标识符定时器标识符););计算机控制工程第二节第二节 采用重叠采用重叠I/O方式编程方法方式编程方法采采用用同同步步方方式式的的查查询询方方式式读读取取数数据据时时,由由于于读读取取操作耗费较长的时间,程序会被挂起。操作耗费较长的时间,程序会被挂起。解决方式之一:解决方式之一:采用重叠采用重叠I/O操作操作。编程步骤:编程步骤:定义全局变量;定义全局变量;创建串口;创建串口;发出读写操作;发出读写操作;读写线程函数的建立;读写线程函数的建立;关闭串口;关闭串口;读写数据操作在单独的线读写数据操作在单独的线程中进行,当读写数据成程中进行,当读写数据成功后,读写数据线程可以功后,读写数据线程可以通过某种方式通知主线程。通过某种方式通知主线程。两个线程协调工作,可以两个线程协调工作,可以明显提高程序的效率明显提高程序的效率计算机控制工程第二节第二节 采用重叠采用重叠I/O方式编程方法方式编程方法定义全局变量定义全局变量一在主对话框的实现文件中定义在主对话框的实现文件中定义全局变量全局变量。HANDLE hCom/串口句柄;串口句柄;HANDLE hTreadWrite;/写线程句柄写线程句柄HANDLE hTreadRead;/读线程句柄读线程句柄HWND hWnd;/窗口句柄窗口句柄DWORD ThreadProcWrite(LPVOID pParam)/写线程函数写线程函数DWORD ThreadProcRead(LPVOID pParam)/读线程函数读线程函数 OVERLAPPED Wol=0;/写操作结构变量写操作结构变量OVERLAPPED Rol=0;/读操作结构变量读操作结构变量计算机控制工程第二节第二节 采用重叠采用重叠I/O方式编程方法方式编程方法创建串口创建串口二可以设置为在按钮单击事件或主对话框初始化函数中执行。可以设置为在按钮单击事件或主对话框初始化函数中执行。hCom=CreateFile(“COM2”,GENERIC_READ|GENERIC_WRITE,0,/share modeNULL,/security attributesOPEN_EXISTING,FILE_ATTRIBUTE_OVERLAPPED,NULL);/template file.计算机控制工程第二节第二节 采用重叠采用重叠I/O方式编程方法方式编程方法if(hCom!=INVALID_HANDLE_VALUE)SetupCOMM(hCOM,1024,1024);DCB myDCB;GetCommState(hCOM,&myDCB);myDCB.BaudRate=CBR_19200;myDCB.fBinary=TRUE;myDCB.fPariry=TRUE;myDCB.ByteSize=8;myDCB.Parity=ODDPARITY;myDCB.StopBit=ONESTOPBIT;SetCommState(hCOM,&myDCB);else AfxMessageBox(“创建串口失败创建串口失败”);hWnd=GetSafeHwnd();计算机控制工程第二节第二节 采用重叠采用重叠I/O方式编程方法方式编程方法发出读写操作命令发出读写操作命令三读写操作可以设置在按钮单击事件代码中。读写操作可以设置在按钮单击事件代码中。1、读操作:只是启动读线程,实际操作在读线程中完成。、读操作:只是启动读线程,实际操作在读线程中完成。计算机控制工程第二节第二节 采用重叠采用重叠I/O方式编程方法方式编程方法DWORD dwThreadID;DWORDdwParam;hThreadRead=CreateThread(NULL,/默认安全属性默认安全属性0,/默认堆栈大小默认堆栈大小(LPTHREAD_START_ROUTINE)ThreadProcRead,&dwParam,/传递参数传递参数0,/创建线程后,立即执行该线程创建线程后,立即执行该线程&dwThreadID);if(hTreadRead=NULL)AfxMessageBox(“读读线线程程创创建建失失败败!”);计算机控制工程第二节第二节 采用重叠采用重叠I/O方式编程方法方式编程方法2.写写操操作作:在在写写操操作作中中只只是是启启动动写写线线程程。实实际际操操作作在在写写线线程程函函数数中完成。中完成。DWORD dwThreadID;DWORDdwParam;hThreadWrite=CreateThread(NULL,/默认安全属性默认安全属性0,/默认堆栈大小默认堆栈大小(LPTHREAD_START_ROUTINE)ThreadProcWrite,&dwParam,/传递参数传递参数0,/创建线程后,立即执行该线程创建线程后,立即执行该线程&dwThreadID);if(hThreadWrite=NULL)AfxMessageBox(“写写 线线 程程 创创 建建 失失 败败!”);计算机控制工程第二节第二节 采用重叠采用重叠I/O方式编程方法方式编程方法读写线程函数的建立读写线程函数的建立四读读写写实实际际操操作作在在读读写写线线程程函函数数中中执执行行,这这两两个个函函数数都都是是全全局函数,应该在主对话框的实现文件中书写代码。局函数,应该在主对话框的实现文件中书写代码。1、读线程函数、读线程函数在在读读线线程程函函数数中中,首首先先应应初初始始化化重重叠叠结结构构Rol的的成成员员hEvent,将将其其设设置置为为无无信信号号状状态态。(当当读读操操作作完完成成或或出出现现通通信信错错误误时时,该该变变量量会会被被自自动动设设置置为为有有信信号号状状态态。)接接着着使使用用ReadFile()函函数数发发出出读读命命令令。若若该该函函数数返返回回TRUE,说说明明读读操操作作已已经经完完成成,可可以以处处理理读读取取的的数数据据。或或该该读读函函数数返返回回FALSE,说说明明读读操操作作未未完完成成。此此时时使使用用WaitForSingleObject()函函数数等等待待读读操操作作的的结结果果。根根据据返返回回结结构构的的不不同同,采采取取相相应的处理代码。应的处理代码。计算机控制工程第二节第二节 采用重叠采用重叠I/O方式编程方法方式编程方法DWORD ThreadProcRead(LPVOID pParam)BYTEmyByte20;CStringmyStr;DWORDdwRes;DWORDdwRead;BOOLfRes;charmyChar10;Rol.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);if(Rol.hEvent=NULL)return-1;if(ReadFile(hCom,&myByte,3,NULL,&Rol)/AfxMessageBox(“成功读出!成功读出!”);else /见后面见后面 CloseHandle(Rol.hEvent);return 0;计算机控制工程第二节第二节 采用重叠采用重叠I/O方式编程方法方式编程方法dwRes=WaitForSingleObject(Rol.hEvent,5000);switch(dwRes)CASE WAIT_OBJECT_0:if(!GetOverlappedResult(hCom,&Rol,&dwRead,TRUE)/操作失败操作失败 else/操作成功完成操作成功完成break;CASE WAIT_TIMEOUT:/读操作失败读操作失败break;default:/加入默认情况下的处理代码加入默认情况下的处理代码break;计算机控制工程第二节第二节 采用重叠采用重叠I/O方式编程方法方式编程方法计算机控制工程第二节第二节 采用重叠采用重叠I/O方式编程方法方式编程方法计算机控制工程第二节第二节 采用重叠采用重叠I/O方式编程方法方式编程方法A pointer to a variable that receives the number of bytes that were actually transferred by a read or write operation.计算机控制工程第二节第二节 采用重叠采用重叠I/O方式编程方法方式编程方法2、写线程函数、写线程函数写写线线程程首首先先初初始始化化Wol和和hEvent事事件件成成员员,然然后后发发出出写写命命令令WriteFile()。若若该该写写命命令令返返回回TRUE,说说明明操操作作成成功功完完成成;若若写写命命令令返返回回FALSE,说说明明写写操操作作没没有有完完成成。使使用用WaitForSingleObject函函数数等等待待写写操操作作的的结结果果,根根据据返返回回结结果的不同,采取相应的处理代码:果的不同,采取相应的处理代码:计算机控制工程DWORD ThreadProcWrite(LPVOID pParam)BYTE myByte9;CString myStr;int i;DWORD dwRes;DWORD dwWrite;BOOL fRes;char myChar10;for(i=0;i=9;i+)myBytei=i;Wol.Internal=0;Wol.InternalHigh=0;Wol.Offset=0;WolOffsetHigh=0;Wol.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);if(Wol.hEvent=NULL)return-1;第二节第二节 采用重叠采用重叠I/O方式编程方法方式编程方法计算机控制工程if(WriteFile(hCom,&myByte,3,NULL,&Wol)|/发送成功发送成功else dwRes=WaitForSingleObject(Wol.hEvent,500);switch(dwRes)case WAIT_OBJECT_0:if(!GetOverlappedResult(hCom,&Wol,&dwWrite,TRUE)/操作失败操作失败 else/成功成功 break;case WAIT_TIMEOUT:/超时失败超时失败break;default:break;CloseHandle(Wol.hEvent);return 0;第二节第二节 采用重叠采用重叠I/O方式编程方法方式编程方法计算机控制工程第二节第二节 采用重叠采用重叠I/O方式编程方法方式编程方法关闭串口关闭串口五CloseHandle(hCom);计算机控制工程第三节第三节 事件驱动方式事件驱动方式串串口口通通信信数数据据到到来来是是随随机机的的,那那么么采采用用查查询询方方式式非非常浪费系统资源。常浪费系统资源。如何实现有数据到来时,程序自动接收?如何实现有数据到来时,程序自动接收?-事件驱动方式。事件驱动方式。工工作作原原理理:建建立立一一个个事事件件线线程程,监监视视串串口口的的事事件件和和错错误误信信息息。当当有有事事件件或或错错误误发发生生时时,向向主主线线程程发发送送一一个个Windows消消息息;主主线线程程在在消消息息响响应应函函数数中中处处理理已发生的事件或错误。已发生的事件或错误。计算机控制工程第三节第三节 事件驱动方式事件驱动方式实现步骤:实现步骤:1.定义全局变量;定义全局变量;2.创建串口;创建串口;3.开启事件线程;开启事件线程;4.发送数据;发送数据;5.自定义消息;自定义消息;6.关闭串口;关闭串口;7.关闭事件线程关闭事件线程计算机控制工程第三节第三节 事件驱动方式事件驱动方式定义全局变量定义全局变量一在主对话框实现文件中定义全局变量:在主对话框实现文件中定义全局变量:HANDLE hCom;HANDLEhThreadEvent;HANDLEhWnd;DWORDThreadProcEvent(LPVOID pParam);DWORDdwThreadID;OVERLAPPEDEol=0;OVERLAPPEDWol=0;OVERLAPPEDRol=0;boolhEventRun;boolfStopMsg;事件函数内循环体执事件函数内循环体执行的条件行的条件事件线程停止向主线程事件线程停止向主线程发送消息的标志。发送消息的标志。TRUE:阻塞消息发送;:阻塞消息发送;在主线程读完缓冲区数在主线程读完缓冲区数据后,将该变量设为据后,将该变量设为FALSE。目的使得主线。目的使得主线程消息响应函数可靠将程消息响应函数可靠将上一次数据读走。上一次数据读走。计算机控制工程第三节第三节 事件驱动方式事件驱动方式打开串口及开启事件线程打开串口及开启事件线程二1.打开串口打开串口hCom=CreateFile(“COM2”,GENERIC_READ|GENERIC_WRITE,0,/默认共享模式默认共享模式NULL,/默认安全属性默认安全属性OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);/模板文件句柄模板文件句柄if(hCom!=INVALID_HANDLE_VALUE)SetupComm(hCom,1024,1024);DCB myDCB;GetupCommState(hCom,&myDCB);myDCB.;SetCommState(hCom,&myDCB);else AfxMessageBox(“创建串口失败!创建串口失败!”);计算机控制工程第三节第三节 事件驱动方式事件驱动方式2.创建并立即执行事件线程创建并立即执行事件线程DWORD dwParam;if(!SetCommMask(hCom,EV_RXCHAR|EV_TXEMPTY)AfxMessageBox(“建立事件掩码失败!建立事件掩码失败!”);hThreadEvent=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadProcEvent,&dwParam,0,/创建线程函数后,立即执行创建线程函数后,立即执行&dwThreadID);if(hThreadEvent=INVALID_HANDLE_VALUE)AfxMessageBox(“事件线程创建失败事件线程创建失败!”);fEventRun=true;计算机控制工程第三节第三节 事件驱动方式事件驱动方式课后作业:熟悉课后作业:熟悉SetCommMask函数用法。函数用法。计算机控制工程第三节第三节 事件驱动方式事件驱动方式事件线程函数事件线程函数 ThreadProcEvent()三DWORD ThreadProcEvent(LPVOID pParam)DWORD dwEvtMask,dwRes;Eol.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);while(fEventRun)WaitCommEvent(hCom,&dwEvtMask,&Eol);dwRes=WaitForSingleObject(Eol.hEvent,100);switch(dwRes)case WAIT_OBJECT_0:/break;return true;计算机控制工程第三节第三节 事件驱动方式事件驱动方式case WAIT_OBJECT_0:switch(dwEvtMask)case EV_RXDATA:if(!fStopMsg)fStopMsg=true;:PostMessage(hWnd,WM_MYMSG,0,(LPARAM)EX_RXCHAR);break;case EV_TXEMPTY:AfxMessageBox(“send buffer is empty”);/添加相应处理代码添加相应处理代码break;break;计算机控制工程第三节第三节 事件驱动方式事件驱动方式计算机控制工程第三节第三节 事件驱动方式事件驱动方式发送数据发送数据四发发送送数数据据使使用用WriteFile函函数数,采采用用重重叠叠方方式式处处理理。执执行行后后函函数数立立即即返返回回。通通过过查查询询Wol结结构构hEvent句句柄柄的的信号状态,可以获知写操作的完成情况。例如:信号状态,可以获知写操作的完成情况。例如:BYTE myByte3;for(int i=0;i3;i+)myBytei=i;Wol.Event=CreateEvent(NULL,TRUE,FALSE,NULL);WriteFile(hCom,&myByte,3,NULL,&Wol);计算机控制工程第三节第三节 事件驱动方式事件驱动方式自定义消息函数读取函数自定义消息函数读取函数五在在事事件件线线程程中中,当当发发现现串串口口接接收收到到字字符符时时,事事件件函函数数仅仅仅仅是是发发出出了了一一个个消消息息WM_MYMSG。对对于于事事件件的的处处理,需要在消息函数中进行。理,需要在消息函数中进行。1.申明消息:申明消息:在主对话框中的头文件中申明该消息及消息在主对话框中的头文件中申明该消息及消息ID。#define WM_MYMSGWM_USER+100在主对话框构造函数中加入消息函数声明。在主对话框构造函数中加入消息函数声明。projected:afx_msg LONG OnReceiveEvent(WPARAM wParam,LPARAM lParam);计算机控制工程第三节第三节 事件驱动方式事件驱动方式2.消息实现消息实现首先在主对话框实现文件消息映射宏中加入自定义消首先在主对话框实现文件消息映射宏中加入自定义消息映射。息映射。BEGIN_MESSAGE_MAP()/AFX_MSG_MAP()/AFX_MSG_MAPON_MESSAGE(WM_MYMSG,OnReceiveEvent)END_MESSAGE_MAP()计算机控制工程第三节第三节 事件驱动方式事件驱动方式然后,在主对话框的实现文件中加入消息实现:然后,在主对话框的实现文件中加入消息实现:LONG ClassName:OnReceiveEvent(WPARAM wParam,lParam,lParam)BYTE myByte50;DWORD dwRes;DWROD dwRead;DWORD dwErrors;COMSTAT Rcs;fStopMsg=true;ClearCommError(hCom,&dwErrors,&Rcs);if(ReadFile(hCom,&myFile,Rcs.cbInque,NULL,&Rol)/已经成功读出,其它处理代码;已经成功读出,其它处理代码;else Rol.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);dwRes=WaitForSingleObject(Rol.hEvent,5000);switch(dwRes)fStopMsg=false;return 0;计算机控制工程第三节第三节 事件驱动方式事件驱动方式switch(dwRes)case WAIT_OBJECT_0:if(!GetOverlappedResult(hCom,&Rol,&dwRead TRUE)/读操作失败!读操作失败!else/成功读出。成功读出。break;case WAIT_TIMEOUT:/break;default:break;计算机控制工程第三节第三节 事件驱动方式事件驱动方式关闭串口及关闭事件线程关闭串口及关闭事件线程六fEventRun=false;WaitForSingleObject(hThreadEvent,INFINITE);CloseHandle(hThreadEvent);CloseHandle(hCom);计算机控制工程第四节第四节 编程实例(编程实例(TTYTTY接受程序)接受程序)程序功能程序功能一在在发发送送程程序序方方的的键键盘盘键键入入字字符符,接接受受方方法法会会立立即即显显示示键键入入字字符符,可可以以传传送送的的字字符符包包括括可可见见英英文文字字符符(ASCII码码值值32126)和回车符。)和回车符。计算机控制工程第四节第四节 编程实例(编程实例(TTYTTY接受程序)接受程序)创建串口创建串口二计算机控制工程第四节第四节 编程实例(编程实例(TTYTTY接受程序)接受程序)设置串口设置串口三 打开串口打开串口四 关闭串口关闭串口五 接受数据处理接受数据处理六计算机控制工程第五节第五节 编程实例(编程实例(TTYTTY发送程序)发送程序)程序功能程序功能一WinAPI实实现现TTY发发送送程程序序。在在主主界界面面窗窗口口键键入入字字符符时时,字字符符将将通通过过串串口口发发送送到到TTY接接受受程程序序。通通信信参参数数可可以以设置,包括串口号、波特率及奇偶校验类型。设置,包括串口号、波特率及奇偶校验类型。计算机控制工程第五节第五节 编程实例(编程实例(TTYTTY发送程序)发送程序)界面设计界面设计二主界面、对话框界面设计主界面、对话框界面设计计算机控制工程第五节第五节 编程实例(编程实例(TTYTTY发送程序)发送程序)变量声明变量声明三1.视图成员变量声明视图成员变量声明HANDLE hCom;/串口句柄;串口句柄;OVERLAPPED Wol;/写操作结构变量写操作结构变量BYTE myWByte30;/存放欲写数据;存放欲写数据;long dataWlen;/发送数据长度;发送数据长度;CSetupDlg mySetupDlg;/声明设置对话框实例;声明设置对话框实例;LPCTSTR myCOM;/串口名称串口名称BYTE myParity;/奇偶校验类型;奇偶校验类型;DWORD myfParity;/是否使用奇偶校验;是否使用奇偶校验;DWORD myBaudRate;/波特率;波特率;boolblnOpened;/串口已经打开标志串口已经打开标志计算机控制工程第五节第五节 编程实例(编程实例(TTYTTY发送程序)发送程序)2.对话框类成员声明对话框类成员声明计算机控制工程第五节第五节 编程实例(编程实例(TTYTTY发送程序)发送程序)设置串口设置串口四打开串口打开串口五关闭串口关闭串口六发送字符发送字符七命令有效性处理命令有效性处理八计算机控制工程第六节第六节 程序发布程序发布必须文件:必须文件:MSCOMM32.OCX;存放位置:存放位置:程序所在目录或系统文件夹下。程序所在目录或系统文件夹下。
展开阅读全文