📄 unit1.pas
字号:
{
发现传感器数据包
}
else if (curStr='fd') and (not GpsDataFlag)
and (not ADDataFlag)and (not ParaDataFlag) then
begin
ADDataFlag:=True;
ADDataCount:=0;
GpsNewDataFlag:=True;
ADNewDataFlag:=True;
ADStr:=ADStr+chr(13) + chr(10);//保存数据
end
{
截取参数数据包
}
else if ParaDataFlag then
begin
ParaDataArray[ParaDataCount]:=tmpInt;
ParaDataCount:=ParaDataCount+1;
if ParaDataCount=ParaDataCountMax then
begin
ParaDataFlag:=False;//截取结束
ParaNewDataFlag:=True;
ParaDataCount:=0;
end;
end
{
截取GPS数据包
}
else if GpsDataFlag then
begin
GpsDataArray[GpsDataCount]:=tmpInt;
GpsDataCount:=GpsDataCount+1;
GpsStr:=GpsStr+curStr+' ';
if GpsDataCount=GpsDataCountMax then
begin
GpsDataFlag:=False;//截取结束
GpsNewDataFlag:=True;
GpsDataCount:=0;
end;
end
{
截取传感器数据包
}
else if ADDataFlag then
begin
ADDataArray[ADDataCount]:=tmpInt;
ADDataCount:=ADDataCount+1;
ADStr:=ADStr+curStr+' ';
if ADDataCount=ADDataCountMax then
begin
ADDataFlag:=False;//截取结束
ADNewDataFlag:=True;
ADDataCount:=0;
end;
end;
end;
{
处理成字符串
}
TransToStr;
end;
end;
end;
{
显示数据
}
// Synchronize(PostData);
PostData;
ReleaseMutex(hMutex);//释放互斥对象的句柄
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
hMutex:=CreateMutex(nil,False,nil); //创建互斥对象
hMutex2:=CreateMutex(nil,False,nil);
gpsMeta := TMetaFile.Create;
posLength := 0; //初始化轨迹点数组
SetLength(posXArray,1000);
SetLength(posYArray,1000);
posLengthLoad := 0;
SetLength(posXArrayLOad,0);
SetLength(posYArrayLoad,0);
DrawAxis;
end;
procedure TForm1.btRecStartClick(Sender: TObject);
var
i:Integer;
begin
//初始化串口
if MSCommIn.PortOpen then
MSCommIn.PortOpen :=False;
MSCommIn.CommPort :=cmbbxSerialIn.ItemIndex +1;
MSCommIn.Settings :=cmbbxBaudIn.Items[cmbbxBaudIn.ItemIndex]+',n,8,1';
{
确定当前数据发送方式
}
if (cmbbxTypeIn.ItemIndex=1) then
begin
MSCommIn.InputMode :=0; //文本形式,只是在调试时
ReceiveCharFlag :=True;
end
else
begin
MSCommIn.InputMode :=1; //数据形式,默认
ReceiveCharFlag :=False;
end;
MSCommIn.PortOpen := True;
//初始化保存数据的全局变量
ADStr:='';
GpsStr:='';
DownStr:='';
//初始化轨迹图像 ,原点为当前点
posLength:=0;
posXArray[posLength] := 0;
posYArray[posLength] := 0;
inc(posLength);
DrawAxis;
//初始化截取数据包的变量
ParaDataFlag:=False;
ParaNewDataFlag:=False;
ParaDataCount:=0;
GPSDataFlag:=False;
GPSNewDataFlag:=False;
GpsDataCount:=0;
ADDataFlag:=False;
ADNewDataFlag:=False;
ADDataCount:=0;
for i:=0 to 13 do //传感器未初试化
ADDataArrayMean[i]:=0;
InitADDataFlag:=False;
//初始化参数数据显示
lbShowPara0.Caption :='0';
lbShowPara1.Caption :='0';
lbShowPara2.Caption :='0';
lbShowPara3.Caption :='0';
lbShowPara4.Caption :='0';
lbShowPara5.Caption :='0';
lbShowPara6.Caption :='0';
lbShowPara7.Caption :='0';
//初始化GPS数据显示
lbShowGps0.Caption :='0';
lbShowGps1.Caption :='0';
lbShowGps2.Caption :='0';
lbShowGps3.Caption :='0';
lbShowGps4.Caption :='0';
lbShowGps5.Caption :='0';
lbShowGps6.Caption :='0';
//初始化传感器数据显示
lbShowAd0.Caption :='0';
lbShowAd1.Caption :='0';
lbShowAd2.Caption :='0';
lbShowAd3.Caption :='0';
lbShowAd4.Caption :='0';
lbShowAd5.Caption :='0';
lbShowAd6.Caption :='0';
lbShowAd7.Caption :='0';
//初始化模式显示
lbShowModel.Caption :='0';
//初始化指令码显示
lbCode1.Caption :='0';
lbCode2.Caption :='0';
lbCode3.Caption :='0';
lbCode4.Caption :='0';
dtCode1.Text :='0';
dtCode2.Text :='0';
dtCode3.Text :='0';
dtCode4.Text :='0';
rchdtSerialIn.Text :='';
rchdtSerialOut.Text :='';
tmrSerialIn .Enabled :=True; //打开定时器
btRecStop .Enabled :=True; // 激活"停止接受"按钮
btRecSave .Enabled :=False; //关闭"保存数据"按钮
btRecStart .Enabled :=False; //关闭"开始接收"按钮
end;
procedure TForm1.btRecStopClick(Sender: TObject);
begin
tmrSerialIn .Enabled :=False; //关闭定时器
btRecStop .Enabled :=False; // 关闭"停止接受"按钮
btRecSave .Enabled :=True; //"保存数据"按钮使能
btRecStart .Enabled :=True; //"开始接收"按钮使能
end;
/////////////////////////////////////////////////////////////////
{
如果串口接受到数据,就保存ADStr,GpsStr,DownStr。便于分析机载系统
}
procedure TForm1.btRecSaveClick(Sender: TObject);
var
fileName:String;
i:integer;
begin
if Length(DownStr)<>0 then
begin
fileName := 'Exp';
if dlgSaveData.Execute then//打开数据保存的对话框
begin
fileName:=dlgSaveData .FileName ;
rchdtTmp .Text :=ADStr;
rchdtTmp .Lines.SaveToFile(filename+'_AD_All'+'.txt');
rchdtTmp .Text :=DownStr;
rchdtTmp .Lines.SaveToFile(filename+'_Down'+'.txt');
rchdtTmp .Text :=GpsStr;
rchdtTmp .Lines.SaveToFile(filename+'_Gps'+'.txt');
rchdtTmp .Text :='';
end
end
else
ShowMessage('没有数据!');
end;
procedure TForm1.btSendOutClick(Sender: TObject);
begin
if MSCommOut.PortOpen then
MSCommOut.PortOpen :=False;
MSCommOut.CommPort :=cmbbxSerialOut.ItemIndex +1;
MSCommOut.Settings :=cmbbxBaudOut.Items[cmbbxBaudIn.ItemIndex]+',n,8,1';
//如果直接以文本形式发送数据,
if (cmbbxTypeOut.ItemIndex=1) then
begin
MSCommOut.InputMode :=0;
MSCommOut.PortOpen := True;
MSCommOut.Output :=rchdtSerialOut.Text;
end else
//使用串口线程发送数据
begin
MSCommOut.InputMode :=1;
MSCommOut.PortOpen := True;
btSendOut.Enabled :=False;
TSerialOutThread.Create(False);
end;
end;
procedure TForm1.tmrSerialInTimer(Sender: TObject);
begin
TSerialInThread.Create(False);
end;
procedure TForm1.btSetModelClick(Sender: TObject);
begin
dtCode1.Text :=cmbbxModel.Items[cmbbxModel.ItemIndex];
dtCode2.Text :='11';
dtCode3.Text :='66';
dtCode4.Text :='66';
btSendOutClick(Sender);
end;
procedure TForm1.btSetParaClick(Sender: TObject);
begin
dtCode1.Text :='66';
dtCode2.Text :='11';
dtCode3.Text :=cmbbxParaNo.Items[cmbbxParaNo.ItemIndex];
dtCode4.Text :=IntToHex(StrToInt(dtParaValue.Text),2);
btSendOutClick(Sender);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
CloseHandle(hMutex);
CloseHandle(hMutex2);
gpsMeta.Free;
end;
procedure TForm1.btSaveTraceClick(Sender: TObject);
var
str: TStrings;
temp,filename: String;
i : Integer;
begin
if dlgSaveTrace.Execute then
begin
filename := dlgSaveTrace.FileName;
str := TStringList.Create;
for i:=0 to posLength-1 do
begin
temp := FloatToStr(posXArray[i])+','+FloatToStr(posYArray[i]);
str.Add(temp);
end;
str.SaveToFile(filename);
str.Free;
posLength := 0;
SetLength(posXArray,1000);
SetLength(posYArray,1000);
end;
end;
////////////////////////////////////////////////////////////////////////////////
{
载入原来保存的飞行轨迹点的文本
}
procedure TForm1.btLoadTraceClick(Sender: TObject);
var
str: TStrings;
temp,filename: String;
i,st : Integer;
begin
if dlgLoadTrace.Execute then
begin
str := TStringList.Create;
filename := dlgLoadTrace.FileName;
str.LoadFromFile(filename);
posLengthLoad := str.Count; //轨迹点的个数
setLength(posXArrayLoad,str.Count); //设置数据的大小
setLength(posYArrayLoad,str.Count);
for i:=0 to str.Count-1 do
begin
st := pos(',',str[i]);
temp := copy(str[i],0,st-1); //截取X坐标值
posXArrayLoad[i] := StrToFloat(temp);
temp := copy(str[i],st+1,length(str[i])-st);
posYArrayLoad[i] := StrToFloat(temp); //截取Y坐标值
end;
str.Free;
DrawAxis;
end;
end;
procedure TForm1.btADInitClick(Sender: TObject);
var
i:integer;
begin
{
如果已经初试化
}
if InitADDataFlag then
begin
InitADDataFlag:=False;
btADInit.Caption:='传感器初始化';
for i:=0 to 13 do
ADDataArrayMean[i]:=0;
end else
{
如果未初试化
}
begin
InitADDataFlag:=True;
btADInit.Caption:='放弃初始化';
for i:=0 to 13 do
ADDataArrayMean[i]:=ADDataArray[i];
end;
end;
procedure TForm1.btSaveDataClick(Sender: TObject);
begin
btRecSaveClick(Sender);
end;
procedure TForm1.btCharClearClick(Sender: TObject);
begin
srsGyroX.Clear;
srsGyroY.Clear;
srsGyroZ.Clear;
srsAcc1.Clear;
srsAcc2.Clear;
srsHeight.Clear;
end;
procedure TForm1.dtCode1Change(Sender: TObject);
begin
if Length(dtCode1.Text)>2 then
dtCode1.Text:='ff';
end;
procedure TForm1.dtCode2Change(Sender: TObject);
begin
if Length(dtCode2.Text)>2 then
dtCode2.Text:='ff';
end;
procedure TForm1.dtCode3Change(Sender: TObject);
begin
if Length(dtCode3.Text)>2 then
dtCode3.Text:='ff';
end;
procedure TForm1.dtCode4Change(Sender: TObject);
begin
if Length(dtCode4.Text)>2 then
dtCode4.Text:='ff';
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -