手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

用PcommPro研发串行通信程式

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
用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:\Programfiles\PcommPro\Lib下的Pcommb.lib文档加入到C Builder的View菜单中ProjectManager的项目中,使之成为项目的一个单元(unit)。
把#include"c:\Programfiles\PcommPro\Lib\PComm.h"包含在您的Comm.cpp中。
二、表单及属性的配置
----添加控件,配置各控件的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()这些函数的参数能够由用户界面输入,就能够做到由用户选定进行数据传输的通信端口,并设定这个端口的相关参数,包括波特率、数据位、停止位、奇偶校验和流量控制等.




文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS