📄 recemsg.~pas
字号:
// if iEnd <>13 then //Ord(strReceBuffer[70]) <> 13 then
// begin
// strError := 'CORP,这个数据的结束符:为'+strRecebuffer[70]+'ord:'+IntToStr(iEnd);;
// Exit;
// end;
if LenBuffer <> 70 then
begin
strError :='';
strError := 'CORP,数据长度不是收集装置的代表数据,应该为 :70,而不是'+ IntToStr(LenBuffer);
Exit;
end;
if (strReceBuffer[10] <> '9') or (strReceBuffer[11] <> '0') or (strReceBuffer[12] <> '3') or (strReceBuffer[13] <> '4') then
begin
strError := 'CORP,Length 中的LCHKSUM OR LENID 有错,原来为’9034‘,他变成: '+
strReceBuffer[10]+strReceBuffer[11]+strReceBuffer[12]+strReceBuffer[13];
Exit;
end;
strRTN := strReceBuffer[8] + strReceBuffer[9];
if not GetRTNError(strRTN) then
Exit;
ACTemp.strAddress := Copy(strReceBuffer,4,2);
// ShowMessage('接收到的空调地址为;'+ACTemp.strAddress);
// for i := 1 to 12 do
// begin
// iData[i] := GetValue(Copy(strReceBuffer,16 + (i-1)*4,4));
// ACTemp.iDataTemp[i] := iData[i];
// end;
//ShowMessage(Copy(strReceBuffer,44,4));
ACTemp.iDataTemp[8] := GetValue(Copy(strReceBuffer,44,4));
// ShowMessage('接收到的空调回风温度为:'+ IntToStr(ACTemp.iDataTemp[8]));
end;
procedure TReceMsg.COWS; //收集警告状态数据 COWS
var
//i:Integer;
strRTN:string;
iEnd:Integer;
begin
strError := '正常';
if strReceBuffer[1] <>'~' then //Ord(strReceBuffer[70]) <> 13 then
begin
strError := 'CORP,起始位:'+strReceBuffer[1];
Exit;
end;
// iEnd := Ord(strReceBuffer[46]);
// if iEnd <>13 then //Ord(strReceBuffer[70]) <> 13 then
// begin
// strError := 'COWS,这个数据的结束符为: '+strRecebuffer[70]+' ord: '+IntToStr(iEnd);;
// Exit;
// end;
if LenBuffer <> 46 then
begin
strError :='';
strError := 'COWS,数据长度不是收集装置的代表数据,应该为 :46,而不是'+ IntToStr(LenBuffer);
Exit;
end;
if (strReceBuffer[10] <> '3') or (strReceBuffer[11] <> '0') or (strReceBuffer[12] <> '1') or (strReceBuffer[13] <> 'C') then
begin
strError := 'CORP,Length 中的LCHKSUM OR LENID 有错,原来为’301C‘,他变成: '+
strReceBuffer[10]+strReceBuffer[11]+strReceBuffer[12]+strReceBuffer[13];
Exit;
end;
strRTN := strReceBuffer[8] + strReceBuffer[9];
if not GetRTNError(strRTN) then
Exit;
ACTemp.strAddress := Copy(strReceBuffer,4,2);
ACTemp.strWaringState[7] := GetValueWaringState( Copy(strReceBuffer,28,2) );
// for i := 1 to 11 do
// begin
// ACTemp.strWaringState[i] := GetValueWaringState( Copy(strReceBuffer,(16 + (i-1)*2),2) );
// end;
end;
constructor TReceMsg.Create(strBuffer: string;tempADO:TADOConnection);
var
i:Integer;
begin
strReceBuffer := strBuffer;
LenBuffer := Length(strBuffer);
b4 := 0;
b3 := 0;
b2 := 0;
b1 := 0;
strError :='正常';
for i := 1 to 12 do
iData[i] := 0;
ACTemp := TAC.Create;
for i := 1 to 10 do
bRunState[i] := 9;
//TADOQuery.Create(qry);
// ado := tempADO;
//qry.Connection := ado;
end;
procedure TReceMsg.GAP; // 取得设定参数 GAP
var
iEnd:Integer ;
strRTN:string;
// i:Integer;
begin
strError := '正常';
if strReceBuffer[1] <>'~' then //Ord(strReceBuffer[70]) <> 13 then
begin
strError := 'GAP,起始位:'+strReceBuffer[1];
Exit;
end;
iEnd := Ord(strReceBuffer[44]);
//ShowMessage('GAP的字符串长度:'+ IntToStr(LenBuffer));
// if iEnd <> 13 then //Ord(strReceBuffer[70]) <> 13 then
// begin
// strError := 'GAP,这个数据的结束符为: '+strRecebuffer[44]+' ord: '+IntToStr(iEnd);;
// Exit;
// end;
if LenBuffer <> 44 then
begin
strError :='';
strError := 'GAP,数据长度不是收集装置的代表数据,应该为 :44,而不是'+ IntToStr(LenBuffer);
Exit;
end;
if (strReceBuffer[10] <> '5') or (strReceBuffer[11] <> '0') or (strReceBuffer[12] <> '1') or (strReceBuffer[13] <> 'A') then
begin
strError := 'GAP,Length 中的LCHKSUM OR LENID 有错,原来为’501A‘,它变成: '+
strReceBuffer[10]+strReceBuffer[11]+strReceBuffer[12]+strReceBuffer[13];
Exit;
end;
strRTN := strReceBuffer[8] + strReceBuffer[9];
if not GetRTNError(strRTN) then
begin
//strError := '获取参数设定值时,RTN错误';
Exit;
end;
ACTemp.strAddress := Copy(strReceBuffer,4,2);
ACTemp.iOpenTemp := GetValue( Copy(strReceBuffer,14,4));
ACTemp.iCloseTemp := GetValue( Copy(strReceBuffer,18,4));
ACTemp.iReturnTempCeiling := GetValue( Copy(strReceBuffer,22,4));
ACTemp.iReturnTempLimit := GetValue( Copy(strReceBuffer,26,4));
ACTemp.iReturnHumidityCeiling := GetValue( Copy(strReceBuffer,30,4));
ACTemp.iReturnHumidityLimit := GetValue( Copy(strReceBuffer,34,4));
end;
procedure TReceMsg.GCPVI;
begin
end;
procedure TReceMsg.GEFI;
begin
end;
function TReceMsg.GetRTNError(strRTN: string): BOOL;
var
iLen,iRTN:Integer;
begin
iLen := Length(strRTN);
if iLen <> 2 then
begin
Result := False;
Exit;
end;
iRTN := StrToInt(strRTN[1])*16 + StrToInt(strRTN[2]);
case iRTN of
$00: Result := True;
$01:
begin
strError := 'RTN错误:VER错误!';
Result := False;
end;
$02:
begin
strError := 'RTN错误:CHKSUM错误!';
Result := False;
end;
$03:
begin
strError := 'RTN错误:LCHKSUM错误!';
Result := False;
end;
$04:
begin
strError := 'RTN错误:CID2错误!';
Result := False;
end;
$05:
begin
strError := 'RTN错误:命令格式错误!';
Result := False;
end;
$06:
begin
strError := 'RTN错误:无效数据!';
Result := False;
end;
else
begin
strError := 'RTN错误:其他错误!';
Result := False;
end;
end;
end;
function TReceMsg.GetValue(strData: string): Integer;
var
iLen:Integer;
bb4,bb3,bb2,bb1:Integer;
begin
if strData = '' then
begin
Result := 0;
Exit;
end;
iLen := Length(strData);
if iLen <> 4 then
begin
Result := 0;
Exit;
end;
// bb4 := StrToInt(strData[1]);
// bb3 := StrToInt(strData[2]);
// bb2 := StrToInt(strData[3]);
// bb1 := StrToInt(strData[4]);
// Result := bb4 * 16 * 16 *16 + bb3 * 16 * 16 + bb2 * 16 + bb1;
Result := (HexToInt( Copy(strData,1,2))* 256 + HexToInt(Copy(strData,3,2))) div 100;
end;
procedure TReceMsg.GSMAI;
begin
end;
procedure TReceMsg.HandingMsg; //处理接受到的数据
begin
if Setting.Showing then
begin
if Setting.iSet = 1 then
begin
AP;
Setting.iSet := 0;
end;
if Setting.iRC = 1 then
begin
RC;
Setting.iRC := 0;
end;
end;
if frmData.Showing then
begin
ShowMessage('TReceMsg.HandingMsg数据窗口已经打开!');
if Data.frmData.iCOOP = 1 then
begin
frmData.edtACState.Text := ACTemp.strRunState[1];
frmData.edtJSQState.Text := ACTemp.strRunState[2];
frmData.edtDJRState.Text := ACTemp.strRunState[3];
frmData.edtFansState.Text := ACTemp.strRunState[4];
frmData.edtCompState.Text := ACTemp.strRunState[5];
frmData.edtFilterState.Text := ACTemp.strRunState[6];
frmData.edtAttentionstate.Text := ACTemp.strRunState[7];
frmData.edtWaringState.Text := ACTemp.strRunState[8];
frmData.edtAbalState.Text := ACTemp.strRunState[9];
frmData.edtRunState.Text := ACTemp.strRunState[10];
Data.frmData.iCOOP := 0;
end;
if Data.frmData.iGAP = 1 then
begin
frmData.edtOpenTemp.Text := IntToStr(ACTemp.iOpenTemp);
frmData.edtCloseTemp.Text := IntToStr(ACTemp.iCloseTemp);
frmData.edtReturnTempCeiling.Text := IntToStr(ACTemp.iReturnTempCeiling);
frmData.edtReturnTempLimit.Text := IntToStr(ACTemp.iReturnTempLimit);
frmData.edtReturnHumidityCelling.Text := IntToStr(ACTemp.iReturnHumidityCeiling);
frmData.edtReturnHumidityLimit.Text := IntToStr(ACTemp.iReturnHumidityLimit);
Data.frmData.iGAP := 0;
end;
if Data.frmData.iWaring = 1 then
begin
frmData.edtRNTempWaringState.Text := ACTemp.strWaringState[7];
Data.frmData.iWaring := 0;
end;
if Data.frmData.iCORP = 1 then
begin
ShowMessage('已经进了TReceMsg.HandingMsg的Data.frmData.iCORP = 1');
frmData.edtRnTemp.Text := IntToStr(ACTemp.iDataTemp[8]);
Data.frmData.iCORP := 0;
end;
end;
end;
procedure TReceMsg.RC; //远程控制运转、停止操作 RC
begin
if strReceBuffer = '' then
Exit;
if not GetRTNError(Copy(strReceBuffer,8,2))then
begin
if Setting.Showing then
Setting.statSetting.SimpleText := '远程控制:'+strError;
end //到这里
else
begin
if Setting.Showing then
Setting.statSetting.SimpleText := '远程控制命令发送成功!';
end;
end;
function TReceMsg.GetValueWaringState(strData:string):string;
var
strTemp :string;
begin
if strData = '00' then
strTemp := '正常'
else
if strData = '01' then
strTemp := '下限以下'
else
if strData = '02' then
strTemp := '上限以上'
else
if strData = 'F0' then
strTemp := '故障'
else
if strData = ' ' then
strTemp := '无数据';
Result := strTemp;
end;
function TReceMsg.GetValueRunState(strData:string;Flag:string):string;
var
strTemp:string;
begin
if strData = '00' then
begin
if Flag = '1' then
strTemp := '停止'
else
if Flag = '2' then
strTemp := 'OFF'
else
if Flag = '3' then
strTemp :='送风';
end
else
if strData = '01' then
begin
if Flag = '1' then
strTemp := '运转'
else
if Flag = '2' then
strTemp := 'ON'
else
if Flag = '3' then
strTemp :='制热';
end
else
if strData = '02' then
begin
strTemp :='制冷';
end
else
if strData = '03' then
begin
strTemp :='自动';
end
else
if strData = '04' then
begin
strTemp :='换气';
end
else
if strData = '07' then
begin
strTemp :='除湿';
end ;
Result := strTemp;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -