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

📄 installed_simu.~pas

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

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DBCtrls, DB, ADODB, Grids, DBGrids, ComCtrls;

type
  TSetting = class(TForm)
    lbl1: TLabel;
    lbl5: TLabel;
    lbl7: TLabel;
    lbl2: TLabel;
    lbl3: TLabel;
    lbl4: TLabel;
    lbl6: TLabel;
    edtOpenTemp: TEdit;
    edtReturnTempCeiling: TEdit;
    edtCloseTemp: TEdit;
    edtReturnTempLimit: TEdit;
    edtReturnHumidityCelling: TEdit;
    edtReturnHumidityLimit: TEdit;
    lbl8: TLabel;
    lbl9: TLabel;
    lbl10: TLabel;
    lbl11: TLabel;
    lbl12: TLabel;
    lbl13: TLabel;
    ADOqryAQAC: TADOQuery;
    btnSetting: TButton;
    grpCC: TGroupBox;
    btnRun: TButton;
    btnStop: TButton;
    btn1: TButton;
    dsAC: TDataSource;
    lbl14: TLabel;
    dblkcbbACAddress: TDBLookupComboBox;
    dblkcbbAddress: TDBLookupComboBox;
    ADOqryID: TADOQuery;
    dsID: TDataSource;
    statSetting: TStatusBar;
    cbbid: TComboBox;
    cbbadd: TComboBox;
    procedure btnSettingClick(Sender: TObject);
    procedure btnACStopClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure btn1Click(Sender: TObject);
    procedure btnRunClick(Sender: TObject);
    procedure dblkcbbACAddressExit(Sender: TObject);
    procedure dblkcbbACAddressClick(Sender: TObject);
    procedure dblkcbbAddressClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure dblkcbbACAddressMouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
     iSet,iRC:Integer;
     btmrs:Boolean;
  end;

var
  Setting: TSetting;

implementation

{$R *.dfm}

uses
  ControlClass,Main;

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 Return4Str(s:string): string;
begin
  if Length(s) = 0 then
     Result := '0000'
  else if Length(s) = 1 then
     Result := '000'+ Trim(s)
  else if Length(s) = 2 then
     Result := '00'+ Trim(s)
  else if Length(s) = 3 then
     Result := '0'+ Trim(s)
  else
    Result := Trim(s);
end;  

procedure TSetting.btnSettingClick(Sender: TObject);
var
  strLines:string;
  command:TControlCommand;
  add:string;
begin
  if (dblkcbbACAddress.Visible = True) and (dblkcbbAddress.Visible = True) then
  if (dblkcbbACAddress.Text = '') or (dblkcbbAddress.Text = '') then
  begin
    ShowMessage('请选择接口板地址和空调地址!');
    Exit;
  end;
  if (StrToInt(edtOpenTemp.Text) > 127) or (StrToInt(edtOpenTemp.Text) < 0) or
   (StrToInt(edtReturnTempCeiling.Text) > 127) or (StrToInt(edtReturnTempCeiling.Text) < 0) or
   (StrToInt(edtReturnTempLimit.Text) > 127) or (StrToInt(edtReturnTempLimit.Text) < 0) or
   (StrToInt(edtCloseTemp.Text) > 127) or (StrToInt(edtCloseTemp.Text) < 0) or
   (StrToInt(edtReturnHumidityCelling.Text) > 127) or (StrToInt(edtReturnHumidityCelling.Text) < 0) or
   (StrToInt(edtReturnHumidityLimit.Text) > 127) or (StrToInt(edtReturnHumidityLimit.Text) < 0)  then
  begin                                          
    ShowMessage('设定的温度值的范围必须是:0--127 ,请重新输入');
    Exit;
  end;
  if dblkcbbAddress.Visible = True then
    add := Trim(dblkcbbAddress.Text)
  else
  if cbbadd.Visible = True then
    add := Trim(cbbadd.Text);

  if Length(add) = 1 then
  begin
    add := '0'+add;
  end;
  command := TControlCommand.Create(24);
  try
     command.AccessParametes(add,'80',Return4Str(edtOpenTemp.Text));
     try
          if not main.frmain.Spcomm1.PortOpen  then
           begin
            try
                 main.frmain.Spcomm1.StartComm;
            except
                ShowMessage('打开串口失败,'+ '当前串口名:'+Main.frmain.Spcomm1.CommName+',波特率为:'+IntToStr(Main.frmain.Spcomm1.BaudRate));
            end;
          end;
          strLines :=command.GetCommandLines;
          main.frmain.Spcomm1.WriteCommData( PChar(strLines),Length(strLines));
     except
          ShowMessage('命令发送失败!');
     end;
     if command.GetError = '正常' then
     begin
       strLines :=command.GetCommandLines;
       //edt1.Text := strLines;
       statSetting.SimpleText := strLines;
     end
     else
     begin
       statSetting.SimpleText := command.GetError;
     end;
  finally
    command.Free;
  end;

  try
     command := TControlCommand.Create(24);
     command.AccessParametes(add,'81',Return4Str(edtCloseTemp.Text));
     try
          if not main.frmain.Spcomm1.PortOpen  then
           begin
            try
                 main.frmain.Spcomm1.StartComm;
            except
                ShowMessage('打开串口失败,'+ '当前串口名:'+Main.frmain.Spcomm1.CommName+',波特率为:'+IntToStr(Main.frmain.Spcomm1.BaudRate));
            end;
          end;
          strLines :=command.GetCommandLines;
          main.frmain.Spcomm1.WriteCommData( PChar(strLines),Length(strLines));
     except
          ShowMessage('命令发送失败!');
     end;
  finally
    command.Free;
  end;

  try
     command := TControlCommand.Create(24);
     command.AccessParametes(add,'82',Return4Str(edtReturnTempCeiling.Text));
     try
          if not main.frmain.Spcomm1.PortOpen  then
           begin
            try
                 main.frmain.Spcomm1.StartComm;
            except
                ShowMessage('打开串口失败,'+ '当前串口名:'+Main.frmain.Spcomm1.CommName+',波特率为:'+IntToStr(Main.frmain.Spcomm1.BaudRate));
            end;
          end;
          strLines :=command.GetCommandLines;
          main.frmain.Spcomm1.WriteCommData( PChar(strLines),Length(strLines));
     except
          ShowMessage('命令发送失败!');
     end;
  finally
    command.Free;
  end;

  try
     command := TControlCommand.Create(24);
     command.AccessParametes(add,'83',Return4Str(edtReturnTempLimit.Text));
     try
          if not main.frmain.Spcomm1.PortOpen  then
           begin
            try
                 main.frmain.Spcomm1.StartComm;
            except
                ShowMessage('打开串口失败,'+ '当前串口名:'+Main.frmain.Spcomm1.CommName+',波特率为:'+IntToStr(Main.frmain.Spcomm1.BaudRate));
            end;
          end;
          strLines :=command.GetCommandLines;
          main.frmain.Spcomm1.WriteCommData( PChar(strLines),Length(strLines));
     except
          ShowMessage('命令发送失败!');
     end;
  finally
    command.Free;
  end;

  try
     command := TControlCommand.Create(24);
     command.AccessParametes(add,'84',Return4Str(edtReturnHumidityCelling.Text));
     try
          if not main.frmain.Spcomm1.PortOpen  then
           begin
            try
                 main.frmain.Spcomm1.StartComm;
            except
                ShowMessage('打开串口失败,'+ '当前串口名:'+Main.frmain.Spcomm1.CommName+',波特率为:'+IntToStr(Main.frmain.Spcomm1.BaudRate));
            end;
          end;
          strLines :=command.GetCommandLines;
          main.frmain.Spcomm1.WriteCommData( PChar(strLines),Length(strLines));
     except
          ShowMessage('命令发送失败!');
     end;
  finally
    command.Free;
  end;

  try
     command := TControlCommand.Create(24);
     command.AccessParametes(add,'85',Return4Str(edtReturnHumidityLimit.Text));
     try
          if not main.frmain.Spcomm1.PortOpen  then
           begin
            try
                 main.frmain.Spcomm1.StartComm;
            except
                ShowMessage('打开串口失败,'+ '当前串口名:'+Main.frmain.Spcomm1.CommName+',波特率为:'+IntToStr(Main.frmain.Spcomm1.BaudRate));
            end;
          end;  
          strLines :=command.GetCommandLines;
          main.frmain.Spcomm1.WriteCommData( PChar(strLines),Length(strLines));
          iSet := 1;
     except
          ShowMessage('命令发送失败!');
     end;
  finally
    command.Free;
  end;


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;
   Result := ST;
End;
function StrToBin(ss:string):string;
begin
  Result := DecTobin(HexToInt(ss));
end;  


procedure TSetting.btnACStopClick(Sender: TObject);
var
  command:TControlCommand;
begin
   command := TControlCommand.Create(18);
   command.CollectionRepresentative('01');
   ShowMessage(command.GetCommandLines);    
end;

procedure TSetting.Button1Click(Sender: TObject);
var
  i:Integer;
  sum,WLen:Word;
  strSum,str1,str2,str3,str4:string;
  b4,b3,b2,b1:Integer;
  bBuffer:array [0..12] of Byte;
begin
  b4 := 0;
  b3 := 0;
  b2 := 0;
  b1 := 0;
   sum := 0;

⌨️ 快捷键说明

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