?? 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 + -