F
fenghualiang
Unregistered / Unconfirmed
GUEST, unregistred user!
我现在正在用Builder4作毕业设计,由于是第一次使用,遇到
不少问题,最关键的是串口通讯问题,程序要求从连到串口的传感器中
读数。传感器送出的数据格式为AA PP PP PP TT TT TT 55(十六进制),
其中AA 55为标志,P表示压力数据,T表示温度数据。每组数据共八个。
波特率1200,八个数据位,一个或两个停止位(视不同的工作方式而定),
无校验位。
我我想用微软的ActiveX控件mscomm32.ocx来实现通讯,我的机器
上装了VC++6.0,c:/windows/system下也有MSComm32.dep,MSComm32.ocx.
我也成功的把这个控件装到Builder4中.问题是程序运行有错,或者一点响
应也没有.下面是原程序,麻烦各位帮我看看有什么问题.谢谢!
#include
#pragma hdrstop
#include "Comm.h"
#include "time.h"
#define comEvReceive 2
//-------------------------------------------------------
#pragma package(smart_init)
#pragma link "MSCommLib_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------
OleVariant vResponse;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
MSComm1->CommPort=2;
if(!MSComm1->PortOpen)
MSComm1->PortOpen=true
//打开端口
/*
当程序运行到这儿时,有时出现如下错误:
Project Commu.exe raised exception class EOleException with
message 'Port already open'.Process stopped.Use Step or Run to
continue.
实际上,串口似乎根本就没打开
*/
MSComm1->InputMode=1
//二进制方式
MSComm1->Settings="1200,n,8,1";
MSComm1->RThreshold=1
//接收阈值
MSComm1->InputLen=0;
vResponse=MSComm1->Input
//清空接收缓冲区
}
//---------------------------------------------------------------
//串口事件处理
void __fastcall TForm1::MSComm1Comm(TObject *Sender)
{
int k=0;
if(MSComm1->CommEvent==comEvReceive) //如果有接收事件产生
{
k=MSComm1->InBufferCount;
if(k>0)
{
MSComm1->InputLen=(short)k;
vResponse=MSComm1->Input;
for(int i=0;iLines->Add(IntToStr(vResponse.VByte));
}
}
}
//---------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if(MSComm1->PortOpen)
MSComm1->PortOpen=false;
}
//---------------------------------------------------------------
如果不出现前述"port already open"的问题,一般都没有事件产生,所以也
没法收到数据.不过有一次莫名其妙收到了数据,但数据不对.后来又没反应了.
我已经排除硬件错误的可能性,因为我在DOS下用C编的程序可以正确的读到数据.现在我束手无策了,恳请各位高手帮忙!
不胜感激!
不少问题,最关键的是串口通讯问题,程序要求从连到串口的传感器中
读数。传感器送出的数据格式为AA PP PP PP TT TT TT 55(十六进制),
其中AA 55为标志,P表示压力数据,T表示温度数据。每组数据共八个。
波特率1200,八个数据位,一个或两个停止位(视不同的工作方式而定),
无校验位。
我我想用微软的ActiveX控件mscomm32.ocx来实现通讯,我的机器
上装了VC++6.0,c:/windows/system下也有MSComm32.dep,MSComm32.ocx.
我也成功的把这个控件装到Builder4中.问题是程序运行有错,或者一点响
应也没有.下面是原程序,麻烦各位帮我看看有什么问题.谢谢!
#include
#pragma hdrstop
#include "Comm.h"
#include "time.h"
#define comEvReceive 2
//-------------------------------------------------------
#pragma package(smart_init)
#pragma link "MSCommLib_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------
OleVariant vResponse;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
MSComm1->CommPort=2;
if(!MSComm1->PortOpen)
MSComm1->PortOpen=true
//打开端口
/*
当程序运行到这儿时,有时出现如下错误:
Project Commu.exe raised exception class EOleException with
message 'Port already open'.Process stopped.Use Step or Run to
continue.
实际上,串口似乎根本就没打开
*/
MSComm1->InputMode=1
//二进制方式
MSComm1->Settings="1200,n,8,1";
MSComm1->RThreshold=1
//接收阈值
MSComm1->InputLen=0;
vResponse=MSComm1->Input
//清空接收缓冲区
}
//---------------------------------------------------------------
//串口事件处理
void __fastcall TForm1::MSComm1Comm(TObject *Sender)
{
int k=0;
if(MSComm1->CommEvent==comEvReceive) //如果有接收事件产生
{
k=MSComm1->InBufferCount;
if(k>0)
{
MSComm1->InputLen=(short)k;
vResponse=MSComm1->Input;
for(int i=0;iLines->Add(IntToStr(vResponse.VByte));
}
}
}
//---------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if(MSComm1->PortOpen)
MSComm1->PortOpen=false;
}
//---------------------------------------------------------------
如果不出现前述"port already open"的问题,一般都没有事件产生,所以也
没法收到数据.不过有一次莫名其妙收到了数据,但数据不对.后来又没反应了.
我已经排除硬件错误的可能性,因为我在DOS下用C编的程序可以正确的读到数据.现在我束手无策了,恳请各位高手帮忙!
不胜感激!