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

📄 recemsg.~pas

📁 使用Delphi 6.0开发用于控制空调的程序
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
//   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 + -