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

📄 unit3.~pas

📁 tcp/ip通讯程序
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, OleCtrls, MSCommLib_TLB, Mask,
  ComCtrls;

type
  TInit_Machine = class(TForm)
    MSComm: TMSComm;
    GroupBox1: TGroupBox;
    Label6: TLabel;
    Port_Name: TComboBox;
    Baud_Rate: TComboBox;
    Label7: TLabel;
    Label8: TLabel;
    Data_Bit: TComboBox;
    Check_Bit: TComboBox;
    Label9: TLabel;
    Label10: TLabel;
    Stop_Bit: TComboBox;
    open_click: TBitBtn;
    close_click: TBitBtn;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    TabSheet4: TTabSheet;
    HeaderControl1: THeaderControl;
    GroupBox2: TGroupBox;
    Label1: TLabel;
    SETADDR: TEdit;
    Button3: TButton;
    Button4: TButton;
    GroupBox3: TGroupBox;
    Label2: TLabel;
    IP1: TEdit;
    IP2: TEdit;
    IP3: TEdit;
    IP4: TEdit;
    Label4: TLabel;
    PORTNUM: TEdit;
    Button5: TButton;
    Button6: TButton;
    GroupBox4: TGroupBox;
    Label13: TLabel;
    APNSET: TEdit;
    Button7: TButton;
    Button8: TButton;
    initok_click: TButton;
    Label3: TLabel;
    time_initer: TEdit;
    Label5: TLabel;
    GroupBox5: TGroupBox;
    GroupBox6: TGroupBox;
    memo_text: TMemo;
    DTU_CLICK: TButton;
    RecMemo_txt: TMemo;
    GroupBox7: TGroupBox;
    GroupBox8: TGroupBox;
    Label11: TLabel;
    center_list: TComboBox;
    setcent: TButton;
    Label12: TLabel;
    phon1: TEdit;
    Label14: TLabel;
    phon2: TEdit;
    Label15: TLabel;
    phon3: TEdit;
    Label16: TLabel;
    phon4: TEdit;
    phon5: TEdit;
    phon6: TEdit;
    phon7: TEdit;
    GroupBox9: TGroupBox;
    GroupBox10: TGroupBox;
    sms_content: TMemo;
    send_sms: TButton;
    Label17: TLabel;
    sms_txt: TMemo;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    phon8: TEdit;
    Label22: TLabel;
    phone_set: TButton;
    GroupBox11: TGroupBox;
    Edit1: TEdit;
    Label23: TLabel;
    Label24: TLabel;
    Edit2: TEdit;
    Label25: TLabel;
    Edit3: TEdit;
    sup_set: TButton;
    procedure BitBtn1Click(Sender: TObject);
    procedure Close(Sender: TObject; var Action: TCloseAction);
    procedure open_clickClick(Sender: TObject);
    procedure close_clickClick(Sender: TObject);
    procedure serreci(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure DTU_CLICKClick(Sender: TObject);
    procedure send_smsClick(Sender: TObject);
    procedure phone_setClick(Sender: TObject);
    procedure setcentClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Init_Machine: TInit_Machine;

implementation

uses MyFunction;

{$R *.dfm}

procedure TInit_Machine.BitBtn1Click(Sender: TObject);
var
    mByteAry: array of byte;
    Send_len:  byte;
begin
    //构造上位机报文
    Send_len:=0;
    SetLength(mByteAry,100);

    mByteAry[Send_len] := 36;  //上下行标志
    Send_len :=  Send_len+1;
    mByteAry[Send_len] := 36;  //命令字
    mByteAry[Send_len] := $6;  //上下行标志
    Send_len :=  Send_len+1;
    mByteAry[Send_len] := $32;  //命令字
    mByteAry[Send_len] := $36;  //上下行标志
    Send_len :=  Send_len+1;
    mByteAry[Send_len] := $36;  //命令字
    mByteAry[Send_len] := $36;  //上下行标志
    Send_len :=  Send_len+1;
    mByteAry[Send_len] := $36;  //命令字

    MSComm.Output :=mByteAry;   //发送命令

end;

procedure TInit_Machine.Close(Sender: TObject; var Action: TCloseAction);
begin
        if MSComm.PortOpen = True then
        begin
            MSComm.PortOpen := False;
            open_click.Enabled:=True;
            close_click.Enabled:= False;
        end;
end;

procedure TInit_Machine.open_clickClick(Sender: TObject);
var
   return_vale:byte;
begin
      Port := Port_Name.Text;
      Speed:=Baud_Rate.Text;
      DataBit:=Data_Bit.Text;
      CheckBit:=Check_Bit.Text;
      StopBit:=Stop_Bit.Text;
    //打开串口
    if MSComm.PortOpen = False then
    begin
        try
            MSComm.CommPort := ComStrToInt(Port);
            MSComm.Settings := Speed + ','
                               + CheckBit[1] + ','
                               + DataBit + ','
                               + StopBit;
            MSComm.InputMode:= 1; //0为字符形式,1为二进制形式
            MSComm.RThreshold:=1; //接收多少字符去响应接收
           //MSComm.InBufferSize:=3;
            MSComm.PortOpen := True;

            close_click.Enabled:=True;
            open_click.Enabled:= False;
        except
           return_vale:=MessageDlg('串口不能打开,请检查串口的配置',mtInformation,[mbOk,mbCancel],0);
           if return_vale=1 then
            // Init_Rfcard.Close(Sender);
            ShowMessage('串口不能打开,请检查串口的配置!');
            Exit;
        end;
    end;
end;

procedure TInit_Machine.close_clickClick(Sender: TObject);
begin
        MSComm.PortOpen := False;
        close_click.Enabled:=False;
        open_click.Enabled:=True;
end;

procedure TInit_Machine.serreci(Sender: TObject);
var
     recevi_str:array of byte;
     temp_str:array of byte;
     stringdata:string;
     real_len,len:byte;
     check_sum:byte;
     Recive_len,i,checksum:byte;
     data:OleVariant;

begin
      sleep(120);
      real_len:= MSComm.InBufferCount;
      if real_len<5 then
        exit;

      data := MSComm.Input;
      MSComm.Input;//请空接收缓冲区
      SetLength(recevi_str,real_len+1);
      for i:=0 to real_len-1 do
      begin
         try
                recevi_str[i]:=TVarData(data[i]).VByte;
         except
                 Exit;
         end;
      end;

    checksum := CalCheck(recevi_str,real_len); //计算报文的校验位
    if (checksum<>0) then

        ShowMessage('校验和错误,请重新发送')

    else
             case recevi_str[3] of
               $01:   //设备地址
                  begin
                  end;
               $02:   //ip port
                  begin
                    if (recevi_str[4]) = $00  then
                           ShowMessage('设置成功')
                    else
                           ShowMessage('设置失败');
                  end;

               $50:  //接收到下位机应答
                  begin
                    if (recevi_str[4]) = $00  then
                           ShowMessage('传送成功')
                    else
                           ShowMessage('传送失败');
                  end;

                $51: //接收到gprs数据
                  begin
                      len:= recevi_str[2]-5;  //长度   -包头包尾5
                      SetLength(temp_str,len+1);
                      for i:= 0 to len-1  do
                      begin
                           temp_str[i]:=TVarData(data[i+4]).VByte;
                           stringdata:=stringdata + char(temp_str[i]);
                      end;
                      RecMemo_txt.Lines.add(stringdata);

                  end;

                $A0:   //设置接收短信手机号
                  begin
                    if (recevi_str[4]) = $00  then
                           ShowMessage('设置成功')
                    else
                           ShowMessage('设置失败');
                  end;

                $A1:   //设置短信中心
                 begin
                    if (recevi_str[4]) = $00  then
                           ShowMessage('设置成功')
                    else
                           ShowMessage('设置失败');
                  end;

                $80:   //短信发送应答
                  begin
                    if (recevi_str[4]) = $00  then
                           ShowMessage('发送成功')
                    else
                           ShowMessage('发送失败');
                  end;

                $81:   //收到短信
                  begin
                      len:= recevi_str[2]-5;  //长度   -包头包尾5
                      SetLength(temp_str,len+1);
                      for i:= 0 to len-1  do
                      begin
                           temp_str[i]:=TVarData(data[i+4]).VByte;
                           stringdata:=stringdata + char(temp_str[i]);
                      end;
                      sms_txt.Lines.add(stringdata);
                  end;

               $88:
                  begin
                   // ShowMessage('设备PPP链路成功');
                    Button3.Enabled:=True;
                    Button5.Enabled:=True;
                    DTU_CLICK.Enabled:=True;
                  end;

             end;
end;

procedure TInit_Machine.Button3Click(Sender: TObject);
var
    len,i:byte;
    mByteAry: array of byte;
    buffer:pchar;

    Send_len:byte;
begin

⌨️ 快捷键说明

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