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

📄 unit1.~pas

📁 实现对philp快球的串口控制
💻 ~PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, MSCommLib_TLB, ComCtrls, IdBaseComponent,
  IdComponent, IdUDPBase, IdUDPServer,IdSocketHandle, CoolTrayIcon, Menus,
  Buttons;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    ComboBox1: TComboBox;
    Label1: TLabel;
    CoolTrayIcon1: TCoolTrayIcon;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    Memo1: TMemo;
    btnCtlLeft: TSpeedButton;
    btnCtlUp: TSpeedButton;
    btnCtlDown: TSpeedButton;
    btnCtlRight: TSpeedButton;
    btnCtlNear: TButton;
    btnCtlFar: TButton;
    Label2: TLabel;
    Memo2: TMemo;
    MSComm1: TMSComm;
    IdUDPServer1: TIdUDPServer;
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure btnCtlUpClick(Sender: TObject);
    procedure btnCtlDownClick(Sender: TObject);
    procedure btnCtlLeftClick(Sender: TObject);
    procedure btnCtlRightClick(Sender: TObject);
    procedure btnCtlNearClick(Sender: TObject);
    procedure btnCtlFarClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure CoolTrayIcon1DblClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure MSComm1Comm(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
              ABinding: TIdSocketHandle);         //设置发送的内容


  private
    { Private declarations }
    bzw:boolean;

    procedure Log(pi_sStr:String);
    procedure OutputToCom(pi_oleData:oleVariant);
    //procedure SwitchInput(pi_char:char);
    procedure UpMove();
    procedure DownMove();
    procedure LeftMove();
    procedure RightMove();
    procedure FocusAdd();
    procedure FocusReduce();
    procedure StopMove(pi_nNo:integer);
    procedure ContinueMove();
    function  getSztdz():integer;
    procedure Proccess(pi_sStr:String);
    procedure UpMoveByNo(pi_nNo:integer);
    procedure DownMoveByNo(pi_nNo:integer);
    procedure LeftMoveByNo(pi_nNo:integer);
    procedure RightMoveByNo(pi_nNo:integer);
    procedure FocusAddMoveByNo(pi_nNo:integer);
    procedure FocusReduceMoveByNo(pi_nNo:integer);
   // procedure StopMoveByNo(pi_nNo:integer);


  protected
    procedure ActionChange(Sender: TObject; CheckDefaults: Boolean);
      override;

  public
    { Public declarations }

    procedure ApplicationEventsException(Sender: TObject; E: Exception);

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.N1Click(Sender: TObject);
begin
    CoolTrayIcon1.ShowMainForm;
end;

procedure TForm1.N2Click(Sender: TObject);
begin
    Application.Terminate;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
   ComboBox1.ItemIndex :=0;

end;

procedure TForm1.Log(pi_sStr: String);
begin
    if memo2.Lines.Count>1024 then
    begin
       memo2.Lines.Clear;
    end;
     memo2.Lines.Insert(0,DateTimeToStr(now)+':'+pi_sStr);
end;

procedure  TForm1.OutputToCom(pi_oleData:oleVariant);
begin
    if not MSComm1.PortOpen then
    begin
       MSComm1.PortOpen := true;
       Log('打开端口成功!');
    end;


    if MSComm1.PortOpen  then
    begin
        msComm1.Output := pi_oleData ;
        Log('执行命令成功!');
    end
    else
    begin
        Log('执行命令失败');
    end;
end;

procedure TForm1.btnCtlUpClick(Sender: TObject);
begin
    UpMove();
         //向上移动
end;
       
procedure TForm1.btnCtlDownClick(Sender: TObject);
begin
    DownMove();      //向下移动
end;

procedure TForm1.btnCtlLeftClick(Sender: TObject);
begin
    LeftMove();       //向左移动
end;

procedure TForm1.btnCtlRightClick(Sender: TObject);
begin
    RightMove();       //向右移动
end;

procedure TForm1.btnCtlNearClick(Sender: TObject);
begin
    FocusAdd();       //聚集加
end;

procedure TForm1.btnCtlFarClick(Sender: TObject);
begin
    FocusReduce();     //聚焦减
end;

procedure TForm1.UpMove;
begin
    UpMoveByNo(getSztdz());
end;

procedure TForm1.DownMove;
begin
   DownMoveByNo(getSztdz());
end;

procedure TForm1.LeftMove;
begin
   LeftMoveByNo(getSztdz());
end;

procedure TForm1.RightMove;
begin
   RightMoveByNo(getSztdz());
end;

procedure TForm1.FocusAdd;
begin
   FocusAddMoveByNo(getSztdz());
end;

procedure TForm1.FocusReduce;
begin
   FocusReduceMoveByNO(getSztdz());
end;

{procedure TForm1.StopMove;
begin
   StopMoveByNo(getSztdz());
end;    }




procedure TForm1.FormCreate(Sender: TObject);     //MSCOMM初始化
begin
  mscomm1.CommPort :=1;                     //指定端口
  mscomm1.Settings := '38400,N,8,1';        //其它参数
  mscomm1.InBufferSize := 1024;             //接收缓冲区
  mscomm1.OutBufferSize := 1024;            //发送缓冲区
  mscomm1.InputMode :=comInputModeBinary;   //接收模式
  mscomm1.InputLen := 1;                    //一次读取所有数据
  mscomm1.SThreshold := 0;                  //一次发送所有数据
  mscomm1.InBufferCount := 0;               //清空读取缓冲区
  mscomm1.OutBufferCount := 0;              //清空发送缓冲区
  MSComm1.RThreshold := 1;                  //设置接收多少字节开产生oncomm事件
  mscomm1.PortOpen:=True;                   //打开端口
end;

procedure TForm1.ApplicationEventsException(Sender: TObject; E: Exception);
begin
    Log(E.Message);
    if MSComm1.PortOpen then
    begin
        MSComm1.PortOpen := false;
    end;
end;

procedure TForm1.CoolTrayIcon1DblClick(Sender: TObject);
begin
    CoolTrayIcon1.ShowMainForm;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    if mscomm1.PortOpen then                         //关闭MSCOMM
    begin
        mscomm1.PortOpen := False;
    end;
end;

procedure TForm1.MSComm1Comm(Sender: TObject);
begin
   case mscomm1.CommEvent of
       comEvReceive: bzw := true;
   end;
end;

function TForm1.getSztdz():integer;
begin
    case combobox1.ItemIndex of
      0 :
          result :=$01;
      1 :
          result :=$02;
      2 :
          result :=$03;
      3 :
          result :=$04;
      4 :
          result :=$05;
      5 :
          result :=$06;
      6 :
          result :=$07;
      7 :
          result :=$08;
      8 :
          result :=$09;
    end;


end;


procedure TForm1.ContinueMove;
var
   senddata:array of BYTE;
begin
    SetLength(senddata,9);
    senddata[0]:=($A0);                          //停止命令 要发送的数据
    senddata[1]:=($00);
    senddata[2]:=getSztdz();
    senddata[3]:=($01);
    senddata[4]:=($03);
    senddata[5]:=($00);
    senddata[6]:=($10);
    senddata[7]:=($10);
    senddata[8]:=($FFFF-(senddata[1]+senddata[2]+senddata[3]+senddata[4]+senddata[5]+senddata[6]+senddata[7])) mod 255;
    OutputToCom(senddata);
end;

procedure TForm1.ActionChange(Sender: TObject; CheckDefaults: Boolean);
begin
  inherited;

end;

procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
begin
    memo1.Lines.LoadFromStream(AData);
    Proccess(memo1.Lines.Text);
end;

procedure TForm1.Proccess(pi_sStr: String);
var
nPos1 :integer;
sTmp :string;
begin
    Log('收到_'+pi_sStr);
    //字串为6种格式  (Up,Down,Left,Right,Add,Reduce)
    if Pos('Up',pi_sStr)>0 then
    begin
        nPos1 := pos('_',pi_sStr);
        sTmp  := copy(pi_sStr,nPos1+1,length(pi_sStr));
        UpMoveByNo(strtoint(sTmp));
        exit;
    end;

    if Pos('Down',pi_sStr)>0 then
    begin
        nPos1 := pos('_',pi_sStr);
        sTmp  := copy(pi_sStr,nPos1+1,length(pi_sStr));
        DownMoveByNo(strtoint(sTmp));
        exit;
    end;

    if Pos('Left',pi_sStr)>0 then
    begin
        nPos1 := pos('_',pi_sStr);
        sTmp  := copy(pi_sStr,nPos1+1,length(pi_sStr));
        LeftMoveByNo(strtoint(sTmp));
        exit;
    end;

    if Pos('Right',pi_sStr)>0 then
    begin
        nPos1 := pos('_',pi_sStr);
        sTmp  := copy(pi_sStr,nPos1+1,length(pi_sStr));
        RightMoveByNo(strtoint(sTmp));
        exit;
    end;

    if Pos('Add',pi_sStr)>0 then
    begin
        nPos1 := pos('_',pi_sStr);
        sTmp  := copy(pi_sStr,nPos1+1,length(pi_sStr));
        FocusAddMoveByNo(strtoint(sTmp));
        exit;
    end;

    if Pos('Reduce',pi_sStr)>0 then
    begin
        nPos1 := pos('_',pi_sStr);
        sTmp  := copy(pi_sStr,nPos1+1,length(pi_sStr));
        FocusReduceMoveByNo(strtoint(sTmp));
        exit;
    end;
    Log('非法命令!');
end;


procedure TForm1.UpMoveByNo(pi_nNo: integer);
var
   senddata:array of BYTE;
begin
    Log('UpMove');
    SetLength(senddata,9);
    senddata[0]:=$A0;                          //向上移动要发送的数据
    senddata[1]:=$00;
    senddata[2]:=pi_nNo;
    senddata[3]:=$01;
    senddata[4]:=$00;
    senddata[5]:=$04;
    senddata[6]:=$10;
    senddata[7]:=$10;
    senddata[8]:=($FFFF-(senddata[1]+senddata[2]+senddata[3]+senddata[4]+senddata[5]+senddata[6]+senddata[7])) mod 255;
    OutputToCom(senddata);
    Sleep(500);
    StopMove(pi_nNo);
end;

procedure TForm1.DownMoveByNo(pi_nNo: integer);
var
   senddata:array of BYTE;
begin
    Log('DownMove');
    SetLength(senddata,9);
    senddata[0]:=$A0;                          //向下移动要发送的数据
    senddata[1]:=$00;
    senddata[2]:=pi_nNo;
    senddata[3]:=$01;
    senddata[4]:=$00;
    senddata[5]:=$08;
    senddata[6]:=$10;
    senddata[7]:=$10;
    senddata[8]:=($FFFF-(senddata[1]+senddata[2]+senddata[3]+senddata[4]+senddata[5]+senddata[6]+senddata[7])) mod 255;
    OutputToCom(senddata);
    Sleep(500);
    StopMove(pi_nNo);
end;

procedure TForm1.LeftMoveByNo(pi_nNo: integer);
var
   senddata:array of BYTE;
begin
    Log('LeftMove');
    SetLength(senddata,9);
    senddata[0]:=($A0);                          //向左移动要发送的数据
    senddata[1]:=($00);
    senddata[2]:=pi_nNo;
    senddata[3]:=($01);
    senddata[4]:=($00);
    senddata[5]:=($01);
    senddata[6]:=($10);
    senddata[7]:=($10);
    senddata[8]:=($FFFF-(senddata[1]+senddata[2]+senddata[3]+senddata[4]+senddata[5]+senddata[6]+senddata[7])) mod 255;
    OutputToCom(senddata);
    Sleep(500);
    StopMove(pi_nNo);

end;

procedure TForm1.RightMoveByNo(pi_nNo: integer);
var
   senddata:array of BYTE;
begin
    Log('RightMove');
    SetLength(senddata,9);
    senddata[0]:=($A0);                          //向右移动要发送的数据
    senddata[1]:=($00);
    senddata[2]:=pi_nNo;
    senddata[3]:=($01);
    senddata[4]:=($00);
    senddata[5]:=($02);
    senddata[6]:=($10);
    senddata[7]:=($10);
    senddata[8]:=($FFFF-(senddata[1]+senddata[2]+senddata[3]+senddata[4]+senddata[5]+senddata[6]+senddata[7])) mod 255;
    OutputToCom(senddata);
    Sleep(500);
    StopMove(pi_nNo);
end;

procedure TForm1.FocusAddMoveByNo(pi_nNo: integer);
var
   senddata:array of BYTE;
begin
    Log('FocusAdd');
    SetLength(senddata,9);
    senddata[0]:=($A0);                          //聚焦加 要发送的数据
    senddata[1]:=($00);
    senddata[2]:=pi_nNo;
    senddata[3]:=($01);
    senddata[4]:=($01);
    senddata[5]:=($00);
    senddata[6]:=($10);
    senddata[7]:=($10);
    senddata[8]:=($FFFF-(senddata[1]+senddata[2]+senddata[3]+senddata[4]+senddata[5]+senddata[6]+senddata[7])) mod 255;
    OutputToCom(senddata);
    //sleep(500);
    ContinueMove();
    Sleep(500);
    StopMove(pi_nNo);
end;

procedure TForm1.FocusReduceMoveByNo(pi_nNo: integer);
var
   senddata:array of BYTE;
begin
    Log('FocusReduce');
    SetLength(senddata,9);
    senddata[0]:=($A0);                          //聚焦减 要发送的数据
    senddata[1]:=($00);
    senddata[2]:=pi_nNo;
    senddata[3]:=($01);
    senddata[4]:=($02);
    senddata[5]:=($00);
    senddata[6]:=($10);
    senddata[7]:=($10);
    senddata[8]:=($FFFF-(senddata[1]+senddata[2]+senddata[3]+senddata[4]+senddata[5]+senddata[6]+senddata[7])) mod 255;
    OutputToCom(senddata);
    sleep(500);
    ContinueMove();
    Sleep(500);
    StopMove(pi_nNo);
end;

procedure TForm1.StopMove(pi_nNo:integer);
var
   senddata:array of BYTE;
begin
    SetLength(senddata,9);
    senddata[0]:=($A0);                          //停止命令 要发送的数据
    senddata[1]:=($00);
    senddata[2]:=pi_nNo;
    senddata[3]:=($01);
    senddata[4]:=($00);
    senddata[5]:=($00);
    senddata[6]:=($10);
    senddata[7]:=($10);
    senddata[8]:=($FFFF-(senddata[1]+senddata[2]+senddata[3]+senddata[4]+senddata[5]+senddata[6]+senddata[7])) mod 255;
    OutputToCom(senddata);
end;

end.

⌨️ 快捷键说明

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