机器人技术——基于DELPHI的数据采集类上位机软件的编写
先来看一张博主花了20分钟弄出来的一个demo,可以通过串口接收单片机传上来的传感器数据,并将数据分别保存到图片、TXT、EXCEL、数据库中:
l 曲线绘制组件
l Edit组件
l 数据库组件
2、 控件设置及代码编写
l 数据通信组件
ComDataPacket组件的ComPort属性设置成ComPort1,这样ComPort组件与ComDataPacket就建立了链接。
设置ComDataPacket以下属性:
l 曲线绘制组件
双击Chart组件,添加5条曲线sensor1- sensor5:
l 保存为图片
在保存按钮中添加如下代码,即可将波形截图,并保存为.bmp文件:
form1.Chart1.SaveToBitmapFile(form1.Edit1.Text);
l 保存到TXT
AssignFile(F, form1.Edit3.Text);
Append(F);
Writeln(F, data) ;
Closefile(F) ;
l 保存到EXCEL
ExcelApp := CreateOleObject(‘Excel.Application’ );
ExcelApp.WorkBooks.Open(form1.Edit3.Text);
ExcelApp.workbooks[1].sheets[1].name:=’数据采集demo’;
ExcelApp.workbooks[1].sheets[1].CELLS[1,2]:=’DATA’;
ExcelApp.workbooks[1].sheets[1].CELLS[1,3]:=’TIME’;
ExcelApp.workbooks[1].sheets[1].CELLS[1,4]:=’sensor1′;
ExcelApp.workbooks[1].sheets[1].CELLS[1,5]:=’sensor2′;
ExcelApp.workbooks[1].sheets[1].CELLS[1,6]:=’sensor3′;
ExcelApp.workbooks[1].sheets[1].CELLS[1,7]:=’sensor4′;
ExcelApp.workbooks[1].sheets[1].CELLS[1,8]:=’sensor5′;
ExcelApp.ActiveSheet.Rows[2].Insert ;
ExcelApp.workbooks[1].sheets[1].CELLS[2,2]:=datetostr(now);
ExcelApp.workbooks[1].sheets[1].CELLS[2,3]:=timetostr(now);
ExcelApp.workbooks[1].sheets[1].CELLS[2,4]:=sensor1;
ExcelApp.workbooks[1].sheets[1].CELLS[2,5]:=sensor2;
ExcelApp.workbooks[1].sheets[1].CELLS[2,6]:=sensor3;
ExcelApp.workbooks[1].sheets[1].CELLS[2,7]:=sensor4;
ExcelApp.workbooks[1].sheets[1].CELLS[2,8]:=sensor5;
ExcelApp.workbooks[1].SAVE;
ExcelApp.QUIT;
l 绘制曲线
form1.Series1.Add(sensor1);
form1.Series2.Add(sensor2);
form1.Series3.Add(sensor3);
form1.Series4.Add(sensor4);
form1.Series5.Add(sensor5);
l 完整串口中断函数
在ComDataPacket控件的OnPacketEvents中添加如下代码:
procedureTForm1.ComDataPacket1Packet(Sender: TObject; const Str: String);
var
a:byte;
rev:array[1..25]ofuchar;
DateTime:TDateTime;
F:Textfile;
sensor1,sensor2,sensor3,sensor4,sensor5:integer;
ExcelApp:Variant;
begin
move(Str[1],rev,20);
sensor1:=rev[3]*256+rev[4];//在这里只取了16位有效数据,如果想传输浮点数需要4个字节,读者可以思考一下处理的方法
sensor2:=rev[7]*256+rev[8];
sensor3:=rev[11]*256+rev[12];
sensor4:=rev[15]*256+rev[16];
sensor5:=rev[19]*256+rev[20];
form1.Series1.Add(sensor1);
form1.Series2.Add(sensor2);
form1.Series3.Add(sensor3);
form1.Series4.Add(sensor4);
form1.Series5.Add(sensor5);
ExcelApp := CreateOleObject(‘Excel.Application’ );
ExcelApp.WorkBooks.Open(form1.Edit3.Text);
ExcelApp.workbooks[1].sheets[1].name:=’数据采集demo’;
ExcelApp.workbooks[1].sheets[1].CELLS[1,2]:=’DATA’;
ExcelApp.workbooks[1].sheets[1].CELLS[1,3]:=’TIME’;
ExcelApp.workbooks[1].sheets[1].CELLS[1,4]:=’sensor1′;
ExcelApp.workbooks[1].sheets[1].CELLS[1,5]:=’sensor2′;
ExcelApp.workbooks[1].sheets[1].CELLS[1,6]:=’sensor3′;
ExcelApp.workbooks[1].sheets[1].CELLS[1,7]:=’sensor4′;
ExcelApp.workbooks[1].sheets[1].CELLS[1,8]:=’sensor5′;
ExcelApp.ActiveSheet.Rows[2].Insert ;
ExcelApp.workbooks[1].sheets[1].CELLS[2,2]:=datetostr(now);
ExcelApp.workbooks[1].sheets[1].CELLS[2,3]:=timetostr(now);
ExcelApp.workbooks[1].sheets[1].CELLS[2,4]:=sensor1;
ExcelApp.workbooks[1].sheets[1].CELLS[2,5]:=sensor2;
ExcelApp.workbooks[1].sheets[1].CELLS[2,6]:=sensor3;
ExcelApp.workbooks[1].sheets[1].CELLS[2,7]:=sensor4;
ExcelApp.workbooks[1].sheets[1].CELLS[2,8]:=sensor5;
ExcelApp.workbooks[1].SAVE;
ExcelApp.QUIT;
AssignFile(F, form1.Edit3.Text);
Append(F);
Writeln(F, data) ;
Closefile(F) ;
end;
6、总结
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!