首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

C++BUILDER6.0有无现成的RS232通信控件?小弟我想搞RS232通讯

2012-03-11 
C++BUILDER6.0有无现成的RS232通信控件?我想搞RS232通讯C++BUILDER6.0有无现成的RS232通信控件?我想搞RS23

C++BUILDER6.0有无现成的RS232通信控件?我想搞RS232通讯
C++BUILDER6.0有无现成的RS232通信控件?我想搞RS232通讯


[解决办法]
char Txbuf[X],Rxbuf[X];
long Txlen ;

void __fastcall TFormMain::SendCommands(char* Txbuffer,char * Rxbuffer,long len)
{
DWORD dw;
EscapeCommFunction(hTxCom,SETRTS);

WriteFile(hTxCom, Txbuffer, len, &dw, 0);


char state;

dw=0;
ReadFile (hRxCom, Rxbuf, 20, &dw, 0);

return;

}

private:// User declarations




int TxComIndex;
int TxBaudIndex;
int TxParity;
int TxStopbit;
int RxComIndex;
int RxBaudIndex;
int RxParity;
int RxStopbit;
int TxDelay;
int TxCommandsDelay;
HANDLE hTxCom;
HANDLE hRxCom;

[解决办法]
似乎是没有组件,用API也很简单:
HANDLE hComm;
DCB dcb;
DWORD nBytesRead,dwError;
COMSTAT cs;
char *Senddata,inbuff[1024];
unsigned long lrc,BS;
if((hComm=CreateFile( "COM1 ",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0))!=INVALID_HANDLE_VALUE)
{
GetCommState(hComm,&dcb);
dcb.BaudRate=CBR_9600;
dcb.ByteSize=8;
dcb.Parity=NOPARITY;
dcb.StopBits=ONESTOPBIT;
SetCommState(hComm,&dcb);
Senddata=Edit1-> Text.c_str(); //这里Senddata里面是要发送的数据
BS=Edit1-> Text.Length(); //BS为要发送的数据长度
WriteFile(hComm,Senddata,BS,&lrc,NULL);
ClearCommError(hComm,&dwError,&cs);
if(cs.cbInQue> sizeof(inbuff))
PurgeComm(hComm,PURGE_RXCLEAR);
ReadFile(hComm,inbuff,cs.cbInQue,&nBytesRead,NULL);
inbuff[cs.cbInQue]= '\0 ';
// Memo1-> Text=inbuff;
if(hComm!=INVALID_HANDLE_VALUE)
CloseHandle(hComm);
}
else
{
ShowMessage( "开打通信端口错误! ");
}
[解决办法]
有一本书介绍可以做一个控件,大斑竹网站上有
C++ Builder与RS-232串行通信控制

[解决办法]
用mscomm32吧,或者spcom也是比较好的,这2个功能比较强
最近不少人问这类问题,搜索一下就有不少贴了,你看看,还有例子
[解决办法]
一直用spcom,觉得很好用

后来自己写了个动态库
[解决办法]
楼上的已经解决
在提供一个方法就是安装visual c++或vb就可以用了
[解决办法]
用 MSCOMm.ocx 不是很难/// 希望给分
[解决办法]
出现“license not found.you cannot use in design mode.无许可,设计模式不可用!是因为没有ocx 注册成功!注册表中没有注册信息。
[解决办法]
需要注册表信息
我有,也是从网上下的
[解决办法]
API
[解决办法]
delphi 中tmscomm控件使用指南

Delphi 中TMsComm控件使用指南
l 注册TMsComm控件


1.将Mscomm.srg, Mscomm32.ocx,Mscomm32.dep三个文件复制到系统文件夹中C:\winnt\system32\。

2.用Windows下的注册工具regsvr32注册该OCX控件,点击“开始”-> "运行 ",再在中填入(假设操作安装在C盘,WIN2000):

Regsvr32 C:\winnt\system32\Mscomm32.ocx

3.在注册表中手工新建一个主键项:先在点击“开始”-> "运行 ",再在中填入regedit命令打开注册表,找到HKEY_CLASSES_ROOT\Licenses,在其中添加主键

4250E830-6AC2-11cf-8ADB-00AA00C00905 并将内容设置为:



kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun

l 引入TMSComm控件


(1)进入Delphi 编程环境下,在菜单项中选中Component/Import ActiveX选项,出现ActiveX控件导入窗口;

(2)在其中选中Microsoft Comm Control 6.0(Version 1.1),并按需要选定Palette pages、unit dir name、Search path值(一般取默认值),最后选择Install按钮进行安装。即可将MSComm控件引入到Delphi 中。

(3)在编程使用中,直接打开ActiveX控件,选取TMSComm控件,放在窗体上,设置其属性即可。其使用方法与Delphi其它控件相同.


l TMSComm控件的主要属性及事件


MSComm控件有27个属性,其中一部分可缺省设置为不用,常用的属性如下:

(1) CommPort:设置串行口选择。缺省值为1,选择为COM1;若赋值为2,则选择COM2。

(2) PortOpen:设置通信端的状态。设置为True时,打开端口;设置为False时,关闭端口并清除接受和发送缓冲区。

(3) Settings:设置通信时的波特率、奇偶校验、停止位参数。

(4) Inputlen:设置每次从接受缓冲区读却的字符个数。缺省值为0,表示将读取接受缓冲区中全部内容;若设置值为n,表示每次将读取接受缓冲区中的n个字符。

(5) InputMode:设置接收数据的类型。

(6) InBufferCount:设置返回接受缓冲区中等待被读取的字符个数。初始化程序时,InBufferCount设置值为0,表示清除接受缓冲区。

(7) OutBufferCount:设置返回发送缓冲区中等待发送的字符个数。设置值为0时,表示清除发送缓冲区。

(8) InBufferSize:设置接受缓冲区中的长度,缺省值为1024字节。

(9) OutBufferSize:设置发送缓冲区中的长度,缺省值为512字节。

(10) Rthreshold:设置表示在触发OnComm事件之前接收缓冲区允许有的字符数。缺省值为0,表示即使接收缓冲区有字符时,也不会触发OnComm事件;设置值为n时,表示接收缓冲区每有n个字符时,就会触发一次OnComm事件。

(11) Sthreshold:设置表示在触发OnComm事件之前发送缓冲区允许有的字符数。缺省值为0,表示不触发OnComm事件;设置值为n时,表示发送缓冲区每有n个字符时,就会触发一次OnComm事件。

(12) DTREnable:设置DTR的有效性。

(13) RTSEnable:设置RTS的有效性。

(14) Input:从串口读取数据。

(15) Output:向串口写入数据。


如果在通信过程中发生错误或事件,就会触发OnComm事件,并由CommEvent属性代码反映错误类型,在通信程序的设计中可根据该属性值来执行不同的操作。CommEvent属性值及其含义如下:

  (1)ComEvSend:值为1,发送缓冲区的内容少于SThreshold指定的值。

  (2)ComEvReceive:值为2,接收缓冲区内字符数达到RThreshold指定的值。

  (3)ComEvFrame:值为1004,硬件检测到帧错误。

  (4)ComEvRxOver:值为1008,接收缓冲区溢出。

  (5)ComEvTxFull:值为1010,发送缓冲区溢出。

  (6)ComEvRxParity:值为1009,奇偶校验错误。

(7)ComEvEOF:值为7,接收数据中出现文件尾(ASCII码为26)字符

热点排行