📄 unit111.pas
字号:
MemsStrArray[3]:=FloatToStrF((5.0/4095.0)*((15 and MemsDataArray[6])*256+MemsDataArray[7]-(15 and MemsDataArrayZero[6])*256-MemsDataArrayZero[7]),ffFixed,4,2);
MemsStrArray[4]:=FloatToStrF((5.0/4095.0)*((15 and MemsDataArray[8])*256+MemsDataArray[9]-(15 and MemsDataArrayZero[8])*256-MemsDataArrayZero[9]),ffFixed,4,2);
MemsStrArray[5]:=FloatToStrF((5.0/4095.0)*((15 and MemsDataArray[10])*256+MemsDataArray[11]-(15 and MemsDataArrayZero[10])*256-MemsDataArrayZero[11]),ffFixed,4,2);
MemHeight:=0.26*((15 and MemsDataArray[12])*256+MemsDataArray[13]-(15 and MemsDataArrayZero[12])*256-MemsDataArrayZero[13]);
MemsStrArray[6]:=FloatToStrF(MemHeight,ffFixed,4,2);
MemsStrArray[7]:=FloatToStrF(0.00244*((15 and MemsDataArray[14])*256+MemsDataArray[15]),ffFixed,4,2);
tmpDbl:=(5.0/4095.0)*((15 and MemsDataArray[16])*256+MemsDataArray[17]);
tmpDbl:=1.048*sqrt(2*1000*(tmpDbl+0.2947)/(1.25*4.67652));//
MemsStrArray[8]:=FloatToStrF(tmpDbl,ffFixed,4,2);
kMemHeight:=0.26*((15 and MemsDataArray[18])*256+MemsDataArray[19]-(15 and MemsDataArrayZero[18])*256-MemsDataArrayZero[19]);
MemsStrArray[9]:=FloatToStrF(kMemHeight,ffFixed,4,2);
DspContrValue[0]:=MemsDataArray[20]*256+MemsDataArray[21];
DspContrStr[0]:=IntToStr(DspContrValue[0]);
DspContrValue[1]:=MemsDataArray[22]*256+MemsDataArray[23];
DspContrStr[1]:=IntToStr(DspContrValue[1]);
ContrValue[0]:=2290-MemsDataArray[24]*256-MemsDataArray[25];
ContrStr[0]:=IntToStr(ContrValue[0]);
ContrValue[1]:=2580-MemsDataArray[26]*256-MemsDataArray[27];
ContrStr[1]:=IntToStr(ContrValue[1]);
end;
if GpsNewDataFlag =True then
begin
tmpSInt:=GpsDataArray[0]*256+GpsDataArray[1];//动向 x
tmpSInt1:=GpsDataArray[2]*256+GpsDataArray[3];//北向 y
XPoint:=0.1*tmpSInt;
YPoint:=0.1*tmpSInt1;
if (abs(XPoint-posXArray[posLength-1])<100) and (abs(YPoint-posYArray[posLength-1])<100) then //filter
begin
posXArray[posLength] := XPoint;
posYArray[posLength] := YPoint;
inc(posLength);
if posLength = Length(posXArray) then
begin
SetLength(posXArray,posLength+1000);
SetLength(posYArray,posLength+1000);
end;
end;
GpsStrArray[0]:=FloatToStrF(XPoint,ffFixed,4,2);//X;
GpsStrArray[1]:=FloatToStrF(YPoint,ffFixed,4,2);//Y;
tmpSInt:=((GpsDataArray[4]*256+GpsDataArray[5])shr 1);
tmpDbl:=0.514*0.02*tmpSInt;
GpsSpeed:=Round(tmpDbl);
GpsStrArray[2]:=FloatToStrF(tmpDbl,ffFixed,4,1); //速度 m/s
GpsStrArray[4]:=FloatToStrF(3.6*tmpDbl,ffFixed,4,1); //km/h
tmpSInt:=((GpsDataArray[6]*256+GpsDataArray[7])shr 1);
tmpDbl:=0.02*tmpSInt;
GpsNavAngel:=Round(tmpDbl);
GpsStrArray[3]:=FloatToStrF(tmpDbl,ffFixed,4,1);//航向
end;
end;
procedure TSerialInThread.PostData ;
var
tmpDbl:double;
i:integer;
tmpStr:String;
begin
Form1.RchdtSerialIn.Text:=SerialStr;
DownStr:=DownStr+SerialStr;
if Seriallength>0 then
begin
Form1.RchdtSerialIn.SelStart := Length(Form1.RchdtSerialIn.Text)-Seriallength;
Form1.RchdtSerialIn.Perform(EM_SCROLLCARET, 0, 0);
end;
if MemsNewDataFlag =True then
begin
MemsNewDataFlag:=False;
Form1.lbGyroY.Caption:=MemsStrArray[0];
Form1.lbGyroX.Caption:=MemsStrArray[1];
Form1.lbGyroZ.Caption:=MemsStrArray[2];
Form1.lbAccY.Caption:=MemsStrArray[3];
Form1.lbAccX.Caption:=MemsStrArray[4];
Form1.lbAccZ.Caption:=MemsStrArray[5];
Form1.lbRawHeight.Caption:=MemsStrArray[6];
Form1.lbSystemVolt.Caption:=MemsStrArray[7];
Form1.lbRevs1.Caption:=MemsStrArray[8];
Form1.lbAilSpeed.Caption:=MemsStrArray[9];
Form1.sldHeight.Caption:=MemsStrArray[6];
Form1.sldHeight.Pointers.Item(1).Value:=MemHeight;
Form1.srsRawHeight.AddY(MemHeight);
// Form1.SrsKalmanHeight.AddY(kMemHeight);
Form1.srsControlAil.AddY(DspContrValue[0]);
Form1.srsControlEle.AddY(DspContrValue[1]);
Form1.srsRawAil.AddY(ContrValue[0]);
Form1.srsRawEle.AddY(ContrValue[1]);
Form1.srsGyroY.AddY(GyroDataArray[0]);
Form1.srsGyroX.AddY(GyroDataArray[1]);
Form1.srsGyroZ.AddY(GyroDataArray[2]);
Form1.lbControlAil.Caption:=DspContrStr[0];
Form1.lbControlEle .Caption:=DspContrStr[1];
Form1.lbRawAil .Caption:=ContrStr[0];
Form1.lbRawEle .Caption:=ContrStr[1];
end;
if GpsNewDataFlag =True then
begin
GpsNewDataFlag:=False;
Form1.lbGpsX.Caption:=GpsStrArray[0];
Form1.lbGpsY.Caption:=GpsStrArray[1];
Form1.lbGpsSpeed.Caption:=GpsStrArray[4];
Form1.sldSpeed.Pointers.Item(1).Value:=Int(GpsSpeed);
Form1.sldSpeed.Caption:=GpsStrArray[2];
if (GpsNavAngel<360) and (GpsNavAngel>=0) then
Form1.sldNavAngel.Pointers.Item(1).Value:=Int(GpsNavAngel);
Form1.sldNavAngel.Caption:=GpsStrArray[3];
Form1.lbGpsNav.Caption:=GpsStrArray[3];
Form1.DrawAxis;
end;
if AgueNewDataFlag then
begin
AgueNewDataFlag:=False;
Form1.lbAgue0.Caption:=IntToStr(AgueDataArray[0]);
Form1.lbAgue1.Caption:=IntToStr(AgueDataArray[1]);
Form1.lbAgue2.Caption:=IntToStr(AgueDataArray[2]);
Form1.lbAgue3.Caption:=IntToStr(AgueDataArray[3]);
Form1.lbAgue4.Caption:=IntToStr(AgueDataArray[4]);
Form1.lbAgue5.Caption:=IntToStr(AgueDataArray[5]);
Form1.lbAgue6.Caption:=IntToStr(AgueDataArray[6]);
Form1.lbAgue7.Caption:=IntToStr(AgueDataArray[7]);
Form1.lbAgue8.Caption:=IntToStr(AgueDataArray[8]);
Form1.lbCurModel.Caption:=IntToHex(AgueDataArray[10],2);
Form1.lbModel.Caption:=Form1.lbCurModel.Caption;
Form1.lbDspControl.Caption:=IntToStr(AgueDataArray[11]);
Form1.lbHegihtD.Caption :=IntToStr(AgueDataArray[12]);
Form1.lbRollD.Caption :=IntToStr(AgueDataArray[13]-128);
Form1.lbDefD.Caption :=IntToStr(AgueDataArray[14]-128);
Form1.lbModel1.Caption:=LowerCase(IntToHex(AgueDataArray[15],2));
Form1.lbModel2.Caption:=LowerCase(IntToHex(AgueDataArray[16],2));
Form1.lbModel3.Caption:=LowerCase(IntToHex(AgueDataArray[17],2));
Form1.lbModel4.Caption:=LowerCase(IntToHex(AgueDataArray[18],2));
if ControlFlag then
begin
tmpStr:=IntToStr(StartControlCount);
if AgueDataArray[11]=0 then
begin
ControlFlag:=False;
MemsStr:=MemsStr+chr(13) + chr(10)+'Stop Control:'+IntToStr(AgueDataArray[10])+' '+tmpStr+chr(13) + chr(10);
GpsStr1:=GpsStr1+chr(13) + chr(10)+'Stop Control:'+IntToStr(AgueDataArray[10])+' '+tmpStr+chr(13) + chr(10);
end;
end
else
begin
tmpStr:=IntToStr(StartControlCount);
if AgueDataArray[11]=1 then
begin
ControlFlag:=True;
inc(StartControlCount);
MemsStr:=MemsStr+chr(13) + chr(10)+chr(13) + chr(10)+'Start Control:'+IntToStr(AgueDataArray[10])+' '+tmpStr+chr(13) + chr(10);
GpsStr1:=GpsStr1+chr(13) + chr(10)+chr(13) + chr(10)+'Start Control:'+IntToStr(AgueDataArray[10])+' '+tmpStr+chr(13) + chr(10);
end;
end;
end;
end;
procedure TSerialInThread.Execute;
var
tmpInt,i:Integer;
begin
FreeOnTerminate:=True;
GetData;
if WaitForSingleObject(hMutex,InFinite) =WAIT_OBJECT_0 then
begin
SerialStr:='';
if Seriallength >0 then
begin
for i:= 0 to Seriallength-1 do
begin
tmpInt:=SerialInput[i];//tmp
curStr:=LowerCase(IntToHex(tmpInt,2));
SerialStr :=SerialStr + curStr+' ';
begin
if (curStr='fe') and (not MemsDataFlag)and (not GpsDataFlag) and (not AgueDataFlag)then
begin
if AgueDataFlagFirst then
begin
AgueDataFlag:=True;
AgueDataFlagFirst:=False;
NewOneFlag:=True;
AgueDataCount:=0;
end
else
begin
AgueDataFlagFirst:=True;
GpsDataFlagFirst:=False;
MemsDataFlagFirst:=False;
end;
end
else if (curStr='fc') and (not MemsDataFlag)and (not GpsDataFlag)and (not AgueDataFlag) then
begin
if GpsDataFlagFirst then
begin
GpsDataFlag:=True;
NewOneFlag:=True;
GpsDataFlagFirst:=False;
GpsDataCount:=0;
end
else
begin
AgueDataFlagFirst:=False;
GpsDataFlagFirst:=True;
MemsDataFlagFirst:=False;
end;
end
else if (curStr='fd') and (not GpsDataFlag) and (not MemsDataFlag)and (not AgueDataFlag) then
begin
if MemsDataFlagFirst then
begin
MemsDataFlag:=True;
NewOneFlag:=True;
MemsDataFlagFirst:=False;
MemsDataCount:=0;
end
else
begin
AgueDataFlagFirst:=False;
GpsDataFlagFirst:=False;
MemsDataFlagFirst:=True;
end;
end
else if AgueDataFlag then
begin
AgueDataArray[AgueDataCount]:=tmpInt;
inc(AgueDataCount);
TempAgueStr:=TempAgueStr+curStr+' ';
if AgueDataCount=AgueDataCountMax then
begin
AgueDataFlag:=False;
AgueNewDataFlag:=True;
AgueDataCount:=0;
AgueStr:=AgueStr+TempAgueStr+chr(13) + chr(10);
FormatDownStr:= FormatDownStr+TempAgueStr+chr(13) + chr(10);
TempAgueStr:='';
end;
end
else if GpsDataFlag then
begin
GpsDataArray[GpsDataCount]:=tmpInt;
inc(GpsDataCount);
NewOneFlag:=not NewOneFlag;
if NewOneFlag then
TempGpsStr1:=TempGpsStr1+curStr+' '
else
TempGpsStr1:=TempGpsStr1+curStr;
if GpsDataCount=GpsDataCountMax then
begin
GpsDataFlag:=False;
GpsNewDataFlag:=True;
GpsDataCount:=0;
GpsStr1:=GpsStr1+TempGpsStr1 +chr(13) + chr(10);
FormatDownStr:= FormatDownStr+TempGpsStr1+chr(13) + chr(10);
TempGpsStr1:='';
end;
end
else if MemsDataFlag then
begin
MemsDataArray[MemsDataCount]:=tmpInt;
inc(MemsDataCount);
NewOneFlag:=not NewOneFlag;
if NewOneFlag then
TempMemsStr:=TempMemsStr+curStr+' '
else
TempMemsStr:=TempMemsStr+curStr;
if MemsDataCount=MemsDataCountMax then
begin
MemsDataFlag:=False;
MemsNewDataFlag:=True;
MemsDataCount:=0;
MemsStr:=MemsStr+TempMemsStr +chr(13) + chr(10);
FormatDownStr:= FormatDownStr+TempMemsStr+chr(13) + chr(10);
TempMemsStr:='';
end;
end;
end;
end;
SaveFormatData();
PostData;
end;
end;
ReleaseMutex(hMutex);
end;
{//}
procedure TForm1.btnSendCodeClick(Sender: TObject);
begin
if not MSComm1.PortOpen then
begin
MSComm1.CommPort :=cmbbxSerialIn.ItemIndex +1;
MSComm1.Settings :=cmbbxBaudIn.Items[cmbbxBaudIn.ItemIndex]+',n,8,1';
MSComm1.InputMode :=1;
MSComm1.PortOpen := True;
end;
TSerialOutThread.Create(False);
if rdbtnCode.Checked=False then
rchdtSerialOutEvent.Text:=chr(13) + chr(10)+':'+rchdtSerialOut.Text +chr(13) + chr(10)+rchdtSerialOutEvent.Text
else
rchdtSerialOutEvent.Text:=chr(13) + chr(10)+':'+edtSerialOut1.Text +' '+edtSerialOut2.Text
+' '+edtSerialOut3.Text+' '+edtSerialOut4.Text+rchdtSerialOutEvent.Text;
end;
procedure TForm1.btnHeightorSaveClick(Sender: TObject);
var
fileName:String;
begin
begin
fileName := '高度信号和舵机输出';
if dlgDataSave.Execute then
begin
fileName:=dlgDataSave .FileName ;
ChartHeightor.SaveToBitmapFile(fileName+'_Height.bmp');
ChartControl.SaveToBitmapFile(fileName+'_Control.bmp');
ChartGyro.SaveToBitmapFile(fileName+'_Gyro.bmp');
end;
end;
end;
procedure TForm1.btnHeightorClearClick(Sender: TObject);
begin
srsControlAil.Clear;
srsControlEle.Clear;
srsRawAil.Clear;
srsRawEle.Clear;
// srsKalmanHeight.Clear;
srsRawHeight.Clear;
srsGyroX.Clear;
srsGyroY.Clear;
srsGyroZ.Clear;
end;
procedure TForm1.btnOpenSerialClick(Sender: TObject);
begin
btnHeightorClearClick(Sender);
posLength:=0;
posXArray[posLength] := 0;
posYArray[posLength] := 0;
inc(posLength);
DrawAxis;
DownStr:='';
MemsStr:='';
GpsStr1:='';
AgueStr:='';
FormatDownStr:='';
GPSDataFlag:=False;
MemsDataFlag:=False;
AgueDataFlag:=False;
GPSDataFlagFirst:=False;
MemsDataFlagFirst:=False;
AgueDataFlagFirst:=False;
MemsNewDataFlag:=False;
GPSNewDataFlag:=False;
MemsDataCount:=0;
GpsDataCount:=0;
StartControlCount:=0;
if MSComm1.PortOpen then
MSComm1.PortOpen :=False;
MSComm1.CommPort :=cmbbxSerialIn.ItemIndex +1;
MSComm1.Settings :=cmbbxBaudIn.Items[cmbbxBaudIn.ItemIndex]+',n,8,1';
MSComm1.InputMode :=1;
MSComm1.PortOpen := True;
RchdtSerialIn .Text :='';
tmrSerial .Interval :=350;
tmrSerial .Enabled :=True;
btnOpenSerial.Enabled :=False;
btnAllStart.Enabled :=False;
cmbbxSerialIn.Enabled :=False;
btnCloseSerial.Enabled :=True;
btnHeightorClearClick(Sender);
end;
procedure TForm1.DrawAxis;
var
step,i,x,y,wid,h: Integer;
pstep,ratio,maxV : double;
can: TMetaFileCanvas;
begin
can := TMetaFileCanvas.Create(gpsMeta,0);
gpsMeta.Width := ImgTrace.Width;
gpsMeta.Height := ImgTrace.Height;
wid := gpsMeta.Width;
h := gpsMeta.Height;
maxV := GetMaxValue(posXArray,posYArray,posXArrayLoad,posYArrayLoad,posLength,posLengthLoad);
if maxV = 0 then
maxV := 100;
if maxV <= 10 then
begin
maxV := 10;
step := 1;
end
else if maxV <= 100 then
begin
maxV := 100;
step := 10;
end
else if maxV <= 200 then
maxV := 200
else if maxV<= 500 then
maxV := 500
else if maxV <= 1000 then
begin
maxV := 1000;
step := 100;
end
else if maxV<= 2000 then
maxV := 2000
else if maxV<= 5000 then
maxV := 5000
else if maxV <= 10000 then
begin
maxV := 10000;
step := 1000;
end
else if maxV<= 50000 then
maxV := 50000
else if maxV <=100000 then
begin
maxV := 100000;
step := 10000;
end
else
begin
maxV := 1000000;
step := 100000;
end;
can.Pen.Color := clBlack;
can.Pen.Style := psSolid;
can.MoveTo(0,h div 2);
can.LineTo(wid,h div 2);
can.MoveTo(wid div 2,0);
can.LineTo(wid div 2, h);
can.Font.Height := 15;
can.Font.Name := 'Arial';
can.TextOut(0,h div 2 +1,IntToStr(-1*round(maxV)));
can.TextOut(wid-can.TextWidth(IntToStr(round(maxV))),h div 2 +1,IntToStr(round(maxV)));
can.TextOut(wid div 2+3,h-can.TextHeight(IntToStr(-1*round(maxV))),IntToStr(-1*round(maxV)));
can.TextOut(wid div 2+1,0,IntToStr(round(maxV)));
pstep := wid / 20;
for i:=0 to 21 do
begin
can.MoveTo(round(pstep*i),h div 2 - 2);
can.LineTo(round(pstep*i),h div 2);
can.MoveTo(wid div 2,round(pstep*i));
can.LineTo(wid div 2 + 2, round(pstep*i));
end;
if posLengthLoad > 0 then
begin
can.Pen.Color := clRed;
ratio := h / maxV / 2;
x := round(posXArrayLoad[0]*ratio + wid/2);
y := round(h/2-posYArrayLoad[0]*ratio);
can.MoveTo(x,y);
can.Pixels[x,y] := clRed;
for i:= 1 to posLengthLoad-1 do
begin
x := round(posXArrayLoad[i]*ratio + wid/2);
y := round(h/2 - posYArrayLoad[i]*ratio);
can.LineTo(x,y);
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -