vc 串口通讯
visual c++串口通信与工程应用实践

visual c++串口通信与工程应用实践Visual C++是一款强大的集成开发环境,可以用于开发串口通信和工程应用。
它提供了一套丰富的工具和函数库,可以方便地进行串口通信和工程应用的开发。
需要掌握相关的编程技巧和串口通信协议知识,才能更好地实践和应用。
下面是一些实践的步骤:1. 配置串口:在Visual C++中,可以使用WinAPI函数SetCommState和GetCommState来配置串口的波特率、数据位、停止位等参数。
需要定义一个DCB结构体来保存串口的配置信息,然后使用GetCommState获取当前串口的配置信息,修改对应的参数,最后使用SetCommState来设置新的配置。
2. 打开串口:使用WinAPI函数CreateFile来打开串口。
需要提供串口的名称(如"COM1")、访问权限和共享模式等参数。
打开成功后,会返回一个句柄,可以用于后续的读写操作。
3. 读取串口数据:使用ReadFile函数从串口中读取数据。
可以设置一个缓冲区来保存读取的数据,并指定读取的字节数。
ReadFile函数会阻塞,直到有足够的数据可供读取。
4. 写入串口数据:使用WriteFile函数将数据写入串口。
可以将要发送的数据保存到一个缓冲区,然后指定要发送的字节数。
WriteFile函数会阻塞,直到所有数据都被发送。
5. 关闭串口:使用CloseHandle函数关闭串口句柄。
以上是串口通信的基本步骤,可以根据具体的应用需求和功能进行扩展。
在工程应用中,可以根据串口通信的需求来设计和开发相应的功能模块,例如数据采集、控制命令发送等。
可以使用Visual C++的其他功能,如图形界面设计和多线程编程,来增强应用的用户体验和性能。
基于VC++串口通信

图 1
图 2
1 S 2 2的标 准 .R 一 3 2
R 一 3C标准 的全称是 E A R 一 3 C标 S 22 I— S 22 单击它 , 它通过 R 一 3 串口 S 22 线传人无线电 号 准, 它是在 16 年 由 国电子工业协会、 99 美 贝尔系 信端 口 ; 设 备 十 六 进 制 控 制 信 号 0 H ( 进 制 形 式 4 二 统和调制解调器厂家及计算机终端生产厂家共同 注意 :必须在打开端 口之前设置 C mm ot 0 0 0 0)而后无线电设备通过发射器向电机发 o Pr o o 10, 制定的用于串 行通信的标准。 它的全名是“ 数据终 属性 送启动和关闭控制信号, 它的作用是启动和关闭 2 2 Stns 2 eig 属性是功能设置并 返回波特 电机。电机的接收 t 端设备( T ) D E 和数据通信设备∞c ) E 之间串行二进 奇偶校验、 数据位 、 停止位参数 ; 制数据交换接口技术标准”应用 9 O 芯的 R 一 3C 率、 S22 信号,控制电机转动和转速从而使模拟人质靶移 近距离传送。 芯的 R - 3 C 9 S 2 2 的特性如下: 2 3 I u属性是功能从接收缓冲区内读取 动 , 2 Pt 2 n 来使模拟 ^ 质靶充当模拟绑匪的挡箭牌的逼 1 .主要信号线定义 21 数据 ; 真画面。再通过摄像头采集人物状态及中 的位 枪 2 . O tu屙 l是功能向发送缓冲区写数 置 , 2 u t 生 4 P 引脚 1数据载波检测 D D  ̄ 脚 2发送数 : C ;I : 然后通过视频采集卡传人计算机进行算法比 或返回 发送缓冲区当前的数据 ; 据 R D 引脚 3接收数据 T D 引脚 4 数据终端 据 , X ; : X ; : 较, 得出测试结果女1 2 1 。 图 就绪 D R  ̄脚 5信号地 S ; I 6数据设备就 T ;I : G  ̄脚 : 2 _ P r p n属性是功能用于打开或关闭 . ot e 2 5 O 参考文献 绪 D R  ̄脚 7请求发送 R s引脚 8清除发送 串口 , S ;I : T; : 的 或返回串口 的开 、 关状态 。 『 张 自强. 1 1 基于 VC MS cmm控件 的串行通信 H_ C o C S  ̄脚 9振铃指示 R 。 T ;I : I 3 串口 通信应用 [ 河南科技大学学报 , 0 ( 1 J 1 . 2 40 ) 0 . 串口 通信应用——射击训练系统 1 2电气特性 . 2 [秋育 2 1 桥基 于 M C m S o m的 P 机与单片机串行通 c E A R 一 3C对电器特性 、 I — S 22 逻辑电平和各 射击洲练系统的原理示意图如图 1 。 信程序设计 科技信息,0 9 20. 种信号线功能都有规定。 通过射击 练系统的 V 界面图上的运动档 『 志 ̄.S o m控件在 V + 6 训 C 斟岳 M Cm c + D串口 通信 中的 & T D和 R D上 : 在 x x 逻辑 1MA K= 3 位的 A ,D四个按钮控制电机转动及转速 , 中 应用 长春工程学院学报, 0 (1. ( R )一 V~ ,C B, 其 2 9 ) 0 0 按钮 C的代码如下 : 1V , 5 逻辑 0 P C )+ ~+1V; ( A E= 3 S 5 【崔艳华模 拟射击训练 系统的设计与实 4 1 现 微机 l R sc ' D R D R和 D D等控制线 T 、r 、S 、T 在 I s C vi S o n etl.n utn 0 o C C r T s  ̄O B t C d m D ' o 发 展 ,0 30 ) 20 (4 . 上: 信号有效 ( 接通 ,N状态 , O 正电压 ) 3 =+ V~ { 阁 徐进RS4 2 8 _2/ 5串行通信在控制 系统 中的应 4 / /TODo Ad o rc nrln t — 用 山东 d y u o t oi o i f + 5 ,信号无效 ( IV 断开 ,F 状态 ,负电压 ) OF 建筑工程学院学报 , O () 2 l 0 4
VC6.0MFC串口通信编写全过程

其于MFC的串口调试助手编辑过程一、新建打开VC6.0 文件新建工程MFC AppWiard(exe) 位置(选择保存工程位置)工程名称(输入工程名XXXX)确定选择基本对话框下一步下一步下一步选择(CXXXXDlg)完成确定在生成的基本对话框内将不需要按钮及提示框(自动生成的“确定”“取消”及提示框)删除或修改使用,至此基本框架完成如下图:二、往生成的基本框架中添加控件1、因为控件列表框内没有串口通信用到的通信控件,所以要先添加到控件列表框内再将控件添加到基本框内使用,步骤如下:菜单栏工程添加到工程Components and controls…Registered ActiveX Controls 选择“Microsoft Communications Control, version 6.0”Insert 确定OK 关闭此子窗口完成添加操作标志如上图所示。
2、将刚才添加添加到控件列表框内的串口控件添加到基本框架内点击控件列表框内的串口控件,此时光标变为“十”形,在基本框架内随意划取一矩形区域,即可以添加串口控件,不需要修改此控件的大小及位置,因为程编译运行后此控件是看不到的,步骤结果如下图:此控件(标志)是下面步骤添加进来的串口控件基本框架3、继续往基本框架内添加用于编辑发送数据的输入编辑框及输出编辑框,同理选择控件列表框内的“编辑框控件”,以相同的操作即可添加两个编辑窗口及一个按纽控件如下图所示:选择其中任意一个作为输入编辑框及输出编辑框这两个窗口需要修改大小及位置,因为程序运行后将会显示而串口通信控件则不显示,上图是运行后的效果。
4、对以上四个控件编程步骤如下:a、右击串口通信控件建立类向导Member variables Control IDS中选择IDC_MSCOMM1 add variable…Member variable name中输入控件变量名m_ctrlComm(变量名可以随意选取,但程序中应与所取变量名一致)OK 确定b、右击编辑框、属性、常规、ID:中输入ID号,此编辑框用于接收显示数据的其ID 号为IDC_EDIT_RXDATA(可以随意选取,但程序中应与所取ID号一致),再在此窗口的样式中勾选”多行”,同时将“自动水平滚动(T)”勾选去掉,再勾选“垂直滚动(V)”,此勾选操作是用于垂直多行显示的,按回车后即可输入;同理右击另一编辑框输入ID号为IDC_EDIT_TXDATA此编辑框用于编辑发送数据的,同样也选上用于垂直多行显示,发送框可以不用垂直多行显示;再为按钮控件添加ID号,为IDC_BUTTON_MANUALSEND,并将标题中的“Button1”改为“发送”,功能是按一次就把发送编辑框中的内容发送一次。
VC++串口通信编程

在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信。
串口通信方便易行,应用广泛。
一般情况下,工控机和各智能仪表通过RS485总线进行通信。
RS485的通信方式是半双工的,只能由作为主节点的工控PC机依次轮询网络上的各智能控制单元子节点。
每次通信都是由PC机通过串口向智能控制单元发布命令,智能控制单元在接收到正确的命令后作出应答。
在Win32下,可以使用两种编程方式实现串口通信,其一是使用ActiveX控件,这种方法程序简单,但欠灵活。
其二是调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,并且自由灵活。
本文我们只介绍API串口通信部分。
串口的操作可以有两种操作方式:同步操作方式和重叠操作方式(又称为异步操作方式)。
同步操作时,API函数会阻塞直到操作完成以后才能返回(在多线程方式中,虽然不会阻塞主线程,但是仍然会阻塞监听线程);而重叠操作方式,API函数会立即返回,操作在后台进行,避免线程的阻塞。
无论那种操作方式,一般都通过四个步骤来完成:(1)打开串口(2)配置串口(3)读写串口(4)关闭串口(1)打开串口Win32系统把文件的概念进行了扩展。
无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用API函数CreateFile来打开或创建的。
该函数的原型为:HANDLE CreateFile( LPCTSTR lpFileName,DWORD dwDesiredAccess,DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes,DWORD dwCreationDistribution,DWORD dwFlagsAndAttributes,HANDLE hTemplateFile);•lpFileName:将要打开的串口逻辑名,如“COM1”;•dwDesiredAccess:指定串口访问的类型,可以是读取、写入或二者并列;•dwShareMode:指定共享属性,由于串口不能共享,该参数必须置为0;•lpSecurityAttributes:引用安全性属性结构,缺省值为NULL;•dwCreationDistribution:创建标志,对串口操作该参数必须置为OPEN_EXISTING;•dwFlagsAndAttributes:属性描述,用于指定该串口是否进行异步操作,该值为FILE_FLAG_OVERLAPPED,表示使用异步的I/O;该值为0,表示同步I/O操作;•hTemplateFile:对串口而言该参数必须置为NULL;同步I/O方式打开串口的示例代码:HANDLE hCom; //全局变量,串口句柄hCom=CreateFile("COM1",//COM1口GENERIC_READ|GENERIC_WRITE, //允许读和写0, //独占方式NULL,OPEN_EXISTING, //打开而不是创建0, //同步方式NULL);if(hCom==(HANDLE)-1){AfxMessageBox("打开COM失败!");return FALSE;}return TRUE;重叠I/O打开串口的示例代码:HANDLE hCom; //全局变量,串口句柄hCom =CreateFile("COM1", //COM1口GENERIC_READ|GENERIC_WRITE, //允许读和写0, //独占方式NULL,OPEN_EXISTING, //打开而不是创建FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, //重叠方式NULL);if(hCom ==INVALID_HANDLE_VALUE){AfxMessageBox("打开COM失败!");return FALSE;}return TRUE;(2)、配置串口在打开通讯设备句柄后,常常需要对串口进行一些初始化配置工作。
基于VC++6.0实现的串口通讯

基于VC++6.0实现的串口通讯摘要:串口通讯作为一种灵活、方便、可靠的通讯方式,广泛应用于计算机与其它设备之间的通讯以及工业控制系统中,是计算机与外部设备进行数据通讯时经常使用的方式之一。
本文介绍了VC++6.0环境下利用MSComm控件实现计算机与外部设备之间的串口通讯。
关键词:串口通讯VC++6.0MSComm一、引言串口作为计算机标准配置中的对外接口,由于其简便、易行及数据传输可靠等优点,使其成为计算机与外部设备之间通讯的主要手段之一,广泛应用于工业控制系统中。
VC++6.0作为面向对象的可视化开发工具,具有良好的界面设计能力,利用具有良好运行效率和稳定性的MSComm控件,可以简单方便的实现串口通讯功能。
二、MSComm控件介绍VC++6.0是基于Windows操作系统的主流编程可视化语言。
应用VC++6.0开发串行通讯通常有如下几种方法:1.利用Windows API通讯函数。
2.利用VC的标准通讯函数_inp,_inpw,_inpd,_outp,_outpw,_outpd等直接对串口进行操作。
3.使用Microsoft Visual C++的通讯控件(MSComm)。
以上几种方法中,前两种由于使用时需要的专业程度比较高,需要了解内部接口及标准通讯函数的定义,因此比较困难;第三种方法较简单,对使用者要求不高,只需对串口进行简单配置即可。
Microsoft Communications Control(以下简称MSComm)是Microsoft公司基于组件对象模型(COM)开发的简化Windows下串口通讯编程的ActiveX控件,它为应用程序提供了通过串口接口收发数据的简便方法。
该控件屏蔽了通讯过程中的底层操作,用户只需通过设置并监视其属性和事件,即可完成串口编程,实现与被控制对象的串行通讯、数据交换,并监视或响应在通讯过程中可能发生的各种错误和事件。
具体有两种处理方法:一是事件驱动(Event-Driven)。
如何实现VC应用程序与PLC的数据交换

如何实现VC应用程序与PLC的数据交换当今,随着工业自动化的广泛应用,越来越多的工业企业开始采用可编程逻辑控制器(PLC)来控制和管理生产过程。
而随着信息技术的不断发展,将计算机技术与工业控制相结合,实现VC应用程序与PLC的数据交换,已经成为很多企业提高生产效率、提升产品质量的一种重要手段。
本文将从硬件和软件两个角度来介绍如何实现VC应用程序与PLC的数据交换。
硬件层面:在实现VC应用程序与PLC的数据交换之前,首先需要确保计算机和PLC之间能够进行可靠的通信。
一般而言,可以通过以下几种方式来实现计算机和PLC之间的连接和通信。
1.串口通信:串口通信是最常见的一种方式,通过串口线将计算机的串口与PLC的COM口相连接。
在VC应用程序中,通过编程方式来读写串口数据,从而实现与PLC的数据交互。
2.以太网通信:在以太网通信方式下,计算机和PLC通过以太网进行连接。
可以使用TCP/IP协议来实现数据的传输。
在VC应用程序中,可以使用套接字编程来实现与PLC的通信。
B通信:有些PLC具备USB接口,可以通过USB线将计算机和PLC进行连接。
在VC应用程序中,可以通过USB编程来与PLC进行数据交互。
软件层面:在硬件连接完成之后,下一步就是通过软件来实现VC应用程序与PLC的数据交换。
以下是一些常用的软件开发工具和编程语言,可以帮助我们实现这个目标。
1.Visual Studio:Visual Studio是一个功能强大的集成开发环境,可以用于开发各种类型的应用程序,包括VC应用程序。
在VC应用程序中,可以通过编写相应的代码来与PLC进行数据交换。
2.C#编程语言:C#是一种简单、现代化的编程语言,广泛应用于Windows平台的应用程序开发。
在VC应用程序中,可以使用C#编写代码来实现与PLC的数据交互。
3.编程库:PLC通常配备有相关的编程库,包括DLL、API等,可以用于编写与PLC通信的代码。
在VC应用程序中,可以引用这些编程库,从而实现与PLC的数据交换。
VC++中串行通信程序设计

O 引言
在很多情况下 , 远程监控和 自动化领域系统常见的通信
控件 的 C mmE et o vn 属性 以检查执行结果或者检查某 一事件 是否发 生。如果应用 程序较 小 , 并且 是 自成 一体 , 这种 方法
可 能是 更 可取 的 。
编程多为 串口通信 编程 。计算 机 串口编程在通信 软件 中有
C mmP r o ot
设 置 / 取控 件 对 应 的 串 行 口 获
S ti s et g n Pr e ot n Op Ipt nu
Oup t tu
设置/ 取波特率、 获 校验方式 、 数据位 、 停止位 打开/ 关闭通信 口 读取 数 据
发 送种 是利 用 Mioot 司提供 c sf 公 r 的 AcvX控 件 Mi ootC mmu i t n o t l te i c sf o r nc i sC nr 。本 文将 ao o 主要介绍第二种方法 。
话框的 MF C应用程序项 目, 命名为 my O 记住在设置 项 C m,
目选 项 时 必 须 选 上 Aci X C nrl 其 他 的 按 照 缺 省 设 置 。 t e ot s v o,
它的核心 内容是组 件对象 模型 C OM( m o e tO j t o C p nn be c Moa 。A t e d ) ci X控件包 括一 系列 的属性 、 法和事件 , 用 1 v 方 使
问串口, 一种是 利 用 Mioot 司提供 的 A t e c sf公 r ci X控件 Mi oot o v c sf C mmu i tn nrl r nc i s a o C t 编写 串行通 信程序 的方 o o
法, 并给 出了例 程 , 具有一定 的实用意义 。
VC 串口编程基础之如何用 VC 打开串口和关闭串口

VC 串口编程基础之如何用VC 打开串口和关闭串口在对串口进行操作之前都需要先打开串口,VC 串口编程方法分为利用VC 串口控件(或VC 串口类)和直接调用Windows底层API函数(我称之为VC API 串口编程)两种方法,不管哪种方法,其实质都是利用底层API函数对串口进行操作,这里我们来看怎么利用API函数来用VC 打开串口。
在Windows 32位以上操作系统(Win98以上)中,将串口(包括其它通信设备)作为文件来处理,所以串口的打开、读写和关闭所用API函数与文件操作函数一样。
所以打开串口用CreateFile,读串口用ReadFile,写串口用WriteFile,关闭串口用CloseHandle。
一、用VC 打开串口、关闭串口的API函数1、打开串口用CreateFile,其声明如下:1HANDLE CreateFile(2LPCTSTR lpFileName, // file name3DWORD dwDesiredAccess, // access mode4DWORD dwShareMode, // sha re mode5LPSECURITY_ATTRIBUTES lpSecurityAttributes, // SD6DWORD dwCreationDisposition, // how to create7DWORD dwFlagsAndAttributes, // file attributes8HANDLE hTemplateFile // handle to template file9);部分参数解释如下:●lpFileNam e:指定要打开的串口逻辑名,用字符串表示,如“COM1”和“COM2”分别表示串口1和串口2,若要知道您的电脑有哪此串口,可以打开设备管理器查看,如下图所示,或用丁丁串口调试助手,这个工具启动后会枚举系统当前存在的串口。
●dwDesiredAccess:访问类型,有读(dwDesiredAccess=GENERIC_READ)、写(dwDesiredAccess=GENERIC_WRITE)或两者兼有((dwDesiredAccess=GENERIC_READ | GENERIC_WRITE)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
m_ctrlComm.SetInputMode(1); // 以二进制方式检取数据 m_ctrlComm.SetRThreshold(1); //参数 1 表示每当串口接收缓冲区中有多于或等于 1 个字符时将引发一个接收数 据的 OnComm 事件 m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为 0 m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
运行程序,在发送编辑框中随意输入点什么,单击发送按钮,啊!看看,在另一 端的串口调试助手(或别的调试工具)接收框里出现了什么。
如果你真是初次涉猎串口编程,又一次成功,那该说声谢谢我了,因为我第一次 做串口程序时可费劲了,那时网上的资料也不好找。开开玩笑,谢谢你的支持, 有什么好东西别忘了给我寄一份。
void CSCommTestDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置 BYTE 数组 An 8-bit integerthat is not signed.
在众多网友的支持下,串口调试助手从 2001 年 5 月 21 日发布至今,短短一个月, 在全国各地累计下载量近 5000 人次,在近 200 多个电子邮件中,20 多人提供了 使用测试意见,更有 50 多位朋友提出要串口调试助手的源代码,为了答谢谢朋 友们的支持,公开推出我最初用 VC 控件 MSComm 编写串口通信程序的源代码,并 写出详细的编程过程,姑且叫串口调试助手源程序 V1.0 或 VC 串口通讯源程序吧, 我相信,如果你用 VC 编程,那么有了这个代码,就可以轻而易举地完成串口编 程任务了。(也许本文过于详细,高手就不用看)
5.添加串口事件消息处理函数 OnComm() 打开 ClassWizard->Message Maps,选 择类 CSCommTestDlg,选择 IDC_MSCOMM1,双击消息 OnComm,将弹出的对话框中 将函数名改为 OnComm,(好记而已)OK。
这个函数是用来处理串口消息事件的,如每当串口接收到数据,就会产生一个 串口接收数据缓冲区中有字符的消息事件,我们刚才添加的函数就会执行,我们 在 OnComm()函数加入相应的处理代码就能实现自已想要的功能了。请你在函数 中加入如下代码:
开始吧:
1.建立项目:打开 VC++6.0,建立一个基于对话框的 MFC 应用程序 SCommTest (与我源代码一致,等会你会方便一点);
2.在项目中插入 MSComm 控件 选择 Project 菜单下 Add To Project 子菜单中 的 Components and Controls…选项,在弹出的对话框中双击 Registered ActiveX Controls 项(稍等一会,这个过程较慢),则所有注册过的 ActiveX 控件出现在列表框中。 选择 Microsoft Communications Control, version 6.0,,单击 Insert 按钮将它插入到我们的 Project 中来,接受缺省的选项。(如 果你在控件列表中看不到 Microsoft Communications Control, version 6.0, 那可能是你在安装 VC6 时没有把 ActiveX 一项选上,重新安装 VC6,选上 ActiveX 就可以了),
这时在 ClassView 视窗中就可以看到 CMSComm 类了,(注意:此类在 ClassWizard 中看不到,重构 clw 文件也一样),并且在控件工具栏 Controls 中出现了电话 图标(如图 1 所示),现在要做的是用鼠标将此图标拖到对话框中,程序运行后, 这个图标是看不到的。
3.利用 ClassWizard 定义 CMSComm 类控制对象 打开 ClassWizard->Member Viariables 选项卡,选择 CSCommTestDlg 类,为 IDC_MSCOMM1 添加控制变量: m_ctrlComm,这时你可以看一看,在对话框头文件中自动加入了 //{{AFX_INCLUDES() #include "mscomm.h" //}}AFX_INCLUDES (这时运行程 序,如果有错,那就再从头开始)。
最后说明一下,由于用到 VC 控件,在没有安装 VC 的计算机上运行时要从 VC 中 把 mscomm32.ocx、msvcrt.dll、mfc42.dll 拷到 Windows 目录下的 System 子目 录中(win2000 为 System32)
8.发送十六进制字符 在主对话框中加入一个复选接钮,ID 为 IDC_CHECK_HEXSEND Caption: 十六进制发送,再利用
再打开 ClassWizard->Member Viariables 选项卡,选择 CSCommTestDlg 类, 为 IDC_EDIT_RXDATA 添加 CString 变量 m_strRXData, 为 IDC_EDIT_TXDATA 添加 CString 变量 m_strTXData。说明: m_strRXData 和 m_strTXData 分别用来放入 接收和发送的字符数据。
void CSCommTestDlg::OnButtonManualsend() { // TODO: Add your control notification handler code here UpdateData(TRUE); //读取编辑框内容 m_ctrlComm.SetOutput(COleVariant(m_strTXData));//发送数据 }
4.在对话框中添加控件 向主对话框中添加两个编辑框,一个用于接收显示数据 ID 为 IDC_EDIT_RXDATA,另一个用于输入发送数据,ID 为 IDC_EDIT_TXDATA,再 添加一个按钮,功能是按一次就把发送编辑框中的内容发送一次,将其 ID 设为 IDC_BUTTON_MANUALSEND。别忘记了将接收编辑框的 Properties->Styles 中把 Miltiline 和 Vertical Scroll 属性选上,发送编辑框若你想输入多行文字,也 可选上 Mi#39;) { i++; continue; } i++; if(i>=len) break; lstr=str[i]; hexdata=ConvertHexChar(hstr); lowhexdata=ConvertHexChar(lstr); if((hexdata==16)||(lowhexdata==16)) break; else hexdata=hexdata*16+lowhexdata; i++; senddata[hexdatalen]=(char)hexdata; hexdatalen++; } senddata.SetSize(hexdatalen); return hexdatalen; }
ClassWizard 为其添加控制变量:m_ctrlHexSend; 在 ClassView 中为 SCommTestDlg 类添加以下两个 PUBLIC 成员函数,并输入相应代码;
//由于这个转换函数的格式限制,在发送框中的十六制字符应该每两个字符之间插入一个空隔 //如:A1 23 45 0B 00 29 //CByteArray 是一个动态字节数组,可参看 MSDN 帮助 int CSCommTestDlg::String2Hex(CString str, CByteArray &senddata) { int hexdata,lowhexdata; int hexdatalen=0; int len=str.GetLength(); senddata.SetSize(len/2); for(int i=0;i<len;) { char lstr,hstr=str[i];
BYTE bt=*(char*)(rxdata+k); //字符型 strtemp.Format("%c",bt); //将字符送入临时变量 strtemp 存放 m_strRXData+=strtemp; //加入接收编辑框对应字符串 } } UpdateData(FALSE); //更新编辑框内容 }
到目前为止还不能在接收编辑框中看到数据,因为我们还没有打开串口,但运行 程序不应该有任何错误,不然,你肯定哪儿没看仔细,因为我是打开 VC6 对照着 做一步写一行的,运行试试。没错吧?那么做下一步:
6.打开串口和设置串口参数 你可以在你需要的时候打开串口,例如在程序中做 一个开始按钮,在该按钮的处理函数中打开串口。现在我们在主对话框的 CSCommTestDlg::OnInitDialog()打开串口,加入如下代码:
// TODO: Add extra initialization here if(m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(FALSE);
m_ctrlComm.SetCommPort(1); //选择 com1 if( !m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(TRUE);//打开串口 else AfxMessageBox("cannot open serial port");
现在你可以试试程序了,将串口线接好后(不会接?去看看我写的串口接线基本 方法),打开串口调试助手,并将串口设在com2,选上自动发送,也可以等会手 动发送。再执行你编写的程序,接收框里应该有数据显示了。