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 + -
显示快捷键?