⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 模型飞机测控平台 模型飞机测控平台 模型飞机测控平台 模型飞机测控平台
💻 PAS
📖 第 1 页 / 共 3 页
字号:
                  {
                  发现传感器数据包
                  }
                  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 + -