用PcommPro开发串行通信程序

homeZZZZ345

homeZZZZ345

2016-02-19 15:06

今天图老师小编给大家介绍下用PcommPro开发串行通信程序,平时喜欢用PcommPro开发串行通信程序的朋友赶紧收藏起来吧!记得点赞哦~

  用C++Builder在Win9x下开发串行通信程序是程序员们经常遇到却又令人头痛的事情,不但要理解许多复杂的API函数,还要掌握多线程编程。令人欣慰的是有一些公司专门为C++Builder开发了编写串行通信程序的开发工具,例如MOXA公司的Pcomm(该软件可在http:www.moxa.com.tw下载),因而帮我们解决了串行编程这一难题。

  ----下面结合一个具体的例子来说明串行通信程序的开发。本程序的编程环境是Win98和C++Builder3.0。这个编程示例的功能比较强,它具有发送数据和自动接收数据的双重功能。在它的基础上稍加修改,即可以让用户选定进行传输的通信端口,并设定这个端口的相关参数,包括波特率、数据位、停止位、奇偶校验和流量控制等。

  一、Pcomm的设置

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  ----启动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:ProgramfilesPcommProLib下的Pcommb.lib文件加入到C++Builder的View菜单中ProjectManager的项目中,使之成为项目的一个单元(unit)。

  把#include"c:ProgramfilesPcommProLibPComm.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()这些函数的参数可以由用户界面输入,就可以做到由用户选定进行数据传输的通信端口,并设定这个端口的相关参数,包括波特率、数据位、停止位、奇偶校验和流量控制等.

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

用PcommPro开发串行通信程序

编程语言 网络编程
用PcommPro开发串行通信程序

使用VB开发Windows环境下的串行通信程序

编程语言 网络编程
使用VB开发Windows环境下的串行通信程序

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

用VC 6.0实现串行通信的三种方法

编程语言 网络编程
用VC 6.0实现串行通信的三种方法

用Pear加速PHP程序开发

PHP
用Pear加速PHP程序开发

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

VisualBasic通信程序设计

编程语言 网络编程
VisualBasic通信程序设计

用Zend Encode编写开发PHP程序

Web开发
用Zend Encode编写开发PHP程序

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

解决jquery .ajax 在IE下卡死问题的解决方法

解决jquery .ajax 在IE下卡死问题的解决方法

使用C#开发SmartPhone程序入门

使用C#开发SmartPhone程序入门
下拉加载更多内容 ↓