From 8afa7b0ec6133734cb169c7f6f3358baf3789c95 Mon Sep 17 00:00:00 2001 From: Dimas Date: Mon, 7 Apr 2025 18:09:53 +0300 Subject: [PATCH] begin --- CAN_Terminal.dcu | Bin 0 -> 18188 bytes CAN_Terminal.ddp | Bin 0 -> 51 bytes CAN_Terminal.dfm | 345 +++++++++++ CAN_Terminal.pas | 687 +++++++++++++++++++++ Projects.ini | 407 +++++++++++++ SetTerminal_UKSS_CAN.cfg | 39 ++ SetTerminal_UKSS_CAN.dof | 139 +++++ SetTerminal_UKSS_CAN.dpr | 16 + SetTerminal_UKSS_CAN.exe | Bin 0 -> 153600 bytes SetTerminal_UKSS_CAN.res | Bin 0 -> 876 bytes ToolsCan.dcu | Bin 0 -> 4922 bytes ToolsCan.pas | 443 ++++++++++++++ ToolsRS.dcu | Bin 0 -> 4128 bytes ToolsRS.pas | 285 +++++++++ UNiiefa.dcu | Bin 0 -> 35936 bytes UNiiefa.ddp | Bin 0 -> 51 bytes UNiiefa.dfm | Bin 0 -> 6355 bytes UNiiefa.pas | 1253 ++++++++++++++++++++++++++++++++++++++ slcan.dcu | Bin 0 -> 13034 bytes slcan.dll | Bin 0 -> 238080 bytes slcan.pas | 546 +++++++++++++++++ white_hero.ico | Bin 0 -> 766 bytes 22 files changed, 4160 insertions(+) create mode 100644 CAN_Terminal.dcu create mode 100644 CAN_Terminal.ddp create mode 100644 CAN_Terminal.dfm create mode 100644 CAN_Terminal.pas create mode 100644 Projects.ini create mode 100644 SetTerminal_UKSS_CAN.cfg create mode 100644 SetTerminal_UKSS_CAN.dof create mode 100644 SetTerminal_UKSS_CAN.dpr create mode 100644 SetTerminal_UKSS_CAN.exe create mode 100644 SetTerminal_UKSS_CAN.res create mode 100644 ToolsCan.dcu create mode 100644 ToolsCan.pas create mode 100644 ToolsRS.dcu create mode 100644 ToolsRS.pas create mode 100644 UNiiefa.dcu create mode 100644 UNiiefa.ddp create mode 100644 UNiiefa.dfm create mode 100644 UNiiefa.pas create mode 100644 slcan.dcu create mode 100644 slcan.dll create mode 100644 slcan.pas create mode 100644 white_hero.ico diff --git a/CAN_Terminal.dcu b/CAN_Terminal.dcu new file mode 100644 index 0000000000000000000000000000000000000000..c8d03e49d683235daa7d38ccff429b2bf3888b53 GIT binary patch literal 18188 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 E07ZHWvj6}9 literal 0 HcmV?d00001 diff --git a/CAN_Terminal.dfm b/CAN_Terminal.dfm new file mode 100644 index 0000000..666824c --- /dev/null +++ b/CAN_Terminal.dfm @@ -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 diff --git a/CAN_Terminal.pas b/CAN_Terminal.pas new file mode 100644 index 0000000..d62df46 --- /dev/null +++ b/CAN_Terminal.pas @@ -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. diff --git a/Projects.ini b/Projects.ini new file mode 100644 index 0000000..f534346 --- /dev/null +++ b/Projects.ini @@ -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 + diff --git a/SetTerminal_UKSS_CAN.cfg b/SetTerminal_UKSS_CAN.cfg new file mode 100644 index 0000000..f9f1cd7 --- /dev/null +++ b/SetTerminal_UKSS_CAN.cfg @@ -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 diff --git a/SetTerminal_UKSS_CAN.dof b/SetTerminal_UKSS_CAN.dof new file mode 100644 index 0000000..28237ab --- /dev/null +++ b/SetTerminal_UKSS_CAN.dof @@ -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; diff --git a/SetTerminal_UKSS_CAN.dpr b/SetTerminal_UKSS_CAN.dpr new file mode 100644 index 0000000..296655a --- /dev/null +++ b/SetTerminal_UKSS_CAN.dpr @@ -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. diff --git a/SetTerminal_UKSS_CAN.exe b/SetTerminal_UKSS_CAN.exe new file mode 100644 index 0000000000000000000000000000000000000000..39bb389e9016b1df4d5e311b32fae1bb500f0ef7 GIT binary patch literal 153600 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
Bw?9n3SDDc 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 literal 0 HcmV?d00001 diff --git a/ToolsCan.dcu b/ToolsCan.dcu new file mode 100644 index 0000000000000000000000000000000000000000..9201d300c2f8c1e378d29643e8b00cc40f087703 GIT binary patch literal 4922 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 WsRb*I_eClCq9S#JMl}$MNcvyHW6K`^ literal 0 HcmV?d00001 diff --git a/ToolsCan.pas b/ToolsCan.pas new file mode 100644 index 0000000..a758a8d --- /dev/null +++ b/ToolsCan.pas @@ -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 (TimePauseCanIn0) 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. diff --git a/ToolsRS.dcu b/ToolsRS.dcu new file mode 100644 index 0000000000000000000000000000000000000000..3704586bb95d23ea0ccdb92f897b658cdee98408 GIT binary patch literal 4128 zcma)94Nx1$72aE|jawn`~u40Sw-lK}~cv9Ya!jPqlY=;uz7BP4n{ zxj?83HaH;J8J8xhr<2K~joVO?XWHj$|Ms)KN)`DuA#0EjwAdC+T2s>OC(~+_Kun!e=>S( zOD78PI}_WZ$slt<2q}i<{c>FMMZ0D7`0t-u2n##pud&&?!P4=t$i(K}o~SB^)K%*B z!4TgV@+MTRND%&OmNntkS1$CXG*85@j>59Abfx)rS=*V?+$lxbm6SubQLn3zK=hqGa@Z zrpBu#f^sss9lrjsoZR`~6X%1Wl8(M)YdoqINnp!CqsiSxg+knYnp}2Ma6&0@!}*f^ z@!h5ao5K1Qe=I5g_}LF%S4vvrnjDtZ(-Tjw3=^N4l21~#(3XgYcPG@)!fTFiD}+iD zPu@QfCe6K3jU}w}L{us$gx2)x3tTj;Z%?G+p}e&<9?T0n)x1XUR%QQvOvg90@7%Sc zsre)S!LYGmi$5NU$t}^iKNjnwx}Yq;`SfUNjJ0PF)`YD-=s;M7^4)%w9os}QN_#bL z{Z(c7y3bm-`+MI317nJ7D%>pE62^3$&y!#(%F-E4MguYVqmg^R5R^qv*>xaLpg z7Kw)$oY%s19p4i3hub^e{Q4WGw+m>UNT-bfxSQMLzPu8zEA>EMwR>b$O{j0a+V{G{ zK-R5j@1QrHGO?wigllRQGpb)!1=SaZXA5&+^H|4Sz@%)TtH>9 zAUju6ZpHSJHaQ;FB5sRFB)(lvred1Kh$J0#GGd8ujfdpkT8oGZ;sz>WHNf*I=ql}y z!kgX4p+Z~1?`M0Opb z{p@uxNG}E2W0!2f$FOVh^wFz?Om-7!vu&t!pB14>z6lA)Tn2{0vRp3r4R0IDB4nlN z0W->a8^F?rwyow6>>%?+x_#F7n-D=}5k6b-ZL2NLo?+4T+X{CwU8NhB8e)_T+Zdj+MHy}?99B9xs{QWtV7%}$-qNs8Kn;}bM& zA?mCic7V=kF)+YdIzV=GU$ymo1FHH&uP;AF+ENhMoldZLs@D~y-jPN+rolC z3sZkT>I3hBR(Tc?W*LGe&;>*D44a%LI?jJJA0!zancFXCUfw!#QMI`X0ox$p@6ux| zpwQB=HT7PR_3E)Qzh!!EPrlvDld7A862~BHvFA`v1@kW)BPI{BQ-QQivrSGxx8wj& zvNUWr^SX2s^lXWdo{qw)9GNQ{naRQtzM?C23zwYGbkrG?QnZJwtg-{jQ1?xW&1EF&A9(&}@&VaPfvs@HRR$;1rQ&xJ7f4vV#{t z+s0+tEa~8q_A`RijWje@bYI-I!jk!c47>ymUBYK*9cLR>>I!{_3t4u09HQo^L)qyu zkaEwzA?RKzduHmE7d1wUmjqsRDCXDDsH_Rg^hN(!1(GwMG&l{-w0$0-d%EtPhF9oU zl(FWll4;J4Hh+?C{^ZWR%a!t{%DSmtku{KVD7QW|CgoVu>!$9y^UlziDN+rF=}WYt z`H%NbANmrNxasb*h>u}Dj`<#eS25o^%co7cu1ah)>bh*$Eb_-XsbHz(Vn!}5;k&A_ z)rM_0Tv3I6F5GG4dPFW_y!K};PM350%*D@EZr=uMsmGNA+&&k!tjCoOY`G2l47w^K zt`@m?1s8K-tA)j?0tZg5#yc!nsK?Sq>~L@qH+F8oJ{w+J!9~isID8;03tLrz4Q(tp z-~r{$*eY_dN-ko?y%sJ4pBm=2p6NI8&sFg=Rs01bcfrbOHtvFmy(S(L`1MnQkJ)jP zkciO=e&b z2#e+@cNLk@1l{adpKwq_5<(Ba3j2Tx_w z4e+NGI>Pfuy0XWf$F)aM4;t^{$D<@WxmwRp-XLTry9IvIZpcoI7=+0_k)IqAvnRV( zqLbfWnVt9pe1B#XCRUrW6Azn&N8dA{iPWm>qwt;hV3jb@U7meT5)i^O3@=D 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. diff --git a/UNiiefa.dcu b/UNiiefa.dcu new file mode 100644 index 0000000000000000000000000000000000000000..a829e7e16ab39404979c04a68a62758cb17bbd13 GIT binary patch literal 35936 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 literal 0 HcmV?d00001 diff --git a/UNiiefa.ddp b/UNiiefa.ddp new file mode 100644 index 0000000000000000000000000000000000000000..4370276c196a7fa73d6f8917622cba1c4e033dee GIT binary patch literal 51 zcmZRVaB=ks@bJ`g@pN<#a`e>;@DB=c^Y`)e=VxGe;K0Pl$;KI)SCUzhlbT}4#=r!G E07ZHWvj6}9 literal 0 HcmV?d00001 diff --git a/UNiiefa.dfm b/UNiiefa.dfm new file mode 100644 index 0000000000000000000000000000000000000000..73916c4dc7390b71e86e7c6f384946e708dc1537 GIT binary patch literal 6355 zcmd5BTW=d#`FLhLGafs)5Fg!XgUwC2pc7bret93L#+PIdMiio(VIP zHbp|1B2*9$t3?QDA3zaLs89Q_(N^rT8;KX5R?hwcc;k@=ka(*3&TVe?rd-USsQG_PD$t|?zrTJWqiTnBs68g_d7k-RIF z+4!zwNBiv*>Rz{E#UnJzFa(!WY{bld7w8z4R%98^ zBsexIz_(hRC0+D)nE5O`FF~t9y8*3$6!=AGKzGw_?q>jtFf|yk2mC@8+5nxNp2EV2 z{-M!`^q|3)Op%{Y|B;>?KcOG~YJQ9^l2rtM{4-%}Jb7{~mdXBe$EZqnm*(a^&tJ)m zrHe=+_}-j*bM7tJkRMkKgqD|=REemrjsAOK9vJpwX6Cg@;JdC+NWF-w6FU-JZdiw;6cS2I~dV z{=wU66%|MuoT3@hP7#txgY_BGVDBrU0gMr8qf?Ewzs`(Cq`_yp?b?k1TM=#(^Van( zKXiyiYtsjQryF4GHNcK>pmw^Ji)~$NdkxnQu?EH#^l4XzDGEXZJA*meSKD4^-+!R# zWQz2rwwxpEhFdsT_qzMi_YGpd+;XRoYHnD&*wt%xfT3qm?;{z+`AA1a>NcbmRcse- zM=g>4VRdcw9*RNOVA%7v6T#6p2` zxX8(SP2%LqrX<8P|7Ea*;qQkh!#|$=^z0YIr^A!#@WbKTXM^F}!}o_LXOGSXXTMC2 zS3nhW+p-+rn=IaVSrRXD#&&9gd@6-0>xWIlAB`>*c^X-x@2=D$FU^S5A)kHH$>8-7rQ$Dc^| z3h}G|4LPQL)H#V+T7a=Lo&ueAvLwlms0vDgrrmLxzBoqHJHw}EKLP(UcqyndKu#Oj z%S)-orF3tcq6I?HuR%UfiEv&n8I_5Q(&PvU33|ReP7l?(6g@AOd{_$b8uNHu-8?Rw zyW_-si3sOc5YA49@1MO<9li_J^aw)T&!{OqJ$vK-W<}}npbO`a3Jub$oT@mGjz@-P z#T&&;s5q5Vp(2$_ObY}ooyZ2KQf$Z>t_u9O1Xm~GPh4FgNnK`Qh?DTC%*4{PZgE=A z!8It}&^H|~L+)Vott|ayQ=Cgl$$^OX1v8j*8jYJshIVnDb9g^cUf?_#dC19msP9Z2 zsASTl1#&p8W!V^>Dei#Ha`t>X7KMlr7fPVupHmiv|Eps>H{c5;!@%P!e>a0Iuh5298auThd|5O{-x!&fR0nS|bN<_=jF3 z6=s@v&pLD?m|=ByYnIP!`ww^pK3i%*HE+X~5Q<5dXYVR(8pbfKwdvJhST=h89SkX{ z<6-Eo`N0oKx771VnF8ljdp>y65E*da;Ja=e?f^A43~&1$P6Vux;xw=xG_dPxv!vuE zREe3Xws#Xp1Rl9n&^{y9Qx%8>}irkY!p2RA8DF47v48SLX+ z)iy8u+L}?v_p#ePggYKh-MydXI{1AKPo+>*SvCzU4~9 RnX?TQzJrc3P-a0K{{j0VP~89k literal 0 HcmV?d00001 diff --git a/UNiiefa.pas b/UNiiefa.pas new file mode 100644 index 0000000..b7d9700 --- /dev/null +++ b/UNiiefa.pas @@ -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=0) and (Diginum 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. diff --git a/slcan.dcu b/slcan.dcu new file mode 100644 index 0000000000000000000000000000000000000000..c44ab30452b006e457718e97c6a50a7611d21b9e GIT binary patch literal 13034 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 Avj6}9 literal 0 HcmV?d00001 diff --git a/slcan.pas b/slcan.pas new file mode 100644 index 0000000..d338d22 --- /dev/null +++ b/slcan.pas @@ -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. diff --git a/white_hero.ico b/white_hero.ico new file mode 100644 index 0000000000000000000000000000000000000000..66f0ad3bd6942559c77bd3ccb9e16f144e52cd71 GIT binary patch literal 766 zcmb7?Jx;_h5QSd|B9T^FQ_+%=V{jCXupQ~vWjYSPQBvR=a1F{WQ>