您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > BCB > 正文
用Pcomm Pro 开发串行通信程序
[文章信息]
作者:
时间:2002-10-24
出处:C++ Builder 编程文集
责任编辑:
[文章导读]
用C++Builder在Win9x下开发串行通信程序是程序员们经常遇到却又令人头痛的事情,不但要理解许多复杂的API函数,还要掌握多线程编程......
advertisement
热点推荐
· 闪客五周年作品展:灵光1999
· 10.18精选 Win2003共享打印
· Messenger Plus!新功能体验
· 专业的魅力:图层的使用
· 金山文字2003中对文档进行页面设置
[正文]
  用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 files\PcommPro\Lib下的Pcommb.lib文件加入到C++Builder的View菜单中Project Manager的项目中,使之成为项目的一个单元(unit)。

  把#include"c:\Programfiles\PcommPro\Lib\PComm.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()函数接收数据,该函数需要程序员手工生成。

  由此我们可以看出,只要我们对程序稍加修改,在表单上再添加一些控件,使得sio_xxx() 这些函数的参数可以由用户界面输入,就可以做到由用户选定进行数据传输的通信端口,并设定这个端口的相关参数,包括波特率、数据位、停止位、奇偶校验和流量控制等


·"WAP天极之IT新闻资讯,50万元等你拿"    ·天极WAP之游戏狂图,50万元等你下载

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容阅读排行榜
  • 盈通多款PCI-E显卡摆上柜台
  • 闪客五周年作品展:灵光1999
  • 10.18精选 Win2003共享打印
  • [配置推荐]7000元HL2游戏配置
  • FPS顶级秘密武器 Aqua3鼠标垫
  • Messenger Plus!新功能体验
  • 扶不起的国足 《PSOBB》足球赛
  • 另类魔兽争霸简史
  • Advertisement

    天极无线
    待机彩图    >>更多
    多彩动画    >>更多
    美妙和弦    >>更多
    天使在唱歌
    壁虎漫步
    PrettyBoy
    LoveLoveLove
    我是你的小小狗
    单身情歌
    十面埋伏
    祝酒歌
    回心转意
    波斯猫
    太委屈
    S.H.E
    潘玮柏
    M2M
    蔡依林
    阿牛
    林志炫
    陈弈迅
    刀郎
    黑龙
    S.H.E
    陶晶莹
    情人玫瑰坊
    音乐风云
    新片速递
    神秘测试
    都市约会
    ·天极彩信天天精彩
    ·图铃梦工厂下载无限!
    ·找寻童真,卡通专题
    ·夏日激情交友社区!
    ·星座运程,预测人生

    CSEEK搜索