📄 econv230p.pas
字号:
testrptmemo.Lines.Add(s);
testrptmemo.Lines.Add(' ');
s := '序号';
AppendBlank(s,8);
s := s + '名称';
AppendBlank(s,40);
s := s + '结果';
testrptmemo.Lines.Add(s);
for i:=1 to coilstategrid.RowCount-1 do
begin
s := coilstategrid.Cells[0,i];
AppendBlank(s,8);
s := s + coilstategrid.Cells[1,i];
AppendBlank(s,40);
s := s + 'OK';
testrptmemo.Lines.Add(s);
end;
end;
if econfile.inputstatetotal>0 then
begin
testrptmemo.Lines.Add(' ');
s := '开关量输入测试结果';
testrptmemo.Lines.Add(s);
testrptmemo.Lines.Add(' ');
s := '序号';
AppendBlank(s,8);
s := s + '名称';
AppendBlank(s,40);
s := s + '结果';
testrptmemo.Lines.Add(s);
for i:=1 to inputstategrid.RowCount-1 do
begin
s := inputstategrid.Cells[0,i];
AppendBlank(s,8);
s := s + inputstategrid.Cells[1,i];
AppendBlank(s,40);
s := s + 'OK';
testrptmemo.Lines.Add(s);
end;
end;
if econfile.inputregistertotal>0 then
begin
testrptmemo.Lines.Add(' ');
s := '输入寄存器值';
testrptmemo.Lines.Add(s);
testrptmemo.Lines.Add(' ');
s := '地址';
AppendBlank(s,8);
s := s + '名称';
AppendBlank(s,40);
s := s + '值';
testrptmemo.Lines.Add(s);
for i:=1 to inputregistergrid.RowCount-1 do
begin
s := inputregistergrid.Cells[0,i];
AppendBlank(s,8);
s := s + inputregistergrid.Cells[1,i];
AppendBlank(s,40);
s := s + inputregistergrid.Cells[2,i];
testrptmemo.Lines.Add(s);
end;
end;
if econfile.holdregistertotal>0 then
begin
testrptmemo.Lines.Add(' ');
s := '保存寄存器值';
testrptmemo.Lines.Add(s);
testrptmemo.Lines.Add(' ');
s := '地址';
AppendBlank(s,8);
s := s + '名称';
AppendBlank(s,40);
s := s + '值';
testrptmemo.Lines.Add(s);
for i:=1 to holdregistergrid.RowCount-1 do
begin
s := holdregistergrid.Cells[0,i];
AppendBlank(s,8);
s := s + holdregistergrid.Cells[1,i];
AppendBlank(s,40);
s := s + holdregistergrid.Cells[2,i];
testrptmemo.Lines.Add(s);
end;
end;
testrptmemo.Lines.Add('');
testrptmemo.Lines.Add(' ============================================');
testrptmemo.Lines.Add('');
testrptmemo.Lines.Add('');
end;
//-----------------------清除测试报告------------------------
procedure TMainForm.ClrRptBtnClick(Sender: TObject);
begin
testrptmemo.Lines.Clear;
end;
//-----------------------画相量图----------------------------
procedure drawxiangliang;
const
X0 = 350; //原点座标
Y0 = 200;
var
UA_R, UA_I, UA_MODEL: integer;
UB_R, UB_I: integer;
UC_R, UC_I: integer;
IA_R, IA_I: integer;
IB_R, IB_I: integer;
IC_R, IC_I: integer;
TEM_R, TEM_I: integer;
begin
mainform.image1.Canvas.brush.Color := CLBLACK;
// mainform.image1.Canvas.brush.Color := clInfoBk;
mainform.image1.Canvas.FillRect(mainform.image1.Canvas.ClipRect);
UA_R := strtointdef(econfile.xiangliangarray[1].address2,0) div 60;
UA_R := UA_R * strtointdef(econfile.xiangliangarray[1].address3,1);
UA_I := strtointdef(econfile.xiangliangarray[2].address2,0) div 60;
UA_I := UA_I * strtointdef(econfile.xiangliangarray[1].address3,1);
UB_R := strtointdef(econfile.xiangliangarray[3].address2,0) div 60;
UB_R := UB_R * strtointdef(econfile.xiangliangarray[3].address3,1);
UB_I := strtointdef(econfile.xiangliangarray[4].address2,0) div 60;
UB_I := UB_I * strtointdef(econfile.xiangliangarray[3].address3,1);
UC_R := strtointdef(econfile.xiangliangarray[5].address2,0) div 60;
UC_R := UC_R * strtointdef(econfile.xiangliangarray[5].address3,1);
UC_I := strtointdef(econfile.xiangliangarray[6].address2,0) div 60;
UC_I := UC_I * strtointdef(econfile.xiangliangarray[5].address3,1);
IA_R := strtointdef(econfile.xiangliangarray[7].address2,0) div 60;
IA_R := IA_R * strtointdef(econfile.xiangliangarray[7].address3,1);
IA_I := strtointdef(econfile.xiangliangarray[8].address2,0) div 60;
IA_I := IA_I * strtointdef(econfile.xiangliangarray[7].address3,1);
IB_R := strtointdef(econfile.xiangliangarray[9].address2,0) div 60;
IB_R := IB_R*strtointdef(econfile.xiangliangarray[9].address3,1);
IB_I := strtointdef(econfile.xiangliangarray[10].address2,0) div 60;
IB_I := IB_I * strtointdef(econfile.xiangliangarray[9].address3,1);
IC_R := strtointdef(econfile.xiangliangarray[11].address2,0) div 60;
IC_R := IC_R * strtointdef(econfile.xiangliangarray[11].address3,1);
IC_I := strtointdef(econfile.xiangliangarray[12].address2,0)div 60;
IC_I := IC_I * strtointdef(econfile.xiangliangarray[11].address3,1);
UA_MODEL := TRUNC(SQRT((UA_R * UA_R) + (UA_I * UA_I)));
if UA_MODEL=0 then exit;
// UB_MODEL:=TRUNC(SQRT(UB_R*UB_R+UB_I*UB_I));
// UC_MODEL:=TRUNC(SQRT(UC_R*UC_R+UC_I*UC_I));
// IA_MODEL:=TRUNC(SQRT(IA_R*IA_R+IA_I*IA_I));
// IB_MODEL:=TRUNC(SQRT(IB_R*IB_R+IB_I*IB_I));
// IC_MODEL:=TRUNC(SQRT(IC_R*IC_R+IC_I*IC_I));
mainform.image1.Canvas.pen.Width := 6;
mainform.image1.Canvas.pen.Color := $1BDDD6;
mainform.image1.Canvas.MoveTo(X0,Y0);
mainform.image1.Canvas.lineto(X0,Y0-(UA_MODEL));
mainform.image1.Canvas.Font.Color := mainform.image1.Canvas.pen.Color;
mainform.image1.Canvas.TextOut((X0 + 5),(Y0 - (UA_MODEL) - 5), 'UA');
mainform.image1.Canvas.pen.Color := clLime;
mainform.image1.Canvas.MoveTo(X0,Y0);
tem_R := TRUNC(((UB_R * UA_I) - (UA_R * UB_I))/UA_MODEL);
tem_I := TRUNC(((UB_R * UA_R) + (UA_I * UB_I))/UA_MODEL);
mainform.image1.Canvas.lineto(X0 + tem_R, Y0 - tem_I);
mainform.image1.Canvas.Font.Color := mainform.image1.Canvas.pen.Color;
mainform.image1.Canvas.TextOut((X0 + tem_R + 5),(Y0 - tem_I - 5), 'UB');
mainform.image1.Canvas.pen.Color := clRED;
mainform.image1.Canvas.MoveTo(X0,Y0);
tem_R := TRUNC((UC_R*UA_I - UA_R*UC_I)/UA_MODEL);
tem_I := TRUNC((UC_R*UA_R + UA_I*UC_I)/UA_MODEL);
mainform.image1.Canvas.lineto(X0+tem_R,Y0-tem_I);
mainform.image1.Canvas.Font.Color := mainform.image1.Canvas.pen.Color;
mainform.image1.Canvas.TextOut((X0+tem_R-5),(Y0-tem_I+5),'UC');
mainform.image1.Canvas.pen.Color := 14080000;
mainform.image1.Canvas.MoveTo(X0,Y0);
tem_R := TRUNC((IA_R*UA_I - UA_R*IA_I)/UA_MODEL);
tem_I := TRUNC((IA_R*UA_R + UA_I*IA_I)/UA_MODEL);
mainform.image1.Canvas.lineto(X0+tem_R,Y0-tem_I);
mainform.image1.Canvas.Font.Color := mainform.image1.Canvas.pen.Color;
mainform.image1.Canvas.TextOut((X0+tem_R-15),(Y0-tem_I-15),'IA');
mainform.image1.Canvas.pen.Color := clGREEN;
mainform.image1.Canvas.MoveTo(X0,Y0);
tem_R := TRUNC((IB_R*UA_I - UA_R*IB_I)/UA_MODEL);
tem_I := TRUNC((IB_R*UA_R + UA_I*IB_I)/UA_MODEL);
mainform.image1.Canvas.lineto(X0+tem_R,Y0-tem_I);
mainform.image1.Canvas.Font.Color := mainform.image1.Canvas.pen.Color;
mainform.image1.Canvas.TextOut((X0+tem_R+5),(Y0-tem_I-5),'IB');
mainform.image1.Canvas.pen.Color := clFuchsia;
mainform.image1.Canvas.MoveTo(X0,Y0);
tem_R := TRUNC((IC_R*UA_I - UA_R*IC_I)/UA_MODEL);
tem_I := TRUNC((IC_R*UA_R + UA_I*IC_I)/UA_MODEL);
mainform.image1.Canvas.lineto(X0+tem_R,Y0-tem_I);
mainform.image1.Canvas.Font.Color := mainform.image1.Canvas.pen.Color;
mainform.image1.Canvas.TextOut((X0+tem_R-5),(Y0-tem_I+5),'IC');
end;
//----------------------启动通讯-----------------------------
procedure start_comm;
begin
with mainform do
begin
m_comcontrol.Caption := '结束通讯';
statusbar1.Panels[0].Text := '正在通讯';
vacomm1.open;
sendtimer.Enabled := true;
poll_count := 0;
revtimer.Enabled := false;
timerout1.Interval := econfile.comm.timeout;
readholdtimer.Enabled := true;
readfifotimer.Enabled := true;
readholdregister(econfile);
readfifo(econfile);
settime(econfile);
sendflag := true;
end; //end with
end;
//----------------------结束通讯-----------------------------
procedure stop_comm;
begin
with mainform do
begin
m_comcontrol.Caption := '开始通讯';
statusbar1.Panels[0].Text := '通讯已停止';
vacomm1.close;
sendflag := false;
sendtimer.Enabled := false;
timerout1.Enabled := false;
revtimer.Enabled := false;
readholdtimer.Enabled := false;
readfifotimer.Enabled := false;
end;//end with
end;
procedure TMainForm.XieBoGridSelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
case acol of
0: begin
coilstategrid.Options :=
[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine];
CanSelect := false;
end
else
begin
coilstategrid.Options:=
[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine];
CanSelect := true;
smindex := arow;
tempform.showmodal;
tempform.UpDown1.Position := strtointdef(econfile.xieboarray[smindex].address2, 0);
tempform.tempedit.text := econfile.xieboarray[smindex].address2;
tempform.Caption := '更改基数';
end;
end;
end;
procedure TMainForm.N1Click(Sender: TObject);
begin
if (comm_status) then exit;
tempform.Caption := '两帧间隔时间';
tempform.show;
tempform.tempedit.text := inttostr(econfile.comm.timepoll);
end;
procedure TMainForm.TimerOut1Timer(Sender: TObject);
begin
sendtimer.Enabled := TRUE;
//eventmemo.Lines.Add('time out');
if eventmemo.lines.count>10 then
begin
eventmemo.lines.clear;
eventmemo.Lines.Add('time out');
end;
end;
procedure TMainForm.N2Click(Sender: TObject);
begin
if (comm_status) then exit;
tempform.Caption := '超时时间';
tempform.show;
tempform.tempedit.text := inttostr(timerout1.interval);
end;
procedure TMainForm.VaComm1RxChar(Sender: TObject; Count: Integer);
var
a, b:integer;
j:char;
FirstString:String; //':'数据包头标识
SecondString:String;//两字节板地址
TemStr:String;
begin
timeoutcount := 0;
timerout1.Enabled := False;
if (Uppercase(econfile.comm.mode)='RTU') then
begin
b := vacomm1.ReadBufUsed;
for a := read_index to read_index+b-1 do
begin
if vacomm1.readchar(j) then
begin
revbuff[read_index] := integer(j);
revmemo.Lines.Text := revmemo.Lines.Text+inttohex(revbuff[read_index], 2);
read_index := read_index+1;
end
else exit;
end;
end;//if rtu mode
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -