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

📄 remotecfg.pas

📁 GPRS/CDMA DTU数据中心源代码,基于DataCenterX控件开发.
💻 PAS
📖 第 1 页 / 共 4 页
字号:
unit remotecfg;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, SUIButton, jpeg, Menus,
  Mask, DataCenterXControl_TLB;

const
   CMD_REMOTECFG=$10;


   CMD_WORKMODE=$30;
   CMD_APN=$31;
   CMD_APNUSERNAME=$32;
   CMD_APNPWD=$33;
   CMD_BAUDRATE=$34;
   CMD_DNSIP=$35;

   CMD_RESET=$69;

   CMD_CENTER1DN=$36;
   CMD_CENTER2DN=$37;
   CMD_CENTER3DN=$38;

   CMD_CENTER1IP=$39;
   CMD_CENTER2IP=$3A;
   CMD_CENTER3IP=$3B;

   CMD_SOCKETTYPE=$3C;

   CMD_BEATTIME=$3D;
   CMD_DTUID=$3E;
   CMD_DTUPHNO=$3F;
   CMD_LOGINPWD=$40;
   CMD_KEYCHR=$41;

   CMD_KEYTIME=$42;

   CMD_LOCALPORT=$43;
   CMD_CENTERPORT=$44;


   CMD_SETDEFAULT=$4E;
   CMD_GETPARAM=$4F;

   //--------super param
   CMD_ATMONTIME=$50;
   CMD_ATLOSSMAXCOUNT=$51;
   CMD_ATMAXWAIT=$52;

   CMD_GSMLOSSMAXCOUNT=$53;
   CMD_GPRSMONTIME=$54;
   CMD_GPRSLOSSMAXCOUNT=$55;
   CMD_GPRSMAXWAIT=$56;
   CMD_CENTERLOSSMAXCOUNT=$57;
   CMD_BEATMAXWAIT=$58;
   CMD_LOGINMAXWAIT=$59;
   CMD_LOGINFAILMAXCOUNT=$5A;
   CMD_TCPWINSIZE=$5B;
   CMD_TCPOVT_RESENDBEGINTIME=$5C;
   CMD_TCPOVT_RESENDCOUNT=$5D;
   CMD_DNSMAXWAIT=$5E;
   CMD_DNSFAILMAXCOUNT=$5F;
{
   CMD_MODULELOSETIME=$52;
   CMD_GSMLOSETIME=$53;
   CMD_GPRSLOSETIME=$54;
}
   //---------dtu up-------------
   CMD_REPLYCONFIG=$A0;
   CMD_REPLYSTATUS=$A1;
   CMD_REPLYDATA=$A2;
   CMD_OK=$F0;
   CMD_ERROR=$F1;
   //-------------------------------

   //---------control mode cmds-----
   CMD_CTRL_CREATESOCKET=$60;
   CMD_CTRL_CONNECT=$61;
   CMD_CTRL_SENDDATA=$62;
   CMD_CTRL_READDATA=$63;
   CMD_CTRL_DISCONNECT=$64;
   CMD_CTRL_CLOSESOCKET=$65;
   CMD_CTRL_GETSTATUS=$66;
   CMD_CTRL_SETSTATUS=$67;
   //-------------------------------
   CMD_ENTERTRANSMODE=$6A;
   CMD_ENTERATMODE=$6B;
   //--------------------------------
   FRAME_HEAD1=$AA;
   FRAME_HEAD2=$55;


type
  TfrmRemoteCfg = class;
  TDTUCOM=class(tobject)
  public
    dtuid:string;
    dataocx:tdatacenterx;
    remotetype:integer;
    procedure sendstring(s:string);
    function readstring(var s:string):boolean;
    //procedure OnData(sender:tobject; const Received: DWORD );
  end;

  TLineGet=class(TObject)
  private
    Buf:string;
  public
    procedure Init;
    procedure ProcChar(C:Char);
    procedure SendLine;
  end;
  
  TfrmRemoteCfg = class(TForm)
    Timer1: TTimer;
    StatusBar1: TStatusBar;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    MODEM1: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    MODEM2: TMenuItem;
    panel3: TPanel;
    Memo1: TMemo;
    MaskEdit3: TMaskEdit;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Panel1: TPanel;
    GLabel: TLabel;
    GComboBox: TComboBox;
    suiButton2: TsuiButton;
    GEdit: TEdit;
    Panel2: TPanel;
    ListView1: TListView;
    GroupBox1: TGroupBox;
    lbDTUInfo: TLabel;

    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure suiButton1Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure ListView1Change(Sender: TObject; Item: TListItem;
      Change: TItemChange);
    procedure FormActivate(Sender: TObject);
    procedure suiButton2Click(Sender: TObject);
    procedure ListView1DblClick(Sender: TObject);
    procedure GComboBoxKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure GComboBoxKeyPress(Sender: TObject; var Key: Char);
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure GEditKeyPress(Sender: TObject; var Key: Char);
    procedure N6Click(Sender: TObject);
    procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);
    procedure ComboBox2KeyPress(Sender: TObject; var Key: Char);
    procedure ComboBox3KeyPress(Sender: TObject; var Key: Char);
    procedure Memo1KeyPress(Sender: TObject; var Key: Char);
    procedure MaskEdit3KeyPress(Sender: TObject; var Key: Char);
    procedure Edit3KeyPress(Sender: TObject; var Key: Char);
    procedure Edit4KeyPress(Sender: TObject; var Key: Char);

  private
    { Private declarations }
  public
    { Public declarations }
    xmodem1:tdtucom;    
  end;

var
  G_SuperFlag:boolean;
  G_SndCnt:integer;
  G_RecvCnt:integer;
  G_WorkMode:byte;
//  G_KEYCHR:byte;
  G_KEYCHR:string;
  G_TMData:string;  //透明模式数据缓冲区
  LineGet:tlineget;
  GEditMask:string;
  frmRemoteCfg: TfrmRemoteCfg;
  function TextToHexStr(s:string):string;
implementation

uses main;
{$R *.dfm}

function HexToStr(i:integer):string;
var tmp:string;
begin
  tmp:='0123456789ABCDEF ';
  result:=tmp[(i div 16)+1]+tmp[(i mod 16)+1];
end;

function TextToHexStr(s:string):string;
var i:integer;
    ss:string;
begin
  ss:='';
  for i:=1 to length(s) do
  begin
    ss:=ss+hextostr(ord(s[i]))+' ';
  end;
  result:=ss;
end;

function strtohex(s:string):integer;
var tmp:string;
    i,j,a,b:integer;
begin
  if s='' then
  begin
    result:=0;
    exit;
  end;

  a:=0;
  tmp:='0123456789ABCDEF ';
  for j:=1 to length(s) do
  begin
   if s[j]=' ' then s[j]:='0';
   i:=1;
   while i<=16 do
   begin
    if tmp[i]=s[j] then
    begin
       b:=i-1;
       break;
    end;
    i:=i+1;
   end;
   a:=a*16+b;
  end;
  result:=a;
end;

function   BuildDataPacket(Cmd:BYTE;Data:STRING):string;
var LEN:INTEGER;
    ACC:WORD;
    S,tip:STRING;
    i:integer;
begin
{        //len本身变成2字节。
        LEN:=LENGTH(DATA)+3;
        s:=chr(FRAME_HEAD1)+chr(FRAME_HEAD2)+CHR(LEN div 256)+CHR(LEN mod 256)+CHR(CMD)+DATA;
        ACC:=0;
        FOR I:=3 TO LENGTH(S) DO
        BEGIN
          ACC:=ACC+ord(S[I]);
        END;
        S:=S+chr(ACC div 256)+chr(ACC mod 256);

        tip:='';
        for i:=1 to length(s) do
        begin
          tip:=tip+hextostr(ord(s[i]))+' ';
        end;

        frmremotecfg.memo1.lines.add('下行:'+tip);

        RESULT:=S;
}
        s:=chr(cmd)+data;
        tip:='';
        for i:=1 to length(s) do
        begin
          tip:=tip+hextostr(ord(s[i]))+' ';
        end;

        frmremotecfg.memo1.lines.add('下行:'+tip);
        RESULT:=S;        
end;

function WaitComData(wtime:integer):string;
var i:integer;
    ss,s,tip:string;
begin
  s:='';ss:='';
  frmremotecfg.timer1.Enabled:=false; //禁止时钟读取串口数据

  for i:=1 to (wtime div 100) do
  begin
    if frmremotecfg.XModem1.ReadString(s) then
    begin
      if s<>'' then   break;
    end;
    sleep(100);
    application.processmessages;
  end;
  ss:=s;

  for i:=1 to (wtime div 100) do
  begin
    sleep(100);
    if frmremotecfg.XModem1.ReadString(s) then
    begin
      ss:=ss+s;
    end
    else  break;

    application.processmessages;
  end;
  s:=ss;

  //显示
  if s<>'' then
  begin
        tip:='';
        for i:=1 to length(s) do
        begin
          tip:=tip+hextostr(ord(s[i]))+' ';
        end;
        frmremotecfg.memo1.lines.add('上行:'+tip);
  end;

  frmremotecfg.timer1.Enabled:=true; //允许时钟读取串口数据
  result:=s;
end;

function waitreply:integer;
var s:string;
    i,r:integer;
    head,data:string;
    cmd:byte;
    acc:word;
begin
  s:=waitcomdata(4000*8);
  if s='' then
  begin
    result:=-2;
    exit;
  end;
  {
  if ((s[1]<>chr(FRAME_HEAD1)) or (s[2]<>chr(FRAME_HEAD2))) then
  begin
     result:=-3;//非法的返回
     exit;
  end;

  ACC:=0;
  for I:=3 to LENGTH(S)-2 do
  BEGIN
     ACC:=ACC+ord(S[I]);
  END;

  if acc<>ord(s[6])*256+ord(s[7]) then
  begin
    result:=-4; //校验错误
    exit;
  end;

  if length(s)=7 then
  begin
    if s[5]=chr(CMD_OK) then r:=0;  //ok
    if s[5]=chr(CMD_ERROR) then r:=-1;  //error
  end
  else r:=-2; //timeout
  }
  if length(s)=1 then
  begin
    if s[1]=chr(CMD_OK) then r:=0;  //ok
    if s[1]=chr(CMD_ERROR) then r:=-1;  //error
  end
  else r:=-2; //timeout
  
  result:=r;
end;


function wait_status:integer;
var s:string;
    i,r:integer;
    head,data:string;
    cmd:byte;
    acc:word;
begin
  s:=waitcomdata(4000*8);
  if s='' then
  begin
    result:=-2;
    exit;
  end;
  {
  if ((s[1]<>chr(FRAME_HEAD1)) or (s[2]<>chr(FRAME_HEAD2))) then
  begin
     result:=-3;//非法的返回
     exit;
  end;

  if s[5]<>chr(CMD_REPLYSTATUS) then
  begin
     frmremotecfg.StatusBar1.Panels[3].Text:='[状态读取失败,返回数据包命令字非法!]';
     frmremotecfg.memo1.Lines.add(frmremotecfg.StatusBar1.Panels[3].Text);
     exit;
  end;

  ACC:=0;
  for I:=3 to LENGTH(S)-2 do
  BEGIN
     ACC:=ACC+ord(S[I]);
  END;

  if acc<>ord(s[7])*256+ord(s[8]) then
  begin
    result:=-4; //校验错误
    exit;
  end;

  if length(s)=8 then
  begin
    r:=ord(s[6]);
  end
  else r:=-2; //timeout
  }
  if length(s)=2 then
  begin
    r:=ord(s[2]);
  end
  else r:=-2;
  
  result:=r;
end;



//-透明模式-comunication funcitons-------------------
procedure SendText(s:string);
begin
  frmremotecfg.xmodem1.SendString(s);
end;
//-------------------------------------------
//-控制模式
function  CreateSocket(Protocol:integer;LPORT:integer;RPORT:integer;RIP:string):integer;
begin
  frmremotecfg.xmodem1.SendString(BuildDataPacket(CMD_CTRL_CREATESOCKET,
                                                   chr(protocol)+
                                                   chr(LPort div 256)+chr(LPort mod 256)+
                                                   chr(RPort div 256)+chr(RPort mod 256)+RIP
  ));

  result:=waitreply;
end;

function  Connect(socket:integer):integer;
begin
  frmremotecfg.xmodem1.SendString(BuildDataPacket(CMD_CTRL_CONNECT,chr(socket div 256)+chr(socket mod 256)));
  result:=waitreply;
end;

function  SendData(socket:integer;Data:string):integer;
var r:integer;
begin
  frmremotecfg.xmodem1.SendString(BuildDataPacket(CMD_CTRL_SENDDATA,chr(socket div 256)+chr(socket mod 256)+data));
  r:=waitreply;
  if  r=0 then frmremotecfg.StatusBar1.Panels[3].Text:='[数据发送成功]';
  if  r=-1 then frmremotecfg.StatusBar1.Panels[3].Text:='[数据发送失败]';
  if  r=-2 then frmremotecfg.StatusBar1.Panels[3].Text:='[数据发送失败,设备无响应!]';
  if  r=-3 then frmremotecfg.StatusBar1.Panels[3].Text:='[数据发送失败,非法的返回串!]';
  if  r=-4 then frmremotecfg.StatusBar1.Panels[3].Text:='[数据发送失败,返回帧校验错误!]';

⌨️ 快捷键说明

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