begin
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,345 @@
|
|||||||
|
object CANTerminal: TCANTerminal
|
||||||
|
Left = 992
|
||||||
|
Top = 100
|
||||||
|
Width = 801
|
||||||
|
Height = 538
|
||||||
|
Caption = 'CANTerminal "Hunderitter" v.07.04.2025'
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -11
|
||||||
|
Font.Name = 'MS Sans Serif'
|
||||||
|
Font.Style = []
|
||||||
|
Icon.Data = {
|
||||||
|
0000010001002020100000000000E80200001600000028000000200000004000
|
||||||
|
0000010004000000000080020000000000000000000000000000000000000000
|
||||||
|
000000008000008000000080800080000000800080008080000080808000C0C0
|
||||||
|
C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
000000000000000000000000000000000077788F000000087FF0008000000000
|
||||||
|
0077788F000000087FF000800000000000000000FFFFFFF00000778F00000000
|
||||||
|
00000000FFFFFFF00000778F000000000000FFFFFFFFFFFFF000778F00000000
|
||||||
|
0000FFFFFFFFFFFFF000778F000000000000FFFFFFFFFFFFF000778F00000000
|
||||||
|
00000FFFF000FFFF0000778F0000000000000FFFF000FFFF0000778F00000000
|
||||||
|
08FF000FF000FFF00000778F0000000008FF000FF000FFF00000778F00000000
|
||||||
|
78FF000000000000000BBB9BBB00000078FF000000000000000BBB9BBB000077
|
||||||
|
8F00000FF000FFF00007BBBF000000778F00000FF000FFF00007BBBF00000000
|
||||||
|
78FF0FFF00000FFF077888000000000078FF0FFF00000FFF0778880000000000
|
||||||
|
0888FFFFFFFFFFFF7888FF00000000000888FFFFFFFFFFFF7888FF0000000000
|
||||||
|
00778FFFFFFFFFFF888000000000000000778FF00000000F8880000000000000
|
||||||
|
00778F0077788F0088800000000000000000000777788FF00000000000000000
|
||||||
|
0000000777788FF000000000000000000000000770088FF00000000000000000
|
||||||
|
0000000770088FF0000000000000000000000000000000000000000000000000
|
||||||
|
000000000000000000000000000000000000000000000000000000000000FFFF
|
||||||
|
FFFFF80780CFF80780CFF800000FF800000FFC000003FC000003FC000003FC00
|
||||||
|
0003FC000003F8000603F8000603F0000003F0000003C0600E01C0600E018080
|
||||||
|
000380800003C000000FC000000FF000001FF000001FF80000FFF80000FFF800
|
||||||
|
00FFFC0001FFFC0001FFFF800FFFFF800FFFFF800FFFFF800FFFFFFFFFFF}
|
||||||
|
OldCreateOrder = False
|
||||||
|
OnClose = FormClose
|
||||||
|
OnCreate = FormCreate
|
||||||
|
PixelsPerInch = 96
|
||||||
|
TextHeight = 13
|
||||||
|
object RxLabel1: TRxLabel
|
||||||
|
Left = 245
|
||||||
|
Top = 440
|
||||||
|
Width = 39
|
||||||
|
Height = 13
|
||||||
|
Caption = 'CAN on'
|
||||||
|
end
|
||||||
|
object ProjectBox: TComboBox
|
||||||
|
Left = 10
|
||||||
|
Top = 20
|
||||||
|
Width = 150
|
||||||
|
Height = 21
|
||||||
|
ItemHeight = 13
|
||||||
|
TabOrder = 0
|
||||||
|
Text = 'ProjectBox'
|
||||||
|
OnChange = ProjectBoxChange
|
||||||
|
Items.Strings = (
|
||||||
|
'+ + Add project + +')
|
||||||
|
end
|
||||||
|
object GroupBox: TGroupBox
|
||||||
|
Left = 10
|
||||||
|
Top = 48
|
||||||
|
Width = 765
|
||||||
|
Height = 337
|
||||||
|
Caption = ' '#1055#1088#1086#1077#1082#1090' '
|
||||||
|
TabOrder = 1
|
||||||
|
object Label1: TLabel
|
||||||
|
Left = 32
|
||||||
|
Top = 40
|
||||||
|
Width = 15
|
||||||
|
Height = 13
|
||||||
|
Caption = 'RS'
|
||||||
|
end
|
||||||
|
object Label2: TLabel
|
||||||
|
Left = 104
|
||||||
|
Top = 48
|
||||||
|
Width = 60
|
||||||
|
Height = 13
|
||||||
|
Caption = #1059#1089#1090#1088#1086#1081#1089#1090#1074#1086
|
||||||
|
end
|
||||||
|
object Label3: TLabel
|
||||||
|
Left = 176
|
||||||
|
Top = 64
|
||||||
|
Width = 67
|
||||||
|
Height = 13
|
||||||
|
Caption = #1055#1088#1080#1077#1084' <-- '#1057#1059
|
||||||
|
end
|
||||||
|
object Label4: TLabel
|
||||||
|
Left = 248
|
||||||
|
Top = 72
|
||||||
|
Width = 82
|
||||||
|
Height = 13
|
||||||
|
Caption = #1055#1077#1088#1077#1076#1072#1095#1072' --> '#1057#1059
|
||||||
|
end
|
||||||
|
object Label5: TLabel
|
||||||
|
Left = 328
|
||||||
|
Top = 80
|
||||||
|
Width = 14
|
||||||
|
Height = 13
|
||||||
|
Caption = 'Go'
|
||||||
|
end
|
||||||
|
object Label6: TLabel
|
||||||
|
Left = 48
|
||||||
|
Top = 152
|
||||||
|
Width = 15
|
||||||
|
Height = 13
|
||||||
|
Caption = 'RS'
|
||||||
|
end
|
||||||
|
object Label7: TLabel
|
||||||
|
Left = 136
|
||||||
|
Top = 184
|
||||||
|
Width = 60
|
||||||
|
Height = 13
|
||||||
|
Caption = #1059#1089#1090#1088#1086#1081#1089#1090#1074#1086
|
||||||
|
end
|
||||||
|
object Label8: TLabel
|
||||||
|
Left = 240
|
||||||
|
Top = 208
|
||||||
|
Width = 67
|
||||||
|
Height = 13
|
||||||
|
Caption = #1055#1088#1080#1077#1084' <-- '#1057#1059
|
||||||
|
end
|
||||||
|
object Label9: TLabel
|
||||||
|
Left = 352
|
||||||
|
Top = 232
|
||||||
|
Width = 82
|
||||||
|
Height = 13
|
||||||
|
Caption = #1055#1077#1088#1077#1076#1072#1095#1072' --> '#1057#1059
|
||||||
|
end
|
||||||
|
object Label10: TLabel
|
||||||
|
Left = 456
|
||||||
|
Top = 248
|
||||||
|
Width = 14
|
||||||
|
Height = 13
|
||||||
|
Caption = 'Go'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object Memo1: TMemo
|
||||||
|
Left = 10
|
||||||
|
Top = 390
|
||||||
|
Width = 225
|
||||||
|
Height = 100
|
||||||
|
Lines.Strings = (
|
||||||
|
'')
|
||||||
|
TabOrder = 2
|
||||||
|
end
|
||||||
|
object CANswitch: TRxSwitch
|
||||||
|
Left = 248
|
||||||
|
Top = 390
|
||||||
|
Width = 33
|
||||||
|
Height = 49
|
||||||
|
Caption = 'CANswitch'
|
||||||
|
TabOrder = 3
|
||||||
|
OnClick = CANswitchClick
|
||||||
|
end
|
||||||
|
object GroupBox1: TGroupBox
|
||||||
|
Left = 472
|
||||||
|
Top = 400
|
||||||
|
Width = 273
|
||||||
|
Height = 169
|
||||||
|
Caption = 'UART'
|
||||||
|
TabOrder = 4
|
||||||
|
Visible = False
|
||||||
|
object RxLabel2: TRxLabel
|
||||||
|
Left = 24
|
||||||
|
Top = 18
|
||||||
|
Width = 31
|
||||||
|
Height = 13
|
||||||
|
Caption = 'Com:'
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'MS Sans Serif'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentFont = False
|
||||||
|
end
|
||||||
|
object RxLabel6: TRxLabel
|
||||||
|
Left = 81
|
||||||
|
Top = 148
|
||||||
|
Width = 56
|
||||||
|
Height = 13
|
||||||
|
Caption = 'TimeWait'
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'MS Sans Serif'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentFont = False
|
||||||
|
end
|
||||||
|
object AbortKey: TSpeedButton
|
||||||
|
Left = 8
|
||||||
|
Top = 80
|
||||||
|
Width = 17
|
||||||
|
Height = 17
|
||||||
|
Glyph.Data = {
|
||||||
|
76010000424D7601000000000000760000002800000020000000100000000100
|
||||||
|
04000000000000010000130B0000130B00001000000000000000000000000000
|
||||||
|
800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
|
||||||
|
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
|
||||||
|
3333333333FFFFF3333333333999993333333333F77777FFF333333999999999
|
||||||
|
33333337777FF377FF3333993370739993333377FF373F377FF3399993000339
|
||||||
|
993337777F777F3377F3393999707333993337F77737333337FF993399933333
|
||||||
|
399377F3777FF333377F993339903333399377F33737FF33377F993333707333
|
||||||
|
399377F333377FF3377F993333101933399377F333777FFF377F993333000993
|
||||||
|
399377FF3377737FF7733993330009993933373FF3777377F7F3399933000399
|
||||||
|
99333773FF777F777733339993707339933333773FF7FFF77333333999999999
|
||||||
|
3333333777333777333333333999993333333333377777333333}
|
||||||
|
NumGlyphs = 2
|
||||||
|
Visible = False
|
||||||
|
end
|
||||||
|
object CBLockRS: TCheckBox
|
||||||
|
Left = 32
|
||||||
|
Top = 46
|
||||||
|
Width = 73
|
||||||
|
Height = 17
|
||||||
|
Caption = 'LockRS'
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'MS Sans Serif'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentFont = False
|
||||||
|
TabOrder = 0
|
||||||
|
OnClick = CBLockRSClick
|
||||||
|
end
|
||||||
|
object RCom: TRxSpinEdit
|
||||||
|
Left = 64
|
||||||
|
Top = 16
|
||||||
|
Width = 41
|
||||||
|
Height = 21
|
||||||
|
MaxValue = 255.000000000000000000
|
||||||
|
Value = 1.000000000000000000
|
||||||
|
TabOrder = 1
|
||||||
|
OnChange = RComChange
|
||||||
|
end
|
||||||
|
object RGBaud: TRadioGroup
|
||||||
|
Left = 120
|
||||||
|
Top = 16
|
||||||
|
Width = 73
|
||||||
|
Height = 57
|
||||||
|
BiDiMode = bdLeftToRight
|
||||||
|
Caption = 'Baud'
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -9
|
||||||
|
Font.Name = 'MS Sans Serif'
|
||||||
|
Font.Style = []
|
||||||
|
ItemIndex = 1
|
||||||
|
Items.Strings = (
|
||||||
|
'57600'
|
||||||
|
'115200')
|
||||||
|
ParentBiDiMode = False
|
||||||
|
ParentFont = False
|
||||||
|
TabOrder = 2
|
||||||
|
OnClick = RGBaudClick
|
||||||
|
end
|
||||||
|
object TimeWait: TRxSpinEdit
|
||||||
|
Left = 10
|
||||||
|
Top = 140
|
||||||
|
Width = 55
|
||||||
|
Height = 21
|
||||||
|
Value = 10.000000000000000000
|
||||||
|
TabOrder = 3
|
||||||
|
end
|
||||||
|
object PBRs: TProgressBar
|
||||||
|
Left = 40
|
||||||
|
Top = 80
|
||||||
|
Width = 73
|
||||||
|
Height = 17
|
||||||
|
Step = 2
|
||||||
|
TabOrder = 4
|
||||||
|
end
|
||||||
|
object Memo2: TMemo
|
||||||
|
Left = 162
|
||||||
|
Top = 88
|
||||||
|
Width = 167
|
||||||
|
Height = 73
|
||||||
|
Font.Charset = RUSSIAN_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Courier'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentFont = False
|
||||||
|
TabOrder = 5
|
||||||
|
OnChange = Memo2Change
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object RadioGroup1: TRadioGroup
|
||||||
|
Left = 296
|
||||||
|
Top = 390
|
||||||
|
Width = 73
|
||||||
|
Height = 65
|
||||||
|
Caption = ' Can Speed '
|
||||||
|
TabOrder = 5
|
||||||
|
end
|
||||||
|
object Button125: TRadioButton
|
||||||
|
Left = 304
|
||||||
|
Top = 408
|
||||||
|
Width = 50
|
||||||
|
Height = 17
|
||||||
|
Caption = '125K'
|
||||||
|
TabOrder = 6
|
||||||
|
end
|
||||||
|
object Button250: TRadioButton
|
||||||
|
Left = 304
|
||||||
|
Top = 432
|
||||||
|
Width = 50
|
||||||
|
Height = 17
|
||||||
|
Caption = '250K'
|
||||||
|
Checked = True
|
||||||
|
TabOrder = 7
|
||||||
|
TabStop = True
|
||||||
|
end
|
||||||
|
object CanTimer: TTimer
|
||||||
|
Interval = 10
|
||||||
|
OnTimer = CanTimerTimer
|
||||||
|
Left = 744
|
||||||
|
Top = 8
|
||||||
|
end
|
||||||
|
object MyCommPort: TApdComPort
|
||||||
|
ComNumber = 1
|
||||||
|
Baud = 115200
|
||||||
|
PromptForPort = False
|
||||||
|
StopBits = 2
|
||||||
|
InSize = 65500
|
||||||
|
OutSize = 65000
|
||||||
|
AutoOpen = False
|
||||||
|
DTR = False
|
||||||
|
BufferFull = 58500
|
||||||
|
BufferResume = 5850
|
||||||
|
TraceSize = 4000000
|
||||||
|
TraceName = 'e:\APRO.TRC'
|
||||||
|
TraceHex = False
|
||||||
|
LogSize = 4000000
|
||||||
|
LogName = 'e:\APRO.LOG'
|
||||||
|
LogHex = False
|
||||||
|
UseEventWord = False
|
||||||
|
CommNotificationLevel = 1
|
||||||
|
TapiMode = tmNone
|
||||||
|
Left = 696
|
||||||
|
Top = 8
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,687 @@
|
|||||||
|
unit CAN_Terminal;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
||||||
|
Dialogs, ExtCtrls, StdCtrls, IniFiles, UNiiefa, ToolsCan, RXSwitch,
|
||||||
|
ComCtrls, Buttons, OoMisc, AdPort, Mask, RXSpin, RXCtrls;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
TCANTerminal = class(TForm)
|
||||||
|
ProjectBox: TComboBox;
|
||||||
|
GroupBox: TGroupBox;
|
||||||
|
Label1: TLabel;
|
||||||
|
Label2: TLabel;
|
||||||
|
Label3: TLabel;
|
||||||
|
Label4: TLabel;
|
||||||
|
Label5: TLabel;
|
||||||
|
Label6: TLabel;
|
||||||
|
Label7: TLabel;
|
||||||
|
Label8: TLabel;
|
||||||
|
Label9: TLabel;
|
||||||
|
Label10: TLabel;
|
||||||
|
CanTimer: TTimer;
|
||||||
|
Memo1: TMemo;
|
||||||
|
CANswitch: TRxSwitch;
|
||||||
|
GroupBox1: TGroupBox;
|
||||||
|
CBLockRS: TCheckBox;
|
||||||
|
RxLabel2: TRxLabel;
|
||||||
|
RCom: TRxSpinEdit;
|
||||||
|
RGBaud: TRadioGroup;
|
||||||
|
MyCommPort: TApdComPort;
|
||||||
|
RxLabel6: TRxLabel;
|
||||||
|
TimeWait: TRxSpinEdit;
|
||||||
|
AbortKey: TSpeedButton;
|
||||||
|
PBRs: TProgressBar;
|
||||||
|
Memo2: TMemo;
|
||||||
|
RadioGroup1: TRadioGroup;
|
||||||
|
Button125: TRadioButton;
|
||||||
|
Button250: TRadioButton;
|
||||||
|
RxLabel1: TRxLabel;
|
||||||
|
|
||||||
|
procedure FormCreate(Sender: TObject);
|
||||||
|
|
||||||
|
procedure LoadProjectAdres(ProjID: string);
|
||||||
|
|
||||||
|
procedure ShowProjectAdres();
|
||||||
|
procedure ShoWinClick(Sender: TObject);
|
||||||
|
procedure CanTimerTimer(Sender: TObject);
|
||||||
|
procedure CANswitchClick(Sender: TObject);
|
||||||
|
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
||||||
|
procedure RGBaudClick(Sender: TObject);
|
||||||
|
procedure RComChange(Sender: TObject);
|
||||||
|
procedure CBLockRSClick(Sender: TObject);
|
||||||
|
procedure Memo2Change(Sender: TObject);
|
||||||
|
procedure ProjectBoxChange(Sender: TObject);
|
||||||
|
|
||||||
|
private
|
||||||
|
{ Private declarations }
|
||||||
|
|
||||||
|
public
|
||||||
|
|
||||||
|
{ Public declarations }
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
TBar = record
|
||||||
|
RSadr: TPanel;
|
||||||
|
RXadr: TPanel;
|
||||||
|
TXadr: TPanel;
|
||||||
|
Name: TPanel;
|
||||||
|
Go: TButton;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TUKSS = record
|
||||||
|
Bar: TBar;
|
||||||
|
RSadr: cardinal;
|
||||||
|
RXadr: longword;
|
||||||
|
TXadr: longword;
|
||||||
|
Use: boolean;
|
||||||
|
Exist: boolean;
|
||||||
|
Name: string;
|
||||||
|
Wind: TModbusForm;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TBars = record
|
||||||
|
BaseAdr: TPanel;
|
||||||
|
CommAdr: TPanel;
|
||||||
|
Name: TPanel;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TProject = record
|
||||||
|
Bars: TBars;
|
||||||
|
BaseAdr: longword;
|
||||||
|
PlusAdr: integer;
|
||||||
|
CommAdr: longword;
|
||||||
|
UKSS: array[0..15] of TUKSS;
|
||||||
|
Name: string;
|
||||||
|
DigiButNames: array[0..16] of string;
|
||||||
|
DigiButNameChange: boolean;
|
||||||
|
Protokol: integer;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Tbox = record
|
||||||
|
adr: longword;
|
||||||
|
qua: cardinal;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Tboxx = record
|
||||||
|
box : array[1..100] of Tbox; // edit boxlen!
|
||||||
|
qua: cardinal;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
CANTerminal: TCANTerminal;
|
||||||
|
Project : TProject;
|
||||||
|
|
||||||
|
|
||||||
|
PathExe : String;
|
||||||
|
|
||||||
|
ProjectQua : integer = 0;
|
||||||
|
ProjectNum : integer = 0;
|
||||||
|
|
||||||
|
|
||||||
|
Boxx : Tboxx;
|
||||||
|
|
||||||
|
const
|
||||||
|
boxlen = 100;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
|
||||||
|
{$R *.dfm}
|
||||||
|
|
||||||
|
procedure TCANTerminal.FormCreate(Sender: TObject);
|
||||||
|
var i: integer;
|
||||||
|
inifile : TIniFile;
|
||||||
|
nom,num: string;
|
||||||
|
wid,hei,tab,lef,top,lev : integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
|
||||||
|
InitSlavnaDll();
|
||||||
|
|
||||||
|
Project.Bars.Name := TPanel.Create(self);
|
||||||
|
Project.Bars.Name.Parent := GroupBox;
|
||||||
|
Project.Bars.Name.Left :=10;
|
||||||
|
Project.Bars.Name.Top :=15;
|
||||||
|
Project.Bars.Name.Width :=100;
|
||||||
|
Project.Bars.Name.Height := 30;
|
||||||
|
|
||||||
|
Project.Bars.BaseAdr := TPanel.Create(self);
|
||||||
|
Project.Bars.BaseAdr.Parent := GroupBox;
|
||||||
|
Project.Bars.BaseAdr.Left :=10+100+10;
|
||||||
|
Project.Bars.BaseAdr.Top :=15;
|
||||||
|
Project.Bars.BaseAdr.Width :=100;
|
||||||
|
Project.Bars.BaseAdr.Height := 30;
|
||||||
|
|
||||||
|
Project.Bars.CommAdr := TPanel.Create(self);
|
||||||
|
Project.Bars.CommAdr.Parent := GroupBox;
|
||||||
|
Project.Bars.CommAdr.Left :=10+100+10+100+10;
|
||||||
|
Project.Bars.CommAdr.Top :=15;
|
||||||
|
Project.Bars.CommAdr.Width :=100;
|
||||||
|
Project.Bars.CommAdr.Height := 30;
|
||||||
|
|
||||||
|
tab:=5;
|
||||||
|
|
||||||
|
Label1.Top := Project.Bars.Name.Top + Project.Bars.Name.Height + tab*3;
|
||||||
|
Label2.Top := Label1.Top; Label3.Top := Label1.Top; Label4.Top := Label1.Top;
|
||||||
|
Label5.Top := Label1.Top; Label6.Top := Label1.Top; Label7.Top := Label1.Top;
|
||||||
|
Label8.Top := Label1.Top; Label9.Top := Label1.Top; Label10.Top := Label1.Top;
|
||||||
|
|
||||||
|
for i:= 0 to 15 do
|
||||||
|
begin
|
||||||
|
|
||||||
|
hei := 25;
|
||||||
|
top := Label1.Top + Label1.Height + tab + (hei+tab)*(i mod 8);
|
||||||
|
lef := 10 + (i div 8)*(lev);
|
||||||
|
|
||||||
|
wid := hei;
|
||||||
|
Project.UKSS[i].Bar.RSadr := TPanel.Create(self);
|
||||||
|
Project.UKSS[i].Bar.RSadr.Parent := GroupBox;
|
||||||
|
Project.UKSS[i].Bar.RSadr.Width := wid;
|
||||||
|
Project.UKSS[i].Bar.RSadr.Height := hei;
|
||||||
|
Project.UKSS[i].Bar.RSadr.Left :=lef;
|
||||||
|
Project.UKSS[i].Bar.RSadr.Top :=top;
|
||||||
|
|
||||||
|
if i=0 then Label1.Left := lef;
|
||||||
|
if i=8 then Label6.Left := lef;
|
||||||
|
|
||||||
|
lef := lef + wid + tab;
|
||||||
|
wid := 110;
|
||||||
|
|
||||||
|
Project.UKSS[i].Bar.Name := TPanel.Create(self);
|
||||||
|
Project.UKSS[i].Bar.Name.Parent := GroupBox;
|
||||||
|
Project.UKSS[i].Bar.Name.Width :=wid;
|
||||||
|
Project.UKSS[i].Bar.Name.Height := hei;
|
||||||
|
Project.UKSS[i].Bar.Name.Left :=lef;
|
||||||
|
Project.UKSS[i].Bar.Name.Top :=top;
|
||||||
|
|
||||||
|
if i=0 then Label2.Left := lef;
|
||||||
|
if i=8 then Label7.Left := lef;
|
||||||
|
|
||||||
|
lef := lef + wid + tab;
|
||||||
|
wid := 90;
|
||||||
|
|
||||||
|
Project.UKSS[i].Bar.RXadr := TPanel.Create(self);
|
||||||
|
Project.UKSS[i].Bar.RXadr.Parent := GroupBox;
|
||||||
|
Project.UKSS[i].Bar.RXadr.Width :=wid;
|
||||||
|
Project.UKSS[i].Bar.RXadr.Height := hei;
|
||||||
|
Project.UKSS[i].Bar.RXadr.Left :=lef;
|
||||||
|
Project.UKSS[i].Bar.RXadr.Top :=top;
|
||||||
|
|
||||||
|
if i=0 then Label3.Left := lef;
|
||||||
|
if i=8 then Label8.Left := lef;
|
||||||
|
|
||||||
|
lef := lef + wid + tab;
|
||||||
|
wid := 90;
|
||||||
|
|
||||||
|
Project.UKSS[i].Bar.TXadr := TPanel.Create(self);
|
||||||
|
Project.UKSS[i].Bar.TXadr.Parent := GroupBox;
|
||||||
|
Project.UKSS[i].Bar.TXadr.Width :=wid;
|
||||||
|
Project.UKSS[i].Bar.TXadr.Height := hei;
|
||||||
|
Project.UKSS[i].Bar.TXadr.Left :=lef;
|
||||||
|
Project.UKSS[i].Bar.TXadr.Top :=top;
|
||||||
|
|
||||||
|
if i=0 then Label4.Left := lef;
|
||||||
|
if i=8 then Label9.Left := lef;
|
||||||
|
|
||||||
|
lef := lef + wid + tab;
|
||||||
|
wid := hei;
|
||||||
|
|
||||||
|
Project.UKSS[i].Bar.Go := TButton.Create(self);
|
||||||
|
Project.UKSS[i].Bar.Go.Parent := GroupBox;
|
||||||
|
Project.UKSS[i].Bar.Go.Width :=wid;
|
||||||
|
Project.UKSS[i].Bar.Go.Height := hei;
|
||||||
|
Project.UKSS[i].Bar.Go.Left :=lef;
|
||||||
|
Project.UKSS[i].Bar.Go.Top :=top;
|
||||||
|
Project.UKSS[i].Bar.Go.Caption :='S';
|
||||||
|
Project.UKSS[i].Bar.Go.Font.Style:=[fsBold];
|
||||||
|
Project.UKSS[i].Bar.Go.Tag := i;
|
||||||
|
Project.UKSS[i].Bar.Go.OnClick := ShoWinClick;
|
||||||
|
|
||||||
|
if i=0 then Label5.Left := lef;
|
||||||
|
if i=8 then Label10.Left := lef;
|
||||||
|
|
||||||
|
if i<8 then lev := lef + wid + tab*2;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
PathExe:=ExtractFileDir(ParamStr(0))+'\';
|
||||||
|
|
||||||
|
inifile := TIniFile.Create(PathExe+'Projects.ini');
|
||||||
|
|
||||||
|
ProjectQua := Inifile.ReadInteger('Projects','ProjectQua',0);
|
||||||
|
ProjectNum := Inifile.ReadInteger('Projects','ProjectNum',0);
|
||||||
|
|
||||||
|
for i:=1 to ProjectQua do
|
||||||
|
begin
|
||||||
|
Num := 'Project'+inttostr(i);
|
||||||
|
Nom := Inifile.ReadString('Projects',Num,Num);
|
||||||
|
ProjectBox.Items.add(Nom);
|
||||||
|
end;
|
||||||
|
inifile.Free;
|
||||||
|
|
||||||
|
Project.Name := ProjectBox.Items[ProjectNum];
|
||||||
|
ProjectBox.ItemIndex := ProjectNum;
|
||||||
|
|
||||||
|
ProjectBoxChange(Sender);
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCANTerminal.ShowProjectAdres();
|
||||||
|
var
|
||||||
|
i: integer;
|
||||||
|
begin
|
||||||
|
Project.Bars.Name.Caption := Project.Name;
|
||||||
|
Project.Bars.BaseAdr.Caption := '0x'+inttohex(Project.BaseAdr,8);
|
||||||
|
if Project.CommAdr = 0
|
||||||
|
then Project.Bars.CommAdr.Caption := ''
|
||||||
|
else Project.Bars.CommAdr.Caption := '0x'+inttohex(Project.CommAdr,8);
|
||||||
|
|
||||||
|
for i:=0 to 15 do
|
||||||
|
begin
|
||||||
|
Project.UKSS[i].Bar.RXadr.Tag:=0;
|
||||||
|
Project.UKSS[i].Bar.TXadr.Tag:=0;
|
||||||
|
if Project.UKSS[i].Use then
|
||||||
|
begin
|
||||||
|
Project.UKSS[i].Bar.RSadr.Caption := inttostr(Project.UKSS[i].RSadr);
|
||||||
|
Project.UKSS[i].Bar.RXadr.Caption := '0x' + inttohex(Project.UKSS[i].RXadr,8);
|
||||||
|
Project.UKSS[i].Bar.TXadr.Caption := '0x' + inttohex(Project.UKSS[i].TXadr,8);
|
||||||
|
Project.UKSS[i].Bar.Name.Caption := Project.UKSS[i].Name;
|
||||||
|
Project.UKSS[i].Bar.Go.Caption := 'S';
|
||||||
|
Project.UKSS[i].Bar.Go.Enabled:=true;
|
||||||
|
Project.UKSS[i].Bar.Name.Color:=clWindow;
|
||||||
|
Project.UKSS[i].Bar.RSadr.Color:=clWindow;
|
||||||
|
Project.UKSS[i].Bar.RXadr.Color := clWindow;
|
||||||
|
Project.UKSS[i].Bar.TXadr.Color := clWindow;
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
Project.UKSS[i].Bar.RSadr.Caption := '';
|
||||||
|
Project.UKSS[i].Bar.RXadr.Caption := '';
|
||||||
|
Project.UKSS[i].Bar.TXadr.Caption := '';
|
||||||
|
Project.UKSS[i].Bar.Name.Caption := '';
|
||||||
|
Project.UKSS[i].Bar.Go.Caption := '';
|
||||||
|
Project.UKSS[i].Bar.Go.Enabled:=false;
|
||||||
|
Project.UKSS[i].Bar.Name.Color:=clBtnFace;
|
||||||
|
Project.UKSS[i].Bar.RSadr.Color:=clBtnFace;
|
||||||
|
Project.UKSS[i].Bar.RXadr.Color := clBtnFace;
|
||||||
|
Project.UKSS[i].Bar.TXadr.Color := clBtnFace;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
procedure TCANTerminal.LoadProjectAdres(ProjID: string);
|
||||||
|
var i,adr: integer;
|
||||||
|
inifile : TIniFile;
|
||||||
|
nom,nym: string;
|
||||||
|
num: longword;
|
||||||
|
left: integer;
|
||||||
|
begin
|
||||||
|
inifile := TIniFile.Create(PathExe+'Projects.ini');
|
||||||
|
|
||||||
|
Project.Protokol := Inifile.ReadInteger(ProjID,'Protokol',0);
|
||||||
|
|
||||||
|
if Project.Protokol = 3 then
|
||||||
|
begin
|
||||||
|
Project.BaseAdr := 0;
|
||||||
|
Project.PlusAdr := 1 shl 28;
|
||||||
|
left:=24;
|
||||||
|
end else begin
|
||||||
|
Project.BaseAdr := Inifile.ReadInteger(ProjID,'BaseAdr',0);
|
||||||
|
Project.PlusAdr := Inifile.ReadInteger(ProjID,'PlusAdr',16);
|
||||||
|
left:=0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Project.CommAdr := Inifile.ReadInteger(ProjID,'CommAdr',0);
|
||||||
|
|
||||||
|
adr:=-1;
|
||||||
|
for i:=0 to 15 do
|
||||||
|
begin
|
||||||
|
|
||||||
|
nom := 'Use_'+inttostr(i);
|
||||||
|
Project.UKSS[i].Use := inifile.ReadBool(ProjID,nom,false);
|
||||||
|
|
||||||
|
if Project.UKSS[i].Use then
|
||||||
|
begin
|
||||||
|
|
||||||
|
nom := 'CANadr_'+inttostr(i);
|
||||||
|
adr := inifile.ReadInteger(ProjID,nom,adr+1);
|
||||||
|
|
||||||
|
nom := 'RSadr_'+inttostr(i);
|
||||||
|
Project.UKSS[i].RSadr := inifile.ReadInteger(ProjID,nom,i);
|
||||||
|
|
||||||
|
nom := 'TXadr_'+inttostr(i);
|
||||||
|
num := Project.BaseAdr+Project.PlusAdr+(adr shl left);
|
||||||
|
Project.UKSS[i].TXadr := inifile.ReadInteger(ProjID,nom,num);
|
||||||
|
|
||||||
|
nom := 'RXadr_'+inttostr(i);
|
||||||
|
num := Project.BaseAdr+(adr shl left);
|
||||||
|
Project.UKSS[i].RXadr := inifile.ReadInteger(ProjID,nom,num);
|
||||||
|
|
||||||
|
nom := 'Name_'+inttostr(i);
|
||||||
|
nym := 'UKSS_'+inttostr(i);
|
||||||
|
Project.UKSS[i].Name := inifile.ReadString(ProjID,nom,nym);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
inifile.Free;
|
||||||
|
|
||||||
|
ShowProjectAdres();
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCANTerminal.ShoWinClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
Tagg : integer;
|
||||||
|
begin
|
||||||
|
|
||||||
|
Tagg:= (Sender as TButton).Tag;
|
||||||
|
|
||||||
|
if not Project.UKSS[Tagg].Exist then
|
||||||
|
begin
|
||||||
|
Project.UKSS[Tagg].Wind := TModbusForm.Create(nil);
|
||||||
|
Project.UKSS[Tagg].Wind.Caption := Project.Name+': '+Project.UKSS[Tagg].Name;
|
||||||
|
Project.UKSS[Tagg].Wind.Numer:= Tagg;
|
||||||
|
Project.UKSS[Tagg].Wind.RSadr:= Project.UKSS[Tagg].RSadr;
|
||||||
|
Project.UKSS[Tagg].Wind.RXadr:= Project.UKSS[Tagg].RXadr;
|
||||||
|
Project.UKSS[Tagg].Wind.TXadr:= Project.UKSS[Tagg].TXadr;
|
||||||
|
Project.UKSS[Tagg].Wind.Protokol:= Project.Protokol;
|
||||||
|
Project.UKSS[Tagg].Exist := true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Project.UKSS[Tagg].Wind.show;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCANTerminal.CanTimerTimer(Sender: TObject);
|
||||||
|
var
|
||||||
|
i,j,pak, paks : integer;
|
||||||
|
newstring: string;
|
||||||
|
adr: longword;
|
||||||
|
Mess: Tmessag;
|
||||||
|
|
||||||
|
begin
|
||||||
|
|
||||||
|
paks :=ReadMessageCanID(CanTimer.Interval);
|
||||||
|
if paks > 0 then
|
||||||
|
begin
|
||||||
|
|
||||||
|
for pak := 0 to paks-1 do
|
||||||
|
begin
|
||||||
|
|
||||||
|
if Project.Protokol=3
|
||||||
|
|
||||||
|
then adr := ArrCanMessage[pak].m_dwID and $1F000000
|
||||||
|
else adr := ArrCanMessage[pak].m_dwID;
|
||||||
|
|
||||||
|
if boxx.qua = 0 then
|
||||||
|
begin
|
||||||
|
boxx.qua := 1;
|
||||||
|
boxx.box[1].qua := 1;
|
||||||
|
boxx.box[1].adr := adr;
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
|
||||||
|
i:=0;
|
||||||
|
repeat i:=i+1
|
||||||
|
until (boxx.box[i].adr = adr) or (i > boxx.qua);
|
||||||
|
|
||||||
|
if i <= boxx.qua then
|
||||||
|
begin
|
||||||
|
boxx.box[i].qua := boxx.box[i].qua + 1;
|
||||||
|
if boxx.box[i].qua > 1000 then
|
||||||
|
begin
|
||||||
|
boxx.qua := 1;
|
||||||
|
boxx.box[1].qua := 1;
|
||||||
|
boxx.box[1].adr := adr;
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
if i > 1 then
|
||||||
|
begin
|
||||||
|
if boxx.box[i].qua > boxx.box[i-1].qua then
|
||||||
|
begin
|
||||||
|
boxx.box[i].adr := boxx.box[i-1].adr;
|
||||||
|
boxx.box[i-1].adr := adr;
|
||||||
|
boxx.box[i-1].qua := boxx.box[i].qua;
|
||||||
|
boxx.box[i].qua := boxx.box[i].qua-1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
if i > boxlen then
|
||||||
|
begin
|
||||||
|
boxx.qua := 1;
|
||||||
|
boxx.box[1].qua := 1;
|
||||||
|
boxx.box[1].adr := adr;
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
boxx.qua := i;
|
||||||
|
boxx.box[i].qua := 1;
|
||||||
|
boxx.box[i].adr := adr;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
|
||||||
|
for i:=0 to 15 do
|
||||||
|
if Project.UKSS[i].Use then
|
||||||
|
begin
|
||||||
|
if Project.UKSS[i].RXadr = adr then
|
||||||
|
begin
|
||||||
|
Project.UKSS[i].Bar.RXadr.Color := $FFD0A0; //clMoneyGreen;
|
||||||
|
Project.UKSS[i].Bar.RXadr.Tag := 5000 div CANTimer.Interval;
|
||||||
|
end;
|
||||||
|
if Project.UKSS[i].TXadr = adr then
|
||||||
|
begin
|
||||||
|
Project.UKSS[i].Bar.TXadr.Color := $A0FFC0; //clMoneyGreen;
|
||||||
|
Project.UKSS[i].Bar.TXadr.Tag := 5000 div CANTimer.Interval;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if (Project.UKSS[i].RXadr = adr)
|
||||||
|
or (Project.UKSS[i].TXadr = adr) then
|
||||||
|
begin
|
||||||
|
|
||||||
|
if project.Protokol = 3 then
|
||||||
|
begin
|
||||||
|
|
||||||
|
mess.Leng := ArrCanMessage[pak].m_bDLC shr 1;
|
||||||
|
mess.Addr := ArrCanMessage[pak].m_dwID and $0000007F;
|
||||||
|
mess.Mask := $FF;
|
||||||
|
|
||||||
|
mess.Data[0] := ArrCanMessage[pak].m_bData[1] shl 8;
|
||||||
|
mess.Data[0] := ArrCanMessage[pak].m_bData[2] or mess.Data[0];
|
||||||
|
mess.Data[1] := ArrCanMessage[pak].m_bData[3] shl 8;
|
||||||
|
mess.Data[1] := ArrCanMessage[pak].m_bData[4] or mess.Data[1];
|
||||||
|
mess.Data[2] := ArrCanMessage[pak].m_bData[5] shl 8;
|
||||||
|
mess.Data[2] := ArrCanMessage[pak].m_bData[6] or mess.Data[2];
|
||||||
|
mess.Data[3] := ArrCanMessage[pak].m_bData[7] shl 8;
|
||||||
|
mess.Data[3] := ArrCanMessage[pak].m_bData[8] or mess.Data[3];
|
||||||
|
|
||||||
|
end else begin
|
||||||
|
|
||||||
|
mess.Mask := ArrCanMessage[pak].m_bData[5] shr 5;
|
||||||
|
mess.Addr :=(ArrCanMessage[pak].m_bData[5] and $1F) shl 8;
|
||||||
|
mess.Addr := ArrCanMessage[pak].m_bData[6] or mess.Addr;
|
||||||
|
mess.Leng := 3;
|
||||||
|
|
||||||
|
mess.Data[0] := ArrCanMessage[pak].m_bData[7] shl 8;
|
||||||
|
mess.Data[0] := ArrCanMessage[pak].m_bData[8] or mess.Data[0];
|
||||||
|
mess.Data[1] := ArrCanMessage[pak].m_bData[1] shl 8;
|
||||||
|
mess.Data[1] := ArrCanMessage[pak].m_bData[2] or mess.Data[1];
|
||||||
|
mess.Data[2] := ArrCanMessage[pak].m_bData[3] shl 8;
|
||||||
|
mess.Data[2] := ArrCanMessage[pak].m_bData[4] or mess.Data[2];
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
if(Project.UKSS[i].TXadr = adr) then mess.Surs := 0;
|
||||||
|
if(Project.UKSS[i].RXadr = adr) then mess.Surs := 1;
|
||||||
|
|
||||||
|
if Project.UKSS[i].Exist then
|
||||||
|
Project.UKSS[i].Wind.ReceiveCanData(mess);
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
|
||||||
|
newstring:='';
|
||||||
|
for i:= 1 to boxx.qua do
|
||||||
|
|
||||||
|
newstring:= newstring +
|
||||||
|
'0x'+ inttohex(boxx.box[i].adr,8) +
|
||||||
|
'(' + inttostr(boxx.box[i].qua) + ') ';
|
||||||
|
|
||||||
|
Memo1.Clear;
|
||||||
|
Memo1.Lines[0] := newstring;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
if CANswitch.StateOn then
|
||||||
|
for i:=0 to 15 do
|
||||||
|
if Project.UKSS[i].Use then
|
||||||
|
begin
|
||||||
|
if Project.UKSS[i].Bar.RXadr.Tag = 0
|
||||||
|
then Project.UKSS[i].Bar.RXadr.Color := clWindow
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
Project.UKSS[i].Bar.RXadr.Tag := Project.UKSS[i].Bar.RXadr.Tag - 1;
|
||||||
|
if Project.UKSS[i].Bar.RXadr.Tag < 4000 div CANTimer.Interval
|
||||||
|
then Project.UKSS[i].Bar.RXadr.Color := $F0E0D0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if Project.UKSS[i].Bar.TXadr.Tag = 0
|
||||||
|
then Project.UKSS[i].Bar.TXadr.Color := clWindow
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
Project.UKSS[i].Bar.TXadr.Tag := Project.UKSS[i].Bar.TXadr.Tag - 1;
|
||||||
|
if Project.UKSS[i].Bar.TXadr.Tag < 4000 div CANTimer.Interval
|
||||||
|
then Project.UKSS[i].Bar.TXadr.Color := $D0F0E0;
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TCANTerminal.CANswitchClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
i: integer;
|
||||||
|
begin
|
||||||
|
if CANswitch.StateOn then
|
||||||
|
begin
|
||||||
|
if Button125.Checked then OpenSlavna(1,8);
|
||||||
|
if Button250.Checked then OpenSlavna(2,8);
|
||||||
|
CanTimer.Enabled:=true;
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
CloseSlavna();
|
||||||
|
CanTimer.Enabled:=false;
|
||||||
|
boxx.qua := 0;
|
||||||
|
for i:=0 to 15 do
|
||||||
|
begin
|
||||||
|
Project.UKSS[i].Bar.RXadr.Color := clBtnFace;
|
||||||
|
Project.UKSS[i].Bar.TXadr.Color := clBtnFace;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCANTerminal.FormClose(Sender: TObject;
|
||||||
|
var Action: TCloseAction);
|
||||||
|
var i: integer;
|
||||||
|
inifile : TIniFile;
|
||||||
|
nom: string;
|
||||||
|
begin
|
||||||
|
|
||||||
|
if Project.DigiButNameChange then
|
||||||
|
begin
|
||||||
|
|
||||||
|
inifile := TIniFile.Create(PathExe+'Projects.ini');
|
||||||
|
|
||||||
|
for i:=0 to 16 do
|
||||||
|
begin
|
||||||
|
nom := 'DigiBut_'+inttostr(i);
|
||||||
|
inifile.WriteString(Project.Name,nom,Project.DigiButNames[i]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
inifile.Free;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
CloseSlavna();
|
||||||
|
FreeSlavnaDll();
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCANTerminal.RGBaudClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if RGBaud.ItemIndex=0 then MyCommPort.Baud:=57600;
|
||||||
|
if RGBaud.ItemIndex=1 then MyCommPort.Baud:=115200;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCANTerminal.RComChange(Sender: TObject);
|
||||||
|
begin
|
||||||
|
MyCommPort.Open:=False;
|
||||||
|
MyCommPort.ComNumber:= Round(RCom.Value);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCANTerminal.CBLockRSClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
MyCommPort.Open := CBLockRS.Checked;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCANTerminal.Memo2Change(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if Memo1.Lines.Count > 100 then Memo1.Clear;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCANTerminal.ProjectBoxChange(Sender: TObject);
|
||||||
|
var i : integer;
|
||||||
|
inifile : TIniFile;
|
||||||
|
nom, num: string;
|
||||||
|
begin
|
||||||
|
|
||||||
|
for i:=0 to 15 do
|
||||||
|
if Project.UKSS[i].Exist then
|
||||||
|
begin
|
||||||
|
Project.UKSS[i].Wind.Close;
|
||||||
|
Project.UKSS[i].Exist:=false;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Project.Name := ProjectBox.Items[ProjectBox.ItemIndex];
|
||||||
|
|
||||||
|
if ProjectBox.ItemIndex >0 then
|
||||||
|
LoadProjectAdres(Project.Name);
|
||||||
|
|
||||||
|
inifile := TIniFile.Create(PathExe+'Projects.ini');
|
||||||
|
|
||||||
|
nom:='ProjectNum';
|
||||||
|
num:=inttostr(ProjectBox.ItemIndex);
|
||||||
|
|
||||||
|
inifile.WriteString('Projects',nom,num);
|
||||||
|
|
||||||
|
for i:=0 to 16 do
|
||||||
|
begin
|
||||||
|
num := 'DigiBut_'+inttostr(i);
|
||||||
|
Project.DigiButNames[i] := inifile.ReadString(Project.Name,num,'-');
|
||||||
|
end;
|
||||||
|
Project.DigiButNameChange := false;
|
||||||
|
|
||||||
|
inifile.Free;
|
||||||
|
|
||||||
|
boxx.qua:=0;
|
||||||
|
for i:= 1 to 100 do
|
||||||
|
begin
|
||||||
|
boxx.box[i].adr:=0;
|
||||||
|
boxx.box[i].qua:=0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
+407
@@ -0,0 +1,407 @@
|
|||||||
|
[Projects]
|
||||||
|
ProjectQua=9
|
||||||
|
ProjectNum=6
|
||||||
|
Project1=Áóêñèð
|
||||||
|
Project2=ÑÝÄÁÌ
|
||||||
|
Project3=Ëåäîêîë
|
||||||
|
Project4=Áàëüçàì
|
||||||
|
Project5=23550
|
||||||
|
Project6=23550.X
|
||||||
|
Project7=23550.2
|
||||||
|
Project8=ßíòàðü
|
||||||
|
Project9=23550 ÁÑÓ
|
||||||
|
|
||||||
|
[Áóêñèð]
|
||||||
|
BaseAdr=$00318200
|
||||||
|
PlusAdr=$10
|
||||||
|
Use_0=1
|
||||||
|
Use_1=1
|
||||||
|
Use_2=1
|
||||||
|
Use_3=1
|
||||||
|
RSadr_0=1
|
||||||
|
RSadr_1=2
|
||||||
|
RSadr_2=3
|
||||||
|
RSadr_3=4
|
||||||
|
Name_0=ÓÊÑÑ ÑÁ
|
||||||
|
Name_1=ÁÊÑÑ ÃÄ
|
||||||
|
Name_2=ÓÊÑÂÝÏ
|
||||||
|
Name_3=Çàäàò÷èê
|
||||||
|
DigiBut_0=Test
|
||||||
|
DigiBut_1=Def
|
||||||
|
DigiBut_2=Save
|
||||||
|
DigiBut_3=Load
|
||||||
|
DigiBut_4=Calibr
|
||||||
|
DigiBut_5=Calcul
|
||||||
|
DigiBut_6=Secret
|
||||||
|
DigiBut_7=Light
|
||||||
|
DigiBut_8=Raw
|
||||||
|
DigiBut_9=-
|
||||||
|
DigiBut_10=-
|
||||||
|
DigiBut_11=-
|
||||||
|
DigiBut_12=-
|
||||||
|
DigiBut_13=-
|
||||||
|
DigiBut_14=-
|
||||||
|
DigiBut_15=Reset
|
||||||
|
DigiBut_16=Nothing at all
|
||||||
|
|
||||||
|
|
||||||
|
[ÑÝÄÁÌ]
|
||||||
|
BaseAdr=$1051020
|
||||||
|
PlusAdr=$10
|
||||||
|
Use_0=1
|
||||||
|
Use_1=1
|
||||||
|
Use_2=1
|
||||||
|
Use_3=1
|
||||||
|
Use_4=1
|
||||||
|
Use_5=1
|
||||||
|
Use_6=1
|
||||||
|
Use_8=1
|
||||||
|
Use_9=1
|
||||||
|
Use_10=1
|
||||||
|
Use_11=1
|
||||||
|
Use_12=1
|
||||||
|
Use_13=1
|
||||||
|
Use_14=1
|
||||||
|
Use_15=1
|
||||||
|
CANadr_8=$20
|
||||||
|
Name_0=ÓÊÑÑ ÑÊ1 ÑÁ1
|
||||||
|
Name_1=ÓÊÑÑ ÑÊ2 ÑÁ1
|
||||||
|
Name_2=ÓÊÑÑ ÑÊ3 ÑÁ1
|
||||||
|
Name_3=ÓÊÑÑ ÑÊ4 ÑÁ1
|
||||||
|
Name_4=ÓÊÑÑÂÝÏ ÑÁ1
|
||||||
|
Name_5=Çàäàò÷èê ÑÁ1
|
||||||
|
Name_6=ÁÒÐ ÈÒÝÑ
|
||||||
|
Name_8=ÓÊÑÑ ÑÊ1 ÑÁ2
|
||||||
|
Name_9=ÓÊÑÑ ÑÊ2 ÑÁ2
|
||||||
|
Name_10=ÓÊÑÑ ÑÊ3 ÑÁ2
|
||||||
|
Name_11=ÓÊÑÑ ÑÊ4 ÑÁ2
|
||||||
|
Name_12=ÓÊÑÑÂÝÏ ÑÁ2
|
||||||
|
Name_13=Çàäàò÷èê ÑÁ2
|
||||||
|
Name_14=ÓÊÑÑ ÁÎÈÍ
|
||||||
|
Name_15=ÓÊÑÂÝÏ ÁÎÈÍ
|
||||||
|
DigiBut_0=Test
|
||||||
|
DigiBut_1=Def
|
||||||
|
DigiBut_2=Save
|
||||||
|
DigiBut_3=Load
|
||||||
|
DigiBut_4=Calibr
|
||||||
|
DigiBut_5=Calcul
|
||||||
|
DigiBut_6=Secret
|
||||||
|
DigiBut_7=Raw
|
||||||
|
DigiBut_8=HiVolt
|
||||||
|
DigiBut_9=-
|
||||||
|
DigiBut_10=-
|
||||||
|
DigiBut_11=-
|
||||||
|
DigiBut_12=-
|
||||||
|
DigiBut_13=-
|
||||||
|
DigiBut_14=-
|
||||||
|
DigiBut_15=Reset
|
||||||
|
DigiBut_16=Nothing at all
|
||||||
|
|
||||||
|
[Ëåäîêîë]
|
||||||
|
BaseAdr=$01CE020
|
||||||
|
PlusAdr=-$20
|
||||||
|
Use_0=1
|
||||||
|
Use_1=1
|
||||||
|
Use_2=1
|
||||||
|
Use_3=1
|
||||||
|
Use_4=1
|
||||||
|
Use_5=1
|
||||||
|
Use_8=1
|
||||||
|
Use_9=1
|
||||||
|
Use_10=1
|
||||||
|
Use_11=1
|
||||||
|
Use_12=1
|
||||||
|
Use_13=1
|
||||||
|
|
||||||
|
CANadr_0=0
|
||||||
|
CANadr_1=2
|
||||||
|
CANadr_2=4
|
||||||
|
CANadr_3=6
|
||||||
|
CANadr_4=8
|
||||||
|
CANadr_5=10
|
||||||
|
CANadr_8=1
|
||||||
|
CANadr_9=3
|
||||||
|
CANadr_10=5
|
||||||
|
CANadr_11=7
|
||||||
|
CANadr_12=9
|
||||||
|
CANadr_13=11
|
||||||
|
|
||||||
|
RSadr_0=1
|
||||||
|
RSadr_1=3
|
||||||
|
RSadr_2=5
|
||||||
|
RSadr_3=7
|
||||||
|
RSadr_4=9
|
||||||
|
RSadr_5=11
|
||||||
|
RSadr_8=2
|
||||||
|
RSadr_9=4
|
||||||
|
RSadr_10=6
|
||||||
|
RSadr_11=8
|
||||||
|
RSadr_12=10
|
||||||
|
RSadr_13=12
|
||||||
|
|
||||||
|
Name_0=ÓÊÑÑ ÁÂ1 Ï×1
|
||||||
|
Name_8=ÓÊÑÑ ÁÂ1 Ï×2
|
||||||
|
Name_1=ÓÊÑÑ ÁÂ1 Ï×1
|
||||||
|
Name_9=ÓÊÑÑ ÁÂ2 Ï×2
|
||||||
|
Name_2=ÓÊÑÑ ÁÈ1 Ï×1
|
||||||
|
Name_10=ÓÊÑÑ ÁÈ1 Ï×2
|
||||||
|
Name_3=ÓÊÑÑ ÁÈ2 Ï×1
|
||||||
|
Name_11=ÓÊÑÑ ÁÈ2 Ï×2
|
||||||
|
Name_4=ÓÊÑÑÂÝÏ1 Ï×1
|
||||||
|
Name_12=ÓÊÑÑÂÝÏ1 Ï×2
|
||||||
|
Name_5=ÓÊÑÑÂÝÏ2 Ï×1
|
||||||
|
Name_13=ÓÊÑÑÂÝÏ2 Ï×2
|
||||||
|
|
||||||
|
DigiBut_0=Test
|
||||||
|
DigiBut_1=Def
|
||||||
|
DigiBut_2=Save
|
||||||
|
DigiBut_3=Load
|
||||||
|
DigiBut_4=Raw
|
||||||
|
DigiBut_5=Read
|
||||||
|
DigiBut_6=ExtLamp
|
||||||
|
DigiBut_7=ExtLite
|
||||||
|
DigiBut_8=No log
|
||||||
|
DigiBut_9=-
|
||||||
|
DigiBut_10=-
|
||||||
|
DigiBut_11=-
|
||||||
|
DigiBut_12=-
|
||||||
|
DigiBut_13=-
|
||||||
|
DigiBut_14=-
|
||||||
|
DigiBut_15=Reset
|
||||||
|
DigiBut_16=Nothing at all
|
||||||
|
|
||||||
|
[Áàëüçàì]
|
||||||
|
BaseAdr=$0BA0000
|
||||||
|
PlusAdr=$10
|
||||||
|
Use_0=1
|
||||||
|
Use_1=1
|
||||||
|
Use_2=1
|
||||||
|
Use_3=1
|
||||||
|
Use_4=1
|
||||||
|
Use_5=1
|
||||||
|
Use_8=1
|
||||||
|
Use_9=1
|
||||||
|
Use_10=1
|
||||||
|
|
||||||
|
CANadr_0=0
|
||||||
|
CANadr_1=2
|
||||||
|
CANadr_2=4
|
||||||
|
CANadr_3=6
|
||||||
|
CANadr_4=7
|
||||||
|
CANadr_5=8
|
||||||
|
CANadr_8=1
|
||||||
|
CANadr_9=3
|
||||||
|
CANadr_10=5
|
||||||
|
|
||||||
|
RSadr_0=1
|
||||||
|
RSadr_1=3
|
||||||
|
RSadr_2=5
|
||||||
|
RSadr_3=7
|
||||||
|
RSadr_4=9
|
||||||
|
RSadr_5=11
|
||||||
|
RSadr_8=2
|
||||||
|
RSadr_9=4
|
||||||
|
RSadr_10=6
|
||||||
|
|
||||||
|
Name_0=ÁÊÑÑ Òð1
|
||||||
|
Name_8=ÁÊÑÑ Òð2
|
||||||
|
Name_1=ÓÊÑÑ ÑÁ1
|
||||||
|
Name_9=ÓÊÑÑ ÑÁ2
|
||||||
|
Name_2=ÓÊÑÑ ÓÌÏ1
|
||||||
|
Name_10=ÓÊÑÑ ÓÌÏ2
|
||||||
|
Name_3=ÁÊÑÑ ÃÄ
|
||||||
|
Name_4=Çàäàò÷èê
|
||||||
|
Name_5=ÓÊÑÑ ÂÝÏ
|
||||||
|
|
||||||
|
DigiBut_0=Test
|
||||||
|
DigiBut_1=Def
|
||||||
|
DigiBut_2=Save
|
||||||
|
DigiBut_3=Load
|
||||||
|
DigiBut_4=Calibr
|
||||||
|
DigiBut_5=Calcul
|
||||||
|
DigiBut_6=Stop
|
||||||
|
DigiBut_7=Start
|
||||||
|
DigiBut_8=Init
|
||||||
|
DigiBut_9=Tune
|
||||||
|
DigiBut_10=Secret
|
||||||
|
DigiBut_11=Light
|
||||||
|
DigiBut_12=Raw
|
||||||
|
DigiBut_13=-
|
||||||
|
DigiBut_14=-
|
||||||
|
DigiBut_15=Reset
|
||||||
|
DigiBut_16=Nothing at all
|
||||||
|
|
||||||
|
[23550]
|
||||||
|
BaseAdr=$00235500
|
||||||
|
PlusAdr=$10
|
||||||
|
Use_0=1
|
||||||
|
Use_1=1
|
||||||
|
Use_2=1
|
||||||
|
Use_3=1
|
||||||
|
RSadr_0=1
|
||||||
|
RSadr_1=2
|
||||||
|
RSadr_2=3
|
||||||
|
RSadr_3=4
|
||||||
|
Name_0=Çàäàò÷èê
|
||||||
|
Name_1=Âûíîñíîé ïóëüò
|
||||||
|
Name_2=ÓÊÑÂÝÏ
|
||||||
|
Name_3=ÁÊÑÑ ÃÄ
|
||||||
|
DigiBut_0=Test
|
||||||
|
DigiBut_1=Def
|
||||||
|
DigiBut_2=Save
|
||||||
|
DigiBut_3=Load
|
||||||
|
DigiBut_4=Calibr
|
||||||
|
DigiBut_5=Read
|
||||||
|
DigiBut_6=Secret
|
||||||
|
DigiBut_7=Send
|
||||||
|
DigiBut_8=-
|
||||||
|
DigiBut_9=-
|
||||||
|
DigiBut_10=-
|
||||||
|
DigiBut_11=-
|
||||||
|
DigiBut_12=-
|
||||||
|
DigiBut_13=-
|
||||||
|
DigiBut_14=-
|
||||||
|
DigiBut_15=Reset
|
||||||
|
DigiBut_16=Nothing at all
|
||||||
|
|
||||||
|
[23550.X]
|
||||||
|
Protokol=3
|
||||||
|
Use_0=1
|
||||||
|
Use_1=1
|
||||||
|
Use_2=1
|
||||||
|
Use_3=1
|
||||||
|
RSadr_0=1
|
||||||
|
RSadr_1=2
|
||||||
|
RSadr_2=3
|
||||||
|
RSadr_3=4
|
||||||
|
Name_0=Çàäàò÷èê
|
||||||
|
Name_1=Âûíîñíîé ïóëüò
|
||||||
|
Name_2=ÓÊÑÂÝÏ
|
||||||
|
Name_3=ÁÊÑÑ ÃÄ
|
||||||
|
DigiBut_0=Test
|
||||||
|
DigiBut_1=Def
|
||||||
|
DigiBut_2=Save
|
||||||
|
DigiBut_3=Load
|
||||||
|
DigiBut_4=Calibr
|
||||||
|
DigiBut_5=Read
|
||||||
|
DigiBut_6=Secret
|
||||||
|
DigiBut_7=Send
|
||||||
|
DigiBut_8=-
|
||||||
|
DigiBut_9=-
|
||||||
|
DigiBut_10=-
|
||||||
|
DigiBut_11=-
|
||||||
|
DigiBut_12=-
|
||||||
|
DigiBut_13=-
|
||||||
|
DigiBut_14=-
|
||||||
|
DigiBut_15=Reset
|
||||||
|
DigiBut_16=Nothing at all
|
||||||
|
|
||||||
|
|
||||||
|
[ßíòàðü]
|
||||||
|
BaseAdr=$00213000
|
||||||
|
PlusAdr=$10
|
||||||
|
Use_0=1
|
||||||
|
Use_1=1
|
||||||
|
Use_2=1
|
||||||
|
Use_3=1
|
||||||
|
Use_4=1
|
||||||
|
Use_5=1
|
||||||
|
Use_6=1
|
||||||
|
RSadr_0=1
|
||||||
|
RSadr_1=2
|
||||||
|
RSadr_2=3
|
||||||
|
RSadr_3=4
|
||||||
|
RSadr_4=5
|
||||||
|
RSadr_5=6
|
||||||
|
RSadr_6=7
|
||||||
|
Name_0=ÓÊÑÑ ÁÂ
|
||||||
|
Name_1=ÓÊÑÑ ÁÈ1
|
||||||
|
Name_2=ÓÊÑÑ ÁÈ2
|
||||||
|
Name_3=ÁÊÑÑ ÃÄ
|
||||||
|
Name_4=ÓÊÑÂÝÏ
|
||||||
|
Name_5=Çàäàò÷èê
|
||||||
|
Name_6=Âûíîñíîé ïóëüò
|
||||||
|
DigiBut_0=Test
|
||||||
|
DigiBut_1=Def
|
||||||
|
DigiBut_2=Save
|
||||||
|
DigiBut_3=Load
|
||||||
|
DigiBut_4=Calibr
|
||||||
|
DigiBut_5=Calcul
|
||||||
|
DigiBut_6=Secret
|
||||||
|
DigiBut_7=Light
|
||||||
|
DigiBut_8=Raw
|
||||||
|
DigiBut_9=-
|
||||||
|
DigiBut_10=-
|
||||||
|
DigiBut_11=-
|
||||||
|
DigiBut_12=-
|
||||||
|
DigiBut_13=-
|
||||||
|
DigiBut_14=-
|
||||||
|
DigiBut_15=Reset
|
||||||
|
DigiBut_16=Nothing at all
|
||||||
|
|
||||||
|
[23550.2]
|
||||||
|
BaseAdr=$00235500
|
||||||
|
PlusAdr=$10
|
||||||
|
Use_0=1
|
||||||
|
Use_1=1
|
||||||
|
Use_2=1
|
||||||
|
Use_3=1
|
||||||
|
Use_4=1
|
||||||
|
Use_5=1
|
||||||
|
Use_11=1
|
||||||
|
Use_12=1
|
||||||
|
Use_13=1
|
||||||
|
CANadr_0=0
|
||||||
|
CANadr_1=1
|
||||||
|
CANadr_2=2
|
||||||
|
CANadr_3=4
|
||||||
|
CANadr_4=6
|
||||||
|
CANadr_5=8
|
||||||
|
CANadr_11=5
|
||||||
|
CANadr_12=7
|
||||||
|
CANadr_13=9
|
||||||
|
RSadr_0=1
|
||||||
|
RSadr_1=2
|
||||||
|
RSadr_2=3
|
||||||
|
RSadr_3=4
|
||||||
|
RSadr_4=6
|
||||||
|
RSadr_5=8
|
||||||
|
RSadr_11=5
|
||||||
|
RSadr_12=7
|
||||||
|
RSadr_13=9
|
||||||
|
Name_0=Çàäàò÷èê
|
||||||
|
Name_1=Âûíîñíîé ïóëüò
|
||||||
|
Name_2=ÁÊÑÑ ÃÄ
|
||||||
|
Name_3=ÓÊÑÑ ÑÈ ÑÁ1
|
||||||
|
Name_4=ÓÊÑÑ ÑÂÔ ÑÁ1
|
||||||
|
Name_5=ÓÊÑÂÝÏ ÑÁ1
|
||||||
|
Name_11=ÓÊÑÑ ÑÈ ÑÁ2
|
||||||
|
Name_12=ÓÊÑÑ ÑÂÔ ÑÁ2
|
||||||
|
Name_13=ÓÊÑÂÝÏ ÑÁ2
|
||||||
|
DigiBut_0=Test
|
||||||
|
DigiBut_1=Def
|
||||||
|
DigiBut_2=Save
|
||||||
|
DigiBut_3=Load
|
||||||
|
DigiBut_4=Calibr
|
||||||
|
DigiBut_5=Calc
|
||||||
|
DigiBut_6=Secret
|
||||||
|
DigiBut_7=Send
|
||||||
|
DigiBut_8=Raw
|
||||||
|
DigiBut_9=-
|
||||||
|
DigiBut_10=-
|
||||||
|
DigiBut_11=-
|
||||||
|
DigiBut_12=-
|
||||||
|
DigiBut_13=-
|
||||||
|
DigiBut_14=-
|
||||||
|
DigiBut_15=Reset
|
||||||
|
DigiBut_16=Nothing at all
|
||||||
|
|
||||||
|
[23550 ÁÑÓ]
|
||||||
|
BaseAdr=$0CEB0F1
|
||||||
|
PlusAdr=-$10
|
||||||
|
Use_0=1
|
||||||
|
Use_1=1
|
||||||
|
Name_0=ÁÑÓ1
|
||||||
|
Name_1=ÁÑÓ2
|
||||||
|
DigiBut_16=Nothing at all
|
||||||
|
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
-$A8
|
||||||
|
-$B-
|
||||||
|
-$C+
|
||||||
|
-$D+
|
||||||
|
-$E-
|
||||||
|
-$F-
|
||||||
|
-$G+
|
||||||
|
-$H+
|
||||||
|
-$I+
|
||||||
|
-$J-
|
||||||
|
-$K-
|
||||||
|
-$L+
|
||||||
|
-$M-
|
||||||
|
-$N+
|
||||||
|
-$O+
|
||||||
|
-$P+
|
||||||
|
-$Q-
|
||||||
|
-$R-
|
||||||
|
-$S-
|
||||||
|
-$T-
|
||||||
|
-$U-
|
||||||
|
-$V+
|
||||||
|
-$W-
|
||||||
|
-$X+
|
||||||
|
-$YD
|
||||||
|
-$Z1
|
||||||
|
-cg
|
||||||
|
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
|
||||||
|
-H+
|
||||||
|
-W+
|
||||||
|
-M
|
||||||
|
-$M16384,1048576
|
||||||
|
-K$00400000
|
||||||
|
-LE"d:\borland\delphi7\Projects\Bpl"
|
||||||
|
-LN"d:\borland\delphi7\Projects\Bpl"
|
||||||
|
-LUvcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOfficeXP;AsyncPro
|
||||||
|
-w-UNSAFE_TYPE
|
||||||
|
-w-UNSAFE_CODE
|
||||||
|
-w-UNSAFE_CAST
|
||||||
@@ -0,0 +1,139 @@
|
|||||||
|
[FileVersion]
|
||||||
|
Version=7.0
|
||||||
|
[Compiler]
|
||||||
|
A=8
|
||||||
|
B=0
|
||||||
|
C=1
|
||||||
|
D=1
|
||||||
|
E=0
|
||||||
|
F=0
|
||||||
|
G=1
|
||||||
|
H=1
|
||||||
|
I=1
|
||||||
|
J=0
|
||||||
|
K=0
|
||||||
|
L=1
|
||||||
|
M=0
|
||||||
|
N=1
|
||||||
|
O=1
|
||||||
|
P=1
|
||||||
|
Q=0
|
||||||
|
R=0
|
||||||
|
S=0
|
||||||
|
T=0
|
||||||
|
U=0
|
||||||
|
V=1
|
||||||
|
W=0
|
||||||
|
X=1
|
||||||
|
Y=1
|
||||||
|
Z=1
|
||||||
|
ShowHints=1
|
||||||
|
ShowWarnings=1
|
||||||
|
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
|
||||||
|
NamespacePrefix=
|
||||||
|
SymbolDeprecated=1
|
||||||
|
SymbolLibrary=1
|
||||||
|
SymbolPlatform=1
|
||||||
|
UnitLibrary=1
|
||||||
|
UnitPlatform=1
|
||||||
|
UnitDeprecated=1
|
||||||
|
HResultCompat=1
|
||||||
|
HidingMember=1
|
||||||
|
HiddenVirtual=1
|
||||||
|
Garbage=1
|
||||||
|
BoundsError=1
|
||||||
|
ZeroNilCompat=1
|
||||||
|
StringConstTruncated=1
|
||||||
|
ForLoopVarVarPar=1
|
||||||
|
TypedConstVarPar=1
|
||||||
|
AsgToTypedConst=1
|
||||||
|
CaseLabelRange=1
|
||||||
|
ForVariable=1
|
||||||
|
ConstructingAbstract=1
|
||||||
|
ComparisonFalse=1
|
||||||
|
ComparisonTrue=1
|
||||||
|
ComparingSignedUnsigned=1
|
||||||
|
CombiningSignedUnsigned=1
|
||||||
|
UnsupportedConstruct=1
|
||||||
|
FileOpen=1
|
||||||
|
FileOpenUnitSrc=1
|
||||||
|
BadGlobalSymbol=1
|
||||||
|
DuplicateConstructorDestructor=1
|
||||||
|
InvalidDirective=1
|
||||||
|
PackageNoLink=1
|
||||||
|
PackageThreadVar=1
|
||||||
|
ImplicitImport=1
|
||||||
|
HPPEMITIgnored=1
|
||||||
|
NoRetVal=1
|
||||||
|
UseBeforeDef=1
|
||||||
|
ForLoopVarUndef=1
|
||||||
|
UnitNameMismatch=1
|
||||||
|
NoCFGFileFound=1
|
||||||
|
MessageDirective=1
|
||||||
|
ImplicitVariants=1
|
||||||
|
UnicodeToLocale=1
|
||||||
|
LocaleToUnicode=1
|
||||||
|
ImagebaseMultiple=1
|
||||||
|
SuspiciousTypecast=1
|
||||||
|
PrivatePropAccessor=1
|
||||||
|
UnsafeType=0
|
||||||
|
UnsafeCode=0
|
||||||
|
UnsafeCast=0
|
||||||
|
[Linker]
|
||||||
|
MapFile=0
|
||||||
|
OutputObjs=0
|
||||||
|
ConsoleApp=1
|
||||||
|
DebugInfo=0
|
||||||
|
RemoteSymbols=0
|
||||||
|
MinStackSize=16384
|
||||||
|
MaxStackSize=1048576
|
||||||
|
ImageBase=4194304
|
||||||
|
ExeDescription=
|
||||||
|
[Directories]
|
||||||
|
OutputDir=
|
||||||
|
UnitOutputDir=
|
||||||
|
PackageDLLOutputDir=
|
||||||
|
PackageDCPOutputDir=
|
||||||
|
SearchPath=
|
||||||
|
Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOfficeXP;AsyncPro
|
||||||
|
Conditionals=
|
||||||
|
DebugSourceDirs=
|
||||||
|
UsePackages=1
|
||||||
|
[Parameters]
|
||||||
|
RunParams=
|
||||||
|
HostApplication=
|
||||||
|
Launcher=
|
||||||
|
UseLauncher=0
|
||||||
|
DebugCWD=
|
||||||
|
[Language]
|
||||||
|
ActiveLang=
|
||||||
|
ProjectLang=
|
||||||
|
RootDir=D:\Borland\Delphi7\Bin\
|
||||||
|
[Version Info]
|
||||||
|
IncludeVerInfo=0
|
||||||
|
AutoIncBuild=0
|
||||||
|
MajorVer=1
|
||||||
|
MinorVer=0
|
||||||
|
Release=0
|
||||||
|
Build=0
|
||||||
|
Debug=0
|
||||||
|
PreRelease=0
|
||||||
|
Special=0
|
||||||
|
Private=0
|
||||||
|
DLL=0
|
||||||
|
Locale=1049
|
||||||
|
CodePage=1251
|
||||||
|
[Version Info Keys]
|
||||||
|
CompanyName=
|
||||||
|
FileDescription=
|
||||||
|
FileVersion=1.0.0.0
|
||||||
|
InternalName=
|
||||||
|
LegalCopyright=
|
||||||
|
LegalTrademarks=
|
||||||
|
OriginalFilename=
|
||||||
|
ProductName=
|
||||||
|
ProductVersion=1.0.0.0
|
||||||
|
Comments=
|
||||||
|
[HistoryLists\hlUnitAliases]
|
||||||
|
Count=1
|
||||||
|
Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
program SetTerminal_UKSS_CAN;
|
||||||
|
|
||||||
|
uses
|
||||||
|
Forms,
|
||||||
|
CAN_Terminal in 'CAN_Terminal.pas' {CANTerminal},
|
||||||
|
UNiiefa in 'UNiiefa.pas' {UNiiefa};
|
||||||
|
|
||||||
|
{$R *.res}
|
||||||
|
|
||||||
|
begin
|
||||||
|
Application.Initialize;
|
||||||
|
Application.CreateForm(TCANTerminal, CANTerminal);
|
||||||
|
Application.CreateForm(TModbusForm, ModbusForm);
|
||||||
|
|
||||||
|
Application.Run;
|
||||||
|
end.
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
+443
@@ -0,0 +1,443 @@
|
|||||||
|
unit ToolsCan;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses Windows, extctrls, {VarVar,} slcan,
|
||||||
|
Messages, SysUtils, Variants, Classes, Graphics, Controls,
|
||||||
|
Dialogs, StdCtrls, ComCtrls, Registry;
|
||||||
|
|
||||||
|
type
|
||||||
|
tCanMsgStruct = Record
|
||||||
|
m_dwID : DWORD; // CAN identifier
|
||||||
|
m_bFF : BYTE; // CAN frame format
|
||||||
|
m_bDLC : BYTE; // CAN data length code
|
||||||
|
m_bData : array[1..8] of BYTE; // CAN data
|
||||||
|
m_dwTime : DWORD; // Receipt time in ms
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure OpenSlavna(speedcancode, select_port:integer);
|
||||||
|
procedure CloseSlavna();
|
||||||
|
procedure InitSlavnaDll();
|
||||||
|
function ReadMessageCanID(timerc:Integer):Integer;
|
||||||
|
procedure FreeSlavnaDll();
|
||||||
|
procedure SetFilterIDCan(m_dwID : DWORD);
|
||||||
|
function WriteMessageCanID(cb:integer; var outstr:string):Integer;
|
||||||
|
|
||||||
|
|
||||||
|
var
|
||||||
|
|
||||||
|
arrspeedcan : array [0..4] of Word = (SLCAN_BR_100K,SLCAN_BR_CIA_125K,SLCAN_BR_CIA_250K,SLCAN_BR_CIA_500K,SLCAN_BR_CIA_1000K);
|
||||||
|
//can
|
||||||
|
devicecount:longword;
|
||||||
|
hDevice:TSlCanDevice;
|
||||||
|
br:TSlCanBitRate;
|
||||||
|
OutMsg:TSlCanMessage;
|
||||||
|
|
||||||
|
OutMsgArr:array[0..100] of TSlCanMessage;
|
||||||
|
|
||||||
|
// InMsg:array [0..99] of TSlCanMessage;
|
||||||
|
CanInitedDLL : Boolean = False;
|
||||||
|
CanOpened : Boolean = False;
|
||||||
|
|
||||||
|
InMsgCan : array [0..60000] of TSlCanMessage;
|
||||||
|
InEventCan : array [0..60000] of TSlCanEvent;
|
||||||
|
InEventCanTime : array [0..60000] of Longword;
|
||||||
|
|
||||||
|
ReadCountCan:longword;
|
||||||
|
|
||||||
|
ArrCanMessage : array [0..60000] of tCanMsgStruct;
|
||||||
|
ArrCanMessageSend : array [0..30] of tCanMsgStruct;
|
||||||
|
|
||||||
|
CanMessageTransmit : tCanMsgStruct;
|
||||||
|
|
||||||
|
FilterIDCAN : DWORD = 0;
|
||||||
|
TimePauseCanIn : longword;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
procedure SetFilterIDCan(m_dwID : DWORD);
|
||||||
|
begin
|
||||||
|
|
||||||
|
FilterIDCAN := m_dwID;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function WriteMessageCanID(cb:integer; var outstr:string):Integer ;
|
||||||
|
const
|
||||||
|
cTxStatus:array [0..7] of string =('OK','TimeOut','BusOff','Abort','Disable','One shot error','Invalid mode','Unknown');
|
||||||
|
var
|
||||||
|
i : Integer;
|
||||||
|
WriteStatus:byte;
|
||||||
|
WriteCount:Integer;
|
||||||
|
|
||||||
|
b: Boolean;
|
||||||
|
|
||||||
|
begin
|
||||||
|
|
||||||
|
for i:=0 to cb-1 do
|
||||||
|
begin
|
||||||
|
OutMsg.ID:=ArrCanMessageSend[i].m_dwID;
|
||||||
|
OutMsg.Info:=SLCAN_MES_INFO_EXT;
|
||||||
|
|
||||||
|
OutMsg.DataCount:= ArrCanMessageSend[0].m_bDLC; //8;
|
||||||
|
|
||||||
|
OutMsg.Data[0]:=ArrCanMessageSend[i].m_bData[1];
|
||||||
|
OutMsg.Data[1]:=ArrCanMessageSend[i].m_bData[2];
|
||||||
|
OutMsg.Data[2]:=ArrCanMessageSend[i].m_bData[3];
|
||||||
|
OutMsg.Data[3]:=ArrCanMessageSend[i].m_bData[4];
|
||||||
|
OutMsg.Data[4]:=ArrCanMessageSend[i].m_bData[5];
|
||||||
|
OutMsg.Data[5]:=ArrCanMessageSend[i].m_bData[6];
|
||||||
|
OutMsg.Data[6]:=ArrCanMessageSend[i].m_bData[7];
|
||||||
|
OutMsg.Data[7]:=ArrCanMessageSend[i].m_bData[8];
|
||||||
|
|
||||||
|
OutMsgArr[i]:=OutMsg;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
if (SlCan_DeviceWriteMessages(hDevice,@OutMsgArr,cb,@WriteStatus)) then
|
||||||
|
begin
|
||||||
|
if WriteStatus > 7 then WriteStatus:=7;
|
||||||
|
if WriteStatus = 0 then
|
||||||
|
outstr:=Format('Status CAN = %s.',[cTxStatus[0]])
|
||||||
|
else
|
||||||
|
outstr:=Format('Status CAN = %s.',[cTxStatus[WriteStatus]])
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
outstr:=' Transmit error';
|
||||||
|
result:= 7;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
result:= WriteStatus;
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
for i:=0 to cb-1 do
|
||||||
|
begin
|
||||||
|
|
||||||
|
OutMsg.ID:=ArrCanMessageSend[i].m_dwID;
|
||||||
|
OutMsg.Info:=SLCAN_MES_INFO_EXT;
|
||||||
|
OutMsg.DataCount:= 8;
|
||||||
|
OutMsg.Data[0]:=ArrCanMessageSend[i].m_bData[1];
|
||||||
|
OutMsg.Data[1]:=ArrCanMessageSend[i].m_bData[2];
|
||||||
|
OutMsg.Data[2]:=ArrCanMessageSend[i].m_bData[3];
|
||||||
|
OutMsg.Data[3]:=ArrCanMessageSend[i].m_bData[4];
|
||||||
|
OutMsg.Data[4]:=ArrCanMessageSend[i].m_bData[5];
|
||||||
|
OutMsg.Data[5]:=ArrCanMessageSend[i].m_bData[6];
|
||||||
|
OutMsg.Data[6]:=ArrCanMessageSend[i].m_bData[7];
|
||||||
|
OutMsg.Data[7]:=ArrCanMessageSend[i].m_bData[8];
|
||||||
|
|
||||||
|
b:=SlCan_DeviceWriteMessages(hDevice,@OutMsg,1,@WriteStatus);
|
||||||
|
|
||||||
|
if (not b) then
|
||||||
|
begin
|
||||||
|
result:=-1;
|
||||||
|
exit ;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Ïðîâåðèì ñòàòóñ ïåðåäà÷è
|
||||||
|
if (WriteStatus<>SLCAN_TX_STATUS_OK) then
|
||||||
|
begin
|
||||||
|
result:=-2;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
result := 0;
|
||||||
|
}
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function ReadMessageCanID(timerc:Integer):Integer ;
|
||||||
|
var
|
||||||
|
b:longbool;
|
||||||
|
k ,i , can1, can_error, can2 : Integer;
|
||||||
|
deltat : Longword;
|
||||||
|
begin
|
||||||
|
|
||||||
|
can_error:=0;
|
||||||
|
TimePauseCanIn:=0;
|
||||||
|
if CanOpened then
|
||||||
|
begin
|
||||||
|
|
||||||
|
for i:=0 to 60000-1 do
|
||||||
|
begin
|
||||||
|
InEventCanTime[i]:=0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
// if (SlCan_DeviceSetStartTimeStamp(hDevice, 0)=False) then
|
||||||
|
// exit;
|
||||||
|
|
||||||
|
// b:=SlCan_DeviceReadMessages(hDevice,timerc,@InMsgCan,60000,@ReadCountCan);
|
||||||
|
// b:=SlCan_DeviceReadEvents(hDevice,timerc,@InEventCan,60000,@ReadCountCan);
|
||||||
|
b:=SlCan_DeviceReadEvents(hDevice,timerc,@InEventCan,1000,@ReadCountCan);
|
||||||
|
|
||||||
|
if (not b) then
|
||||||
|
begin
|
||||||
|
// CanMessage.m_dwID := 0;
|
||||||
|
result:=0;
|
||||||
|
// exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if (ReadCountCan>0 ) then
|
||||||
|
begin
|
||||||
|
|
||||||
|
can1:=0;
|
||||||
|
can2:=0;
|
||||||
|
for i:=0 to ReadCountCan-1 do
|
||||||
|
begin
|
||||||
|
|
||||||
|
if (InEventCan[i].EventType=0) then
|
||||||
|
begin
|
||||||
|
InMsgCan[can1] := InEventCan[i].Msg;
|
||||||
|
|
||||||
|
deltat:=0;
|
||||||
|
if (i>0) then
|
||||||
|
deltat:=InEventCan[i].TimeStampLo - InEventCan[i-1].TimeStampLo
|
||||||
|
else
|
||||||
|
deltat:=0;
|
||||||
|
|
||||||
|
inc(can1);
|
||||||
|
|
||||||
|
if (deltat<>0) then
|
||||||
|
begin
|
||||||
|
InEventCanTime[can2]:= deltat;
|
||||||
|
inc(can2);
|
||||||
|
if (TimePauseCanIn<deltat) then TimePauseCanIn:=deltat;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
inc(can_error);
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
k:=0;
|
||||||
|
for i:=0 to can1-1 do
|
||||||
|
begin
|
||||||
|
if ((FilterIDCAN>0) and ((InMsgCan[i].ID=FilterIDCAN) or (InMsgCan[i].ID=(FilterIDCAN+$01)) ))
|
||||||
|
or (FilterIDCAN=0) then
|
||||||
|
begin
|
||||||
|
|
||||||
|
ArrCanMessage[k].m_dwID := InMsgCan[i].ID;
|
||||||
|
|
||||||
|
ArrCanMessage[k].m_bDLC := InMsgCan[i].DataCount;
|
||||||
|
|
||||||
|
ArrCanMessage[k].m_bData[1] := InMsgCan[i].Data[0];
|
||||||
|
ArrCanMessage[k].m_bData[2] := InMsgCan[i].Data[1];
|
||||||
|
ArrCanMessage[k].m_bData[3] := InMsgCan[i].Data[2];
|
||||||
|
ArrCanMessage[k].m_bData[4] := InMsgCan[i].Data[3];
|
||||||
|
ArrCanMessage[k].m_bData[5] := InMsgCan[i].Data[4];
|
||||||
|
ArrCanMessage[k].m_bData[6] := InMsgCan[i].Data[5];
|
||||||
|
ArrCanMessage[k].m_bData[7] := InMsgCan[i].Data[6];
|
||||||
|
ArrCanMessage[k].m_bData[8] := InMsgCan[i].Data[7];
|
||||||
|
Inc(k);
|
||||||
|
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
end;
|
||||||
|
result:=k;
|
||||||
|
|
||||||
|
// InMsg.
|
||||||
|
// Writeln(Format('read %d messages',[ReadCount]));
|
||||||
|
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
// CanMessage.m_dwID := 0;
|
||||||
|
result:=0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
k:=0;
|
||||||
|
for i:=0 to ReadCountCan-1 do
|
||||||
|
begin
|
||||||
|
if ((FilterIDCAN>0) and ((InMsgCan[i].ID=FilterIDCAN) or (InMsgCan[i].ID=(FilterIDCAN+$01)) ))
|
||||||
|
or (FilterIDCAN=0) then
|
||||||
|
begin
|
||||||
|
|
||||||
|
ArrCanMessage[k].m_dwID := InMsgCan[i].ID;
|
||||||
|
ArrCanMessage[k].m_bData[1] := InMsgCan[i].Data[0];
|
||||||
|
ArrCanMessage[k].m_bData[2] := InMsgCan[i].Data[1];
|
||||||
|
ArrCanMessage[k].m_bData[3] := InMsgCan[i].Data[2];
|
||||||
|
ArrCanMessage[k].m_bData[4] := InMsgCan[i].Data[3];
|
||||||
|
ArrCanMessage[k].m_bData[5] := InMsgCan[i].Data[4];
|
||||||
|
ArrCanMessage[k].m_bData[6] := InMsgCan[i].Data[5];
|
||||||
|
ArrCanMessage[k].m_bData[7] := InMsgCan[i].Data[6];
|
||||||
|
ArrCanMessage[k].m_bData[8] := InMsgCan[i].Data[7];
|
||||||
|
Inc(k);
|
||||||
|
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
end;
|
||||||
|
result:=k;
|
||||||
|
|
||||||
|
// InMsg.
|
||||||
|
// Writeln(Format('read %d messages',[ReadCount]));
|
||||||
|
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
// CanMessage.m_dwID := 0;
|
||||||
|
result:=0;
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
|
end
|
||||||
|
else
|
||||||
|
Result:=0;
|
||||||
|
|
||||||
|
if (can_error>100) then
|
||||||
|
result:=1;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
procedure InitSlavnaDll();
|
||||||
|
var
|
||||||
|
b:longbool;
|
||||||
|
|
||||||
|
begin
|
||||||
|
|
||||||
|
// Çàãðóçèì áèáëèîòåêó. Íåîáõîäèìî ýòî ñäåëàòü îäèí ðàç
|
||||||
|
// äî âûçîâà ëþáîé äðóãîé ôóíêöèè áèáëèîòåêè.
|
||||||
|
CanInitedDLL:=SlCan_Load(nil,nil);
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
procedure FreeSlavnaDll();
|
||||||
|
var
|
||||||
|
b:longbool;
|
||||||
|
|
||||||
|
begin
|
||||||
|
|
||||||
|
// Çàãðóçèì áèáëèîòåêó. Íåîáõîäèìî ýòî ñäåëàòü îäèí ðàç
|
||||||
|
// äî âûçîâà ëþáîé äðóãîé ôóíêöèè áèáëèîòåêè.
|
||||||
|
SlCan_Free(False);
|
||||||
|
CanInitedDLL:=False;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure OpenSlavna(speedcancode,select_port:integer);
|
||||||
|
var
|
||||||
|
b:longbool;
|
||||||
|
begin
|
||||||
|
|
||||||
|
if (not CanInitedDLL) then exit;
|
||||||
|
|
||||||
|
if CanOpened then Exit;
|
||||||
|
|
||||||
|
// Âûÿñíèì, ñêîëüêî óñòðîéñòâ äîñòóïíî
|
||||||
|
devicecount:= SlCan_GetDeviceCount();
|
||||||
|
if (devicecount=0) or (devicecount=INVALID_HANDLE_VALUE) or (devicecount=INVALID_HANDLE_VALUE-1) then exit;
|
||||||
|
|
||||||
|
if (select_port>1) then
|
||||||
|
begin
|
||||||
|
if (select_port>devicecount) then
|
||||||
|
select_port:=devicecount;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
select_port:=1;
|
||||||
|
// Ïîëó÷èì ññûëêó íà ïåðâîå óñòðîéñòâî
|
||||||
|
hDevice:= SlCan_GetDevice(select_port-1);
|
||||||
|
if (hDevice=INVALID_HANDLE_VALUE) then exit;
|
||||||
|
|
||||||
|
// Îòêðîåì óñòðîéñòâî.
|
||||||
|
b:= SlCan_DeviceOpen(hDevice);
|
||||||
|
if (not b) then exit;
|
||||||
|
|
||||||
|
// Ïðè îòêðûòèè óñòðîéñòâà óñòàíàâëèâàåòñÿ ìàêñèìàëüíî âîçìîæíàÿ
|
||||||
|
// ñêîðîñòü ïåðåäà÷è. Íî ìû óñòàíîâèì 125kb/s
|
||||||
|
br.BRP:=arrspeedcan[speedcancode];
|
||||||
|
b:=SlCan_DeviceSetBitRate(hDevice,@br);
|
||||||
|
if (not b) then exit;
|
||||||
|
|
||||||
|
b:= SlCan_DeviceSetEventLevel(hDevice,SLCAN_EVT_LEVEL_TIME_STAMP);
|
||||||
|
if (not b) then exit;
|
||||||
|
|
||||||
|
|
||||||
|
// Óñòàíîâèì ðåæèì SLCAN_MODE_NORMAL
|
||||||
|
b:= SlCan_DeviceSetMode(hDevice,SLCAN_MODE_NORMAL);
|
||||||
|
if (not b) then exit;
|
||||||
|
|
||||||
|
|
||||||
|
b:= SlCan_DeviceSetTXTimeOut(hDevice,100);
|
||||||
|
if (not b) then exit;
|
||||||
|
|
||||||
|
CanOpened:=True;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure CloseSlavna();
|
||||||
|
var
|
||||||
|
b:longbool;
|
||||||
|
begin
|
||||||
|
{
|
||||||
|
// Âûÿñíèì, ñêîëüêî óñòðîéñòâ äîñòóïíî
|
||||||
|
devicecount:= SlCan_GetDeviceCount();
|
||||||
|
if (devicecount=0) then exit;
|
||||||
|
|
||||||
|
// Ïîëó÷èì ññûëêó íà ïåðâîå óñòðîéñòâî
|
||||||
|
hDevice:= SlCan_GetDevice(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (hDevice=INVALID_HANDLE_VALUE) then exit;
|
||||||
|
|
||||||
|
// Çàêðîåì óñòðîéñòâî.
|
||||||
|
b:= SlCan_DeviceClose(hDevice);
|
||||||
|
if (not b) then exit;
|
||||||
|
|
||||||
|
CanOpened := False;
|
||||||
|
{
|
||||||
|
// Ïðè îòêðûòèè óñòðîéñòâà óñòàíàâëèâàåòñÿ ìàêñèìàëüíî âîçìîæíàÿ
|
||||||
|
// ñêîðîñòü ïåðåäà÷è. Íî ìû óñòàíîâèì 125kb/s
|
||||||
|
br.BRP:=speedcan[rgBaudCAN.ItemIndex];
|
||||||
|
b:=SlCan_DeviceSetBitRate(hDevice,@br);
|
||||||
|
if (not b) then exit;
|
||||||
|
|
||||||
|
// Óñòàíîâèì ðåæèì SLCAN_MODE_NORMAL
|
||||||
|
b:= SlCan_DeviceSetMode(hDevice,SLCAN_MODE_NORMAL);
|
||||||
|
if (not b) then exit;
|
||||||
|
}
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
end.
|
||||||
BIN
Binary file not shown.
+285
@@ -0,0 +1,285 @@
|
|||||||
|
unit ToolsRS;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
|
||||||
|
Forms, AdPort, OoMisc;
|
||||||
|
|
||||||
|
var
|
||||||
|
|
||||||
|
BufIn, BufOut : Array [0..200000] of byte;
|
||||||
|
FlagRS : Boolean = false;
|
||||||
|
FlagAbortKey : Boolean = false;
|
||||||
|
|
||||||
|
Count_error : Integer = 0;
|
||||||
|
RSTimeOut : Boolean = True;
|
||||||
|
|
||||||
|
procedure SendAddress (AdrCon:Byte);
|
||||||
|
function RunCmdNew (Cmd : Byte; LengthOut,LengthIn :LongWord): Byte;
|
||||||
|
function ContrlolSumCRC16(BufCRC : Array of Byte; LengthB : LongWord): Word;
|
||||||
|
function LB(X: Word): Byte;
|
||||||
|
function HB(X: Word): Byte;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses CAN_Terminal;
|
||||||
|
|
||||||
|
Function ContrlolSumCRC16(BufCRC : Array of Byte; LengthB : LongWord) : Word;
|
||||||
|
Var
|
||||||
|
CRC : Word;
|
||||||
|
Index1,
|
||||||
|
Index2: LongWord;
|
||||||
|
rb : Byte;
|
||||||
|
Begin
|
||||||
|
|
||||||
|
CRC := $ffff;
|
||||||
|
For Index1 := 0 To LengthB-1 Do
|
||||||
|
Begin
|
||||||
|
CRC := (CRC and $FFFF);
|
||||||
|
CRC := (CRC XOR (BufCRC[Index1]));
|
||||||
|
For Index2 := 1 To 8 Do
|
||||||
|
If ((CRC And $1) <> 0) Then
|
||||||
|
CRC := ((CRC SHR 1) xor $A001) else CRC := (CRC SHR 1)
|
||||||
|
end;
|
||||||
|
Result := (CRC and $FFFF);
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure SendAddress (AdrCon:Byte);
|
||||||
|
var
|
||||||
|
ET : EventTimer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if AdrCon = 0 then exit;
|
||||||
|
CANTerminal.MyCommPort.Parity:=pNone;
|
||||||
|
CANTerminal.MyCommPort.PutChar(Chr(AdrCon));
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function RunCmdNew(Cmd : Byte; LengthOut,LengthIn :LongWord): Byte;
|
||||||
|
var
|
||||||
|
|
||||||
|
b : Byte;
|
||||||
|
CSum,PAdr : Word;
|
||||||
|
CSumb : Byte;
|
||||||
|
BB : LongWord;
|
||||||
|
bb1,bb2 : Word;
|
||||||
|
i,i1,i2 : LongWord;
|
||||||
|
ET : EventTimer;
|
||||||
|
Ch : Char;
|
||||||
|
BufSize : LongWord ;
|
||||||
|
Posit : LongWord;
|
||||||
|
Block1 : Array [0..9000] of byte;
|
||||||
|
FlagOpenRS : Boolean;
|
||||||
|
Fr : Byte;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if CANTerminal.MyCommPort.OutBuffUsed <> 0 then exit;
|
||||||
|
|
||||||
|
FlagRs:=True;
|
||||||
|
FlagAbortKey:=False;
|
||||||
|
CANTerminal.AbortKey.Visible:=True;
|
||||||
|
|
||||||
|
FlagOpenRS := CANTerminal.MyCommPort.Open;
|
||||||
|
|
||||||
|
CANTerminal.MyCommPort.Open:=True;
|
||||||
|
|
||||||
|
CANTerminal.MyCommPort.FlushInBuffer;
|
||||||
|
CANTerminal.MyCommPort.FlushOutBuffer;
|
||||||
|
|
||||||
|
Posit:=0;
|
||||||
|
CANTerminal.PBRs.Position:=0;
|
||||||
|
CANTerminal.PBRs.Max:=LengthOut+LengthIn;
|
||||||
|
|
||||||
|
Count_error := 0;
|
||||||
|
|
||||||
|
BufIn[0]:=0;
|
||||||
|
BufIn[1]:=0;
|
||||||
|
BufIn[2]:=0;
|
||||||
|
BufIn[3]:=0;
|
||||||
|
BufIn[4]:=0;
|
||||||
|
BufIn[5]:=0;
|
||||||
|
BufIn[6]:=0;
|
||||||
|
BufIn[7]:=0;
|
||||||
|
BufIn[8]:=0;
|
||||||
|
BufIn[9]:=0;
|
||||||
|
|
||||||
|
Padr:=$3f8+5;
|
||||||
|
|
||||||
|
if Cmd<>0 then SendAddress(Cmd);
|
||||||
|
|
||||||
|
BufOut[LengthOut]:=0;
|
||||||
|
BufOut[LengthOut+1]:=0;
|
||||||
|
BufOut[LengthOut+2]:=0;
|
||||||
|
BufOut[LengthOut+3]:=0;
|
||||||
|
|
||||||
|
i1:=LengthOut+1;
|
||||||
|
i2:=0;
|
||||||
|
|
||||||
|
repeat
|
||||||
|
|
||||||
|
if i1>=1024 then begin
|
||||||
|
|
||||||
|
for i:=0 to 1023 do Block1[i] := BufOut[i+i2];
|
||||||
|
|
||||||
|
while CANTerminal.MyCommPort.OutBuffUsed<>0 do;
|
||||||
|
|
||||||
|
CANTerminal.MyCommPort.PutBlock(Block1,1024);
|
||||||
|
Posit:=Posit+1024;
|
||||||
|
|
||||||
|
i1:=i1-1024;
|
||||||
|
i2:=i2+1024;
|
||||||
|
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
|
||||||
|
if ((i1<1024) and (i1>0)) then begin
|
||||||
|
|
||||||
|
for i:=0 to i1-1 do Block1[i] := BufOut[i+i2];
|
||||||
|
|
||||||
|
while CANTerminal.MyCommPort.OutBuffUsed<>0 do;
|
||||||
|
|
||||||
|
CANTerminal.MyCommPort.PutBlock(Block1,i1);
|
||||||
|
Posit:=Posit+i1;
|
||||||
|
|
||||||
|
while CANTerminal.MyCommPort.OutBuffUsed<>0 do;
|
||||||
|
|
||||||
|
i1:=0;
|
||||||
|
i2:=LengthOut;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
CANTerminal.PBRs.Position:=Posit;
|
||||||
|
Application.ProcessMessages;
|
||||||
|
|
||||||
|
if FlagAbortKey then begin
|
||||||
|
Result:=3;
|
||||||
|
FlagRs:=False;
|
||||||
|
|
||||||
|
CANTerminal.MyCommPort.Open:=FlagOpenRS;
|
||||||
|
exit;
|
||||||
|
|
||||||
|
FlagAbortKey:=False;
|
||||||
|
CANTerminal.AbortKey.Visible:=False;
|
||||||
|
end;
|
||||||
|
|
||||||
|
until (i1=0);
|
||||||
|
|
||||||
|
while CANTerminal.MyCommPort.OutBuffUsed<>0 do;
|
||||||
|
|
||||||
|
i:=0;
|
||||||
|
|
||||||
|
while i<(LengthIn) do begin
|
||||||
|
|
||||||
|
bb:=0;
|
||||||
|
|
||||||
|
RSTimeOut:= false;
|
||||||
|
NewTimer(ET,Round(CANTerminal.TimeWait.Value));
|
||||||
|
|
||||||
|
repeat
|
||||||
|
CANTerminal.MyCommPort.ProcessCommunications;
|
||||||
|
// Application.ProcessMessages;
|
||||||
|
|
||||||
|
if CANTerminal.MyCommPort.InBuffUsed>1024 then begin
|
||||||
|
CANTerminal.MyCommPort.GetBlock(Block1,1024);
|
||||||
|
for i1:=0 to 1023 do BufIn[i+i1]:=Block1[i1];
|
||||||
|
i:=i+i1;
|
||||||
|
Posit:=Posit+1024;
|
||||||
|
end;
|
||||||
|
|
||||||
|
If CANTerminal.MyCommPort.CharReady then
|
||||||
|
begin
|
||||||
|
inc(Posit);
|
||||||
|
CANTerminal.PBRs.Position:=Posit;
|
||||||
|
Ch:=CANTerminal.MyCommPort.GetChar;
|
||||||
|
bb:=1;
|
||||||
|
|
||||||
|
BufIn[i]:=Ord(Ch);
|
||||||
|
inc(i);
|
||||||
|
|
||||||
|
// if not ((i>2) and (i > BufIn[2]+4))
|
||||||
|
// then Application.ProcessMessages;
|
||||||
|
|
||||||
|
Break;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
if FlagAbortKey then begin
|
||||||
|
FlagAbortKey:=False;
|
||||||
|
CANTerminal.AbortKey.Visible:=False;
|
||||||
|
Result:=3; // Ïîëó÷åíèå ïðåðâàíî êíîïêîé
|
||||||
|
FlagRs:=False;
|
||||||
|
CANTerminal.MyCommPort.Open:=FlagOpenRS;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
until TimerExpired(ET) { or (RSTimeOut) };
|
||||||
|
|
||||||
|
If bb=0 then Break;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
CANTerminal.MyCommPort.FlushInBuffer;
|
||||||
|
CANTerminal.MyCommPort.FlushOutBuffer;
|
||||||
|
|
||||||
|
|
||||||
|
FlagAbortKey:=False;
|
||||||
|
CANTerminal.AbortKey.Visible:=False;
|
||||||
|
|
||||||
|
If bb=0 then
|
||||||
|
begin
|
||||||
|
Result:=1; // íè÷åãî íå ïðèøëî...
|
||||||
|
CANTerminal.MyCommPort.Open:=FlagOpenRS;
|
||||||
|
FlagRs:=False;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Csum:=ContrlolSumCRC16(BufIn,LengthIn-2);
|
||||||
|
|
||||||
|
if CSum<>(BufIn[LengthIn-2]+BufIn[LengthIn-1]*256) then
|
||||||
|
begin
|
||||||
|
Result:=2; // íå ñîøëàñü êîíòðîëüíàÿ ñóììà
|
||||||
|
FlagRs:=False;
|
||||||
|
CANTerminal.MyCommPort.Open:=FlagOpenRS;
|
||||||
|
exit;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
Result:=0;
|
||||||
|
|
||||||
|
CANTerminal.MyCommPort.Open:=FlagOpenRS;
|
||||||
|
FlagRs:=False;
|
||||||
|
CSum:=i;
|
||||||
|
if PAdr=0 then CSum:=i;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{Ïîëó÷åíèå ìëàäøåãî áàéòà}
|
||||||
|
function LB(X: Word): Byte;
|
||||||
|
var b1: Byte;
|
||||||
|
begin
|
||||||
|
asm
|
||||||
|
mov ax,X
|
||||||
|
mov b1,al
|
||||||
|
end;
|
||||||
|
Result:=b1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{Ïîëó÷åíèå ñòàðøåãî áàéòà}
|
||||||
|
function HB(X: Word): Byte;
|
||||||
|
var b1: Byte;
|
||||||
|
begin
|
||||||
|
asm
|
||||||
|
mov ax,X
|
||||||
|
mov b1,ah
|
||||||
|
end;
|
||||||
|
Result:=b1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
end.
|
||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+1253
@@ -0,0 +1,1253 @@
|
|||||||
|
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 ReceiveCanData(Mess: TMessag);
|
||||||
|
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 }
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
AnalogStart : Integer;
|
||||||
|
AnalogLength : Integer;
|
||||||
|
DigitalStart : Integer;
|
||||||
|
DigitalLength : Integer;
|
||||||
|
|
||||||
|
Unites : Array[0..127] of TUnit;
|
||||||
|
|
||||||
|
kownt: integer;
|
||||||
|
waiste: integer;
|
||||||
|
fade: integer;
|
||||||
|
reColor: integer;
|
||||||
|
doReColor: boolean;
|
||||||
|
|
||||||
|
public
|
||||||
|
|
||||||
|
Numer: integer;
|
||||||
|
RSadr: cardinal;
|
||||||
|
RXadr: longword;
|
||||||
|
TXadr: longword;
|
||||||
|
Protokol: integer;
|
||||||
|
|
||||||
|
|
||||||
|
{ Public declarations }
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
ModbusForm : TModbusForm;
|
||||||
|
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;
|
||||||
|
|
||||||
|
ErrorCmd : boolean = False;
|
||||||
|
|
||||||
|
KT1,KT2,KT3 : Array [0..12] of Real;
|
||||||
|
|
||||||
|
UNew : SmallInt;
|
||||||
|
MomentNew : SmallInt;
|
||||||
|
|
||||||
|
UNewZ : Integer;
|
||||||
|
|
||||||
|
Count1 : Integer = 0;
|
||||||
|
Count2 : Integer = 0;
|
||||||
|
|
||||||
|
NameEdit: TEdit;
|
||||||
|
|
||||||
|
ArrNiiefaAnalog : Array [0..100] of Word;
|
||||||
|
ArrNiiefaDigital : Array [0..100] of Word;
|
||||||
|
flaganalogdigital : boolean = false;
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
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;
|
||||||
|
doIt: boolean;
|
||||||
|
begin
|
||||||
|
|
||||||
|
if(AutoBox.Checked) then
|
||||||
|
if(AutoTimeEdit.Value > 0) then
|
||||||
|
begin
|
||||||
|
if(AutoBox.Tag > 0) then AutoBox.Tag:= AutoBox.Tag-1;
|
||||||
|
|
||||||
|
if(AutoBox.Tag = 0) then
|
||||||
|
begin
|
||||||
|
SetButtonDo(Sender);
|
||||||
|
AutoBox.Tag:= trunc(AutoTimeEdit.Value);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if myTimer.Tag > 0 then myTimer.Tag:= myTimer.Tag-1
|
||||||
|
else begin
|
||||||
|
|
||||||
|
myTimer.Tag:=10;
|
||||||
|
|
||||||
|
Fade:=trunc(FadeSpin.Value);
|
||||||
|
|
||||||
|
inc(waiste);
|
||||||
|
if Waiste >= Fade then
|
||||||
|
begin
|
||||||
|
waiste :=1;
|
||||||
|
doIt := true;
|
||||||
|
end else doIt := false;
|
||||||
|
|
||||||
|
if doIt or 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 = 1 then dec(Unites[i].Age); // åùå ðàç
|
||||||
|
if Fade = 10 then Unites[i].Age := reColor;
|
||||||
|
if Unites[i].Age <0 then Unites[i].Age:=0; // áûâàåò
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TModbusForm.FormShow(Sender: TObject);
|
||||||
|
var
|
||||||
|
i: integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
|
||||||
|
myTimer.Enabled:=True;
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
if Protokol=3 then DataLenEdit.MaxValue:=4
|
||||||
|
else DataLenEdit.MaxValue :=3;
|
||||||
|
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 Memo1.Lines.Add('Ok!')
|
||||||
|
else Memo1.Lines.Add('Well...');
|
||||||
|
inc(Count2);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
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]);
|
||||||
|
|
||||||
|
WriteMessageCanID(1, CanStr);
|
||||||
|
|
||||||
|
ReceiveCanData(mess);
|
||||||
|
|
||||||
|
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:='Íà÷àëî àíàë. DEC';
|
||||||
|
AnaLenLaba.Caption:='Äëèíà àíàë. DEC';
|
||||||
|
DigiStartLaba.Caption:='Íà÷àëî äèñêð. DEC';
|
||||||
|
DigiLenLaba.Caption:='Äëèíà äèñêð. 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:='Íà÷àëî àíàë. HEX';
|
||||||
|
AnaLenLaba.Caption:='Äëèíà àíàë. HEX';
|
||||||
|
DigiStartLaba.Caption:='Íà÷àëî äèñêð. HEX';
|
||||||
|
DigiLenLaba.Caption:='Äëèíà äèñêð. 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);
|
||||||
|
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': ; // öèôðû
|
||||||
|
else
|
||||||
|
Key := Chr(0); // ñèìâîë íå îòîáðàæàòü
|
||||||
|
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
|
||||||
|
if trunc(AutoTimeEdit.Value) = 0
|
||||||
|
then AutoBox.Checked:= false;
|
||||||
|
|
||||||
|
AutoBox.Tag:= trunc(AutoTimeEdit.Value);
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
@@ -0,0 +1,546 @@
|
|||||||
|
unit slcan;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses Windows;
|
||||||
|
|
||||||
|
const
|
||||||
|
SLCAN_PROPERTY_INDEX_LINKNAME = 0;
|
||||||
|
SLCAN_PROPERTY_INDEX_INSTANCEID = 1;
|
||||||
|
SLCAN_PROPERTY_INDEX_DEVICEDESC = 2;
|
||||||
|
SLCAN_PROPERTY_INDEX_FRIENDLYNAME = 3;
|
||||||
|
SLCAN_PROPERTY_INDEX_PHOBJECTNAME = 4;
|
||||||
|
SLCAN_PROPERTY_INDEX_MFG = 5;
|
||||||
|
SLCAN_PROPERTY_INDEX_LOCATIONINFO = 6;
|
||||||
|
SLCAN_PROPERTY_INDEX_ENUMERATOR = 7;
|
||||||
|
SLCAN_PROPERTY_INDEX_CLASS = 8;
|
||||||
|
SLCAN_PROPERTY_INDEX_CLASSGUID = 9;
|
||||||
|
SLCAN_PROPERTY_INDEX_SERVICE = 10;
|
||||||
|
SLCAN_PROPERTY_INDEX_DRIVER = 11;
|
||||||
|
SLCAN_PROPERTY_INDEX_PORTNAME = 12;
|
||||||
|
SLCAN_PROPERTY_INDEX_PRODUCT = 13;
|
||||||
|
SLCAN_PROPERTY_INDEX_MANUFACTURER = 14;
|
||||||
|
SLCAN_PROPERTY_INDEX_CONFIGURATION = 15;
|
||||||
|
SLCAN_PROPERTY_INDEX_INTERFACE = 16;
|
||||||
|
SLCAN_PROPERTY_INDEX_SERIAL = 17;
|
||||||
|
SLCAN_PROPERTY_INDEX_ALIAS = 18;
|
||||||
|
SLCAN_PROPERTY_INDEX_CHANNELLINK = 19;
|
||||||
|
SLCAN_PROPERTY_INDEX_SERIALID = 20;
|
||||||
|
|
||||||
|
SLCAN_MODE_CONFIG = $00;
|
||||||
|
SLCAN_MODE_NORMAL = $01;
|
||||||
|
SLCAN_MODE_LISTENONLY = $02;
|
||||||
|
SLCAN_MODE_LOOPBACK = $03;
|
||||||
|
SLCAN_MODE_SLEEP = $04;
|
||||||
|
|
||||||
|
SLCAN_BR_CIA_1000K = $8000;
|
||||||
|
SLCAN_BR_CIA_800K = $8001;
|
||||||
|
SLCAN_BR_CIA_500K = $8002;
|
||||||
|
SLCAN_BR_CIA_250K = $8003;
|
||||||
|
SLCAN_BR_CIA_125K = $8004;
|
||||||
|
SLCAN_BR_CIA_50K = $8005;
|
||||||
|
SLCAN_BR_CIA_20K = $8006;
|
||||||
|
SLCAN_BR_CIA_10K = $8007;
|
||||||
|
SLCAN_BR_400K = $8008;
|
||||||
|
SLCAN_BR_200K = $8009;
|
||||||
|
SLCAN_BR_100K = $800A;
|
||||||
|
SLCAN_BR_83333 = $800B;
|
||||||
|
SLCAN_BR_33333 = $800C;
|
||||||
|
SLCAN_BR_25K = $800D;
|
||||||
|
SLCAN_BR_5K = $800E;
|
||||||
|
SLCAN_BR_30K = $800F;
|
||||||
|
SLCAN_BR_300K = $8010;
|
||||||
|
SLCAN_BR_LASTINDEX = SLCAN_BR_33333;
|
||||||
|
|
||||||
|
SLCAN_CAP_MODE_NORMAL = $01;
|
||||||
|
SLCAN_CAP_MODE_LISTEN_ONLY = $02;
|
||||||
|
SLCAN_CAP_MODE_LOOP_BACK = $04;
|
||||||
|
SLCAN_CAP_MODE_SLEEP = $08;
|
||||||
|
|
||||||
|
SLCAN_CAP_TXMODE_ONE_SHOT = $01;
|
||||||
|
SLCAN_CAP_TXMODE_TIME_STAMP = $02;
|
||||||
|
|
||||||
|
SLCAN_CAP_CONTR_EXTERNAL = $00;
|
||||||
|
SLCAN_CAP_CONTR_MCP2515 = $01;
|
||||||
|
SLCAN_CAP_CONTR_SJA1000 = $02;
|
||||||
|
|
||||||
|
SLCAN_CAP_CONTR_INTERNAL = $80;
|
||||||
|
SLCAN_CAP_CONTR_LPC = $81;
|
||||||
|
SLCAN_CAP_CONTR_STM32 = $82;
|
||||||
|
SLCAN_CAP_CONTR_STM8 = $83;
|
||||||
|
SLCAN_CAP_CONTR_PIC = $84;
|
||||||
|
SLCAN_CAP_CONTR_PIC_ECAN = $85;
|
||||||
|
|
||||||
|
SLCAN_CAP_PHYS_HS = $01;
|
||||||
|
SLCAN_CAP_PHYS_LS = $02;
|
||||||
|
SLCAN_CAP_PHYS_SW = $04;
|
||||||
|
SLCAN_CAP_PHYS_J1708 = $08;
|
||||||
|
SLCAN_CAP_PHYS_LIN = $10;
|
||||||
|
SLCAN_CAP_PHYS_KLINE = $20;
|
||||||
|
|
||||||
|
SLCAN_CAP_PHYS_LOAD = $01;
|
||||||
|
|
||||||
|
SLCAN_CAP_BITRATE_INDEX = $01;
|
||||||
|
SLCAN_CAP_BITRATE_CUSTOM = $02;
|
||||||
|
SLCAN_CAP_BITRATE_AUTO = $04;
|
||||||
|
|
||||||
|
SLCAN_EVT_LEVEL_RX_MSG = 0;
|
||||||
|
SLCAN_EVT_LEVEL_TIME_STAMP = 1;
|
||||||
|
SLCAN_EVT_LEVEL_TX_MSG = 2;
|
||||||
|
SLCAN_EVT_LEVEL_BUS_STATE = 3;
|
||||||
|
SLCAN_EVT_LEVEL_COUNTS = 4;
|
||||||
|
SLCAN_EVT_LEVEL_ERRORS = 5;
|
||||||
|
|
||||||
|
SLCAN_EVT_TYPE_RX = $0;
|
||||||
|
SLCAN_EVT_TYPE_START_TX = $1;
|
||||||
|
SLCAN_EVT_TYPE_END_TX = $2;
|
||||||
|
SLCAN_EVT_TYPE_ABORT_TX = $3;
|
||||||
|
SLCAN_EVT_TYPE_BUS_STATE = $4;
|
||||||
|
SLCAN_EVT_TYPE_ERROR_COUNTS = $5;
|
||||||
|
SLCAN_EVT_TYPE_BUS_ERROR = $6;
|
||||||
|
SLCAN_EVT_TYPE_ARBITRATION = $7;
|
||||||
|
SLCAN_EVT_TYPE_STAMP_INC = $F;
|
||||||
|
|
||||||
|
SLCAN_BUS_STATE_ERROR_ACTIVE = $00;
|
||||||
|
SLCAN_BUS_STATE_ERROR_ACTIVE_WARN = $01;
|
||||||
|
SLCAN_BUS_STATE_ERROR_PASSIVE = $02;
|
||||||
|
SLCAN_BUS_STATE_BUSOFF = $03;
|
||||||
|
|
||||||
|
SLCAN_MES_INFO_EXT = $01;
|
||||||
|
SLCAN_MES_INFO_RTR = $02;
|
||||||
|
SLCAN_MES_INFO_ONESHOT = $04;
|
||||||
|
|
||||||
|
SLCAN_DEVOP_CREATE = $00000000;
|
||||||
|
SLCAN_DEVOP_CREATEHANDLE = $00000001;
|
||||||
|
SLCAN_DEVOP_OPEN = $00000002;
|
||||||
|
SLCAN_DEVOP_CLOSE = $00000003;
|
||||||
|
SLCAN_DEVOP_DESTROYHANDLE = $00000004;
|
||||||
|
SLCAN_DEVOP_DESTROY = $00000005;
|
||||||
|
SLCAN_DEVOP_INFO = $00000006;
|
||||||
|
SLCAN_DEVOP_USER = $00000007;
|
||||||
|
|
||||||
|
SLCAN_INVALID_HANDLE_ERROR = $E0001001;
|
||||||
|
SLCAN_DEVICE_INVALID_HANDLE_ERROR = $E0001120;
|
||||||
|
SLCAN_HANDLE_INIT_ERROR = $E0001017;
|
||||||
|
SLCAN_DEVICE_NOTOPEN_ERROR = $E0001121;
|
||||||
|
|
||||||
|
SLCAN_EVT_ERR_TYPE_BIT = $00;
|
||||||
|
SLCAN_EVT_ERR_TYPE_FORM = $01;
|
||||||
|
SLCAN_EVT_ERR_TYPE_STUFF = $02;
|
||||||
|
SLCAN_EVT_ERR_TYPE_OTHER = $03;
|
||||||
|
|
||||||
|
SLCAN_EVT_ERR_DIR_TX = $00;
|
||||||
|
SLCAN_EVT_ERR_DIR_RX = $01;
|
||||||
|
|
||||||
|
SLCAN_EVT_ERR_FRAME_SOF = $03;
|
||||||
|
SLCAN_EVT_ERR_FRAME_ID28_ID21 = $02;
|
||||||
|
SLCAN_EVT_ERR_FRAME_ID20_ID18 = $06;
|
||||||
|
SLCAN_EVT_ERR_FRAME_SRTR = $04;
|
||||||
|
SLCAN_EVT_ERR_FRAME_IDE = $05;
|
||||||
|
SLCAN_EVT_ERR_FRAME_ID17_ID13 = $07;
|
||||||
|
SLCAN_EVT_ERR_FRAME_ID12_ID5 = $0F;
|
||||||
|
SLCAN_EVT_ERR_FRAME_ID4_ID0 = $0E;
|
||||||
|
SLCAN_EVT_ERR_FRAME_RTR = $0C;
|
||||||
|
SLCAN_EVT_ERR_FRAME_RSRV0 = $0D;
|
||||||
|
SLCAN_EVT_ERR_FRAME_RSRV1 = $09;
|
||||||
|
SLCAN_EVT_ERR_FRAME_DLC = $0B;
|
||||||
|
SLCAN_EVT_ERR_FRAME_DATA = $0A;
|
||||||
|
SLCAN_EVT_ERR_FRAME_CRC_SEQ = $08;
|
||||||
|
SLCAN_EVT_ERR_FRAME_CRC_DEL = $18;
|
||||||
|
SLCAN_EVT_ERR_FRAME_ACK_SLOT = $19;
|
||||||
|
SLCAN_EVT_ERR_FRAME_ACK_DEL = $1B;
|
||||||
|
SLCAN_EVT_ERR_FRAME_EOF = $1A;
|
||||||
|
SLCAN_EVT_ERR_FRAME_INTER = $12;
|
||||||
|
SLCAN_EVT_ERR_FRAME_AER_FLAG = $11;
|
||||||
|
SLCAN_EVT_ERR_FRAME_PER_FLAG = $16;
|
||||||
|
SLCAN_EVT_ERR_FRAME_TDB = $13;
|
||||||
|
SLCAN_EVT_ERR_FRAME_ERR_DEL = $17;
|
||||||
|
SLCAN_EVT_ERR_FRAME_OVER_FLAG = $1C;
|
||||||
|
|
||||||
|
SLCAN_TX_STATUS_OK =$00;
|
||||||
|
SLCAN_TX_STATUS_TIMEOUT =$01;
|
||||||
|
SLCAN_TX_STATUS_BUSOFF =$02;
|
||||||
|
SLCAN_TX_STATUS_ABORT =$03;
|
||||||
|
SLCAN_TX_STATUS_NOT_ENA =$04;
|
||||||
|
SLCAN_TX_STATUS_ERROR_ONE_SHOT =$05;
|
||||||
|
SLCAN_TX_STATUS_INVALID_MODE =$06;
|
||||||
|
SLCAN_TX_STATUS_UNKNOWN =$0F;
|
||||||
|
|
||||||
|
SLCAN_PURGE_TX_ABORT =$01;
|
||||||
|
SLCAN_PURGE_RX_ABORT =$02;
|
||||||
|
SLCAN_PURGE_TX_CLEAR =$04;
|
||||||
|
SLCAN_PURGE_RX_CLEAR =$08;
|
||||||
|
type
|
||||||
|
//{$IFDEF CompilerVersion}
|
||||||
|
//{$IF CompilerVersion >= 16 }
|
||||||
|
//TSlCanDevice = NativeUInt;
|
||||||
|
//{$ELSE}
|
||||||
|
//TSlCanDevice = longword;
|
||||||
|
//{$ENDIF}
|
||||||
|
//{$ELSE}
|
||||||
|
TSlCanDevice = longword;
|
||||||
|
//{$ENDIF}
|
||||||
|
|
||||||
|
|
||||||
|
PSlCanCapabilities = ^TSlCanCapabilities;
|
||||||
|
TSlCanCapabilities = packed record
|
||||||
|
bModes:byte;
|
||||||
|
bTXModes:byte;
|
||||||
|
bMaxEventLevel:byte;
|
||||||
|
bController:byte;
|
||||||
|
bPhysical:byte;
|
||||||
|
bPhysicalLoad:byte;
|
||||||
|
bBitrates:byte;
|
||||||
|
bAdvancedModes:byte;
|
||||||
|
dwCanBaseClk:longword;
|
||||||
|
dwTimeStampClk:longword;
|
||||||
|
wMaxBrp:word;
|
||||||
|
end;
|
||||||
|
|
||||||
|
PSlCanState = ^TSlCanState;
|
||||||
|
TSlCanState = packed record
|
||||||
|
States: array [0 .. 1] of byte;
|
||||||
|
ErrCountRX:byte;
|
||||||
|
ErrCountTX:byte;
|
||||||
|
end;
|
||||||
|
|
||||||
|
PSlCanMessage = ^TSlCanMessage;
|
||||||
|
TSlCanMessage = packed record
|
||||||
|
Info:byte;
|
||||||
|
ID:longword;
|
||||||
|
DataCount:byte;
|
||||||
|
Data: array [0 .. 7] of byte;
|
||||||
|
end;
|
||||||
|
|
||||||
|
PSlCanTxMessage = ^TSlCanTxMessage;
|
||||||
|
TSlCanTxMessage = packed record
|
||||||
|
dwDelay:longint;
|
||||||
|
Msg:TSlCanMessage;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
PSlCanEvent = ^TSlCanEvent;
|
||||||
|
TSlCanEvent = packed record
|
||||||
|
EventType:byte;
|
||||||
|
TimeStampLo:longword;
|
||||||
|
case integer of
|
||||||
|
0:(Msg:TSlCanMessage);
|
||||||
|
1:(TimeStamp: array [0 .. 1] of longword);
|
||||||
|
2:(TimeStamp64: UInt64);
|
||||||
|
3:(BusMode:byte;
|
||||||
|
bDummy1:byte;
|
||||||
|
ErrCountRX:byte;
|
||||||
|
ErrCountTX:byte;
|
||||||
|
ErrType:byte;
|
||||||
|
ErrDir:byte;
|
||||||
|
ErrFrame:byte;
|
||||||
|
LostArbitration:byte);
|
||||||
|
end;
|
||||||
|
|
||||||
|
PSlCanBitRate = ^TSlCanBitRate;
|
||||||
|
TSlCanBitRate = packed record
|
||||||
|
BRP:word;
|
||||||
|
TSEG1:byte;
|
||||||
|
TSEG2:byte;
|
||||||
|
SJW:byte;
|
||||||
|
SAM:byte;
|
||||||
|
end;
|
||||||
|
|
||||||
|
PSlCanTimeStamp = ^TSlCanTimeStamp;
|
||||||
|
TSlCanTimeStamp = packed record
|
||||||
|
case integer of
|
||||||
|
0:(Value:int64);
|
||||||
|
1:(dwValue: array [0 .. 1] of longword);
|
||||||
|
2:(wValue: array [0 .. 3] of word);
|
||||||
|
3:(bValue: array [0 .. 7] of byte);
|
||||||
|
end;
|
||||||
|
|
||||||
|
TSlCan_DeviceCallBack = procedure(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
dwIndex: longword;
|
||||||
|
Operation: longword;
|
||||||
|
pContext: pointer;
|
||||||
|
dwContextSize: longword
|
||||||
|
);stdcall;
|
||||||
|
|
||||||
|
TSlCan_DeviceListCallBack = procedure(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
dwIndex: longword;
|
||||||
|
pContext: pointer;
|
||||||
|
dwContextSize: longword
|
||||||
|
);stdcall;
|
||||||
|
|
||||||
|
function SlCan_Load(
|
||||||
|
DeviceProc: TSlCan_DeviceCallBack;
|
||||||
|
DeviceListProc: TSlCan_DeviceListCallBack
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_Free(
|
||||||
|
bDoCallBack:longbool
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_Update:longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_GetDeviceCount:longword;stdcall;
|
||||||
|
|
||||||
|
function SlCan_GetDevice(
|
||||||
|
dwIndex:longword
|
||||||
|
):TSlCanDevice;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetHandle(
|
||||||
|
hDevice:TSlCanDevice
|
||||||
|
):THandle;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetProperty(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
dwIndex: longword;
|
||||||
|
pBuf: pAnsiChar;
|
||||||
|
dwSize: longword
|
||||||
|
):longword;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetPropertyW(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
dwIndex: longword;
|
||||||
|
pBuf: PWideChar;
|
||||||
|
dwSize: longword
|
||||||
|
):longword;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetRegKey(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
dwIndex: longword
|
||||||
|
):HKEY;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceSetContext(
|
||||||
|
hDevice:TSlCanDevice;
|
||||||
|
pBuf: pointer;
|
||||||
|
dwBufSize:longword
|
||||||
|
):pointer;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetContext(hDevice:TSlCanDevice):pointer;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetContextSize(
|
||||||
|
hDevice: TSlCanDevice
|
||||||
|
):longword;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceSetAlias(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
pBuf: PAnsiChar
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetAlias(
|
||||||
|
hDevice:TSlCanDevice;
|
||||||
|
pBuf: PAnsiChar;
|
||||||
|
dwSize: longword
|
||||||
|
):longword;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceSetAliasW(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
pBuf: PWideChar
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetAliasW(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
pBuf: PWideChar;
|
||||||
|
dwSize: longword
|
||||||
|
):longword;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetCapabilities(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
pCap: PSlCanCapabilities
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceOpen(
|
||||||
|
hDevice:TSlCanDevice
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceClose(
|
||||||
|
hDevice:TSlCanDevice
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceSetMode(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
dwMode: longword
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetMode(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
pdwMode: Plongword
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetState(
|
||||||
|
hDevice:TSlCanDevice;
|
||||||
|
pState: PSlCanState
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceSetTXTimeOut(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
dwValue: longword):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetTXTimeOut(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
pdwValue:Plongword
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetBitRate(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
pBitRate:PSlCanBitRate
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceSetBitRate(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
pBitRate:PSlCanBitRate
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceEnaRec(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
bValue: byte
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceSetLatency(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
bValue: byte
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetLatency(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
pbValue: pbyte
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DevicePurge(
|
||||||
|
hDevice:TSlCanDevice;
|
||||||
|
bValue: byte
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceSetEventLevel(
|
||||||
|
hDevice:TSlCanDevice;
|
||||||
|
bValue: byte
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetEventLevel(
|
||||||
|
hDevice:TSlCanDevice;
|
||||||
|
pbValue: pbyte
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceSetStartTimeStamp(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
pValue: PSlCanTimeStamp
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetStartTimeStamp(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
pValue: PSlCanTimeStamp
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetTimeStamp(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
pValue: PSlCanTimeStamp
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceSetTimeStampPeriod(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
lValue: longint
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetTimeStampPeriod(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
plValue: PLongint
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceSetExMode(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
bMode: byte
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetExMode(
|
||||||
|
hDevice:TSlCanDevice;
|
||||||
|
pbMode: pbyte
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
|
||||||
|
function SlCan_DeviceWriteMessages(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
pMsg: PSlCanMessage;
|
||||||
|
Count: longword;
|
||||||
|
pStatus: pbyte
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceWriteMessagesEx(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
pMsg: PSlCanTxMessage;
|
||||||
|
Count: longword;
|
||||||
|
pStatus: pbyte;
|
||||||
|
pdwCount:Plongword
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceReadMessages(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
dwTimeOut:longword;
|
||||||
|
pMsg: PSlCanMessage;
|
||||||
|
Count: longword;
|
||||||
|
pCount: Plongword
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
function SlCan_DeviceReadEvents(
|
||||||
|
hDevice: TSlCanDevice;
|
||||||
|
dwTimeOut:longword;
|
||||||
|
pEvent: PSlCanEvent;
|
||||||
|
Count: longword;
|
||||||
|
pCount: Plongword
|
||||||
|
):longbool;stdcall;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
const
|
||||||
|
Dll = 'slcan.dll';
|
||||||
|
|
||||||
|
function SlCan_Load;stdcall;external Dll;
|
||||||
|
function SlCan_Free;stdcall;external Dll;
|
||||||
|
function SlCan_Update;stdcall;external Dll;
|
||||||
|
function SlCan_GetDeviceCount;stdcall;external Dll;
|
||||||
|
function SlCan_GetDevice;stdcall;external Dll;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetHandle;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceOpen;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceClose;stdcall;external Dll;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetProperty;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceGetPropertyW;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceGetRegKey;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceSetAlias;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceGetAlias;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceSetAliasW;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceGetAliasW;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceGetCapabilities;stdcall;external Dll;
|
||||||
|
|
||||||
|
function SlCan_DeviceSetContext;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceGetContext;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceGetContextSize;stdcall;external Dll;
|
||||||
|
|
||||||
|
function SlCan_DeviceSetMode;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceGetMode;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceGetState;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceSetTXTimeOut;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceGetTXTimeOut;stdcall;external Dll;
|
||||||
|
|
||||||
|
function SlCan_DeviceGetBitRate;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceSetBitRate;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceEnaRec;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceSetLatency;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceGetLatency;stdcall;external Dll;
|
||||||
|
function SlCan_DevicePurge;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceSetEventLevel;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceGetEventLevel;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceSetStartTimeStamp;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceGetStartTimeStamp;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceGetTimeStamp;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceSetTimeStampPeriod;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceGetTimeStampPeriod;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceSetExMode;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceGetExMode;stdcall;external Dll;
|
||||||
|
|
||||||
|
function SlCan_DeviceWriteMessages;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceWriteMessagesEx;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceReadMessages;stdcall;external Dll;
|
||||||
|
function SlCan_DeviceReadEvents;stdcall;external Dll;
|
||||||
|
|
||||||
|
end.
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 766 B |
Reference in New Issue
Block a user