读书人

跪求各位大侠!帮帮小弟看看一个c++ b

发布时间: 2012-03-08 13:30:13 作者: rapoo

跪求各位大侠!帮帮小弟看看一个c++ builder程序,为啥我的程序可以编译通过但界面没显示采集的数据也没显示实时波形呀??(刚学的菜鸟)
//---------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------
#pragma package(smart_init)
#pragma link "MSCommLib_OCX"
#pragma resource "*.dfm"
TFormShow *FormShow;
int temp1=0,temp2=0,temp3=0,temp4=0,temp5=0,temp6=0,temp7=0,temp8=0,temp9=0;
//---------------------------------------
__fastcall TFormShow::TFormShow(TComponent* Owner)
: TForm(Owner)
{


}
//---------------------------------------


void __fastcall TFormShow::OpenPortClick(TObject *Sender)
{
try{
if(MSComm1->PortOpen!=true)
{
MSComm1->CommPort=StrToInt(PortSelect->Text);//选择串口号
MSComm1->Settings=BoudSelect->Text+","+"N"+","+"8"+","+"1";//设置串口的属性波特率、奇偶校验、数据位和停止位
MSComm1->InputMode=0;//设置传入数据的格式,0为文本形式
MSComm1->PortOpen=true;//打开串口
OpenPort->Enabled=false;
ClosePort->Enabled=true;
Show->Enabled=true;
Stop->Enabled=true;
}
}
catch(Exception&exception)
{
Application->ShowException(&exception);
}

StatusBar1->Panels->Items[0]->Text="端口状态:打开";
}
//---------------------------------------

void __fastcall TFormShow::ClosePortClick(TObject *Sender)
{
try
{
if(Timer1->Enabled)
Timer1->Enabled=false;//如果正在采集数据,则停止采集
if(MSComm1->PortOpen!=false)
{
MSComm1->PortOpen=false;
OpenPort->Enabled=true;
ClosePort->Enabled=false;
Show->Enabled=false;
Stop->Enabled=false;
}
else
{
OpenPort->Enabled=false;
ClosePort->Enabled=true;
//Shape1->Brush->Color=clRed;
}
for(int i=0;i<3;i++) //清除Chart空间里面原有的曲线
Chart1->Series[i]->Clear();

for(int i=0;i<3;i++)
Chart2->Series[i]->Clear();

for(int i=0;i<3;i++)
Chart3->Series[i]->Clear();
}
catch(Exception&exception)
{
Application->ShowException(&exception);
}

StatusBar1->Panels->Items[0]->Text="端口状态:关闭";
}
//---------------------------------------


void __fastcall TFormShow::FormCreate(TObject *Sender)
{
MSComm1->InputLen=0;//确定希望从接收缓冲区移出的字符数量,InputLen=0时一次把接收缓冲区的字符全部移出
MSComm1->InBufferSize=1024;
MSComm1->OutBufferSize=512;
MSComm1->SThreshold=0;//表示发送数据时不发生OnComm事件
MSComm1->RThreshold=18;//设定接收18个字符时触发OnComm事件
MSComm1->InputMode=1;//以二进制格式接受数据

/*chart控件初始化*/
for(int i=0;i<3;i++)
Chart1->Series[i]->Clear();

for(int i=0;i<3;i++)
Chart2->Series[i]->Clear();

for(int i=0;i<3;i++)
Chart3->Series[i]->Clear();
}
//---------------------------------------




void __fastcall TFormShow::ShowClick(TObject *Sender)
{
for(int i=0;i<3;i++) //清除Chart空间里面原有的曲线
Chart1->Series[i]->Clear();

for(int i=0;i<3;i++)
Chart2->Series[i]->Clear();

for(int i=0;i<3;i++)
Chart3->Series[i]->Clear();
Timer1->Enabled=true;//启动定时器
}
//---------------------------------------

void __fastcall TFormShow::MSComm1Comm(TObject *Sender)
{
MSComm1->InputMode=1;
int ByteNum,i=0;
Byte buff[306];
long int a[19];
OleVariant RxBuff;
if(MSComm1->InBufferCount==18&&MSComm1->InputMode==1)
{
RxBuff=MSComm1->Input;
ByteNum=RxBuff.ArrayHighBound(1);
for(int i=0;i<=ByteNum;i++)
buff[i]=RxBuff.GetElement(i);
}
for(int i=0;i<19;i++)
{
a[i]=buff[8+16*i]*32768+buff[9+16*i]*16384+buff[10+16*i]*8192+buff[11+16*i]*4096+buff[12+16*i]*2048+buff[13+16*i]*1024+buff[14+16*i]*512+buff[15*i]*256+buff[16*i]*128+buff[1+16*i]*64+buff[2+16*i]*32+buff[3+16*i]*16+buff[4+16*i]*8+buff[5+16*i]*4+buff[6+16*i]*2+buff[7+16*i]*1;
}
if(a[i]!=0)
{
Edit4->Text=Edit4->Text.sprintf("%0.01f",a[0]);
Edit5->Text=Edit5->Text.sprintf("%0.01f",a[1]);
Edit6->Text=Edit6->Text.sprintf("%0.01f",a[2]);
Edit7->Text=Edit7->Text.sprintf("%0.01f",a[3]);
Edit8->Text=Edit8->Text.sprintf("%0.01f",a[4]);
Edit9->Text=Edit9->Text.sprintf("%0.01f",a[5]);
Edit10->Text=Edit10->Text.sprintf("%0.01f",a[6]);
Edit11->Text=Edit11->Text.sprintf("%0.01f",a[7]);
Edit12->Text=Edit12->Text.sprintf("%0.01f",a[8]);
Edit13->Text=Edit13->Text.sprintf("%0.01f",a[9]);
Edit14->Text=Edit14->Text.sprintf("%0.01f",a[10]);
Edit15->Text=Edit15->Text.sprintf("%0.01f",a[11]);
Edit16->Text=Edit16->Text.sprintf("%0.01f",a[12]);
Edit17->Text=Edit17->Text.sprintf("%0.01f",a[13]);
Edit18->Text=Edit18->Text.sprintf("%0.01f",a[14]);
Edit19->Text=Edit19->Text.sprintf("%0.01f",a[15]);
Edit20->Text=Edit20->Text.sprintf("%0.01f",a[16]);
Edit21->Text=Edit21->Text.sprintf("%0.01f",a[17]);
Edit22->Text=Edit22->Text.sprintf("%0.01f",a[18]);
temp1=(float)a[0]/100;
temp2=(float)a[1]/100;
temp3=(float)a[2]/100;
temp4=(float)a[3]/100;
temp5=(float)a[4]/100;
temp6=(float)a[5]/100;
temp7=(float)a[13]/100;
temp8=(float)a[14]/100;
temp9=(float)a[15]/100;



}

}
//---------------------------------------

void __fastcall TFormShow::Timer1Timer(TObject *Sender)
{

TDateTime current;
current=Now();
StatusBar1->Panels->Items[2]->Text=DateTimeToStr(Now());


/*绘制实时曲线*/
Series1->AddY(temp3);
Series2->AddY(temp2);
Series3->AddY(temp1);
Series4->AddY(temp6);
Series5->AddY(temp5);
Series6->AddY(temp4);
Series7->AddY(temp9);
Series8->AddY(temp8);
Series9->AddY(temp7);



}
//---------------------------------------



[解决办法]
你得首先确认你得程序能正常收到数据.用串口调试助手看看数据发送是否正常,然后一点一点得调试

读书人网 >C++ Builder

热点推荐