hasea 发表于 2011-5-26 12:01:24

【求助】数据采集程序遇到的问题

用的是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);        //显示波形
}

yajira 发表于 2011-5-26 17:32:26

定时器,只接受数据,不要处理啊....

处理放在别的地方

hasea 发表于 2011-5-26 21:36:33

回复【1楼】yajira
-----------------------------------------------------------------------

谢谢楼上!现在试试去!

xiangge2011 发表于 2011-5-29 19:40:11

兄弟你 好 ,你BCB6可以用数码管显示啊 ?我 很需要?我的QQ403994659
麻烦发个给我号 吗?万分感谢!!!

xiangge2011 发表于 2011-5-29 19:42:45

你还是整个协议嘛,你的好像没有协议,用MODBUS协议肯定没问题
页: [1]
查看完整版本: 【求助】数据采集程序遇到的问题