gpsnetcommctrl.pas

来自「a voice guide client ,it is the second p」· PAS 代码 · 共 1,593 行 · 第 1/5 页

PAS
1,593
字号
//1字节:序号
//4字节,小经度
//4字节,小纬度
//4字节,大经度
//4字节,大纬度
  function Degree2LongWord(ADegree: Double):Longword;
  var
    b: Boolean;
    ff: Double;
    i, dd: Integer;
    sDD, sFF: string;
    //纬度表示方法:
    //纬度表示范围:00度00.000分——89度59.999分;
    //采用压缩BCD编码,但最高位是符号位。“正”表示“北纬”,“负”表示“南纬”;
    //“分”的单位是:千分之一分。
    //[例如]:	南纬30度37.901分表示为:
    //			83H,03H,79H,01H
    //经度表示方法:
    //经度表示范围:000度00.000分——179度59.999分;
    //采用压缩BCD编码,但最高位是符号位。“正”表示“东经”,“负”表示“西经”;
    //“分”的单位是:千分之一分。
    //[例如]:	西经130度45.608分表示为 注意:1度=60分)
    //			93H,04H,56H,08H
    //[例如]:	北纬30度37.901分表示为:
    //			03H,03H,79H,01H
    //
    //[例如]:	东经130度45.608分表示为 注意:1度=60分)
    //			13H,04H,56H,08H
  begin
    b:= ADegree<0 ;
    //度
    dd:= Trunc(ADegree);
    sDD:= IntToStr(dd);
    sDD:= StringOfChar('0', 3- Length(sDD))+ sDD;
    //分
    ff:= Frac(ADegree)*60;
    if ff<10 then sFF:= '0'+ Format('%2.3f', [ff])
    else sFF:= Format('%2.3f', [ff]);
    i:= Pos('.', sFF);
    if i>0 then Delete(sFF, i, 1);
    Result:= StrToInt('$'+ sDD+ sFF);
    if b then Result:= Result+ $8000;
  end;
var
  EFenceBody: string;
  i: Integer;
  iTemp : Cardinal;
  PGpsRect: ^TGpsRect;
  //GpsRect: TGpsRect;
  sTemp1, sTemp2: string;
begin
  Result:= '';
  if not Assigned(GpsRectList) then Exit;
  EFenceBody:= '';
  for i:= 0 to GpsRectList.Count -1 do begin
    PGpsRect:= GpsRectList.Items[i];
    sTemp1:= '';

    sTemp2:= Stringofchar('A', SizeOf(LongWord));
    iTemp := ntohl( Degree2LongWord(PGpsRect.LatMin));
    Move(iTemp, sTemp2[1], SizeOf(Longword));
    sTemp1:= sTemp1+ sTemp2;

    sTemp2:= Stringofchar('A', SizeOf(LongWord));
    iTemp := ntohl( Degree2LongWord(PGpsRect.LongMin));
    Move(iTemp, sTemp2[1], SizeOf(Longword));
    sTemp1:= sTemp1+ sTemp2;

    sTemp2:= Stringofchar('A', SizeOf(LongWord));
    iTemp := ntohl( Degree2LongWord(PGpsRect.LatMax));
    Move(iTemp, sTemp2[1], SizeOf(Longword));
    sTemp1:= sTemp1+ sTemp2;

    sTemp2:= Stringofchar('A', SizeOf(LongWord));
    iTemp := ntohl( Degree2LongWord(PGpsRect.LongMax));
    Move(iTemp, sTemp2[1], SizeOf(Longword));
    sTemp1:= sTemp1+ sTemp2;

    EFenceBody:= EFenceBody+ sTemp1+ Chr(i+1);
  end;
  EFenceBody:=TIdEncoderMIME.EncodeString(EFenceBody);
  Result:= Format('SETT,13,%s,%s', [AEFenceId, EFenceBody]);
end;

function TGpsNetCommCtrl.Set_Hq_AccTime(var ANote: String;
  ALongTime: Integer): String;
begin
  //'设置车台关ACC%d秒进入省电模式';
  ANote:= Format(RsNoteSet_Hq_AccTime, [ALongTime]);
  Result := Format('SETT,6,%d,0',[ALongTime]);
end;

function TGpsNetCommCtrl.Set_Hq_ShutAcc(var ANote: String;
  ALongTime: Integer): String;
begin
  //'设置车台关ACC%d秒进入省电模式';
  ANote:= Format(RsNoteSet_Hq_AccTime, [ALongTime]);
  Result := Format('SETT,9,%d',[ALongTime]);
end;

function TGpsNetCommCtrl.Set_Hq_SaveInterval(var ANote: String;
  ALongTime: Integer): String;
begin
  //'设置历史数据存储间隔';
  ANote:= Format(RsNoteSet_Hq_SaveInterval, [ALongTime]);
  Result := Format('SETT,10,%d',[ALongTime]);
end;

function TGpsNetCommCtrl.Set_Hq_ChekInterval(var ANote: String;
  ALongTime: Integer): String;
begin
  //'设置道路检测器记录时间间隔';
  ANote:= Format(RsNoteSet_Hq_checkInterval, [ALongTime]);
  Result := Format('SETT,39,%d',[ALongTime]);
end;

function TGpsNetCommCtrl.Set_Hq_CheckData(var ANote: String): String;
begin
  ANote:= '上传道路检测器记录';
  Result := 'SETT,40';
end;

function TGpsNetCommCtrl.Set_Hq_CarCancelAlarm(var ANote: String): String;
begin
  ANote:= '解除报警';
  Result := 'CTRL,102,0,0';
end;

function TGpsNetCommCtrl.Set_Hq_CanCall(var ANote: string; ACtrl: Boolean;
  ALmdPhones: TStringList): string;
begin
  if ACtrl then begin
    if Assigned(ALmdPhones) then begin
      ANote:= RsNoteSet_Hq_CanCall+ ALmdPhones.CommaText;       //'设置限制电话为:'
      Result := Format('SETT,104,0,%s', [TIdEncoderMIME.EncodeString(ALmdPhones.CommaText)]);
    end;
  end else begin
    ANote:= RsNoteSet_Hq_AllCall;           //'设置电话为任意通话';
    Result := 'SETT,104,1,';
  end;
end;

function TGpsNetCommCtrl.Set_Hq_SetParams(var Anote: String;
  SParamType: integer; SParamsValue: String): String;
var
  OutStr:String;
begin
  case SParamType of
    0: OutStr := '未指定设置参数类型';
    1: OutStr := '短信监控中心号码为'+SParamsValue;
    2: OutStr := '监听号码为'+SParamsValue;
    3: OutStr := '中心服务电话号码为'+SParamsValue;
    4: OutStr := '报警电话号码为'+SParamsValue;
    5: OutStr := '端口号为'+ inttostr(StrToInt('$'+SParamsValue));
    6: OutStr := '用户密码一为'+SParamsValue;
    7: OutStr := '用户密码二为'+SParamsValue;
  end;//case
  Anote := RsNoteSet_Hq_OtherInfo+OutStr;
  Result := Format('SETT,105,%d,%s',[SParamType,SParamsValue]);

end;

function TGpsNetCommCtrl.Crtl_Hq_CancelAlarm(var ANote: String): String;
begin
  //  RsNoteCtrl_Hq_CancelAlarm='解除报警';
  ANote := RsNoteCtrl_Hq_CancelAlarm;
  Result := 'CTRL,102,0';
end;

function TGpsNetCommCtrl.Ctrl_Hq_ReStart(var ANote: string): string;
begin
  //RsNoteCtrl_Hq_ReStart= '车机重启'
  ANote := RsNoteCtrl_Hq_ReStart;
  Result := 'CTRL,104,0';
end;

function TGpsNetCommCtrl.Set_Hq_NOOPInterval(var ANote: String; ALongTime: Integer): String;
begin
  //'设置在线待命上传间隔';
  ANote:= Format(RsNoteSet_Hq_NOOPInterval, [ALongTime]);
  Result := Format('SETT,29,%d',[ALongTime]);
end;

function TGpsNetCommCtrl.Crtl_HqGSM_CancelAlarm(var ANote: String): String;
begin
  ANote := RsNoteCtrl_HqGSM_CancelAlarm;
  Result := 'CTRL,2,0';
end;

function TGpsNetCommCtrl.Ctrl_HqGSM_ReStart(var ANote: string): string;
begin
  ANote := RsNoteCtrl_HqGSM_ReStart;
  Result := 'CTRL,1,0';
end;

function TGpsNetCommCtrl.MsgHqGSMText(var ANote: string; AMsgType: Integer;
  AMsg: string): String;
var
  OutStr:String;
begin
   case AMsgType of
     0: OutStr :='-信息类型错误';
     1: OutStr :='-公共信息['+AMsg+']';
     2: OutStr :='-公司信息['+AMsg+']';
     3: OutStr :='-抢答信息['+AMsg+']';
     4: OutStr :='-详细调度信息['+AMsg+']';
   end;//case
   ANote := RsNoteText_Hq_MessageTxt+OutStr;
   Result := Format('TEXT,0,%d,%s', [AMsgType,TIdEncoderMIME.EncodeString(AMsg)]);
end;

function TGpsNetCommCtrl.Call_Hq_Mileage(var ANote: String;
  SCallType: integer): String;
begin
   //RsNoteCall_Hq_Mileage='里程信息';
   ANote := RsNoteCall_Hq_Mileage;
   Result := Format('CTRL,105,%d',[SCallType]);
end;

function TGpsNetCommCtrl.MsgHqText(var ANote: string; AMsgType: Integer;
  AMsg: string): String;
var
  OutStr:String;
begin
   case AMsgType of
     0: OutStr :='-信息类型错误';
     1: OutStr :='-公共信息['+AMsg+']';
     2: OutStr :='-公司信息['+AMsg+']';
     3: OutStr :='-抢答信息['+AMsg+']';
     4: OutStr :='-详细调度信息['+AMsg+']';
   end;//case
   ANote := RsNoteText_Hq_MessageTxt+OutStr;
   Result := Format('TEXT,100,%d,%s', [AMsgType,TIdEncoderMIME.EncodeString(AMsg)]);
end;

function TGpsNetCommCtrl.Call_GpsOne_SeriesCall(var ANote: String;
  SCallBeginDataTime, SCallEndDataTime: String; SInterval,
  SCallCount: Integer): String;
begin
   ANote := RsNoteCall_GpsOne_SeriesCall+':'+SCallBeginDataTime+'至'+SCallEndDataTime
           +'呼叫间隔'+IntToStr(SInterval)+'呼叫次数'+IntToStr(SCallCount);
   Result := Format('CALL,6,%d,%d,%s,%s',[SInterval,SCallCount,SCallBeginDataTime,SCallEndDataTime]);
end;

function TGpsNetCommCtrl.Set_Th_S12(var ANote: string; ASupportLockCar,
  ASupportAutoCtrle: Boolean): string;
//参数设置指令S12
//SETT,301,P1,P2
//P1:=0支持断电断油  =1不支持断电断油
//P2:=0打开自动监控  =1关闭自动监控
var
  sTemp1, sTemp2: string;
begin
  if ASupportLockCar then sTemp1:= '支持'
  else sTemp1:= '不支持';
  if ASupportAutoCtrle then sTemp2:= '支持'
  else sTemp2:= '不支持';
  ANote := Format(RsNoteSet_Th_S12, [sTemp1, sTemp2]);
  Result := Format('SETT,301,%d,%d',
    [Ord(not ASupportLockCar), Ord(not ASupportAutoCtrle)]);
end;

function TGpsNetCommCtrl.Get_Ft_OperId: Integer;
//上海飞田,业务代码
begin
//  if not Assigned(F_Ft_OperIdList) then F_Ft_OperIdList:= TStringList.Create;
//  F_Ft_OperIdList.Values[IntToStr(ACarId)]:= IntToStr(F_Ft_OperId);
  Result:= F_Ft_OperId;
  Inc(F_Ft_OperId);
  if F_Ft_OperId<0 then F_Ft_OperId:= 0;
end;

function TGpsNetCommCtrl.Oper_Ft_MsgDetail(var ANote: string;
  OperId: Integer; AOperStrDetail: string): string;
//业务详细信息下发
//OPER,2,P0,P1
//P0:业务流水号
//P1:业务详细信息(BASE64)
resourcestring
  rsNote_Oper_MsgDetail = '飞田Taxi业务详细信息下发,编号%d,内容:%s';
begin
  ANote:= Format(rsNote_Oper_MsgDetail, [OperId, AOperStrDetail]);
  Result:= Format('OPER,2,%d,%s', [OperId,
    TIdEncoderMIME.EncodeString(AOperStrDetail)]);
end;

function TGpsNetCommCtrl.Opr_Ft_Msg(var ANote: string; var OperId: Integer;
  ARequireTime: TDateTime; AOperStr: string): string;
//业务初始信息下发
//OPER,1,P0,P1,P2
//P0:业务流水号
//P1:要车时间(2004-06-18 12:12:12)
//P2:业务信息简介(BASE64)
resourcestring
  rsNote_Oper_Msg = '飞田Taxi业务初始信息下发,编号%d,要车时间[%s],内容:%s';
begin
  OperId:= Get_Ft_OperId;
  ANote:= Format(rsNote_Oper_Msg, [OperId,
    FormatDateTime('YYYY-MM-DD hh:nn:ss', ARequireTime),
    AOperStr]);
  Result:= Format('OPER,1,%d,%s,%s', [OperId,
    FormatDateTime('YYYY-MM-DD hh:nn:ss', ARequireTime),
    TIdEncoderMIME.EncodeString(AOperStr)]);
end;

function TGpsNetCommCtrl.Oper_Ft_MsgNoDetail(var ANote: string;
  OperId: Integer): string;
//业务未中标下发
//OPER,3,P0
//P0:业务流水号
resourcestring
  rsNote_Oper_NoMsg = '飞田Taxi业务未中标信息下发,编号%d';
begin
  ANote:= Format(rsNote_Oper_NoMsg, [OperId]);
  Result:= Format('OPER,3,%d', [OperId]);
end;

function TGpsNetCommCtrl.Oper_Ft_MsgCancel(var ANote: string;
  OperId: Integer): string;

⌨️ 快捷键说明

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