📄 installed_simu.~pas
字号:
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 + -