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

📄 rsu.pas

📁 使用Delphi 6.0开发用于控制空调的程序
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit RSU;

interface

uses
  Messages, SysUtils, Variants, Classes, Dialogs, Controls,StrUtils,
  IDF,IDInfo,Line ,LineInfo ;
type TRSU = class

protected
  strReBuffer:string;
  Len:Integer;
  strError:string;
  strInfo:string;
public
   LineR:TLine;
   IDFR:TIDF;
   LineInfoR:TLineInfo;
   IDInfoR:TIDInfo;

   constructor create(s:string);
   function  ChkData(strChk:string):Boolean ;
   function  BCC(strBCC:string):string;
   function GetErrorInfo():string;
   function GetSuccessInfo():string;
   //function  GetCOmmand():string;
   procedure CutCommu;   //000 回路切断要求
   procedure ReadRAM;  //0E0 RAM读出
   procedure WriteRAM; //0F0 RAM记入

   procedure IDId();       //100 接口ID确认
   procedure PassWordID; //110 PASSWORD确认

   procedure SetPassWord;   //210 pw设定
   procedure SetCenterTELNo;   //220 中心一tel.no
   procedure SetID;  //230 接口ID
   procedure SetNowTime; //240 现在时刻
   procedure SetTimingSendPaperTime; // 250定时发报时刻
   procedure SetDialingNum;   //280 连通为止的拨号次数
   procedure SetReDialingNum; //2A0 重拨次数
   procedure SetAutoMachine; //2B0 自动备机有无
   procedure SetAutoRunTime;  //2c0  自动交替运作时间
   procedure SetMinRunGuranteeNum; //2D0 最低运转保证台数
   procedure SetDiagling; //根据需要对接口发报的许可/禁止设定

   procedure StateConManagerNum; //300  从接口读出各遥控器回路所连接的室内机台数  300
   procedure StateConUNITNO;     //310 从接口读出任意室内机的UNIT.NO    310
   procedure StateConLimitInte;//320 从接口读出任意回路的限制情报

   procedure CollCumulativeInte;  //400  读出任意室内机的积累信息
   procedure CollTransmittersResult;   //410  从接口读出发报原因

   procedure ACDataInit;   //500  接口内部存储数据的初始化。希望从室内机的最初存储数据开始实行时发行

   procedure ACCTRun; //600 对接口的任意LINE运转。停止指令
   procedure ACCTCleaning; //610  对接口的任意LINE发出过滤清洗重置指令
   procedure ACCTRunModel; //620 改变接口任意line的运转模式
   procedure ACCTSetTemp;//630 改变接口任意line的设定温度
   procedure ACCTVAV; // 640 改变接口任意Line的风量

   procedure IDReadCenterTELNO; //   720 读出同接口相连的上位机的TEL.NO
   procedure IDReadID;    //730 读出接口设定的ID
   procedure IDReadNowTime; //740 读出接口累计的现在时刻
   procedure IDReadTimingSendPaperTime; //750 读出接口设定的定时发表时刻
   procedure IDReadDialingNum;  //780 读出接口设定的连通为止的响应次数
   procedure IDReadReDialingNum;  //7A0 读出接口设定的连通为止的重拨为止
   procedure IDReadAutoMachine;  //7B0 读出接口设定的自动备机功能有无
   procedure IDReadAutoRunTime;  //7C0 读出接口设定的自动交替运转时间
   procedure IDReadMinRunGurNum;  //7DO 读出接口设定的最低运转保证台数
   procedure IDReadDiagling;    //7E0 读出接口设定的各种情况下的发报有无

end;
implementation

{ TRSU }

function hex(c:char):Integer;
var
   x:integer;
begin
    if c='' then
       x:=0
    else if(Ord(c)>=ord('0'))and (Ord(c)<=ord('9')) then
        x:=Ord(c)-Ord('0')
    else if(Ord(c)>=ord('a'))and (Ord(c)<=ord('f')) then
        x:=Ord(c)-Ord('a')+10
    else if(Ord(c)>=ord('A'))and (Ord(c)<=ord('F')) then
        x:=Ord(c)-Ord('A')+10
    else
     x:=-1;
    Result:=x;
end;
//该函数结束1~2个字符,转换成功,输出对应十六进制的值,转换失败,输出-1
function HexToInt(S:String):Integer;
var
  tmpInt1,tmpInt2:integer;
begin
    if Length(S)=1 then
    begin
       Result:=hex(S[1]);
    end
    else if Length(S)=2 then
    begin
      tmpInt1:=hex(S[1]);
      tmpInt2:=hex(S[2]);
      if(tmpInt1=-1) or (tmpInt2=-1) then
        Result:=-1
      else
        Result:=tmpInt1*16+tmpInt2;
    end
    else
    Result:=-1;
end;

function mod_num(n1,n2:integer):integer;//取余数
begin
   result:=n1-n1 div n2*n2
end;
function reverse(s:String):String;//取反串
Var
i,num:Integer;
st:String;
begin
   num:=Length(s);
   st:='';
   For i:=num DownTo 1 do
   Begin
     st:=st+s[i];
   End;
   Result:=st;
end;

Function DecTobin(Value :Integer) : string;//十进制转化二进制
Var
  ST:String;
  N:Integer;
Begin
   ST:='';
   N:=value;
   While N >= 2 Do
   Begin
     st:=st+IntToStr(mod_num(n,2));
     N := N div 2;
   End;
   ST:=ST + IntToStr(n);
   ST:=reverse(ST);
   if Length(ST) <> 8 then
   begin
     case Length(ST) of
       7: ST :='0'+st;
       6: ST :='00' + st;
       5: ST :='000' + st;
       4: ST :='0000' + st;
       3: ST :='00000' + st;
       2: ST :='000000' + st;
       1: sT :='0000000' + st;
       0: ST :='00000000' + st; 
     end;
     Result := ST;
   end
   else
      Result :=ST;  
End;

function StrToBin(ss:string):string;
begin
  Result := DecTobin(HexToInt(ss));
end;

function TRSU.GetErrorInfo():string;
begin
   Result := strError;
end;

function TRSU.GetSuccessInfo():string;
begin
   Result := strInfo;
end;
constructor TRSU.create(s: string);
begin
   Len := Length(s);
   strReBuffer := s;
   strError :='通信正常';
   strInfo :='';
   IDFR := TIDF.Create;
   IDInfoR := TIDInfo.Create;
   LineInfoR := TLineInfo.Create;
   LineR := TLine.Create;
end;

function TRSU.BCC(strBCC: string): string;
var
  i,strSum:Integer;
  strResult:string;
begin
   strSum := 0;
   for i := 1 to Length(strBCC) do
   begin
     strSum := strSum + Ord(strBCC[i]);
   end;
   strResult := IntToHex((strSum and $0F),1);
   Result := strResult;
end;

function  BinToHave(ss:string):string ;
begin
  if ss[1] = '0' then
     Result :='无'
  else
  if ss[1] = '1' then
     Result :='有';
end;

function  TRSU.ChkData(strChk:string):Boolean ;
var
  strTemp:string;
  iLen:Integer;
begin
  iLen := Length(strChk);
  if (strChk[1] <> #02) or (strChk[iLen-1] <> #03) then
  begin
     strError := '结束符和起始符号不对,起始:'+strChk[1]+'结束:'+strChk[ iLen-1];
     Result := False;
     Exit;
  end;
  strTemp := BCC(Copy(strChk,1,iLen - 1  ) ) ;
  if strTemp <> strChk[iLen ]then
  begin
     StrError :='BCC错误!';
     Result := False;
     Exit;
  end;
  strError := '通信正常';
   Result := True ;

end;

procedure TRSU.CutCommu;
var
  bb:Boolean ;
begin
   if Length(strReBuffer) <> 6 then
   begin
     strError :='CutCommu数据长度6不对,为:'+ IntToStr(Length (strReBuffer));
     Exit;
   end;
   bb :=ChkData(strReBuffer);
   if bb then
      strInfo :='要求接口切断回线通信成功!' ;
   //else strError := '要求接口切断回线通信失败';

end;

procedure TRSU.IDId;
var
  bb:Boolean ;
begin
   if Len <> 22 then
   begin
     strError := '数据长度不正确!收到的是:'+ IntToStr(Len)+'位, 应该是:22位!';
     Exit;
   end;
   bb := ChkData(strReBuffer);
   if  bb then
   begin
      IDFR.ID := Copy(strReBuffer,5,16);
      IDInfoR.ID := IDFR.ID;//Copy(strReBuffer,5,16);
      strInfo := '接口ID确认——成功!';
   end;
end;

procedure TRSU.PassWordID;
var
  bb:Boolean ;
begin
   if Len <> 22 then
   begin
     strError := '数据长度不正确!收到的是:'+ IntToStr(Len)+'位, 应该是:22!';
     Exit;
   end;
   bb := ChkData(strReBuffer);
   if bb then
   begin
      if strReBuffer[5] = '0' then
         strInfo := '必须项目未设定(登入成功)'
      else
      if  strReBuffer[5] = '1' then
         strInfo := '登入成功'
      else
      if strReBuffer[5] = '0' then
         strInfo := 'PW异常,登入失败'
      else
        strInfo := '数据错误';
   end;
end;

procedure TRSU.SetPassWord;
var
  bb:Boolean ;
begin
   bb := ChkData(strReBuffer);
   if bb then
      strInfo :='密码设置——成功!';
end;

procedure TRSU.SetCenterTELNo;   //220
var
  bb:Boolean ;
begin
   bb := ChkData(strReBuffer);
   if bb then
      strInfo :='设置中心TEL NO——成功!';
end;

procedure TRSU.SetNowTime;
var
  bb:Boolean ;
begin
   bb := ChkData(strReBuffer);
   if bb then
      strInfo :='设置接口现在时刻——成功!';
end;

procedure TRSU.SetID;
var
  bb:Boolean ;
begin
   bb := ChkData(strReBuffer);
   if bb then
      strInfo :='设置接口ID——成功!';
end;

procedure TRSU.SetTimingSendPaperTime;
var
  bb:Boolean ;
begin
   bb := ChkData(strReBuffer);
   if bb then
      strInfo :='设置定时发报时刻——成功!';
end;

procedure TRSU.SetDialingNum;
var
  bb:Boolean ;
begin
   bb := ChkData(strReBuffer);
   if bb then
      strInfo :='设置接口连通为止的拨号次数——成功!';
end;

procedure TRSU.SetReDialingNum;
var
  bb:Boolean ;
begin
   bb := ChkData(strReBuffer);
   if bb then
      strInfo :='设置接口连通为止的重拨次数——成功!';
end;

procedure TRSU.SetAutoMachine;
var
  bb:Boolean ;
begin
   bb := ChkData(strReBuffer);
   if bb then
      strInfo :='设置接口自动备机有无——成功!';
end;

procedure TRSU.SetAutoRunTime;
var
  bb:Boolean ;
begin
   bb := ChkData(strReBuffer);
   if bb then
      strInfo :='设置接口自动交替运转时间——成功!';
end;

procedure TRSU.SetMinRunGuranteeNum;
var
  bb:Boolean ;
begin
   bb := ChkData(strReBuffer);
   if bb then
      strInfo :='设置接口最低运转保证台数——成功!';
end;

procedure TRSU.SetDiagling;
var
  bb:Boolean ;
begin
   bb := ChkData(strReBuffer);
   if bb then
      strInfo :='设置接口发报的许可/禁止——成功!';
end;

procedure TRSU.StateConManagerNum;  //300
var
  bb:Boolean ;
begin
  if Len <> 12 then
   begin
     strError := '数据长度不正确!收到的是:'+ IntToStr(Len)+'位, 应该是:12 位!';
     Exit;
   end;
   bb := ChkData(strReBuffer);
   if  bb then
   begin
     IDFR.LINE0 := Copy(strReBuffer,5,2 );
     IDFR.LINE1 := Copy(strReBuffer,7,2 );
     IDFR.LINE2 := Copy(strReBuffer,9,2 );
     strInfo := '从接口读出遥控器回路所连接的室内机台数——成功!';
   end;   
end;

procedure TRSU.StateConUNITNO;
var
  bb:Boolean ;
begin
   if Len <> 8 then
   begin
     strError := '数据长度不正确!收到的是:'+ IntToStr(Len)+'位, 应该是:8位!';
     Exit;
   end;
   bb := ChkData(strReBuffer);
   if  bb then
   begin
     LineR.UNITNO := Copy (strReBuffer,5,2 );
     strInfo := '从接口读出室内机的UNIT NO ——成功!';
   end;
end;

procedure TRSU.StateConLimitInte;

⌨️ 快捷键说明

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