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

📄 pelcount.pas

📁 派尔高矩阵切换协议代码实现,希望对各位有所帮助
💻 PAS
📖 第 1 页 / 共 2 页
字号:
function TPelco.PanRight(Speed: Integer = 8; NeedFB: Boolean = True): Boolean;
begin
  MsgLen:= 10;

  PelcoMsg[0]:= Char(STX);
  PelcoMsg[1]:= Char($C0);
  PelcoMsg[2]:= Char(IntToBCD(Mon));
  PelcoMsg[3]:= Char(IntToBCD(Cam div 100));
  PelcoMsg[4]:= Char(IntToBCD(Cam mod 100));
  PelcoMsg[5]:= Char(0);
  PelcoMsg[6]:= Char($2);
  PelcoMsg[7]:= Char(Speed * 8 - 1);
  PelcoMsg[8]:= Char(0);
  PelcoMsg[9]:= Char(ETX);

  Result:= SendOrder(NeedFB);
end;

function TPelco.StopPanLens(NeedFB: Boolean): Boolean;
begin
  MsgLen:= 10;

  PelcoMsg[0]:= Char(STX);
  PelcoMsg[1]:= Char($C0);
  PelcoMsg[2]:= Char(IntToBCD(Mon));
  PelcoMsg[3]:= Char(IntToBCD(Cam div 100));
  PelcoMsg[4]:= Char(IntToBCD(Cam mod 100));
  PelcoMsg[5]:= Char(0);
  PelcoMsg[6]:= Char(0);
  PelcoMsg[7]:= Char(0);
  PelcoMsg[8]:= Char(0);
  PelcoMsg[9]:= Char(ETX);

  Result:= SendOrder(NeedFB);
end;

function TPelco.PanUp(Speed: Integer = 8; NeedFB: Boolean = True): Boolean;
begin
  MsgLen:= 10;

  PelcoMsg[0]:= Char(STX);
  PelcoMsg[1]:= Char($C0);
  PelcoMsg[2]:= Char(IntToBCD(Mon));
  PelcoMsg[3]:= Char(IntToBCD(Cam div 100));
  PelcoMsg[4]:= Char(IntToBCD(Cam mod 100));
  PelcoMsg[5]:= Char(0);
  PelcoMsg[6]:= Char($8);
  PelcoMsg[7]:= Char(0);
  PelcoMsg[8]:= Char(Speed * 8 - 1);
  PelcoMsg[9]:= Char(ETX);

  Result:= SendOrder(NeedFB);
end;

function TPelco.SendOrder(NeedFB: Boolean): Boolean;
var
  Loop: Integer;
begin
  Loop:= 3;
  GenCRC(PelcoMsg, MsgLen);

  while InUse do
  begin
     Sleep(10);
  end;

  InUse:= True;

  while Loop > 0 do
  begin
    MyCom.Flush;
    if MyCom.SendData(PelcoMsg, MsgLen) < 0 then
    begin
      FBCode:= 41;
      Result:= False;
      Exit;
    end;

    if not NeedFB then
    begin
      MyCom.Putch(ACK);
      InUse:= False;
      Result:= True;
      Exit;
    end;

    Sleep(200);
    FBLen:= MyCom.ReceiveData(FeedBack, 255);

    if FBLen < 0 then
    begin
      FBCode:= 41;
      Result:= False;
      InUse:= False;
      Exit;
    end
    else
    if (FBLen > 0) then
    begin
      MyCom.Putch(ACK);
      break;
    end;

    Loop:= Loop - 1;
  end;

  Result:= GetFB;
  InUse:= False;
end;

function TPelco.SwToCam(CamNo: Integer; NeedFB: Boolean): Boolean;
begin
  Cam:= CamNo;

  MsgLen:= 6;
  PelcoMsg[0]:= Char(STX);
  PelcoMsg[1]:= Char($B2);
  PelcoMsg[2]:= Char(IntToBCD(Mon));
  PelcoMsg[3]:= Char(IntToBCD(Cam div 100));
  PelcoMsg[4]:= Char(IntToBCD(Cam mod 100));
  PelcoMsg[5]:= Char(ETX);

  Result:= SendOrder(NeedFB);
end;

function TPelco.SwToMon(MonNo: Integer; NeedFB: Boolean): Boolean;
begin
  Mon:= MonNo;

  MsgLen:= 5;
  PelcoMsg[0]:= Char(STX);
  PelcoMsg[1]:= Char($B1);
  PelcoMsg[2]:= Char(IntToBCD(Mon));
  PelcoMsg[3]:= Char(IntToBCD(Cam));
  PelcoMsg[4]:= Char(ETX);

  Result:= SendOrder(NeedFB);
end;

function TPelco.ApertureClose(NeedFB: Boolean): Boolean;
begin
  MsgLen:= 10;
  PelcoMsg[0]:= Char(STX);
  PelcoMsg[1]:= Char($C0);
  PelcoMsg[2]:= Char(IntToBCD(Mon));
  PelcoMsg[3]:= Char(IntToBCD(Cam div 100));
  PelcoMsg[4]:= Char(IntToBCD(Cam mod 100));
  PelcoMsg[5]:= Char($8);
  PelcoMsg[6]:= Char(0);
  PelcoMsg[7]:= Char(0);
  PelcoMsg[8]:= Char(0);
  PelcoMsg[9]:= Char(ETX);

  Result:= SendOrder(NeedFB);
end;

function TPelco.ApertureOpen(NeedFB: Boolean): Boolean;
begin
  MsgLen:= 10;
  PelcoMsg[0]:= Char(STX);
  PelcoMsg[1]:= Char($C0);
  PelcoMsg[2]:= Char(IntToBCD(Mon));
  PelcoMsg[3]:= Char(IntToBCD(Cam div 100));
  PelcoMsg[4]:= Char(IntToBCD(Cam mod 100));
  PelcoMsg[5]:= Char($4);
  PelcoMsg[6]:= Char(0);
  PelcoMsg[7]:= Char(0);
  PelcoMsg[8]:= Char(0);
  PelcoMsg[9]:= Char(ETX);

  Result:= SendOrder(NeedFB);
end;

function TPelco.Feature(NeedFB: Boolean): Boolean;
begin
  MsgLen:= 10;
  PelcoMsg[0]:= Char(STX);
  PelcoMsg[1]:= Char($C0);
  PelcoMsg[2]:= Char(IntToBCD(Mon));
  PelcoMsg[3]:= Char(IntToBCD(Cam div 100));
  PelcoMsg[4]:= Char(IntToBCD(Cam mod 100));
  PelcoMsg[5]:= Char(0);
  PelcoMsg[6]:= Char($20);
  PelcoMsg[7]:= Char(0);
  PelcoMsg[8]:= Char(0);
  PelcoMsg[9]:= Char(ETX);

  Result:= SendOrder(NeedFB);
end;

function TPelco.FocusFar(NeedFB: Boolean): Boolean;
begin
  MsgLen:= 10;
  PelcoMsg[0]:= Char(STX);
  PelcoMsg[1]:= Char($C0);
  PelcoMsg[2]:= Char(IntToBCD(Mon));
  PelcoMsg[3]:= Char(IntToBCD(Cam div 100));
  PelcoMsg[4]:= Char(IntToBCD(Cam mod 100));
  PelcoMsg[5]:= Char($1);
  PelcoMsg[6]:= Char(0);
  PelcoMsg[7]:= Char(0);
  PelcoMsg[8]:= Char(0);
  PelcoMsg[9]:= Char(ETX);

  Result:= SendOrder(NeedFB);
end;

function TPelco.FocusNear(NeedFB: Boolean): Boolean;
begin
  MsgLen:= 10;
  PelcoMsg[0]:= Char(STX);
  PelcoMsg[1]:= Char($C0);
  PelcoMsg[2]:= Char(IntToBCD(Mon));
  PelcoMsg[3]:= Char(IntToBCD(Cam div 100));
  PelcoMsg[4]:= Char(IntToBCD(Cam mod 100));
  PelcoMsg[5]:= Char($2);
  PelcoMsg[6]:= Char(0);
  PelcoMsg[7]:= Char(0);
  PelcoMsg[8]:= Char(0);
  PelcoMsg[9]:= Char(ETX);

  Result:= SendOrder(NeedFB);
end;

function TPelco.Panorama(NeedFB: Boolean): Boolean;
begin
  MsgLen:= 10;
  PelcoMsg[0]:= Char(STX);
  PelcoMsg[1]:= Char($C0);
  PelcoMsg[2]:= Char(IntToBCD(Mon));
  PelcoMsg[3]:= Char(IntToBCD(Cam div 100));
  PelcoMsg[4]:= Char(IntToBCD(Cam mod 100));
  PelcoMsg[5]:= Char(0);
  PelcoMsg[6]:= Char($40);
  PelcoMsg[7]:= Char(0);
  PelcoMsg[8]:= Char(0);
  PelcoMsg[9]:= Char(ETX);

  Result:= SendOrder(NeedFB);
end;

function TPelco.SwNext(NeedFB: Boolean): Boolean;
begin
  MsgLen:= 4;
  PelcoMsg[0]:= Char(STX);
  PelcoMsg[1]:= Char($B6);
  PelcoMsg[2]:= Char(IntToBCD(Mon));
  PelcoMsg[3]:= Char(ETX);

  Result:= SendOrder(NeedFB);
end;

function TPelco.SwPrevious(NeedFB: Boolean): Boolean;
begin
  MsgLen:= 4;
  PelcoMsg[0]:= Char(STX);
  PelcoMsg[1]:= Char($B7);
  PelcoMsg[2]:= Char(IntToBCD(Mon));
  PelcoMsg[3]:= Char(ETX);

  Result:= SendOrder(NeedFB);
end;

function TPelco.LoadPreset(No: Integer; NeedFB: Boolean): Boolean;
begin
  MsgLen:= 10;

  PelcoMsg[0]:= Char(STX);
  PelcoMsg[1]:= Char($C0);
  PelcoMsg[2]:= Char(IntToBCD(Mon));
  PelcoMsg[3]:= Char(IntToBCD(Cam div 100));
  PelcoMsg[4]:= Char(IntToBCD(Cam mod 100));
  PelcoMsg[5]:= Char(0);
  PelcoMsg[6]:= Char($7);
  PelcoMsg[7]:= Char(0);
  PelcoMsg[8]:= Char(IntToBCD(No));
  PelcoMsg[9]:= Char(ETX);

  Result:= SendOrder(NeedFB);
end;

function TPelco.SavePreset(No: Integer; NeedFB: Boolean): Boolean;
begin
  MsgLen:= 10;

  PelcoMsg[0]:= Char(STX);
  PelcoMsg[1]:= Char($C0);
  PelcoMsg[2]:= Char(IntToBCD(Mon));
  PelcoMsg[3]:= Char(IntToBCD(Cam div 100));
  PelcoMsg[4]:= Char(IntToBCD(Cam mod 100));
  PelcoMsg[5]:= Char(0);
  PelcoMsg[6]:= Char($3);
  PelcoMsg[7]:= Char(0);
  PelcoMsg[8]:= Char(IntToBCD(No));
  PelcoMsg[9]:= Char(ETX);

  Result:= SendOrder(NeedFB);
end;

function TPelco.Aux(AuxNo: Integer; NeedFB: Boolean): Boolean;
var
  I: Integer;
begin
  for I := 0 to 1 do
  begin
    MsgLen:= 7;
    PelcoMsg[0]:= Char(STX);
    PelcoMsg[1]:= Char($B8);
    PelcoMsg[2]:= Char(IntToBCD(Cam div 100));
    PelcoMsg[3]:= Char(IntToBCD(Cam mod 100));
    PelcoMsg[4]:= Char($50 - AuxNo - I);
    PelcoMsg[5]:= Char(IntToBCD(Mon));
    PelcoMsg[6]:= Char(ETX);

    Result:= SendOrder(NeedFB);
  end;
end;

function TPelco.StartMacro(var Buf: Array of Byte; NeedFB: Boolean): Boolean;
var
  I: Integer;
begin
  MsgLen:= Buf[0] * 4 + 7;

  PelcoMsg[0]:= Char(STX);
  PelcoMsg[1]:= Char($E9);
  PelcoMsg[2]:= Char($1);
  PelcoMsg[3]:= Char(IntToBCD(Mon div 100));      //用监视器号代替宏号
  PelcoMsg[4]:= Char(IntToBCD(Mon mod 100));
  PelcoMsg[5]:= Char(IntToBCD(Buf[0]));

  for I := 0 to Buf[0] - 1 do
  begin
    PelcoMsg[I * 4 + 6]:= Char(IntToBCD(Mon));
    PelcoMsg[I * 4 + 7]:= Char(IntToBCD(Buf[I * 3 + 1]));
    PelcoMsg[I * 4 + 8]:= Char(IntToBCD(Buf[I * 3 + 2]));
    PelcoMsg[I * 4 + 9]:= Char(IntToBCD(Buf[I * 3 + 3]));
  end;

  PelcoMsg[MsgLen - 1]:= Char(ETX);

  Result:= SendOrder(NeedFB);

  SwNext(False);
  SwPrevious(False);
end;

function TPelco.StopMacro(NeedFB: Boolean): Boolean;
begin
{
  MsgLen:= 6;

  PelcoMsg[0]:= Char(STX);
  PelcoMsg[1]:= Char($EC);
  PelcoMsg[2]:= Char(IntToBCD(Mon));
  PelcoMsg[3]:= Char(IntToBCD(Mon div 100));
  PelcoMsg[4]:= Char(IntToBCD(Mon mod 100));
  PelcoMsg[5]:= Char(ETX);

  Result:= SendOrder(False);
}
  MsgLen:= 4;

  PelcoMsg[0]:= Char(STX);
  PelcoMsg[1]:= Char($E8);
  PelcoMsg[2]:= Char(IntToBCD(Mon));
  PelcoMsg[3]:= Char(ETX);

  Result:= SendOrder(NeedFB);
end;

function TPelco.GetComStatus: String;
begin
  Result:= MyCom.GetStatus;
end;

end.

⌨️ 快捷键说明

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