用PcommPro开拓串行通信措施
用C++Builder在Win9x下开拓串行通信措施是措施员们常常碰着却又令人头痛的工作,不单要领略很多巨大的API函数,还要把握多线程编程。令人欣慰的是有一些公司专门为C++Builder开拓了编写串行通信措施的开拓东西,譬喻MOXA公司的Pcomm(该软件可在http:\www.moxa.com.tw 下载),因而帮我们办理了串行编程这一困难。
下面团结一个详细的例子来说明串行通信措施的开拓。本措施的编程情况是Win98和C ++Builder3.0。这个编程示例的成果较量强,它具有发送数据和自动吸收数据的双重成果。在它的基本上稍加修改,即可以让用户选定举办传输的通信端口,并设定这个端口的相关参数,包罗波特率、数据位、遏制位、奇偶校验和流量节制等。
一、Pcomm的配置
启动C++Builder3.0,点击File/NewApplication,成立一个项目文件,修改表单的Name 属性为Comm,然后存盘,定名项目(Project)为CommTest,定名单位(Unit)为Comm。
PcommLibrary是一个动态毗连库(DLL)文件,当利用C++Builder编译器编译PComm.dll 库时,我们必需汇报C++Builder的编译器奈何找到这些函数(sio_xxx())。
因此我们用PCommPro在BorlandC++Builder中开拓一个串行措施时,必需做到以下两点:
如果你的PcommPro是安装在c:Programfiles(缺省安装目次)目次下,把c:Program filesPcommProLib下的Pcommb.lib文件插手到C++Builder的View菜单中Project Manager的项目中,使之成为项目标一个单位(unit)。
把#include"c:ProgramfilesPcommProLibPComm.h"包括在你的Comm.cpp 中。
二、表单及属性的配置
主界面中来添加控件,并依照表1中的配置来配置各控件的Name和Caption属性。
该通信措施的事情道理为间断方法,即当输入缓存内有数据时,就会触发Pcomm的间断函数sio_cnt_irq(Port,*CntIrq,count),再由它启动间断处事措施CntIrq(),然后由数据吸收函数sio_read(port,ibuf,len)来吸收数据并做其他相应的处理惩罚;至于函数Open ()、Sent()、Close()则别离为打开按钮、发送按钮、封锁按钮的click事件函数;SendData、 ReceiveData别离为发送数据编辑框和吸收数据编辑框相对应的字符串变量。
三、主措施的体例
双击表单上的Button控件,就会发生相应的事件,如双击"打开"按钮,就会产 生Open()事件函数。在这些函数中添加代码,以及PcommPro的串行节制函数,就能实现对 串口事件的处理惩罚。个中一个需要留意的问题是SendData和ReceiveData都为AnsiString字 符串,而PcommPro的函数所需发送和吸收的字符串都为char型,因此要正确利用Pcomm函 数,还要留意字符串转换。AnsiString字符串可通过c_str()函数转换为char型,而char行 字符串转换为AnsiString则较量简朴。可用AnsiString(char)把char型强制转换为AnsiString 型。措施主要代码如下所示:
void__fastcallTComm::Open(TObject*Sender)
//串口打开函数
{
inti;
sio_open(port);//打开串口
sio_ioctl(port,B2400,P_NONE|BIT_7|STOP_1);
//配置串口参数
//包罗波特率、数据位、遏制位、奇偶校验
void__stdcall(*p)(int);
p=cntirq;
i=sio_cnt_irq(port,*p,1);//配置间断函数
}
//-----------------
void__fastcallTComm::Sent(TObject*Sender)
//数据发送函数
{
char*SendData=newchar[20];
SendData=SentEdit->Text.c_str();
//把SendEdit中的AnsiString型字
符串转换为char型
sio_write(port,SendData,20);//发送数据
}
//-----------------
void__fastcallTComm::Close(TObject*Sender)
//串口封锁函数
{
sio_close(port);//封锁串口
}
//-----------------
void__stdcallcntirq(intport)
//间断处事函数(手工生成函数)
{
charibuf[20];
AnsiStringReceiveData[20];
sio_read(port,ibuf,20);//吸收数据
ReceiveData=Ansistring(ibuf);
//char字符串转换AnsiString型字符串
ReceiveEdit->Text=ReceiveData;
//显示接管到的字符串
}
在措施中,我们利用了一些sio_xxx()型的函数,它们都是Pcommpro自带的串行通信函 数(函数的详细用法可以参考Pcommpro的辅佐),通过这些函数,我们可以对串行端口举办 配置。
sio_open(port)和sio_close(port)为打开串口和封锁串口函数,参数port可配置详细操纵的串口;sio_ioctl(intport,intbaud,intmode)为串口节制函数,可配置串口的波特率、数据位、遏制位、奇偶校验;至于sio_write(port)和sio_read(port),则为读串口和写串口函数;sio_cnt_irq(intport,VOID(CALLBACK*func)(intport),intcount) 为间断函数,当串口有数据时,就触发该函数,然后该函数就会启动个间断处事措施VOID(CALLBACK *func)(intport)(为一函数指针),这里是挪用cntirq()函数吸收数据,该函数需要措施员手工生成。
#p#分页标题#e#
由此我们可以看出,只要我们对措施稍加修改,在表单上再添加一些控件,使得sio_xxx() 这些函数的参数可以由用户界面输入,就可以做到由用户选定举办数据传输的通信端口,并设定这个端口的相关参数,包罗波特率、数据位、遏制位、奇偶校验和流量节制等