1231 lines
29 KiB
ObjectPascal
1231 lines
29 KiB
ObjectPascal
unit UNiiefa;
|
||
|
||
interface
|
||
|
||
uses
|
||
|
||
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
||
StdCtrls, Buttons, RXSpin, ExtCtrls, rxPlacemnt, OoMisc, AdStatLt, Mask, OleCtrls,IniFiles,Registry,
|
||
chartfx3, TeEngine, Series, TeeProcs, Chart, Menus, ToolsRS, ToolsCan,
|
||
AdPort, RxHook, RXCtrls, ToolWin, ComCtrls,
|
||
RXSwitch, rxToolEdit, Grids, ValEdit, DBGrids;
|
||
|
||
type
|
||
|
||
TGridCracker = class(TStringGrid);
|
||
|
||
|
||
TMessag = record
|
||
Mask: Byte;
|
||
Addr: Word;
|
||
Leng: integer;
|
||
Data: array[0..3] of SmallInt;
|
||
Surs: integer;
|
||
end;
|
||
|
||
TUnit = record
|
||
Data: integer;
|
||
Age: integer;
|
||
Surs: integer;
|
||
end;
|
||
|
||
TModbusForm = class(TForm)
|
||
Memo1: TMemo;
|
||
FormStorage2: TFormStorage;
|
||
myTimer: TTimer;
|
||
GroupBox: TGroupBox;
|
||
GroupBox2: TGroupBox;
|
||
DiggAddrEdit: TRxSpinEdit;
|
||
SetButton: TButton;
|
||
GroupBox1: TGroupBox;
|
||
DecLab: TRadioButton;
|
||
HexLab: TRadioButton;
|
||
AdreLaba: TLabel;
|
||
dataLaba: TLabel;
|
||
GroupBox3: TGroupBox;
|
||
AnaStartLaba: TLabel;
|
||
AnaStart: TRxSpinEdit;
|
||
DigiStartLaba: TLabel;
|
||
DigiStart: TRxSpinEdit;
|
||
AnaLenLaba: TLabel;
|
||
AnaLen: TRxSpinEdit;
|
||
DigiLenLaba: TLabel;
|
||
DigiLen: TRxSpinEdit;
|
||
FadeBox: TCheckBox;
|
||
Label9: TLabel;
|
||
FadeSpin: TRxSpinEdit;
|
||
AnaStart24: TButton;
|
||
AnaStart64: TButton;
|
||
AnaLen64: TButton;
|
||
DigiStart0: TButton;
|
||
DigiLen32: TButton;
|
||
DigiLen24: TButton;
|
||
ColorBox: TCheckBox;
|
||
DataGrid: TStringGrid;
|
||
DataLenEdit: TRxSpinEdit;
|
||
Label1: TLabel;
|
||
BitGroup: TPanel;
|
||
Panel1: TPanel;
|
||
RadioUp: TRadioButton;
|
||
RadioDn: TRadioButton;
|
||
AutoBox: TCheckBox;
|
||
AutoTimeEdit: TRxSpinEdit;
|
||
|
||
|
||
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
||
procedure Memo1DblClick(Sender: TObject);
|
||
procedure Memo1Change(Sender: TObject);
|
||
// procedure btnAnalogClick(Sender: TObject);
|
||
procedure ColorBoxClick(Sender: TObject);
|
||
procedure FadeBoxClick(Sender: TObject);
|
||
procedure FormCreate(Sender: TObject);
|
||
procedure myTimerTimer(Sender: TObject);
|
||
procedure FormShow(Sender: TObject);
|
||
procedure ReadAnalog;
|
||
procedure AnaLenChange(Sender: TObject);
|
||
procedure DigiLenChange(Sender: TObject);
|
||
procedure FadeSpinChange(Sender: TObject);
|
||
procedure SetButtonClick(Sender: TObject);
|
||
procedure SetButtonDo(Sender: TObject);
|
||
procedure CommButtClick(Sender: TObject);
|
||
procedure CommButtDo(Sender: TObject);
|
||
procedure DigiClick(Sender: TObject);
|
||
procedure AnaStartChange(Sender: TObject);
|
||
procedure AnaValue(Sender: TObject);
|
||
procedure DigValue(Sender: TObject);
|
||
procedure DigiStartChange(Sender: TObject);
|
||
procedure DigiLabWrite;
|
||
procedure AnaLabWrite;
|
||
procedure DecLabClick(Sender: TObject);
|
||
procedure HexLabClick(Sender: TObject);
|
||
procedure AnaStart24Click(Sender: TObject);
|
||
procedure AnaStart64Click(Sender: TObject);
|
||
procedure AnaLen64Click(Sender: TObject);
|
||
procedure DigiStart0Click(Sender: TObject);
|
||
procedure DigiLen24Click(Sender: TObject);
|
||
procedure DigiLen32Click(Sender: TObject);
|
||
|
||
procedure BitButClick(Sender: TObject);
|
||
|
||
procedure HexaDec;
|
||
|
||
procedure AnaRewrite;
|
||
procedure DigiRewrite;
|
||
procedure DigiColWrite(Byte: word; Column: integer; Age: integer; Surs: integer);
|
||
|
||
procedure DigiBoxWrite(Surs: integer);
|
||
|
||
procedure DoNothing(Sender: TObject);
|
||
procedure HagaNada(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
|
||
|
||
procedure RenameButton(Sender: TObject; MousePos: TPoint;
|
||
var Handled: Boolean);
|
||
|
||
procedure Renamed(Sender: TObject);
|
||
procedure Renamido(Sender: TObject; var Key: Char);
|
||
procedure SaveProjectComms(ProjID: string);
|
||
|
||
procedure DataLenEditChange(Sender: TObject);
|
||
procedure DataGridKeyPress(Sender: TObject; var Key: Char);
|
||
procedure DataGridSetEditText(Sender: TObject; ACol, ARow: Integer;
|
||
const Value: String);
|
||
procedure DataGridDrawCell(Sender: TObject; ACol, ARow: Integer;
|
||
Rect: TRect; State: TGridDrawState);
|
||
procedure DataGridSelectCell(Sender: TObject; ACol, ARow: Integer;
|
||
var CanSelect: Boolean);
|
||
procedure DataGridGetEditText(Sender: TObject; ACol, ARow: Integer;
|
||
var Value: String);
|
||
procedure AutoTimeEditChange(Sender: TObject);
|
||
|
||
private
|
||
{ Private declarations }
|
||
|
||
Unites : Array[0..127] of TUnit;
|
||
Anapan : Array[0..63] of TPanel;
|
||
Digipan : Array[0..511] of Tpanel;
|
||
Digibox : Array[0..15] of TCheckBox;
|
||
Digibut : Array[0..16] of TButton;
|
||
|
||
Bitbut : Array[0..3] of TRadioButton;
|
||
|
||
DigiLab: Array[0..31] of TLabel;
|
||
AnaLab: Array[0..7] of TLabel;
|
||
|
||
kownt: integer;
|
||
waiste: integer;
|
||
fade: cardinal;
|
||
auto: cardinal;
|
||
reColor: integer;
|
||
doReColor: boolean;
|
||
|
||
AnalogStart : Integer;
|
||
AnalogLength : Integer;
|
||
DigitalStart : Integer;
|
||
DigitalLength : Integer;
|
||
|
||
rData2, rData3 : double;
|
||
FIniFile : TRegIniFile;
|
||
FRegFile : TIniFile;
|
||
Temper1,Temper2 : Array [0..12] of Real;
|
||
|
||
{ InsideFUst : boolean = False;
|
||
InsideSet : boolean = False;
|
||
InsideComm : boolean = False;
|
||
}
|
||
LastSender : TObject;
|
||
|
||
KT1,KT2,KT3 : Array [0..12] of Real;
|
||
|
||
UNew : SmallInt;
|
||
MomentNew : SmallInt;
|
||
|
||
UNewZ : Integer;
|
||
|
||
NameEdit: TEdit;
|
||
|
||
ArrNiiefaAnalog : Array [0..100] of Word;
|
||
ArrNiiefaDigital : Array [0..100] of Word;
|
||
|
||
AutoMoment: cardinal;
|
||
RecolorMoment: cardinal;
|
||
|
||
Wordt: word;
|
||
|
||
// ProjectQua : integer = 0;
|
||
// ProjectNum : integer = 0;
|
||
|
||
clBlueGradient : array[0..20,0..1] of TColor;
|
||
clRedGradient : array[0..20] of TColor;
|
||
clGreenGradient : array[0..20,0..1] of TColor;
|
||
|
||
EmptyCell:TGridRect;
|
||
|
||
public
|
||
|
||
Numer: integer;
|
||
RSadr: cardinal;
|
||
RXadr: longword;
|
||
TXadr: longword;
|
||
Protokol: integer;
|
||
|
||
procedure ReceiveCanData(Mess: TMessag; dev:integer);
|
||
|
||
{ Public declarations }
|
||
end;
|
||
|
||
var
|
||
|
||
ModbusForm : TModbusForm;
|
||
|
||
|
||
const
|
||
|
||
clGrad : integer = 20; // correct above
|
||
|
||
AnalogMaxLength: Integer = 64;
|
||
DigitalMaxLength: Integer = 512;
|
||
MaxAdr: Integer = 127;
|
||
|
||
clPink : TColor = $AAAAFF;
|
||
|
||
implementation
|
||
|
||
uses CAN_Terminal;
|
||
|
||
{$R *.DFM}
|
||
|
||
procedure TModbusForm.FormClose(Sender: TObject; var Action: TCloseAction);
|
||
|
||
begin
|
||
// FlagApplication:=True;
|
||
myTimer.Enabled:=False;
|
||
|
||
// CANTerminal.Zakaz.UKSS[Numer].Go.OnClick := CANTerminal.ShoWinClick;
|
||
|
||
// (Sender as Tform).Destroy;
|
||
// Oprosc.Checked:=False;
|
||
end;
|
||
|
||
procedure TModbusForm.Memo1DblClick(Sender: TObject);
|
||
begin
|
||
Memo1.Clear;
|
||
end;
|
||
|
||
procedure TModbusForm.Memo1Change(Sender: TObject);
|
||
var
|
||
i : Integer;
|
||
begin
|
||
i:=Memo1.Lines.Count;
|
||
if i>100 then Memo1.Clear;
|
||
end;
|
||
{
|
||
procedure TModbusForm.btnAnalogClick(Sender: TObject);
|
||
|
||
begin
|
||
|
||
if InsideSet then SetButtonDo(Sender);
|
||
if InsideComm then CommButtDo(LastSender);
|
||
|
||
if not InsideFUst then
|
||
begin
|
||
InsideFUst := True;
|
||
try
|
||
ReadAnalog;
|
||
finally
|
||
InsideFUst := False;
|
||
end;
|
||
end;
|
||
end;
|
||
}
|
||
procedure TModbusForm.ColorBoxClick(Sender: TObject);
|
||
begin
|
||
if ColorBox.Checked then
|
||
begin
|
||
if not FadeBox.Checked
|
||
then FadeSpin.Value := 10
|
||
end else FadeSpin.Value := 0;
|
||
end;
|
||
|
||
procedure TModbusForm.FadeBoxClick(Sender: TObject);
|
||
begin
|
||
if FadeBox.Checked then
|
||
begin
|
||
ColorBox.Checked := true;
|
||
if (FadeSpin.Value = 10) or (FadeSpin.Value = 0) then FadeSpin.Value := 5
|
||
end else if ColorBox.Checked then FadeSpin.Value := 10;
|
||
end;
|
||
|
||
procedure TModbusForm.FormCreate(Sender: TObject);
|
||
var i: integer;
|
||
inifile : TIniFile;
|
||
nom,num: string;
|
||
|
||
begin
|
||
myTimer.Enabled:=True;
|
||
FormStorage2.IniFileName:=PathExe+'Terminal.ini';
|
||
|
||
for i:= 0 to clGrad do
|
||
begin
|
||
|
||
clRedGradient[clGrad-i] :=
|
||
$0000FF -
|
||
((6300 div clGrad)*i) div 100+
|
||
((((1920 div clGrad)*i) div 10) shl 8) +
|
||
((((1920 div clGrad)*i) div 10) shl 16);
|
||
|
||
clGreenGradient[clGrad-i,0] :=
|
||
160 + ((255-160) div clGrad) * i +
|
||
$00FF00 +
|
||
((140 + ((255-140) div clGrad)*i) shl 16);
|
||
|
||
clBlueGradient[clGrad-i,0] :=
|
||
180 + ((255-180) div clGrad) * i +
|
||
$00FF00 +
|
||
((160 + ((255-160) div clGrad)*i) shl 16);
|
||
|
||
clGreenGradient[clGrad-i,1] :=
|
||
150 + ((255-150) div clGrad) * i +
|
||
((210 + ((255-210) div clGrad)*i) shl 8) +
|
||
$FF0000;
|
||
|
||
clBlueGradient[clGrad-i,1] :=
|
||
160 + ((255-160) div clGrad) * i +
|
||
((220 + ((255-220) div clGrad)*i) shl 8) +
|
||
$FF0000;
|
||
|
||
end;
|
||
|
||
for i:= 0 to 127 do Unites[i].Age :=0;
|
||
|
||
for i:= 0 to 31 do
|
||
begin
|
||
DigiLab[i]:=TLabel.Create(self);
|
||
DigiLab[i].ParentFont:=false;
|
||
DigiLab[i].Parent:=GroupBox;
|
||
DigiLab[i].Top:=15;
|
||
DigiLab[i].Left:=10+ i*16 + (i div 4)*3;
|
||
DigiLab[i].Font.Color :=clNavy;
|
||
end;
|
||
DigiLabWrite;
|
||
|
||
for i:= 0 to 511 do
|
||
begin
|
||
DigiPan[i]:=TPanel.Create(self);
|
||
DigiPan[i].ParentFont:=false;
|
||
DigiPan[i].Parent:=GroupBox;
|
||
DigiPan[i].Top:=30+(i mod 16)*16 + ((i mod 16)div 8)*3;
|
||
DigiPan[i].Left:=10+(i div 16)*16 + ((i div 16)div 4)*3;
|
||
DigiPan[i].Width:=13;
|
||
DigiPan[i].Height:=13;
|
||
DigiPan[i].OnClick := DigValue;
|
||
DigiPan[i].Tag:=i;
|
||
end;
|
||
|
||
for i:= 0 to 7 do
|
||
begin
|
||
AnaLab[i]:=TLabel.Create(self);
|
||
AnaLab[i].ParentFont:=false;
|
||
AnaLab[i].Parent:=GroupBox;
|
||
AnaLab[i].Top:=290;
|
||
AnaLab[i].Left:=10+i *67;
|
||
AnaLab[i].Font.Color :=clNavy;
|
||
AnaLab[i].Alignment := taCenter;
|
||
AnaLab[i].width := 61;
|
||
end;
|
||
AnaLabWrite;
|
||
|
||
for i:= 0 to 63 do
|
||
begin
|
||
AnaPan[i]:=TPanel.Create(self);
|
||
AnaPan[i].ParentFont:=false;
|
||
AnaPan[i].Parent:=GroupBox;
|
||
AnaPan[i].Top:=305+(i mod 8)*32;
|
||
AnaPan[i].Left:=10+(i div 8)*67 ;
|
||
AnaPan[i].Width:=61;
|
||
AnaPan[i].Height:=25;
|
||
AnaPan[i].Font.Size:=12;
|
||
AnaPan[i].ShowHint:=true;
|
||
AnaPan[i].Tag :=i;
|
||
AnaPan[i].OnClick := AnaValue;
|
||
end;
|
||
|
||
for i:= 0 to 15 do
|
||
begin
|
||
DigiBox[i]:=TCheckBox.Create(self);
|
||
DigiBox[i].Parent:=GroupBox2;
|
||
DigiBox[i].Top:=20+(i mod 4)*20;
|
||
DigiBox[i].Left:=20+(i div 4)*55;
|
||
DigiBox[i].Width:=60;
|
||
DigiBox[i].Height:=20;
|
||
DigiBox[i].ShowHint:=true;
|
||
DigiBox[i].OnClick := DigiClick;
|
||
DigiBox[i].Hint := Project.DigiButNames[i];
|
||
end;
|
||
|
||
for i:= 0 to 15 do
|
||
begin
|
||
DigiBut[i]:=TButton.Create(self);
|
||
DigiBut[i].Parent:=GroupBox1;
|
||
DigiBut[i].Top:={20+}20+(i mod 4)*25;
|
||
DigiBut[i].Left:=20+(i div 4)*55;
|
||
DigiBut[i].Width:=50;
|
||
DigiBut[i].Height:=20;
|
||
DigiBut[i].ShowHint:=true;
|
||
DigiBut[i].OnClick := CommButtClick;
|
||
DigiBut[i].Tag := i;
|
||
DigiBut[i].OnContextPopup := RenameButton;
|
||
DigiBut[i].Caption:= Project.DigiButNames[i];
|
||
|
||
end;
|
||
|
||
DigiBut[16]:=TButton.Create(self);
|
||
DigiBut[16].Parent:=GroupBox1;
|
||
DigiBut[16].Top:={20 + }20 + 4*25;
|
||
DigiBut[16].Left:=20 + 55;
|
||
DigiBut[16].Width:=105;
|
||
DigiBut[16].Height:=20;
|
||
DigiBut[16].ShowHint:=true;
|
||
DigiBut[16].OnClick := CommButtClick;
|
||
DigiBut[16].Tag := 16;
|
||
DigiBut[16].OnContextPopup := RenameButton;
|
||
DigiBut[16].Caption:= Project.DigiButNames[16];
|
||
|
||
DigiLabWrite;
|
||
AnaLabWrite;
|
||
HexaDec;
|
||
|
||
NameEdit:=TEdit.Create(self);
|
||
|
||
for i:= 0 to 3 do
|
||
begin
|
||
DataGrid.Cells[0,i]:='0';
|
||
Bitbut[i]:=TRadioButton.Create(self);
|
||
Bitbut[i].parent:=BitGroup;
|
||
BitBut[i].BringToFront;
|
||
Bitbut[i].Caption:='';
|
||
Bitbut[i].top:= 2+17*i;
|
||
Bitbut[i].left:= 0;
|
||
Bitbut[i].Width := 17;
|
||
Bitbut[i].Height := 17;
|
||
Bitbut[i].TabOrder:=i;
|
||
Bitbut[i].Tag:=i;
|
||
Bitbut[i].OnClick:=BitButClick;
|
||
end;
|
||
|
||
{ inifile := TIniFile.Create(PathExe+'Terminal.ini');
|
||
ProjectQua := strtoint(Inifile.ReadString('Projects','ProjectQua','0'));
|
||
ProjectNum := strtoint(Inifile.ReadString('Projects','ProjectNum','0'));
|
||
inifile.Free;
|
||
}
|
||
FadeSpinChange(Sender);
|
||
end;
|
||
|
||
procedure TModbusForm.myTimerTimer(Sender: TObject);
|
||
var i : integer;
|
||
begin
|
||
|
||
if(GetTickCount - RecolorMoment)>(Fade * 1000 / (clGrad-1))
|
||
then begin doReColor := true; RecolorMoment:= GetTickCount end;
|
||
|
||
if doReColor then
|
||
for i:= 0 to 127 do
|
||
if Unites[i].Age > 0 then
|
||
begin
|
||
|
||
dec(Unites[i].Age);
|
||
if Fade = 0 then Unites[i].Age := 0;
|
||
if Fade = 10 then Unites[i].Age := reColor;
|
||
if Unites[i].Age <0 then Unites[i].Age:=0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
if (i>= AnalogStart)
|
||
and(i< AnalogStart + AnalogLength)
|
||
then Anapan[i-AnalogStart].Color := clBlueGradient[Unites[i].Age][Unites[i].Surs];
|
||
|
||
if (i>= DigitalStart)
|
||
and(i< DigitalStart + DigitalLength)
|
||
then DigiColWrite(Unites[i].Data,i-DigitalStart,Unites[i].Age,Unites[i].Surs);
|
||
|
||
end;
|
||
|
||
doReColor:=false;
|
||
|
||
if(AutoBox.Checked) then
|
||
if(GetTickCount - AutoMoment)>(myTimer.Interval*Auto)
|
||
then begin
|
||
SetButtonDo(Sender);
|
||
AutoMoment:= GetTickCount;
|
||
end;
|
||
|
||
end;
|
||
|
||
|
||
procedure TModbusForm.FormShow(Sender: TObject);
|
||
var
|
||
i: integer;
|
||
|
||
begin
|
||
|
||
if Protokol=3 then DataLenEdit.MaxValue:=4
|
||
else DataLenEdit.MaxValue :=3;
|
||
|
||
myTimer.Enabled:=True;
|
||
|
||
AutoMoment:= GetTickCount;
|
||
RecolorMoment:= GetTickCount;
|
||
|
||
AnalogStart := trunc(AnaStart.Value);
|
||
DigitalStart:= trunc(DigiStart.Value);
|
||
AnalogLength:= trunc(AnaLen.Value);
|
||
DigitalLength:=trunc(DigiLen.Value);
|
||
|
||
for i:=0 to 15 do
|
||
DigiBox[i].Caption:= 'Bit '+inttostr(i);
|
||
|
||
AnaLenChange(Sender);
|
||
DigiLenChange(Sender);
|
||
AnaStartChange(Sender);
|
||
DigiStartChange(Sender);
|
||
FadeSpinChange(Sender);
|
||
AutoTimeEditChange(Sender);
|
||
DataLenEditChange(Sender);
|
||
|
||
BitBut[0].Checked:=true;
|
||
TGridCracker(DataGrid).SetFocus;
|
||
|
||
end;
|
||
|
||
procedure TModbusForm.ReadAnalog;
|
||
Var
|
||
i,Bout : Word;
|
||
what:integer;
|
||
Data : SmallInt;
|
||
|
||
begin
|
||
|
||
Memo1.Lines.Add('Read analog...');
|
||
|
||
BufOut[0] := RSadr;
|
||
BufOut[1]:=3;
|
||
BufOut[2]:=HB(AnalogStart);
|
||
BufOut[3]:=LB(AnalogStart);
|
||
BufOut[4]:=HB(AnalogLength);
|
||
BufOut[5]:=LB(AnalogLength);
|
||
Bout := ContrlolSumCRC16(BufOut,6);
|
||
BufOut[6]:=LB(Bout);
|
||
BufOut[7]:=HB(Bout);
|
||
|
||
what := RunCmdNew(0,8,AnalogLength*2+5);
|
||
|
||
If not((what=0)or(what=2)) then
|
||
begin
|
||
Memo1.Lines.Add('!!! Error !!!');
|
||
exit;
|
||
end;
|
||
|
||
|
||
If what=0 then
|
||
begin
|
||
for i:=0 to AnalogLength-1 do
|
||
begin
|
||
Data:=Round(BufIn[i*2+1+3] + BufIn[i*2+3]*256);
|
||
Unites[AnalogStart+i].Data := Data;
|
||
Unites[AnalogStart+i].Age := reColor;
|
||
end;
|
||
AnaRewrite;
|
||
end;
|
||
end;
|
||
|
||
procedure TModbusForm.AnaLabWrite;
|
||
var i: integer;
|
||
begin
|
||
if(Anastart.Value+AnaLen.Value > 128) then
|
||
AnaLen.Value := 128-Anastart.Value;
|
||
|
||
for i:= 0 to 7 do
|
||
if (i*8+trunc(AnaStart.value))<128 then
|
||
begin
|
||
|
||
if HexLab.Checked then
|
||
AnaLab[i].Caption:='0x'+inttohex(i*8+trunc(AnaStart.value),2);
|
||
if DecLab.Checked then
|
||
AnaLab[i].Caption := inttostr(i*8+trunc(AnaStart.value));
|
||
|
||
end
|
||
else AnaLab[i].Caption:='';
|
||
|
||
end;
|
||
|
||
procedure TModbusForm.AnaStartChange(Sender: TObject);
|
||
var i: integer;
|
||
begin
|
||
if(Anastart.Value+AnaLen.Value > 128) then
|
||
AnaLen.Value := 128-Anastart.Value;
|
||
AnalogStart := trunc(Anastart.Value);
|
||
AnaLabWrite;
|
||
AnaRewrite;
|
||
end;
|
||
|
||
procedure TModbusForm.AnaLenChange(Sender: TObject);
|
||
var i: integer;
|
||
begin
|
||
if(Anastart.Value+AnaLen.Value > 128) then
|
||
Anastart.Value := 128-AnaLen.Value;
|
||
AnalogLength:=trunc(AnaLen.Value);
|
||
AnaRewrite;
|
||
end;
|
||
|
||
procedure TModbusForm.DigiLabWrite;
|
||
var i: integer;
|
||
begin
|
||
for i:= 0 to 31 do
|
||
begin
|
||
if(DecLab.Checked)
|
||
then DigiLab[i].Caption:=inttostr(i+trunc(DigiStart.value));
|
||
if(HexLab.Checked)
|
||
then DigiLab[i].Caption:=inttohex(i+trunc(DigiStart.value),2);
|
||
if(i+trunc(DigiStart.value)>127) then DigiLab[i].Caption:='';
|
||
end;
|
||
end;
|
||
|
||
|
||
procedure TModbusForm.DigiStartChange(Sender: TObject);
|
||
var i: integer;
|
||
begin
|
||
if(Digistart.Value+DigiLen.Value > 128) then
|
||
DigiLen.Value := 128-Digistart.Value;
|
||
DigitalStart := trunc(Digistart.Value);
|
||
DigiLabWrite;
|
||
DigiRewrite;
|
||
end;
|
||
|
||
procedure TModbusForm.DigiLenChange(Sender: TObject);
|
||
var i: integer;
|
||
begin
|
||
if(Digistart.Value+DigiLen.Value > 128) then
|
||
Digistart.Value := 128-DigiLen.Value;
|
||
DigitalLength:=trunc(DigiLen.Value);
|
||
DigiRewrite;
|
||
end;
|
||
|
||
|
||
procedure TModbusForm.SaveProjectComms(ProjID: string);
|
||
var i: integer;
|
||
inifile : TIniFile;
|
||
nom: string;
|
||
begin
|
||
inifile := TIniFile.Create(PathExe+'Terminal.ini');
|
||
|
||
for i:=0 to 16 do
|
||
begin
|
||
nom := 'DigiBut_'+inttostr(i);
|
||
inifile.WriteString(ProjID,nom,DigiBut[i].Caption);
|
||
end;
|
||
|
||
inifile.Free;
|
||
|
||
end;
|
||
|
||
|
||
procedure TModbusForm.FadeSpinChange(Sender: TObject);
|
||
begin
|
||
Fade:=trunc(FadeSpin.Value);
|
||
if Fade = 0 then
|
||
begin
|
||
reColor := 0;
|
||
FadeBox.Checked :=false;
|
||
ColorBox.Checked := false;
|
||
end else
|
||
begin
|
||
reColor := clGrad;
|
||
if Fade = 10 then FadeBox.Checked := false
|
||
else FadeBox.Checked := true;
|
||
end;
|
||
doReColor:=true;
|
||
end;
|
||
|
||
procedure TModbusForm.SetButtonDo(Sender: TObject);
|
||
var Bout,what: word;
|
||
CanStr : String;
|
||
Mess: Tmessag;
|
||
i: integer;
|
||
XXadr: cardinal;
|
||
begin
|
||
|
||
Memo1.Lines.Add('Setting settings...');
|
||
|
||
mess.Leng := trunc(DataLenEdit.Value);
|
||
|
||
mess.Mask := 0;
|
||
|
||
if mess.Leng = 0 then mess.Mask := 0;
|
||
if mess.Leng = 1 then mess.Mask := 4;
|
||
if mess.Leng = 2 then mess.Mask := 6;
|
||
if mess.Leng = 3 then mess.Mask := 7;
|
||
if mess.Leng = 4 then mess.Mask := $FF;
|
||
|
||
mess.Addr := round(DiggAddrEdit.Value);
|
||
|
||
for i:=0 to 3 do mess.Data[i] := strtoint(DataGrid.Cells[0,i]);
|
||
|
||
if RadioUp.Checked
|
||
then begin XXadr:= TXadr; mess.Surs := 0 end
|
||
else begin XXadr:= RXadr; mess.Surs := 1 end;
|
||
|
||
if Protokol=3 then
|
||
begin
|
||
ArrCanMessageSend[0].m_dwID := XXadr + mess.Addr;
|
||
ArrCanMessageSend[0].m_bDLC := mess.Leng*2;
|
||
ArrCanMessageSend[0].m_bData[1] := HB(mess.Data[0]);
|
||
ArrCanMessageSend[0].m_bData[2] := LB(mess.Data[0]);
|
||
ArrCanMessageSend[0].m_bData[3] := HB(mess.Data[1]);
|
||
ArrCanMessageSend[0].m_bData[4] := LB(mess.Data[1]);
|
||
ArrCanMessageSend[0].m_bData[5] := HB(mess.Data[2]);
|
||
ArrCanMessageSend[0].m_bData[6] := LB(mess.Data[2]);
|
||
ArrCanMessageSend[0].m_bData[7] := HB(mess.Data[3]);
|
||
ArrCanMessageSend[0].m_bData[8] := LB(mess.Data[3]);
|
||
end else begin
|
||
ArrCanMessageSend[0].m_dwID := XXadr;
|
||
ArrCanMessageSend[0].m_bDLC := 8;
|
||
ArrCanMessageSend[0].m_bData[5] := mess.Mask shl 5;
|
||
ArrCanMessageSend[0].m_bData[6] := LB(mess.Addr);
|
||
ArrCanMessageSend[0].m_bData[8] := LB(mess.Data[0]);
|
||
ArrCanMessageSend[0].m_bData[7] := HB(mess.Data[0]);
|
||
ArrCanMessageSend[0].m_bData[2] := LB(mess.Data[1]);
|
||
ArrCanMessageSend[0].m_bData[1] := HB(mess.Data[1]);
|
||
ArrCanMessageSend[0].m_bData[4] := LB(mess.Data[2]);
|
||
ArrCanMessageSend[0].m_bData[3] := HB(mess.Data[2]);
|
||
end;
|
||
|
||
|
||
WriteMessageCanID(1, CanStr);
|
||
|
||
|
||
ReceiveCanData(mess,Numer);
|
||
|
||
end;
|
||
|
||
procedure TModbusForm.SetButtonClick(Sender: TObject);
|
||
var Bout,what: word;
|
||
begin
|
||
SetButtonDo(Sender);
|
||
end;
|
||
|
||
|
||
procedure TModbusForm.CommButtDo(Sender: TObject);
|
||
var Bout,what: word;
|
||
Mess: Tmessag;
|
||
CanStr : String;
|
||
|
||
begin
|
||
Memo1.Lines.Add('Command commands...');
|
||
|
||
what := (Sender as TButton).Tag;
|
||
if what <16
|
||
then what := 1 shl what
|
||
else what := 0;
|
||
|
||
mess.Mask := 4;
|
||
mess.Addr := 127;
|
||
mess.Data[0] := what;
|
||
mess.Data[1] := 0;
|
||
mess.Data[2] := 0;
|
||
mess.Surs := 1;
|
||
|
||
if Protokol=3 then
|
||
begin
|
||
ArrCanMessageSend[0].m_dwID := RXadr + mess.Addr;
|
||
ArrCanMessageSend[0].m_bDLC := 2;
|
||
ArrCanMessageSend[0].m_bData[1] := HB(mess.Data[0]);
|
||
ArrCanMessageSend[0].m_bData[2] := LB(mess.Data[0]);
|
||
end else begin
|
||
ArrCanMessageSend[0].m_dwID := RXadr;
|
||
ArrCanMessageSend[0].m_bDLC := 8;
|
||
ArrCanMessageSend[0].m_bData[5] := mess.Mask shl 5;
|
||
ArrCanMessageSend[0].m_bData[6] := LB(mess.Addr);
|
||
ArrCanMessageSend[0].m_bData[8] := LB(mess.Data[0]);
|
||
ArrCanMessageSend[0].m_bData[7] := HB(mess.Data[0]);
|
||
ArrCanMessageSend[0].m_bData[2] := LB(mess.Data[1]);
|
||
ArrCanMessageSend[0].m_bData[1] := HB(mess.Data[1]);
|
||
ArrCanMessageSend[0].m_bData[4] := LB(mess.Data[2]);
|
||
ArrCanMessageSend[0].m_bData[3] := HB(mess.Data[2]);
|
||
end;
|
||
|
||
WriteMessageCanID(1, CanStr);
|
||
|
||
|
||
ReceiveCanData(mess,Numer);
|
||
|
||
end;
|
||
|
||
|
||
procedure TModbusForm.CommButtClick(Sender: TObject);
|
||
var Bout,what: word;
|
||
begin
|
||
|
||
CommButtDo(Sender);
|
||
// if not oprosc.Checked then CommButtDo(Sender)
|
||
// else
|
||
// begin InsideComm := true;
|
||
// LastSender := Sender;
|
||
// end;
|
||
|
||
end;
|
||
|
||
|
||
procedure TModbusForm.DigiClick(Sender: TObject);
|
||
var i,bout: word;
|
||
begin
|
||
bout := 0;
|
||
for i:=0 to 15 do
|
||
if digiBox[i].Checked then bout := bout or (1 shl (i));
|
||
DataGrid.Cells[0, BitGroup.Tag ] := inttostr(bout);
|
||
|
||
end;
|
||
|
||
procedure TModbusForm.HexaDec;
|
||
var data : array[1..5] of extended;
|
||
begin
|
||
|
||
data[1]:=DiggAddrEdit.Value;
|
||
data[2]:=AnaStart.Value;
|
||
data[3]:=AnaLen.Value;
|
||
data[4]:=DigiStart.Value;
|
||
data[5]:=DigiLen.Value;
|
||
|
||
if DecLab.Checked then
|
||
begin
|
||
DiggAddrEdit.ValueType:=vtInteger;
|
||
AnaStart.ValueType:=vtInteger;
|
||
AnaLen.ValueType:=vtInteger;
|
||
DigiStart.ValueType:=vtInteger;
|
||
DigiLen.ValueType:=vtInteger;
|
||
AdreLaba.Caption:='Adres.DEC';
|
||
DataLaba.Caption:='Data.DEC';
|
||
|
||
AnaStartLaba.Caption:='<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. DEC';
|
||
AnaLenLaba.Caption:='<27><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. DEC';
|
||
DigiStartLaba.Caption:='<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>. DEC';
|
||
DigiLenLaba.Caption:='<27><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>. DEC';
|
||
|
||
AnaStart24.Caption:='24';
|
||
AnaStart64.Caption:='64';
|
||
AnaLen64.Caption :='64';
|
||
DigiLen24.Caption :='24';
|
||
DigiLen32.Caption :='32';
|
||
end;
|
||
|
||
if HexLab.Checked then
|
||
begin
|
||
DiggAddrEdit.ValueType:=vtHex;
|
||
AnaStart.ValueType:=vtHex;
|
||
AnaLen.ValueType:=vtHex;
|
||
DigiStart.ValueType:=vtHex;
|
||
DigiLen.ValueType:=vtHex;
|
||
AdreLaba.Caption:='Adres.HEX';
|
||
DataLaba.Caption:='Data.DEC';
|
||
|
||
AnaStartLaba.Caption:='<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. HEX';
|
||
AnaLenLaba.Caption:='<27><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. HEX';
|
||
DigiStartLaba.Caption:='<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>. HEX';
|
||
DigiLenLaba.Caption:='<27><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>. HEX';
|
||
|
||
AnaStart24.Caption:='18';
|
||
AnaStart64.Caption:='40';
|
||
AnaLen64.Caption :='40';
|
||
DigiLen24.Caption :='18';
|
||
DigiLen32.Caption :='20';
|
||
end;
|
||
|
||
DiggAddrEdit.Value :=data[1];
|
||
AnaStart.Value :=data[2];
|
||
AnaLen.Value :=data[3];
|
||
DigiStart.Value :=data[4];
|
||
DigiLen.Value :=data[5];
|
||
|
||
end;
|
||
|
||
procedure TModbusForm.DecLabClick(Sender: TObject);
|
||
begin
|
||
DigiLabWrite;
|
||
AnaLabWrite;
|
||
HexaDec;
|
||
end;
|
||
|
||
procedure TModbusForm.HexLabClick(Sender: TObject);
|
||
begin
|
||
DigiLabWrite;
|
||
AnaLabWrite;
|
||
HexaDec;
|
||
end;
|
||
|
||
procedure TModbusForm.AnaValue(Sender: TObject);
|
||
var i, donde, cuanto : integer;
|
||
begin
|
||
donde := (Sender as TPanel).Tag;
|
||
donde := donde + AnalogStart;
|
||
DiggAddrEdit.Value := donde;
|
||
|
||
for i:=0 to 3 do
|
||
begin
|
||
cuanto := Unites[donde+i].Data;
|
||
DataGrid.Cells[0,i]:=inttostr(cuanto);
|
||
if i = BitGroup.Tag then DigiBoxWrite(cuanto);
|
||
end;
|
||
end;
|
||
|
||
procedure TModbusForm.DigValue(Sender: TObject);
|
||
var i, tab, one : integer;
|
||
wordai: word;
|
||
begin
|
||
tab := (Sender as TPanel).Tag;
|
||
tab := tab div 16;
|
||
one := 1;
|
||
|
||
DiggAddrEdit.Value := Digistart.value + tab;
|
||
|
||
for i:=3 downto 0 do
|
||
begin
|
||
wordai := Unites[DigitalStart + tab+i].Data;
|
||
DataGrid.Cells[0,i]:=inttostr(wordai);
|
||
if i = BitGroup.Tag then DigiBoxWrite(wordai);
|
||
end;
|
||
end;
|
||
|
||
procedure TModbusForm.AnaStart24Click(Sender: TObject);
|
||
begin
|
||
AnaStart.Value:=24;
|
||
end;
|
||
|
||
procedure TModbusForm.AnaStart64Click(Sender: TObject);
|
||
begin
|
||
AnaStart.Value:=64;
|
||
end;
|
||
|
||
procedure TModbusForm.AnaLen64Click(Sender: TObject);
|
||
begin
|
||
AnaLen.Value:=64;
|
||
end;
|
||
|
||
procedure TModbusForm.DigiStart0Click(Sender: TObject);
|
||
begin
|
||
DigiStart.Value:=0;
|
||
end;
|
||
|
||
procedure TModbusForm.DigiLen24Click(Sender: TObject);
|
||
begin
|
||
DigiLen.Value:=24;
|
||
end;
|
||
|
||
procedure TModbusForm.DigiLen32Click(Sender: TObject);
|
||
begin
|
||
DigiLen.Value:=32;
|
||
end;
|
||
|
||
procedure TModbusForm.Renamed(Sender: TObject);
|
||
begin
|
||
NameEdit.Hide;
|
||
end;
|
||
|
||
procedure TModbusForm.Renamido(Sender: TObject; var Key: Char);
|
||
var num: integer;
|
||
begin
|
||
if(Key = chr($D)) then // Enter
|
||
begin
|
||
num := (Sender as TEdit).Tag;
|
||
DigiBut[num].Caption:=NameEdit.Text;
|
||
DigiBut[num].SetFocus;
|
||
Project.DigiButNames[num]:= NameEdit.Text;
|
||
Project.DigiButNameChange := true;
|
||
end;
|
||
|
||
if(Key = chr($1B)) then // ESC
|
||
begin
|
||
DigiBut[(Sender as TEdit).Tag].SetFocus;
|
||
end;
|
||
end;
|
||
|
||
procedure TModbusForm.RenameButton(Sender: TObject; MousePos: TPoint;
|
||
var Handled: Boolean);
|
||
var i: integer;
|
||
begin
|
||
NameEdit.show;
|
||
NameEdit.Parent:=GroupBox1;
|
||
NameEdit.BorderStyle:= bsNone;
|
||
NameEdit.Text:= (Sender as TButton).Caption;
|
||
NameEdit.Top:= (Sender as TButton).Top+3;
|
||
NameEdit.Left:=(Sender as TButton).Left+4;
|
||
NameEdit.Width:=(Sender as TButton).Width-6;
|
||
NameEdit.Height:=(Sender as TButton).Height-6;
|
||
NameEdit.Tag := (Sender as TButton).Tag;
|
||
NameEdit.OnExit := Renamed;
|
||
NameEdit.OnKeyPress := Renamido;
|
||
NameEdit.setfocus;
|
||
end;
|
||
|
||
procedure TModbusForm.ReceiveCanData(Mess: TMessag; dev:integer);
|
||
var
|
||
Ananum, Diginum, Boxnum: integer;
|
||
i, j, byte: integer;
|
||
begin
|
||
kownt:=kownt+1;
|
||
Memo1.Lines[0] := inttohex (mess.addr,2)+' '+
|
||
inttohex (word(mess.data[0]),4)+' '+
|
||
inttohex (word(mess.data[1]),4)+' '+
|
||
inttohex (word(mess.data[2]),4)+' - '+inttostr(kownt);
|
||
|
||
Ananum := mess.Addr - AnalogStart;
|
||
Diginum := mess.Addr - DigitalStart;
|
||
|
||
for i:= 0 to mess.Leng-1 do
|
||
begin
|
||
if (((mess.Mask and (4 shr i))>0)
|
||
or ( mess.Leng=4))
|
||
and( mess.Addr+i < 128)
|
||
then
|
||
begin
|
||
Unites[mess.Addr+i].Data := mess.Data[i];
|
||
Unites[mess.Addr+i].Age := reColor;
|
||
Unites[mess.Addr+i].Surs := mess.Surs;
|
||
if (Ananum>=0) and (Ananum<AnalogLength) then
|
||
begin
|
||
Anapan[Ananum].Caption := inttostr(mess.Data[i]);
|
||
Anapan[Ananum].Color := clBlueGradient[reColor,mess.Surs];
|
||
end;
|
||
if (Diginum>=0) and (Diginum<DigitalLength)
|
||
then DigiColWrite(mess.Data[i],Diginum,reColor,mess.Surs);
|
||
end;
|
||
Ananum := Ananum+1;
|
||
Diginum:=Diginum+1;
|
||
end
|
||
end;
|
||
|
||
procedure TModbusForm.AnaRewrite;
|
||
var
|
||
i: integer;
|
||
begin
|
||
for i :=0 to 63 do
|
||
begin
|
||
if i < AnalogLength then
|
||
begin
|
||
Anapan[i].Caption := inttostr(Unites[AnalogStart+i].data);
|
||
Anapan[i].Color := clBlueGradient[Unites[AnalogStart+i].Age,Unites[AnalogStart+i].Surs];
|
||
end else
|
||
begin
|
||
Anapan[i].Caption :='';
|
||
Anapan[i].Color := clSilver;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TModbusForm.DigiColWrite(Byte: word; Column: integer; Age: integer; Surs: integer);
|
||
var
|
||
Box : integer;
|
||
begin
|
||
Column := Column * 16;
|
||
for Box := Column to (Column+15) do
|
||
begin
|
||
if (Byte and 1) > 0
|
||
then digipan[Box].color:= clRedGradient[age]
|
||
else digipan[Box].color:= clGreenGradient[age][Surs];
|
||
Byte := byte div 2
|
||
end
|
||
end;
|
||
|
||
procedure TModbusForm.DigiRewrite;
|
||
var
|
||
i, j: integer;
|
||
begin
|
||
for i:= 0 to 31 do
|
||
if i < DigitalLength then
|
||
DigiColWrite(Unites[DigitalStart+i].Data,i,Unites[DigitalStart+i].Age,Unites[DigitalStart+i].Surs)
|
||
else
|
||
for j:=0 to 15 do digipan[i*16+j].color := clSilver;
|
||
end;
|
||
|
||
procedure TModbusForm.DataLenEditChange(Sender: TObject);
|
||
var NewLen,i: integer;
|
||
begin
|
||
NewLen:= Trunc(DataLenEdit.Value);
|
||
EmptyCell:= Datagrid.Selection;
|
||
if EmptyCell.Top > NewLen
|
||
then EmptyCell.Top := NewLen;
|
||
if EmptyCell.Bottom > NewLen
|
||
then EmptyCell.Bottom := NewLen;
|
||
Datagrid.Selection:=EmptyCell;
|
||
DataGrid.RowCount:= Trunc(DataLenEdit.Value);
|
||
|
||
if BitGroup.Tag > NewLen-1 then
|
||
BitBut[NewLen-1].Checked:=true;
|
||
|
||
for i:=3 downto 0 do
|
||
begin
|
||
BitBut[i].Enabled:= (i <= NewLen-1);
|
||
BitBut[i].Visible:= (i <= NewLen-1);
|
||
end;
|
||
end;
|
||
|
||
procedure TModbusForm.DataGridKeyPress(Sender: TObject; var Key: Char);
|
||
begin
|
||
case Key of
|
||
chr(3),chr(8),chr(22),'0' .. '9': ; // <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
else
|
||
Key := Chr(0); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
end;
|
||
end;
|
||
|
||
procedure TModbusForm.DataGridSetEditText(Sender: TObject; ACol,
|
||
ARow: Integer; const Value: String);
|
||
var str: string;
|
||
num: integer;
|
||
begin
|
||
|
||
str:= Value;
|
||
|
||
if str='' then
|
||
begin
|
||
num:=0; str:='0';
|
||
DataGrid.Cells[ACol,ARow]:=str;
|
||
TGridCracker(DataGrid).InplaceEditor.Deselect;
|
||
end;
|
||
|
||
if (length(str)>1) and (copy(str,1,1)='0') then
|
||
begin
|
||
delete(str,1,1);
|
||
DataGrid.Cells[ACol,ARow]:=str;
|
||
TGridCracker(DataGrid).InplaceEditor.Deselect;
|
||
end;
|
||
|
||
try num := strtoint(str);
|
||
except
|
||
num:=0; str:='0';
|
||
DataGrid.Cells[ACol,ARow]:=str;
|
||
TGridCracker(DataGrid).InplaceEditor.Deselect;
|
||
end;
|
||
|
||
if num > $FFFF then
|
||
begin
|
||
delete(str,length(str),1);
|
||
DataGrid.Cells[ACol,ARow]:=str;
|
||
TGridCracker(DataGrid).InplaceEditor.Deselect;
|
||
end;
|
||
|
||
DigiBoxWrite(num);
|
||
|
||
end;
|
||
|
||
procedure TModbusForm.DataGridDrawCell(Sender: TObject; ACol,
|
||
ARow: Integer; Rect: TRect; State: TGridDrawState);
|
||
begin
|
||
DataGrid.Canvas.Brush.Color:=clWindow;
|
||
DataGrid.Canvas.Font.Color := clWindowText;
|
||
DataGrid.Canvas.FillRect(Rect);
|
||
DataGrid.Canvas.TextOut(Rect.Left+2, Rect.Top+2, DataGrid.Cells[ACol, ARow]);
|
||
end;
|
||
|
||
procedure TModbusForm.BitButClick(Sender: TObject);
|
||
var
|
||
i,key,val,sel: integer;
|
||
begin
|
||
|
||
sel:= (Sender as TRadioButton).Tag;
|
||
if sel <> BitGroup.Tag then
|
||
begin
|
||
BitGroup.Tag:=sel;
|
||
TGridCracker(DataGrid).SelectCell(0,sel);
|
||
end;
|
||
|
||
DigiBoxWrite(strtoint(DataGrid.Cells[0,sel]));
|
||
|
||
end;
|
||
|
||
procedure TModbusForm.DataGridSelectCell(Sender: TObject; ACol,
|
||
ARow: Integer; var CanSelect: Boolean);
|
||
begin
|
||
if BitGroup.Tag<>ARow then
|
||
begin
|
||
BitGroup.Tag:=ARow;
|
||
BitBut[ARow].Checked:=true;
|
||
end;
|
||
end;
|
||
|
||
procedure TModbusForm.DoNothing(Sender: TObject);
|
||
begin
|
||
// DOES NOTHING
|
||
end;
|
||
|
||
procedure TModbusForm.HagaNada(Sender: TObject; ACol,
|
||
ARow: Integer; var CanSelect: Boolean);
|
||
begin
|
||
// DOES NOTHING
|
||
end;
|
||
|
||
procedure TModbusForm.DataGridGetEditText(Sender: TObject; ACol,
|
||
ARow: Integer; var Value: String);
|
||
begin
|
||
if BitGroup.Tag<>ARow then
|
||
begin
|
||
BitGroup.Tag:=ARow;
|
||
BitBut[ARow].Checked:=true;
|
||
end;
|
||
end;
|
||
|
||
procedure TModbusForm.DigiBoxWrite(Surs: integer);
|
||
var
|
||
i,key: integer;
|
||
begin
|
||
key:=1;
|
||
for i:=0 to 15 do
|
||
begin
|
||
DigiBox[i].OnClick:= DoNothing;
|
||
DigiBox[i].Checked:= (Surs and key) >0;
|
||
DigiBox[i].OnClick:=DigiClick;
|
||
key:=key*2;
|
||
end;
|
||
end;
|
||
|
||
procedure TModbusForm.AutoTimeEditChange(Sender: TObject);
|
||
begin
|
||
Auto:=trunc(AutoTimeEdit.Value);
|
||
if Auto = 0
|
||
then AutoBox.Checked:= false;
|
||
end;
|
||
|
||
end.
|