用Windows API设计多线程的串行通信ActiveX控件
发布时间:2007/8/29 0:00:00 访问次数:529
摘要:介绍了利用VC++6.0实现基于Window API的多线程串行通信ActiveX控件的设计方法,并给出主要的通信程序代码。
关键词:ActiveX Windows API 串行通信 多线程
串行通信是计算机之间及计算机及数字化仪器和设备的一种重要通信手段,是实现工业监控的一种主要方式。Windows下的串行通信主要有两种方法:利用VB的MSCOMM控件和利用Windows API。MSCOMM控件简单易用,但由于其对串口设备的封装及调用方式的局限性,不能灵活方便地对串口设备进行控制。而通过Windows API则可以实现对串口设备的完全控制,并且可以提供多线程的通信机制。
在复杂应用中,通信通常在后台完成,需要采用多线程技术。一个多线程的应用程序实际上是在其内部实现了多任务扩展,为代码赋予了并行执行的特性,适于执行一些实时性或随机性很强的操作,也有利于提高CPU的利用率,加快通信程序的信息处理速度。
本文以一台工业控制PC机与多台基于单片机的智能控制单片进行串行通信为实例。PC机和各智能控制单元通过RS485总线互联。由于RS485的通信方式是半双工的,只能由作为主节点的PC机依次轮询网络上的各智能控制单元子节点。每次通信都是由PC机通过串口向智能控制单元发布命令,智能控制单元在接收到正确的命令后做出应答。
系统的主节点应用程序是用VB6.0编写的,为了既能提供多线程的串行通信机制,又可使应用程序易于实现串行通信功能,利用VC++6.0开发基于Window
API的多线程串行通信ActiveX控件。主节点的应用程序通过对串行通信ActiveX控件的调用完成与各子节点的通信。
1 创建ActiveX控件JinRiComm.OCX
VGC++6.0和MFC是健建ActiveX控件的强大而又灵活的工具。JinRiComm控件创建步骤简单概述如下:
(1)用MFC ActiveX ControlWizard生成ActiveX控件工程,命名为JinRiComm。
(2)打开ClassWizard窗口,选择Automation标签,单击“Add Property”按钮,命名新的属性。单击“AddMethod”按钮,命名新的方法。选择ActiveX Event标签,单击“Add Event”按钮,命名新的事件。
(3)向控件工程中添加类CserialPort,为该类添加成员变量和成员函数,该类将完成串行通信工作。
2 串口通信的基本编程
用Windows API函数实现串行通信,其特点是对串口的操作如对文件操作一样,打开和关闭串行设备与打开和关闭文件使用相同的函数。
(1)打开串口
m_hComm=CreateFile(szPort,GENERIC_READ |GENERIC_WRITE,0,NULL, OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);
(2)获取当前通信信息,设备通信设备
GetCommState(m_hComm,&m_dcb);
SetCommState(m_hComm,&m_dcb);
(3)读、写串口
bResult=ReadFile(port->m_hComm,&RXBuff,1,&BytesRead,Port->m_ov);
bResult=WriteFile(port->m_hComm,&(port-m_Byte)[i],1,&BytesSent,&port->m_ov);
(4)关闭串口
CloseHandle (m_
摘要:介绍了利用VC++6.0实现基于Window API的多线程串行通信ActiveX控件的设计方法,并给出主要的通信程序代码。
关键词:ActiveX Windows API 串行通信 多线程
串行通信是计算机之间及计算机及数字化仪器和设备的一种重要通信手段,是实现工业监控的一种主要方式。Windows下的串行通信主要有两种方法:利用VB的MSCOMM控件和利用Windows API。MSCOMM控件简单易用,但由于其对串口设备的封装及调用方式的局限性,不能灵活方便地对串口设备进行控制。而通过Windows API则可以实现对串口设备的完全控制,并且可以提供多线程的通信机制。
在复杂应用中,通信通常在后台完成,需要采用多线程技术。一个多线程的应用程序实际上是在其内部实现了多任务扩展,为代码赋予了并行执行的特性,适于执行一些实时性或随机性很强的操作,也有利于提高CPU的利用率,加快通信程序的信息处理速度。
本文以一台工业控制PC机与多台基于单片机的智能控制单片进行串行通信为实例。PC机和各智能控制单元通过RS485总线互联。由于RS485的通信方式是半双工的,只能由作为主节点的PC机依次轮询网络上的各智能控制单元子节点。每次通信都是由PC机通过串口向智能控制单元发布命令,智能控制单元在接收到正确的命令后做出应答。
系统的主节点应用程序是用VB6.0编写的,为了既能提供多线程的串行通信机制,又可使应用程序易于实现串行通信功能,利用VC++6.0开发基于Window
API的多线程串行通信ActiveX控件。主节点的应用程序通过对串行通信ActiveX控件的调用完成与各子节点的通信。
1 创建ActiveX控件JinRiComm.OCX
VGC++6.0和MFC是健建ActiveX控件的强大而又灵活的工具。JinRiComm控件创建步骤简单概述如下:
(1)用MFC ActiveX ControlWizard生成ActiveX控件工程,命名为JinRiComm。
(2)打开ClassWizard窗口,选择Automation标签,单击“Add Property”按钮,命名新的属性。单击“AddMethod”按钮,命名新的方法。选择ActiveX Event标签,单击“Add Event”按钮,命名新的事件。
(3)向控件工程中添加类CserialPort,为该类添加成员变量和成员函数,该类将完成串行通信工作。
2 串口通信的基本编程
用Windows API函数实现串行通信,其特点是对串口的操作如对文件操作一样,打开和关闭串行设备与打开和关闭文件使用相同的函数。
(1)打开串口
m_hComm=CreateFile(szPort,GENERIC_READ |GENERIC_WRITE,0,NULL, OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);
(2)获取当前通信信息,设备通信设备
GetCommState(m_hComm,&m_dcb);
SetCommState(m_hComm,&m_dcb);
(3)读、写串口
bResult=ReadFile(port->m_hComm,&RXBuff,1,&BytesRead,Port->m_ov);
bResult=WriteFile(port->m_hComm,&(port-m_Byte)[i],1,&BytesSent,&port->m_ov);
(4)关闭串口
CloseHandle (m_
上一篇:嵌入式Web服务器的分析与研究