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

📄 untgetrailwaydata.pas

📁 提取铁路的GPS数据通过串口
💻 PAS
字号:
unit untGetRailWayData;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, SPComm, ExtCtrls;

type
  TfrmGetRailData = class(TForm)
    Panel1: TPanel;
    cbPort: TComboBox;
    Label2: TLabel;
    Panel2: TPanel;
    ledtLong: TLabeledEdit;
    ledtLat: TLabeledEdit;
    cbTube: TCheckBox;
    cbStandard: TCheckBox;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    Timer1: TTimer;
    Edit2: TEdit;
    Comm1: TComm;
    procedure FormCreate(Sender: TObject);
    procedure cbPortChange(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    procedure Button2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmGetRailData: TfrmGetRailData;
  ReciveCount:LongInt;

implementation

{$R *.dfm}
uses unitData;

procedure TfrmGetRailData.FormCreate(Sender: TObject);
begin
  try
    comm1.StartComm;
  except
    Application.MessageBox('打开串口失败!','错误',MB_ICONERROR);
  end;
  ReciveCount := 0;
end;

procedure TfrmGetRailData.cbPortChange(Sender: TObject);
begin
  try
    Comm1.StopComm;
  except
  end;
  Comm1.CommName := cbPort.Text;
  try
    Comm1.StartComm;
  except
    Application.MessageBox('打开串口失败!','错误',MB_ICONERROR);
  end;
end;

procedure TfrmGetRailData.Button1Click(Sender: TObject);
var
  SendBuffer: array [0..5] of char;
begin
  SendBuffer[0] := 'c';
  SendBuffer[1] := 'd';
  SendBuffer[2] := '1';
  SendBuffer[3] := chr(1);;
  SendBuffer[4] := '0';
  SendBuffer[5] := '1';
  Comm1.WriteCommData(SendBuffer,6);
end;

procedure TfrmGetRailData.Comm1ReceiveData(Sender: TObject;
  Buffer: Pointer; BufferLength: Word);
var
  ReceiveBuffer: array[0..38] of char;
  i: Integer;
  Longitude: array [0..9] of char;
  Latitude: array[0..8] of char;
begin
  Move(Buffer^,ReceiveBuffer,BufferLength);
  if BufferLength = 40 then
  begin
    if ReceiveBuffer[31] <> 'A' then
      exit;

    for i:=0 to 8 do
    begin
      Longitude[i] := ReceiveBuffer[i + 14];
      Latitude[i] := ReceiveBuffer[i + 4];
    end;

    Longitude[9] := ReceiveBuffer[23];

    ledtLong.Text := LongiTude;
    ledtLat.Text := Latitude;

    dm.tblRailwayGPS.Append;
    dm.tblRailwayGPS.FieldByName('经度').AsString := LongiTude;
    dm.tblRailwayGPS.FieldByName('纬度').AsString := Latitude;

    if cbTube.Checked then
      dm.tblRailwayGPS.FieldByName('隧道').AsString := '隧道';

    if cbStandard.Checked then
    begin
      dm.tblRailwayGPS.FieldByName('标志').AsString := '标称点';
      dm.tblRailwayGPS.FieldByName('里程').AsFloat := StrToFloat(edit1.Text);
    end;
    dm.tblRailwayGPS.Post;

    Inc(ReciveCount);
    Edit2.Text := IntToStr(ReciveCount);
  end;

end;

procedure TfrmGetRailData.Button2Click(Sender: TObject);
begin
  Close;
end;

procedure TfrmGetRailData.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Comm1.StopComm;
end;

procedure TfrmGetRailData.Timer1Timer(Sender: TObject);
var
  SendBuffer: array [0..5] of char;
begin
  SendBuffer[0] := 'c';
  SendBuffer[1] := 'd';
  SendBuffer[2] := '1';
  SendBuffer[3] := chr(1);;
  SendBuffer[4] := '0';
  SendBuffer[5] := '1';
  Comm1.WriteCommData(SendBuffer,6);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -