论文部分内容阅读
摘要:在信息化社会中,串口通信在安装与设计相关设备设施中均有广泛性应用,文章阐述了一类以ActiveX控件MSComm和MFC Library Regular DLL为基点的C++串口设计,采用经细致规划的函数接口和消息体制,最大限度的精简了串口编辑程序。和直接采用MSComm控件相比较,采用该类型串口进行编程,能够有效降低串口编程的难度系数,使用者只有具备基礎的串口知识,能够顺利的书写出正常运作的串口流程。
关键词:ActiveX控件;MSComm;串口通信;模块化
C++为当下结构最为繁杂,以及功能最为强大的一类windows应用程序开发工具,怎样有效应用C++研发串行通信程序去达到工控系统的实时通信,是社会各个领域中关注的焦点,也是行业领域发展期间面对的重难点。串口通信自身具备成本低廉、操作过称简易、可靠性高、远距离传输等优势,应用范畴不断拓展。有效应用计算机上的串口能为对装、设备进行参数规划等工作创造诸多便利条件,设备间数据传导目标也顺利实现,故此规划具备操作串口功能的计算机程序使极为普及的编程任务。
1当前Windows操作系统上进行串口编程的几种方法
1.1采用微软C运行时库的I/O函数
在对串口操作过程中,可应用_inp、_inpw、_inpd、_outp等函数,上述函数最大的特征是能够直接对串口芯片施以相关操作行为。这就需要编程人员对串口硬件的工作原理与程序有全面性了解[1]。
1.2应用Windows API函数
即应用Windows API中的ReadFile、WriteFile、BuildComDCB等函数进行相关操作。上述函数应用过程具有一定难度,只有在对系统内文件有整体认识以及设备管理具有一定深度情况下,才可有效应用。
1.3应用第三方串口通信类
第三方串口通信类以CSerialPort,cnComm等为主,应用制定的语言编写,并装包成类(class),内部采用调用Windows API方式,达到对串口的有效操作。
2 用户友好的串口DLL和C++串口类规划
2.1串口DLL的规划
MSComm控件具备运行稳定可靠属性,为本文设计工作的开展与运行提供了坚实基础。从性质上分析,MSComm为一类ActiveX控件,只有在ActiveX容器内其才会运作,并将效能发挥出来。对话框是较为典型的ActiveX容器。故此,本文规划了一个对话框类CommCtnr,若将MSComm控件插进对话框类CommCtnr内,Visual C++开发环境将会自行取代MSComm控件产生代理类CMSComm,其将CMSComm类的对象设为对话框类CommCtnr的数据成员[2]。
使用者可直接把有关的.cpp、.h文件以及.rc资源文件拷贝到自己的工程目录内,但上述过程运行相对复杂,且耗用大量时间。更有效的方法是把有关的文件独立编译为一个动态链接库(DLL),用户只需调用该动态链接库,就可顺利的进行串口操作。MFC能促使两类动态链接库运转:①MFC Library Extension DLL;②MFC Library Regular DLL。前者可把整个C++类设为DLL的外部接口,以助力于DL过程,但要求用户需采用C++语言编程,只有在动态链衔接MFC库时,DLL的效能才会发挥出来,用户群规模可能有所减缩,故此本文设计期间不采用该种方式。而应用MFC Library Regular
DLL方式,其可提供多类编程语言设计的客户程序。因为其对外界的接口只认可是C风格的函数,故此其与类(class)类型的参数之间产生互斥效应。故此,本文在对每一C风格函数接口规划过程中,均需一个无符号整型的参数代表串口号,串口号和串口存在一一对应关系,在DLL内部串口号有针对的被转型为MSComm串口控件。在提供串口号的情况下,就可实现对相关串口进行操作,为用户创造诸多便利条件。
2.2用户友好的消息的规划
消息传递为Windows程序之间以及程序内部信息互换的主要渠径,本文应用自定义的消息去落实客户程序和DLL间的交互任务。为DLL设计了三种消息,MSComm控件若传送消息,就会立即被转型为者三类消息之一,最后发送给客户程序:①接收数据消息;②传送数据消息;③硬件控制消息或者是串口错误[3]。
消息的实际数值大小取决于客户程序,于串口初始化之际,就把消息值传达给DLL。那么在后续运转期间,存在相关的串口事件发生时,DLL就会把对应的消息传送给给客户程序。
2.3用户友好的C++串口类规划
客户程序能够直接应用DLL的导出函数,对串口的程序进行编辑,该类函数属于C风格的函数。对于C++编程人员而言,本文规划了一个C++串口类Mcomm,其为DLL导出函数的包装类,也被称之为称为代理类客户程序经由Mcomm操作串口,能够将C++语言面向对象的优势彰显出来,和C风格接口相比较,该类借口结构更显简洁,并且其还能够自主管理串口资源的获得与传导过程,以降低客户程序的运行负担,进一步提升串口编程的简易性与快捷性,遵照了简洁、清晰、易用的设计哲学理念。应用Mcomm难度和寻常的C++类几乎无差异,把mcomm.h文件囊括在项目内即可。
3结束语
本文以ActiveX控件MSComm为基点,规划了一类串口通信DLL库,进而设计了一个C++串口类,创设了一类对用户友好的串口编程渠道,大幅度降低了串口程序编写难度。此时,程序员只需具备最基础的串口知识,就可以实现编程目标,为非专业程序员以及程序编写初学者提供巨大帮助。在实践中,发现DLL库内编程语言类型众多,此时非C/C++程序员也可以应用其对串口程序进行编辑。
参考文献:
[1] 翁花群, 林元国. 基于Visual C++的数字图像处理实验教学软件开发[J]. 廊坊师范学院学报(自然科学版), 2015, 15(1):24-28.
[2] 丁立波. 基于ARM9和Qt的嵌入式视频监控系统的设计[D]. 南昌大学, 2011,12(14):124-7413.
[3]王尹圣, 曾国强, 李强,等. 基于C#与C++混编的轻元素X荧光测量软件[J]. 核电子与探测技术, 2015(4):394-398.
关键词:ActiveX控件;MSComm;串口通信;模块化
C++为当下结构最为繁杂,以及功能最为强大的一类windows应用程序开发工具,怎样有效应用C++研发串行通信程序去达到工控系统的实时通信,是社会各个领域中关注的焦点,也是行业领域发展期间面对的重难点。串口通信自身具备成本低廉、操作过称简易、可靠性高、远距离传输等优势,应用范畴不断拓展。有效应用计算机上的串口能为对装、设备进行参数规划等工作创造诸多便利条件,设备间数据传导目标也顺利实现,故此规划具备操作串口功能的计算机程序使极为普及的编程任务。
1当前Windows操作系统上进行串口编程的几种方法
1.1采用微软C运行时库的I/O函数
在对串口操作过程中,可应用_inp、_inpw、_inpd、_outp等函数,上述函数最大的特征是能够直接对串口芯片施以相关操作行为。这就需要编程人员对串口硬件的工作原理与程序有全面性了解[1]。
1.2应用Windows API函数
即应用Windows API中的ReadFile、WriteFile、BuildComDCB等函数进行相关操作。上述函数应用过程具有一定难度,只有在对系统内文件有整体认识以及设备管理具有一定深度情况下,才可有效应用。
1.3应用第三方串口通信类
第三方串口通信类以CSerialPort,cnComm等为主,应用制定的语言编写,并装包成类(class),内部采用调用Windows API方式,达到对串口的有效操作。
2 用户友好的串口DLL和C++串口类规划
2.1串口DLL的规划
MSComm控件具备运行稳定可靠属性,为本文设计工作的开展与运行提供了坚实基础。从性质上分析,MSComm为一类ActiveX控件,只有在ActiveX容器内其才会运作,并将效能发挥出来。对话框是较为典型的ActiveX容器。故此,本文规划了一个对话框类CommCtnr,若将MSComm控件插进对话框类CommCtnr内,Visual C++开发环境将会自行取代MSComm控件产生代理类CMSComm,其将CMSComm类的对象设为对话框类CommCtnr的数据成员[2]。
使用者可直接把有关的.cpp、.h文件以及.rc资源文件拷贝到自己的工程目录内,但上述过程运行相对复杂,且耗用大量时间。更有效的方法是把有关的文件独立编译为一个动态链接库(DLL),用户只需调用该动态链接库,就可顺利的进行串口操作。MFC能促使两类动态链接库运转:①MFC Library Extension DLL;②MFC Library Regular DLL。前者可把整个C++类设为DLL的外部接口,以助力于DL过程,但要求用户需采用C++语言编程,只有在动态链衔接MFC库时,DLL的效能才会发挥出来,用户群规模可能有所减缩,故此本文设计期间不采用该种方式。而应用MFC Library Regular
DLL方式,其可提供多类编程语言设计的客户程序。因为其对外界的接口只认可是C风格的函数,故此其与类(class)类型的参数之间产生互斥效应。故此,本文在对每一C风格函数接口规划过程中,均需一个无符号整型的参数代表串口号,串口号和串口存在一一对应关系,在DLL内部串口号有针对的被转型为MSComm串口控件。在提供串口号的情况下,就可实现对相关串口进行操作,为用户创造诸多便利条件。
2.2用户友好的消息的规划
消息传递为Windows程序之间以及程序内部信息互换的主要渠径,本文应用自定义的消息去落实客户程序和DLL间的交互任务。为DLL设计了三种消息,MSComm控件若传送消息,就会立即被转型为者三类消息之一,最后发送给客户程序:①接收数据消息;②传送数据消息;③硬件控制消息或者是串口错误[3]。
消息的实际数值大小取决于客户程序,于串口初始化之际,就把消息值传达给DLL。那么在后续运转期间,存在相关的串口事件发生时,DLL就会把对应的消息传送给给客户程序。
2.3用户友好的C++串口类规划
客户程序能够直接应用DLL的导出函数,对串口的程序进行编辑,该类函数属于C风格的函数。对于C++编程人员而言,本文规划了一个C++串口类Mcomm,其为DLL导出函数的包装类,也被称之为称为代理类客户程序经由Mcomm操作串口,能够将C++语言面向对象的优势彰显出来,和C风格接口相比较,该类借口结构更显简洁,并且其还能够自主管理串口资源的获得与传导过程,以降低客户程序的运行负担,进一步提升串口编程的简易性与快捷性,遵照了简洁、清晰、易用的设计哲学理念。应用Mcomm难度和寻常的C++类几乎无差异,把mcomm.h文件囊括在项目内即可。
3结束语
本文以ActiveX控件MSComm为基点,规划了一类串口通信DLL库,进而设计了一个C++串口类,创设了一类对用户友好的串口编程渠道,大幅度降低了串口程序编写难度。此时,程序员只需具备最基础的串口知识,就可以实现编程目标,为非专业程序员以及程序编写初学者提供巨大帮助。在实践中,发现DLL库内编程语言类型众多,此时非C/C++程序员也可以应用其对串口程序进行编辑。
参考文献:
[1] 翁花群, 林元国. 基于Visual C++的数字图像处理实验教学软件开发[J]. 廊坊师范学院学报(自然科学版), 2015, 15(1):24-28.
[2] 丁立波. 基于ARM9和Qt的嵌入式视频监控系统的设计[D]. 南昌大学, 2011,12(14):124-7413.
[3]王尹圣, 曾国强, 李强,等. 基于C#与C++混编的轻元素X荧光测量软件[J]. 核电子与探测技术, 2015(4):394-398.