?? rsu.pas
字號:
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 + -