第一次:开始的时候,我是因为BCB强大制作界面的功能吸引而抛弃了VB的,如果您也打算用BCB做串口的东西,那么,请好好看看我的经验。(我只谈串口部分),相信不少的人都知道在VB中有一个控件MSComm(图标是一个小黄电话),它可以帮你完成普通的串口传输功能(比如字符串什么的,但有的却实现起来比较烦琐),在BCB中要用VB的控件,我想很多人都知道怎么办,在菜单中点Component�>Import ActiveX Control在打开的框中找到你想要的Microsoft Comm Control6.0然后直接安装就可以了,注意,前提是你必须要装了VB或者有它的库,否则你可找不到的然后你就可以在组件板的Activex中看到一个小黄电话的图标了。它是不可见的控件,它有不少属性,不过我认为最关键的几个属性就是CommPort---设置或返回通讯端口号。Settings---以字符串形式设置或返回波特率、奇偶校验、数据位和停止位。PortOpen---设置或返回通讯端口的状态,以及打开和关闭端口(BOOL型)。Input---从接收缓冲区返回和删除字符。Output
---向缓冲区写一个字符串。这五个属性就可以帮你完成简单的串口传送接收(当然,你要保证你的传、收的可靠性,你还需要借助其他的属性,这些属性可以在VB中得到)下边我将介绍一下怎么来用这个控件,以及在程序中怎么组织程序。首先,你要建立一个新的工程,然后把MSComm控件放到窗体上,别忘了再放一个Button控件(Name属性就是Button1)。好了,双击Button1,得到如下:
(请注意:本例的工程文件为Project1.bpr窗体文件为Unit.cpp头文件为Unit.h)
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString buff[10]; //****************************声明了一个缓冲,请注意,一定要设置为全局变量
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender) 在此加入程序代码
{
MSComm1->CommPort=1;
MSComm1->Settings="9600,N,8,1";
MSComm1->PortOpen=true;
for(int i=0;i<=9;i++)
{
buff[i]=i;
MSComm1->Output=buff[i];
}
MSComm1->PortOpen=false;
}
//---------------------------------------------------------------------------
运行此程序,当你点击按钮后,会发送数据(你可以在网上下载一个测试串口通讯的软件)
下面,我来解释一下上边的程序:
MSComm1->CommPort=1;这句程序是用来确定你将用哪一个串口实行你的通讯传输,我在这里选择是串口1(你也可以选择串口2,不过如果串口2不能用的话,系统会给你提示)MSComm1->Settings="9600,N,8,1";这句程序是用来设置污七杂八的东东的,我在程序中设置的波特率为9600,N为无奇偶校验,数据位为8,停止位为1。
MSComm1->PortOpen=true表示将你设置好的串口1打开(false为关闭串口)接着我用了一个循环语句,也就是i从0到9这十个数分别放到您所定义的缓冲区内(buff[10]),这个缓冲的大小是由你自己来决定,再次提醒,必须为全局变量。 MSComm1->Output=buff[i];就是将数据发送出去。最后别忘了将串口1关闭就行,语句就是MSComm1->PortOpen=false;这就完成了传的工作,我在这里所讲的都是最简单的应用,不过万变不离其踪,您需要怎么传您就怎么做就可以了:)
我想说的还有MSComm的Output属性后边要求必须是Olevariant的,用这个控件在传送过程中其实传送的都是AnsiString,对于一般的传送要求都可以满足了,但是对于有着特殊要求的传送,VB的这个控件可是爱莫能助的。比如要传送八进制、十六进制的数据,用这个方法传送的数据是错误的。因为当你无论是用C语言中的0X还是用BCB中的IntToHex()将数据转化为十六进制的数据,但传送出去的实际数据却是不正确的。那么怎么办呢?我想最有效的方法还是来借助API函数帮助我们,这很有效的。下面我来介绍一下我借助API函数实现十六进制数据的传送。
第二次.用VB的MSComm控件我实现不了对十六进制数据的传送,于是,我就借助了API函数,很多人都知道在API函数中有这么两个函数CreareFile和WriteFile
至于这两个函数的具体东西,大家在实际应用中去查一下就行,我不多说了。
首先还是请您创建一个工程(我所做的例子都未对新建的.bpr和.cpp文件名做任何修改),在窗体上放上Button控件,双击,在里边按如下形式加如代码即可。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HANDLE hCom=CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
if(hCom)
{
DCB dcb;
ZeroMemory(&dcb,sizeof(dcb));
dcb.DCBlength=sizeof(dcb);
dcb.BaudRate=9600;
dcb.ByteSize=8;
dcb.Parity=NOPARITY;
dcb.StopBits=ONESTOPBIT;
if(SetCommState(hCom,&dcb))
{
DWORD ByteCount;
int *msg;
int a[6]= {'4',4, 'A',A,30, '0'}
for(msg=a;msg<(a+10);msg++)
WriteFile(hCom,msg,1,&ByteCount,NULL);
}
CloseHandle(hCom);
}
}
关于两个函数的参数到底是怎么用的,大家可以很方便的就能查到,我只想请您注意在定义指针时一定要细心些,否则你可能产生错误,上边的程序只是完成了传送了一个十六进制的F0,如果你要传送字符串,那么你把程序稍加改动即可。例如发送HELLO,我给出程序
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HANDLE hCom = CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL );
if(hCom)
{
DCB dcb;
ZeroMemory(&dcb, sizeof(dcb));
dcb.DCBlength = sizeof(dcb);
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
if(SetCommState(hCom,&dcb))
{
DWORD ByteCount;
const char *msg = "HELLO";
WriteFile(hCom,msg, strlen(msg),&ByteCount,NULL);
}
CloseHandle(hCom);
}
}
请同志们把两个程序比较一下,其实很多东西就会明白的。
好了,关于串口通讯的我就讲这么多,当然这只是个皮毛,而且对于接收数据我没有提到,我想明白了发送,接收程序对于大家也不会是什么困难的事情。具体的应用还要看你们实际中的要求,要求变了,程序当然要变,不变的就是原理。通过这次所做的串口通讯程序,有了以上的一些心得,拿来与大家共同讨论,也是为了感谢象抱雪这样同志,为我们大家创造了交流的机会。希望我的心得能对大家有所帮助。
相关推荐
C++Builder 6串口通信实践指南
TSerialPort控件是Borland公司推出的一款用于串口通信的控件,它提供了许多属性和方法,使得开发者可以方便地进行串口编程。TSerialPort控件包含了许多关于串口通信的属性和方法,可以用于发送和接收串口数据。事件驱动模型是现代软件设计中一种高效且常见的处理方式,尤其在涉及到异步操作和实时数据交互时,它相较于传统的轮询机制有明显的优势。轮询机制是指程序通过定期检查某个条件是否满足来驱动程序流程。在串口通信中,这种方式意味着程序需要不断检查是否有数据到达,以进行后续的处理。
C++ Builder串口通讯
工作中要用到串口开发,在网上找了一天也没有找到合适的。无奈之中,自己开发了一个。此软件带自动获得串口功能。只写了接收数据的部分,发送部分没有写。
C++ Builder中的串口通信类实现
本文还有配套的精品资源,点击获取 简介:C++ Builder环境下,通过自定义串口类简化串口通信编程。该类包括打开关闭串口、配置波特率等串口参数、以及发送接收数据的方法。涉及构造、析构函数、线程接收发送数据、互斥量同步等关键实现细节。 1. 串口通信概述 在信息技术飞速发展的今天,串口通信仍然是嵌入式系统与计算机之间进行数据交换的重要手段。串口通信,全称为...
C++ Builer串口通讯例程
基于C++ Builer串口通讯,COM口设置,数据的读取和发送
C++ Builder 串口组件
很好,很稳定的串口组件!!!使用过好几个串口组件,这个最好用了,大家分享一下!!!
C++builder串口通信设计(一)-串口接收数据
一、安装mscomm32.ocx控件 1、复制mscomm32.ocx到windows\system32\下 2、注册 二、在c++builder下引入mscomm32.ocx 选择菜单component->Import ActiveX Control, 选择“Microsoft Comm Control 6.0(Version1.1)”,点击“insta
在 C++ Builder中利用串行通信控件编程
摘要:串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。本文介绍了在C++ Builder中如何利用串行通信控件进行串行通信编程。 一、引言 目前,在用计算机进行数据传输时,常用的是串行通信方式。用C++ Builder来编写串行通信程序时,可以调用Windows API函数,也可以利用VB中的MSComm控件。 利用 API函数编写实际应用程序时,往往要
C++Builder中使用MSCOMM进行串口编程
一、引言 目前,在用计算机进行数据传输时,常用的是串行通信方式。用C++ Builder来编写串行通信程序时,可以调用Windows API函数,也可以利用VB中的MSComm控件。 利用 API函数编写实际应用程序时,往往要考虑多线程的问题,这样编出来的程序不但十分庞大,而且结构比较复杂,继承性差,维护困难。但是使用串行通信控件就相对简单一些,而且功能强大,
c++ builder Api 串口 demo 发送数据
//调试通过 #include <vcl.h> #include <windows.h> #include <iostream> using namespace std; HANDLE hComm;bool InitSerialPort() { DCB dcb; String ComNo ="COM1"; //串口(COM1) 通信初始化 hComm =CreateFile (ComNo.c_str(),GENERIC_READ |GENERIC...
C++ builder 编写的串口工具
C++ builder 编写的串口工具使用MSComm 控件编写
C++Builder 串口通信程序
C++Builder 实例一个串口通信程序,包括界面的设计和串口通信函数的设计
C++ builder 多进程串口通讯程序1 (项目分析)
总体实现过程:1.数据接收块 2.接收数据处理块 3.数据发送块,4.进程通讯块 其中还有数据加密,电台译码,硬件操作指令选择等等 1. 数据协议= Head +Length+data1+data2+…+dataN+CheckSum
C++ Builder串口通信实现教程
串口通信,即串行通信,是一种以串行方式在两台设备之间传输数据的方式。在C++ Builder中,我们可以利用C++ Builder强大的组件功能,简化串口编程过程。串口通信在C++ Builder中的实现通常依赖于TWin串口类库,通过此类库我们可以更容易地操作和管理串口数据的发送和接收。创建完成后,你的项目将会包含几个关键文件,它们各自承担着不同的功能:项目文件(.cbproj): 这是整个项目的核心文件,包含了构建项目所需的全部配置信息,包括源文件的列表、编译器选项、链接器选项等。
BCB多线程编程 ( 转载 )
BCB多线程编程大家可能经常听说“线程”这个词汇:网络蚂蚁采用了多线程下载技术、FoxMail采用了多线程收信技术等等,可能有人就会问:什么是线程呢?一、什么是线程对于初次接触“线程”这个概念的人来说,会对线程这个概念有点模糊,特别是对线程、进程、程序这三个概念的区别和联系不太清楚,所谓程序,其实就是磁盘上的可执行的文件,只有当它被启动后才成为一个进程;而进程指一个当前装载到内存中的程
C++ builder 多进程串口2 数据的存储和处理。
数据处理,要保证不重复不漏掉,效率还要高,不做多余的循环。。 1. 首先设置你的MSComm1控件的 RThreShold=1,属性值就好,这一条是保证只要串口缓存有数据就会触发,你的串口线程接收数据,不然你总是进不了接收事件。。
C++串口编程实例
在windows程序设计与开发过程中,特别是涉及到开发嵌入式软硬件系统时,往往会涉及到串口编程。网上以及一些书籍上讲解windows下的串口编程知识也挺多的,但我个人觉得,看完书上的知识点有时依然不知道该如何下手开始自己的程序设计和代码编写,许多知识如果能结合着详细的例子往往能够帮助我们学习得更快,所以,在此,我专门为串口编程初学者设计了一个详细的例子,供大家参考和学习。 下面我将自...
1212




被折叠的 条评论
为什么被折叠?



