【求助】数据采集程序遇到的问题
用的是BCB6.0,串口控件VICTOR1.3.5。波形显示为IOCOMP控件。小弟做了个单片机数据采集系统的上位机程序,用的是串口,设置的波特率是9600,用的是16位的AD,单片机分高低字节发送数据给上位机,然后上位机程序将高低字节重新组合再转换为整型数,计算得到电压值。
采集的时候发现当速度比较低的时候,1s接收个几十个数据!这时候能把高字节跟低字节重新合并成16位数,然后再计算得到电压值。当单片机发送速度比较快时,大概设置为每秒钟1000之后,只能接收到数据,不能把数据重新整合,计算!
这是工作时候的图片
http://cache.amobbs.com/bbs_upload782111/files_40/ourdev_643102JZU6FM.jpg
(原文件名:1.jpg)
下面是我的程序:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
const BufSize = 4096;
unsigned char Buffer;
int nBytes = 0;
AnsiString s,l,m;
//victor控件接收数据程序
while((nBytes=YbCommDevice1->ReadPackage(Buffer,BufSize))>0)
for(int i=0; i<nBytes; i++)
{
s += IntToHex(Buffer,2) + " ";
l += IntToHex(Buffer,2);
}
s = s.Trim();
if(!s.IsEmpty())
{
Memo1->Lines->Add(s);//显示从串口接收到的原始数据
Buffer=0;
}
int StrLen;
int temp;
double volt;
AnsiString voltvalue;
StrLen = l.Length();
if(StrLen == 4)
{
m =(String( "0x")+ l ).ToInt();
Memo2->Lines->Add(m); //显示经过整合,转换后的整型数
temp = StrToInt(m);
//计算电压
if (temp>=0 && temp<=32767)
{
volt = ((double)temp/32768)*10;
}
else if(temp>32767 && temp<=65535)
{
temp = temp-65536;
volt =((double)temp/32768)*10;
}
else
volt = 0;
voltvalue = FloatToStrF( volt,ffFixed,7,5);
Memo3->Lines->Add(voltvalue); //显示计算得到的电压值
}
int i;
iPlot1->Channel->AddXY(i,volt); //显示波形
} 定时器,只接受数据,不要处理啊....
处理放在别的地方 回复【1楼】yajira
-----------------------------------------------------------------------
谢谢楼上!现在试试去! 兄弟你 好 ,你BCB6可以用数码管显示啊 ?我 很需要?我的QQ403994659
麻烦发个给我号 吗?万分感谢!!! 你还是整个协议嘛,你的好像没有协议,用MODBUS协议肯定没问题
页:
[1]