diff --git a/Notice d'utilisation des signaux_complexes_GL_V8.2.pdf b/Notice d'utilisation des signaux_complexes_GL_V8.21.pdf similarity index 79% rename from Notice d'utilisation des signaux_complexes_GL_V8.2.pdf rename to Notice d'utilisation des signaux_complexes_GL_V8.21.pdf index aa9703e..ea3cf8e 100644 Binary files a/Notice d'utilisation des signaux_complexes_GL_V8.2.pdf and b/Notice d'utilisation des signaux_complexes_GL_V8.21.pdf differ diff --git a/Signaux_complexes_GL.map b/Signaux_complexes_GL.map index 65e8db8..8eede3d 100644 --- a/Signaux_complexes_GL.map +++ b/Signaux_complexes_GL.map @@ -1,8 +1,8 @@ Start Length Name Class - 0001:00000000 00160048H .text CODE - 0002:00000000 00002BECH .data DATA - 0002:00002BEC 041A05F1H .bss BSS + 0001:00000000 001603C8H .text CODE + 0002:00000000 00002BCCH .data DATA + 0002:00002BCC 041A0B89H .bss BSS Detailed map of segments @@ -56,49 +56,49 @@ Detailed map of segments 0001:0003BC0C 00000038 C=CODE S=.text G=(none) M=ListActns ACBP=A9 0001:0003BC44 00009948 C=CODE S=.text G=(none) M=ComCtrls ACBP=A9 0001:0004558C 00000EA0 C=CODE S=.text G=(none) M=Themes ACBP=A9 - 0001:0004642C 0000D390 C=CODE S=.text G=(none) M=StdCtrls ACBP=A9 - 0001:000537BC 00000168 C=CODE S=.text G=(none) M=StdActns ACBP=A9 - 0001:00053924 00000D1F C=CODE S=.text G=(none) M=WinHelpViewer ACBP=A9 - 0001:00054644 00011403 C=CODE S=.text G=(none) M=Controls ACBP=A9 - 0001:00065A48 00001292 C=CODE S=.text G=(none) M=ActnList ACBP=A9 - 0001:00066CDC 00001B9C C=CODE S=.text G=(none) M=ImgList ACBP=A9 - 0001:00068878 000066E1 C=CODE S=.text G=(none) M=Menus ACBP=A9 - 0001:0006EF5C 0000CEFC C=CODE S=.text G=(none) M=Forms ACBP=A9 - 0001:0007BE58 00000060 C=CODE S=.text G=(none) M=ComConst ACBP=A9 - 0001:0007BEB8 00001259 C=CODE S=.text G=(none) M=ComObj ACBP=A9 - 0001:0007D114 00000038 C=CODE S=.text G=(none) M=StdVCL ACBP=A9 - 0001:0007D14C 00001793 C=CODE S=.text G=(none) M=AxCtrls ACBP=A9 - 0001:0007E8E0 00000060 C=CODE S=.text G=(none) M=OleConst ACBP=A9 - 0001:0007E940 00003519 C=CODE S=.text G=(none) M=OleCtrls ACBP=A9 - 0001:00081E5C 00000050 C=CODE S=.text G=(none) M=JConsts ACBP=A9 - 0001:00081EAC 000133EC C=CODE S=.text G=(none) M=jpeg ACBP=A9 - 0001:00095298 00000314 C=CODE S=.text G=(none) M=TlHelp32 ACBP=A9 - 0001:000955AC 000000D8 C=CODE S=.text G=(none) M=WinSock ACBP=A9 - 0001:00095684 00001F40 C=CODE S=.text G=(none) M=ScktComp ACBP=A9 - 0001:000975C4 000008EA C=CODE S=.text G=(none) M=OleServer ACBP=A9 - 0001:00097EB0 00000598 C=CODE S=.text G=(none) M=MSCommLib_TLB ACBP=A9 - 0001:00098448 00000040 C=CODE S=.text G=(none) M=MMSystem ACBP=A9 - 0001:00098488 00000038 C=CODE S=.text G=(none) M=Nb30 ACBP=A9 - 0001:000984C0 00000A18 C=CODE S=.text G=(none) M=MaskUtils ACBP=A9 - 0001:00098ED8 00002108 C=CODE S=.text G=(none) M=Mask ACBP=A9 - 0001:0009AFE0 0000924C C=CODE S=.text G=(none) M=Grids ACBP=A9 - 0001:000A422C 000015B4 C=CODE S=.text G=(none) M=UnitPilote ACBP=A9 - 0001:000A57E0 000004D0 C=CODE S=.text G=(none) M=Importation ACBP=A9 - 0001:000A5CB0 0000FE58 C=CODE S=.text G=(none) M=UnitAnalyseSegCDM ACBP=A9 - 0001:000B5B08 000025F4 C=CODE S=.text G=(none) M=UnitConfigTCO ACBP=A9 - 0001:000B80FC 000009C0 C=CODE S=.text G=(none) M=Unit_Pilote_aig ACBP=A9 - 0001:000B8ABC 00003450 C=CODE S=.text G=(none) M=UnitConfigCellTCO ACBP=A9 - 0001:000BBF0C 0002B264 C=CODE S=.text G=(none) M=UnitTCO ACBP=A9 - 0001:000E7170 00002C18 C=CODE S=.text G=(none) M=UnitSR ACBP=A9 - 0001:000E9D88 00002404 C=CODE S=.text G=(none) M=UnitCDF ACBP=A9 - 0001:000EC18C 000015C7 C=CODE S=.text G=(none) M=verif_version ACBP=A9 - 0001:000ED754 0000114C C=CODE S=.text G=(none) M=UnitPareFeu ACBP=A9 - 0001:000EE8A0 00035068 C=CODE S=.text G=(none) M=UnitConfig ACBP=A9 - 0001:00123908 00002904 C=CODE S=.text G=(none) M=UnitDebug ACBP=A9 - 0001:0012620C 00000C00 C=CODE S=.text G=(none) M=UnitSimule ACBP=A9 - 0001:00126E0C 00002390 C=CODE S=.text G=(none) M=Unitplace ACBP=A9 - 0001:0012919C 00036A1C C=CODE S=.text G=(none) M=UnitPrinc ACBP=A9 - 0001:0015FBB8 0000048D C=CODE S=.text G=(none) M=Signaux_complexes_GL ACBP=A9 + 0001:0004642C 0000C698 C=CODE S=.text G=(none) M=StdCtrls ACBP=A9 + 0001:00052AC4 00000168 C=CODE S=.text G=(none) M=StdActns ACBP=A9 + 0001:00052C2C 00000D1F C=CODE S=.text G=(none) M=WinHelpViewer ACBP=A9 + 0001:0005394C 00011403 C=CODE S=.text G=(none) M=Controls ACBP=A9 + 0001:00064D50 00001292 C=CODE S=.text G=(none) M=ActnList ACBP=A9 + 0001:00065FE4 00001B9C C=CODE S=.text G=(none) M=ImgList ACBP=A9 + 0001:00067B80 000066E1 C=CODE S=.text G=(none) M=Menus ACBP=A9 + 0001:0006E264 0000CEFC C=CODE S=.text G=(none) M=Forms ACBP=A9 + 0001:0007B160 00000060 C=CODE S=.text G=(none) M=ComConst ACBP=A9 + 0001:0007B1C0 00001259 C=CODE S=.text G=(none) M=ComObj ACBP=A9 + 0001:0007C41C 00000038 C=CODE S=.text G=(none) M=StdVCL ACBP=A9 + 0001:0007C454 00001793 C=CODE S=.text G=(none) M=AxCtrls ACBP=A9 + 0001:0007DBE8 00000060 C=CODE S=.text G=(none) M=OleConst ACBP=A9 + 0001:0007DC48 00003519 C=CODE S=.text G=(none) M=OleCtrls ACBP=A9 + 0001:00081164 00000050 C=CODE S=.text G=(none) M=JConsts ACBP=A9 + 0001:000811B4 000133EC C=CODE S=.text G=(none) M=jpeg ACBP=A9 + 0001:000945A0 00000314 C=CODE S=.text G=(none) M=TlHelp32 ACBP=A9 + 0001:000948B4 000000D8 C=CODE S=.text G=(none) M=WinSock ACBP=A9 + 0001:0009498C 00001F40 C=CODE S=.text G=(none) M=ScktComp ACBP=A9 + 0001:000968CC 000008EA C=CODE S=.text G=(none) M=OleServer ACBP=A9 + 0001:000971B8 00000598 C=CODE S=.text G=(none) M=MSCommLib_TLB ACBP=A9 + 0001:00097750 00000040 C=CODE S=.text G=(none) M=MMSystem ACBP=A9 + 0001:00097790 00000038 C=CODE S=.text G=(none) M=Nb30 ACBP=A9 + 0001:000977C8 00000A18 C=CODE S=.text G=(none) M=MaskUtils ACBP=A9 + 0001:000981E0 00002108 C=CODE S=.text G=(none) M=Mask ACBP=A9 + 0001:0009A2E8 0000924C C=CODE S=.text G=(none) M=Grids ACBP=A9 + 0001:000A3534 000015B4 C=CODE S=.text G=(none) M=UnitPilote ACBP=A9 + 0001:000A4AE8 000004D0 C=CODE S=.text G=(none) M=Importation ACBP=A9 + 0001:000A4FB8 0000FE58 C=CODE S=.text G=(none) M=UnitAnalyseSegCDM ACBP=A9 + 0001:000B4E10 000025F4 C=CODE S=.text G=(none) M=UnitConfigTCO ACBP=A9 + 0001:000B7404 000009C0 C=CODE S=.text G=(none) M=Unit_Pilote_aig ACBP=A9 + 0001:000B7DC4 00003450 C=CODE S=.text G=(none) M=UnitConfigCellTCO ACBP=A9 + 0001:000BB214 0002B264 C=CODE S=.text G=(none) M=UnitTCO ACBP=A9 + 0001:000E6478 00002C18 C=CODE S=.text G=(none) M=UnitSR ACBP=A9 + 0001:000E9090 00002404 C=CODE S=.text G=(none) M=UnitCDF ACBP=A9 + 0001:000EB494 000015D3 C=CODE S=.text G=(none) M=verif_version ACBP=A9 + 0001:000ECA68 0000114C C=CODE S=.text G=(none) M=UnitPareFeu ACBP=A9 + 0001:000EDBB4 00034770 C=CODE S=.text G=(none) M=UnitConfig ACBP=A9 + 0001:00122324 00002904 C=CODE S=.text G=(none) M=UnitDebug ACBP=A9 + 0001:00124C28 00000C00 C=CODE S=.text G=(none) M=UnitSimule ACBP=A9 + 0001:00125828 00002390 C=CODE S=.text G=(none) M=Unitplace ACBP=A9 + 0001:00127BB8 00038380 C=CODE S=.text G=(none) M=UnitPrinc ACBP=A9 + 0001:0015FF38 0000048D C=CODE S=.text G=(none) M=Signaux_complexes_GL ACBP=A9 0002:00000000 000000CC C=DATA S=.data G=DGROUP M=System ACBP=A9 0002:000000CC 00000020 C=DATA S=.data G=DGROUP M=SysInit ACBP=A9 0002:000000EC 00000254 C=DATA S=.data G=DGROUP M=SysUtils ACBP=A9 @@ -117,20 +117,20 @@ Detailed map of segments 0002:00000C48 00000008 C=DATA S=.data G=DGROUP M=Mapi ACBP=A9 0002:00000C50 000000B9 C=DATA S=.data G=DGROUP M=ComCtrls ACBP=A9 0002:00000D0C 00000068 C=DATA S=.data G=DGROUP M=Themes ACBP=A9 - 0002:00000D74 00000178 C=DATA S=.data G=DGROUP M=StdCtrls ACBP=A9 - 0002:00000EEC 0000013C C=DATA S=.data G=DGROUP M=Controls ACBP=A9 - 0002:00001028 00000020 C=DATA S=.data G=DGROUP M=ImgList ACBP=A9 - 0002:00001048 000000EC C=DATA S=.data G=DGROUP M=Menus ACBP=A9 - 0002:00001134 00000124 C=DATA S=.data G=DGROUP M=Forms ACBP=A9 - 0002:00001258 00000030 C=DATA S=.data G=DGROUP M=ComObj ACBP=A9 - 0002:00001288 0000002C C=DATA S=.data G=DGROUP M=OleCtrls ACBP=A9 - 0002:000012B4 00000908 C=DATA S=.data G=DGROUP M=jpeg ACBP=A9 - 0002:00001BBC 00000058 C=DATA S=.data G=DGROUP M=MSCommLib_TLB ACBP=A9 - 0002:00001C14 00000009 C=DATA S=.data G=DGROUP M=MaskUtils ACBP=A9 - 0002:00001C20 00000004 C=DATA S=.data G=DGROUP M=Mask ACBP=A9 - 0002:00001C24 00000006 C=DATA S=.data G=DGROUP M=Grids ACBP=A9 - 0002:00001C2C 000000D4 C=DATA S=.data G=DGROUP M=UnitTCO ACBP=A9 - 0002:00001D00 0000060D C=DATA S=.data G=DGROUP M=UnitPrinc ACBP=A9 + 0002:00000D74 00000154 C=DATA S=.data G=DGROUP M=StdCtrls ACBP=A9 + 0002:00000EC8 0000013C C=DATA S=.data G=DGROUP M=Controls ACBP=A9 + 0002:00001004 00000020 C=DATA S=.data G=DGROUP M=ImgList ACBP=A9 + 0002:00001024 000000EC C=DATA S=.data G=DGROUP M=Menus ACBP=A9 + 0002:00001110 00000124 C=DATA S=.data G=DGROUP M=Forms ACBP=A9 + 0002:00001234 00000030 C=DATA S=.data G=DGROUP M=ComObj ACBP=A9 + 0002:00001264 0000002C C=DATA S=.data G=DGROUP M=OleCtrls ACBP=A9 + 0002:00001290 00000908 C=DATA S=.data G=DGROUP M=jpeg ACBP=A9 + 0002:00001B98 00000058 C=DATA S=.data G=DGROUP M=MSCommLib_TLB ACBP=A9 + 0002:00001BF0 00000009 C=DATA S=.data G=DGROUP M=MaskUtils ACBP=A9 + 0002:00001BFC 00000004 C=DATA S=.data G=DGROUP M=Mask ACBP=A9 + 0002:00001C00 00000006 C=DATA S=.data G=DGROUP M=Grids ACBP=A9 + 0002:00001C08 000000D4 C=DATA S=.data G=DGROUP M=UnitTCO ACBP=A9 + 0002:00001CDC 0000060D C=DATA S=.data G=DGROUP M=UnitPrinc ACBP=A9 0002:00003000 00000664 C=BSS S=.bss G=DGROUP M=System ACBP=A9 0002:00003664 00000010 C=BSS S=.bss G=DGROUP M=SysInit ACBP=A9 0002:00003674 00000004 C=BSS S=.bss G=DGROUP M=Types ACBP=A9 @@ -217,11 +217,11 @@ Detailed map of segments 0002:00049A30 00000014 C=BSS S=.bss G=DGROUP M=UnitCDF ACBP=A9 0002:00049A44 00000014 C=BSS S=.bss G=DGROUP M=verif_version ACBP=A9 0002:00049A58 00000004 C=BSS S=.bss G=DGROUP M=UnitPareFeu ACBP=A9 - 0002:00049A5C 000003A0 C=BSS S=.bss G=DGROUP M=UnitConfig ACBP=A9 - 0002:00049DFC 00000028 C=BSS S=.bss G=DGROUP M=UnitDebug ACBP=A9 - 0002:00049E24 0000000C C=BSS S=.bss G=DGROUP M=UnitSimule ACBP=A9 - 0002:00049E30 00000008 C=BSS S=.bss G=DGROUP M=Unitplace ACBP=A9 - 0002:00049E38 041597B8 C=BSS S=.bss G=DGROUP M=UnitPrinc ACBP=A9 + 0002:00049A5C 0000044C C=BSS S=.bss G=DGROUP M=UnitConfig ACBP=A9 + 0002:00049EA8 00000028 C=BSS S=.bss G=DGROUP M=UnitDebug ACBP=A9 + 0002:00049ED0 0000000C C=BSS S=.bss G=DGROUP M=UnitSimule ACBP=A9 + 0002:00049EDC 00000008 C=BSS S=.bss G=DGROUP M=Unitplace ACBP=A9 + 0002:00049EE4 04159CA4 C=BSS S=.bss G=DGROUP M=UnitPrinc ACBP=A9 Bound resource files @@ -247,4 +247,4 @@ Signaux_complexes_GL.res Signaux_complexes_GL.drf -Program entry point at 0001:0015FEC8 +Program entry point at 0001:00160248 diff --git a/UnitConfig.dfm b/UnitConfig.dfm index 673572f..3bba10e 100644 --- a/UnitConfig.dfm +++ b/UnitConfig.dfm @@ -1,6 +1,6 @@ object FormConfig: TFormConfig - Left = 260 - Top = 147 + Left = 331 + Top = 136 Hint = 'Modifie la configuration selon les s'#233'lections choisies' BorderStyle = bsDialog Caption = 'Configuration g'#233'n'#233'rale' @@ -668,7 +668,7 @@ object FormConfig: TFormConfig Top = 8 Width = 633 Height = 497 - ActivePage = TabSheetCDM + ActivePage = TabSheetAccessoires Font.Charset = DEFAULT_CHARSET Font.Color = clBlack Font.Height = -11 @@ -1119,7 +1119,7 @@ object FormConfig: TFormConfig end object CheckBoxVerifXpressNet: TCheckBox Left = 8 - Top = 108 + Top = 116 Width = 233 Height = 17 Hint = @@ -2295,7 +2295,7 @@ object FormConfig: TFormConfig Width = 129 Height = 21 Style = csDropDownList - ItemHeight = 0 + ItemHeight = 13 TabOrder = 1 OnChange = ComboBoxDecChange end @@ -2402,7 +2402,7 @@ object FormConfig: TFormConfig Width = 129 Height = 21 Style = csDropDownList - ItemHeight = 0 + ItemHeight = 13 TabOrder = 2 OnChange = ComboBoxAspChange end @@ -2688,7 +2688,7 @@ object FormConfig: TFormConfig Top = 56 Width = 193 Height = 21 - ItemHeight = 0 + ItemHeight = 13 TabOrder = 0 OnChange = ComboBoxDecodeurPersoChange end @@ -2707,7 +2707,7 @@ object FormConfig: TFormConfig Width = 145 Height = 21 Style = csDropDownList - ItemHeight = 0 + ItemHeight = 13 TabOrder = 2 OnChange = ComboBoxNationChange end @@ -2758,7 +2758,7 @@ object FormConfig: TFormConfig TabOrder = 0 object GroupBoxRadio: TGroupBox Left = 8 - Top = 16 + Top = 24 Width = 225 Height = 89 Caption = 'Type d'#39'action' @@ -2793,16 +2793,16 @@ object FormConfig: TFormConfig object RadioButtonCde: TRadioButton Left = 24 Top = 64 - Width = 137 + Width = 177 Height = 17 - Caption = 'Commande COM/USB' + Caption = 'Commande COM/USB/Socket' TabOrder = 3 OnClick = RadioButtonCdeClick end end object GroupBoxAct: TGroupBox - Left = 8 - Top = 96 + Left = 16 + Top = 128 Width = 233 Height = 321 Caption = 'Action fonction de locomotive ' @@ -2864,7 +2864,8 @@ object FormConfig: TFormConfig Height = 21 Hint = 'Train d'#233'clencheur pour lequel la condition s'#39'applique (mettre X ' + - 'pour tous les trains) - d'#233'clenchement par actionneur uniquement' + 'pour tous les trains) #13 d'#233'clenchement par actionneur uniquemen' + + 't' ParentShowHint = False ShowHint = True TabOrder = 2 @@ -3103,12 +3104,13 @@ object FormConfig: TFormConfig OnChange = EditTrainDestChange end object ComboBoxAccComUSB: TComboBox - Left = 24 + Left = 8 Top = 32 - Width = 169 + Width = 201 Height = 21 - Hint = 'Nom de l'#39'accessoire d'#233'fini dans l'#39'onglet "accessoires COM/USB"' - ItemHeight = 0 + Hint = 'Nom de l'#39'accessoire d'#233'fini dans l'#39'onglet "p'#233'riph'#233'riques COM/USB"' + Style = csDropDownList + ItemHeight = 13 ParentShowHint = False ShowHint = True TabOrder = 6 @@ -3128,128 +3130,48 @@ object FormConfig: TFormConfig OnClick = ButtonTestActClick end end + object GroupBoxPNA: TGroupBox + Left = 32 + Top = 120 + Width = 169 + Height = 121 + Caption = 'Actionneurs PN simples' + TabOrder = 2 + end + object GroupBoxPNZ: TGroupBox + Left = 56 + Top = 136 + Width = 169 + Height = 65 + Caption = 'Zones de d'#233'tection' + TabOrder = 3 + end object GroupBoxPN: TGroupBox - Left = 216 - Top = 24 - Width = 233 - Height = 401 + Left = 8 + Top = 112 + Width = 241 + Height = 193 Caption = 'Action gestion passage '#224' niveau' ParentShowHint = False ShowHint = False - TabOrder = 2 + TabOrder = 4 object Label21: TLabel Left = 8 - Top = 20 + Top = 84 Width = 100 Height = 13 Caption = 'Adresse de fermeture' end object Label22: TLabel Left = 8 - Top = 44 + Top = 108 Width = 94 Height = 13 Caption = 'Adresse d'#39'ouverture' end - object Label23: TLabel - Left = 8 - Top = 116 - Width = 30 - Height = 13 - Caption = 'Voie 1' - end - object LabelV2: TLabel - Left = 8 - Top = 140 - Width = 30 - Height = 13 - Caption = 'Voie 2' - end - object LabelV3: TLabel - Left = 8 - Top = 164 - Width = 30 - Height = 13 - Caption = 'Voie 3' - end - object Shape1: TShape - Left = 64 - Top = 105 - Width = 137 - Height = 2 - end - object Label39: TLabel - Left = 8 - Top = 188 - Width = 30 - Height = 13 - Caption = 'Voie 4' - end - object Label45: TLabel - Left = 64 - Top = 240 - Width = 54 - Height = 13 - Caption = 'Zone ferme' - end - object Label46: TLabel - Left = 152 - Top = 240 - Width = 55 - Height = 13 - Caption = 'Zone ouvre' - end - object Label47: TLabel - Left = 8 - Top = 268 - Width = 30 - Height = 13 - Caption = 'Voie 1' - end - object Label48: TLabel - Left = 8 - Top = 292 - Width = 30 - Height = 13 - Caption = 'Voie 2' - end - object Label49: TLabel - Left = 8 - Top = 316 - Width = 30 - Height = 13 - Caption = 'Voie 3' - end - object Label50: TLabel - Left = 8 - Top = 340 - Width = 30 - Height = 13 - Caption = 'Voie 4' - end - object Shape2: TShape - Left = 64 - Top = 257 - Width = 150 - Height = 2 - end - object Label59: TLabel - Left = 8 - Top = 212 - Width = 30 - Height = 13 - Caption = 'Voie 5' - end - object Label60: TLabel - Left = 8 - Top = 364 - Width = 30 - Height = 13 - Caption = 'Voie 5' - end object EditAdrFerme: TEdit Left = 120 - Top = 16 + Top = 80 Width = 41 Height = 21 TabOrder = 0 @@ -3257,26 +3179,26 @@ object FormConfig: TFormConfig end object EditAdrOuvre: TEdit Left = 120 - Top = 40 + Top = 104 Width = 41 Height = 21 TabOrder = 2 OnChange = EditAdrOuvreChange end - object EditCmdFerme: TEdit + object EditCdeFerme: TEdit Left = 168 - Top = 16 + Top = 80 Width = 25 Height = 21 Hint = 'Commande de fermeture (0 '#224' 2)' ParentShowHint = False ShowHint = True TabOrder = 1 - OnChange = EditCmdFermeChange + OnChange = EditCdeFermeChange end object EditCdeOuvre: TEdit Left = 168 - Top = 40 + Top = 104 Width = 25 Height = 21 Hint = 'Commande d'#39'ouverture (0 '#224' 2)' @@ -3285,259 +3207,33 @@ object FormConfig: TFormConfig TabOrder = 3 OnChange = EditCdeOuvreChange end - object EditV1F: TEdit - Left = 64 - Top = 112 - Width = 41 - Height = 21 - Hint = 'Actionneur 1 fermeture' - ParentShowHint = False - ShowHint = True - TabOrder = 4 - OnChange = EditV1FChange - end - object StaticText1: TStaticText - Left = 64 - Top = 88 - Width = 49 - Height = 17 - Caption = 'Act ferme' - TabOrder = 14 - end - object StaticText2: TStaticText - Left = 152 - Top = 88 - Width = 50 - Height = 17 - Caption = 'Act ouvre' - TabOrder = 15 - end - object EditV2F: TEdit - Left = 64 - Top = 136 - Width = 41 - Height = 21 - TabOrder = 6 - OnChange = EditV2FChange - end - object EditV3F: TEdit - Left = 64 - Top = 160 - Width = 41 - Height = 21 - TabOrder = 8 - OnChange = EditV3FChange - end - object EditV1O: TEdit - Left = 152 - Top = 112 - Width = 41 - Height = 21 - Hint = 'Actionneur 1 ouverture' - ParentShowHint = False - ShowHint = True - TabOrder = 5 - OnChange = EditV1OChange - end - object EditV2O: TEdit - Left = 152 - Top = 136 - Width = 41 - Height = 21 - TabOrder = 7 - OnChange = EditV2OChange - end - object EditV3O: TEdit - Left = 152 - Top = 160 - Width = 41 - Height = 21 - TabOrder = 9 - OnChange = EditV3OChange - end - object EditV4F: TEdit - Left = 64 - Top = 184 - Width = 41 - Height = 21 - TabOrder = 10 - OnChange = EditV4FChange - end - object EditV4O: TEdit - Left = 152 - Top = 184 - Width = 41 - Height = 21 - TabOrder = 11 - OnChange = EditV4OChange - end - object EditZdet1V1F: TEdit - Left = 64 - Top = 264 - Width = 33 - Height = 21 - TabOrder = 16 - OnChange = EditZdet1V1FChange - end - object EditZdet1V1O: TEdit - Left = 152 - Top = 264 - Width = 33 - Height = 21 - Hint = 'D'#233'tecteur 1 zone d'#39'ouverture' - TabOrder = 18 - OnChange = EditZdet1V1OChange - end - object EditZdet2V1F: TEdit - Left = 96 - Top = 264 - Width = 33 - Height = 21 - Hint = 'D'#233'tecteur 2 zone de fermeture' - TabOrder = 17 - OnChange = EditZdet2V1FChange - end - object EditZdet2V1O: TEdit - Left = 184 - Top = 264 - Width = 33 - Height = 21 - Hint = 'D'#233'tecteur 2 zone d'#39'ouverture' - TabOrder = 19 - OnChange = EditZdet2V1OChange - end - object EditZdet1V2F: TEdit - Left = 64 - Top = 288 - Width = 33 - Height = 21 - TabOrder = 20 - OnChange = EditZdet1V2FChange - end - object EditZdet2V2F: TEdit - Left = 96 - Top = 288 - Width = 33 - Height = 21 - Hint = 'D'#233'tecteur 2 zone de fermeture' - TabOrder = 21 - OnChange = EditZdet2V2FChange - end - object EditZdet1V2O: TEdit - Left = 152 - Top = 288 - Width = 33 - Height = 21 - Hint = 'D'#233'tecteur 1 zone d'#39'ouverture' - TabOrder = 22 - OnChange = EditZdet1V2OChange - end - object EditZdet2V2O: TEdit - Left = 184 - Top = 288 - Width = 33 - Height = 21 - Hint = 'D'#233'tecteur 2 zone d'#39'ouverture' - TabOrder = 23 - OnChange = EditZdet2V2OChange - end - object EditZdet1V3F: TEdit - Left = 64 - Top = 312 - Width = 33 - Height = 21 - TabOrder = 24 - OnChange = EditZdet1V3FChange - end - object EditZdet2V3F: TEdit - Left = 96 - Top = 312 - Width = 33 - Height = 21 - Hint = 'D'#233'tecteur 2 zone de fermeture' - TabOrder = 25 - OnChange = EditZdet2V3FChange - end - object EditZdet1V3O: TEdit - Left = 152 - Top = 312 - Width = 33 - Height = 21 - Hint = 'D'#233'tecteur 1 zone d'#39'ouverture' - TabOrder = 26 - OnChange = EditZdet1V3OChange - end - object EditZdet2V3O: TEdit - Left = 184 - Top = 312 - Width = 33 - Height = 21 - Hint = 'D'#233'tecteur 2 zone d'#39'ouverture' - TabOrder = 27 - OnChange = EditZdet2V3OChange - end - object EditZdet1V4F: TEdit - Left = 64 - Top = 336 - Width = 33 - Height = 21 - TabOrder = 28 - OnChange = EditZdet1V4FChange - end - object EditZdet2V4F: TEdit - Left = 96 - Top = 336 - Width = 33 - Height = 21 - Hint = 'D'#233'tecteur 2 zone de fermeture' - TabOrder = 29 - OnChange = EditZdet2V4FChange - end - object EditZdet1V4O: TEdit - Left = 152 - Top = 336 - Width = 33 - Height = 21 - Hint = 'D'#233'tecteur 1 zone d'#39'ouverture' - TabOrder = 30 - OnChange = EditZdet1V4OChange - end - object EditZdet2V4O: TEdit - Left = 184 - Top = 336 - Width = 33 - Height = 21 - Hint = 'D'#233'tecteur 2 zone d'#39'ouverture' - TabOrder = 31 - OnChange = EditZdet2V4OChange - end object ButtonTestFerme: TButton Left = 200 - Top = 16 + Top = 80 Width = 27 Height = 21 Hint = 'Test de fermeture (mode CDM ou connect'#233' '#224' l'#39'interface)' Caption = 'test' ParentShowHint = False ShowHint = True - TabOrder = 36 + TabOrder = 4 OnClick = ButtonTestFermeClick end object ButtonTestOuvre: TButton Left = 200 - Top = 40 + Top = 104 Width = 27 Height = 21 Hint = 'Test d'#39'ouverture (mode CDM ou connect'#233' '#224' l'#39'interface)' Caption = 'test' ParentShowHint = False ShowHint = True - TabOrder = 37 + TabOrder = 5 OnClick = ButtonTestOuvreClick end object CheckPnPulse: TCheckBox Left = 8 - Top = 64 + Top = 128 Width = 97 Height = 17 Hint = @@ -3546,59 +3242,60 @@ object FormConfig: TFormConfig Caption = 'Impulsionnel' ParentShowHint = False ShowHint = True - TabOrder = 38 + TabOrder = 6 OnClick = CheckPnPulseClick end - object EditV5F: TEdit - Left = 64 - Top = 208 - Width = 41 - Height = 21 - TabOrder = 12 - OnChange = EditV5FChange + object RadioButtonSimple: TRadioButton + Left = 24 + Top = 152 + Width = 113 + Height = 17 + Hint = 'PN command'#233' par actionneurs' + Caption = 'Actionneurs simples' + ParentShowHint = False + ShowHint = True + TabOrder = 7 + OnClick = RadioButtonSimpleClick end - object EditV5O: TEdit - Left = 152 - Top = 208 - Width = 41 - Height = 21 - TabOrder = 13 - OnChange = EditV5OChange + object RadioButtonZone: TRadioButton + Left = 24 + Top = 168 + Width = 113 + Height = 17 + Hint = 'PN command'#233' par m'#233'moires de zone' + Caption = 'Zones de d'#233'tection' + ParentShowHint = False + ShowHint = True + TabOrder = 8 + OnClick = RadioButtonZoneClick end - object EditZdet1V5F: TEdit - Left = 64 - Top = 360 - Width = 33 - Height = 21 - TabOrder = 32 - OnChange = EditZdet1V5FChange + object RadioGroupActPN: TRadioGroup + Left = 8 + Top = 16 + Width = 217 + Height = 57 + Hint = 'action par accessoire DCC ou commande COM/USB' + Caption = 'Type d'#39'action' + Items.Strings = ( + 'Accessoire' + 'Commande COM/USB ou Socket') + ParentShowHint = False + ShowHint = True + TabOrder = 9 + OnClick = RadioGroupActPNClick end - object EditZdet2V5F: TEdit - Left = 96 - Top = 360 - Width = 33 + object ComboBoxPNCom: TComboBox + Left = 8 + Top = 104 + Width = 129 Height = 21 - Hint = 'D'#233'tecteur 2 zone de fermeture' - TabOrder = 33 - OnChange = EditZdet2V5FChange - end - object EditZdet1V5O: TEdit - Left = 152 - Top = 360 - Width = 33 - Height = 21 - Hint = 'D'#233'tecteur 1 zone d'#39'ouverture' - TabOrder = 34 - OnChange = EditZdet1V5OChange - end - object EditZdet2V5O: TEdit - Left = 184 - Top = 360 - Width = 33 - Height = 21 - Hint = 'D'#233'tecteur 2 zone d'#39'ouverture' - TabOrder = 35 - OnChange = EditZdet2V5OChange + Hint = 'Nom de l'#39'accessoire d'#233'fini dans l'#39'onglet "p'#233'riph'#233'riques COM/USB"' + Style = csDropDownList + ItemHeight = 13 + ParentShowHint = False + ShowHint = True + TabOrder = 10 + OnChange = ComboBoxPNComChange end end end @@ -3655,7 +3352,7 @@ object FormConfig: TFormConfig Top = 272 Width = 345 Height = 193 - Caption = 'Actionneurs passage '#224' niveau' + Caption = 'Actionneurs/d'#233'tecteurs passage '#224' niveau' TabOrder = 2 object ButtonNouvPN: TButton Left = 8 @@ -4197,16 +3894,16 @@ object FormConfig: TFormConfig end end object TabSheetAccessoires: TTabSheet - Caption = 'P'#233'riph'#233'riques COM/USB' + Caption = 'COM/USB/Socket' ImageIndex = 9 object Label73: TLabel Left = 8 Top = 8 - Width = 355 + Width = 574 Height = 13 Caption = - 'Les accessoires COM/USB sont utilis'#233's pour '#234'tre activ'#233's par un a' + - 'ctionneur' + 'Les p'#233'riph'#233'riques COM/USB ou Sockets sont utilis'#233's pour '#234'tre act' + + 'iv'#233's par un actionneur et leur envoyer des ordres ASCII' end object LabelInfoAcc: TLabel Left = 272 @@ -4230,6 +3927,7 @@ object FormConfig: TFormConfig ParentFont = False PopupMenu = PopupMenuListes TabOrder = 0 + OnKeyDown = ListBoxAccKeyDown OnMouseDown = ListBoxAccMouseDown end object ButtonAjAccCom: TButton @@ -4254,12 +3952,12 @@ object FormConfig: TFormConfig Left = 264 Top = 64 Width = 329 - Height = 113 - Caption = 'Description de l'#39'accessoire' + Height = 129 + Caption = 'Description du p'#233'riph'#233'rique' TabOrder = 3 object Label71: TLabel Left = 10 - Top = 32 + Top = 28 Width = 98 Height = 13 Caption = 'Nom du p'#233'riph'#233'rique' @@ -4281,7 +3979,7 @@ object FormConfig: TFormConfig Top = 357 Width = 75 Height = 20 - Hint = 'R'#233'ouvre les ports COMs demand'#233's' + Hint = 'R'#233'ouvre les ports COMs et Sockets demand'#233's' Caption = 'Ouvre COMs' ParentShowHint = False ShowHint = True diff --git a/UnitConfig.pas b/UnitConfig.pas index cbe6982..464498f 100644 --- a/UnitConfig.pas +++ b/UnitConfig.pas @@ -99,25 +99,6 @@ type GroupBoxRadio: TGroupBox; RadioButtonLoc: TRadioButton; GroupBoxAct: TGroupBox; - GroupBoxPN: TGroupBox; - Label21: TLabel; - EditAdrFerme: TEdit; - Label22: TLabel; - EditAdrOuvre: TEdit; - EditCmdFerme: TEdit; - EditCdeOuvre: TEdit; - Label23: TLabel; - LabelV2: TLabel; - LabelV3: TLabel; - EditV1F: TEdit; - Shape1: TShape; - StaticText1: TStaticText; - StaticText2: TStaticText; - EditV2F: TEdit; - EditV3F: TEdit; - EditV1O: TEdit; - EditV2O: TEdit; - EditV3O: TEdit; Label17: TLabel; MemoCarre: TMemo; ListBoxAig: TListBox; @@ -209,9 +190,6 @@ type Label37: TLabel; Label38: TLabel; EditTempo10: TEdit; - Label39: TLabel; - EditV4F: TEdit; - EditV4O: TEdit; Label41: TLabel; EditFonte: TEdit; ComboBoxDD: TComboBox; @@ -247,37 +225,11 @@ type Label44: TLabel; CheckPosAig: TCheckBox; ButtonEnregistre: TButton; - Label45: TLabel; - Label46: TLabel; - Label47: TLabel; - Label48: TLabel; - Label49: TLabel; - Label50: TLabel; - Shape2: TShape; - EditZdet1V1F: TEdit; - EditZdet1V1O: TEdit; - EditZdet2V1F: TEdit; - EditZdet2V1O: TEdit; - EditZdet1V2F: TEdit; - EditZdet2V2F: TEdit; - EditZdet1V2O: TEdit; - EditZdet2V2O: TEdit; - EditZdet1V3F: TEdit; - EditZdet2V3F: TEdit; - EditZdet1V3O: TEdit; - EditZdet2V3O: TEdit; - EditZdet1V4F: TEdit; - EditZdet2V4F: TEdit; - EditZdet1V4O: TEdit; - EditZdet2V4O: TEdit; CheckBoxDemarUSB: TCheckBox; CheckBoxDemarEth: TCheckBox; Memo5: TMemo; EditLAY: TEdit; Label13: TLabel; - ButtonTestFerme: TButton; - ButtonTestOuvre: TButton; - CheckPnPulse: TCheckBox; CheckFVC: TCheckBox; CheckFRC: TCheckBox; Label40: TLabel; @@ -321,14 +273,6 @@ type CheckBoxVerifXpressNet: TCheckBox; ImageTrain: TImage; ButtonPFCDM: TButton; - Label59: TLabel; - EditV5F: TEdit; - EditV5O: TEdit; - EditZdet1V5F: TEdit; - EditZdet2V5F: TEdit; - EditZdet1V5O: TEdit; - EditZdet2V5O: TEdit; - Label60: TLabel; PopupMenuBranches: TPopupMenu; Copier1: TMenuItem; Coller1: TMenuItem; @@ -378,6 +322,22 @@ type Label73: TLabel; LabelInfoAcc: TLabel; ButtonOuvreCom: TButton; + GroupBoxPNA: TGroupBox; + GroupBoxPNZ: TGroupBox; + GroupBoxPN: TGroupBox; + Label21: TLabel; + Label22: TLabel; + EditAdrFerme: TEdit; + EditAdrOuvre: TEdit; + EditCdeFerme: TEdit; + EditCdeOuvre: TEdit; + ButtonTestFerme: TButton; + ButtonTestOuvre: TButton; + CheckPnPulse: TCheckBox; + RadioButtonSimple: TRadioButton; + RadioButtonZone: TRadioButton; + RadioGroupActPN: TRadioGroup; + ComboBoxPNCom: TComboBox; procedure ButtonAppliquerEtFermerClick(Sender: TObject); procedure FormActivate(Sender: TObject); procedure FormCreate(Sender: TObject); @@ -403,15 +363,9 @@ type procedure RichPNMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure EditAdrFermeChange(Sender: TObject); - procedure EditCmdFermeChange(Sender: TObject); + procedure EditCdeFermeChange(Sender: TObject); procedure EditAdrOuvreChange(Sender: TObject); procedure EditCdeOuvreChange(Sender: TObject); - procedure EditV1FChange(Sender: TObject); - procedure EditV1OChange(Sender: TObject); - procedure EditV2FChange(Sender: TObject); - procedure EditV2OChange(Sender: TObject); - procedure EditV3FChange(Sender: TObject); - procedure EditV3OChange(Sender: TObject); procedure ButtonNouvAccClick(Sender: TObject); procedure ButtonNouvPNClick(Sender: TObject); procedure ButtonSupAccClick(Sender: TObject); @@ -430,8 +384,6 @@ type procedure ButtonVerifConfigClick(Sender: TObject); procedure MemoCarreChange(Sender: TObject); procedure CheckInvInitClick(Sender: TObject); - procedure EditV4FChange(Sender: TObject); - procedure EditV4OChange(Sender: TObject); procedure ComboBoxDDChange(Sender: TObject); procedure EditLChange(Sender: TObject); procedure CheckBoxFBClick(Sender: TObject); @@ -478,21 +430,6 @@ type procedure ListBoxAigKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure ButtonEnregistreClick(Sender: TObject); - procedure EditZdet1V1FChange(Sender: TObject); - procedure EditZdet2V1FChange(Sender: TObject); - procedure EditZdet1V1OChange(Sender: TObject); - procedure EditZdet2V1OChange(Sender: TObject); - procedure EditZdet1V2FChange(Sender: TObject); - procedure EditZdet2V2FChange(Sender: TObject); - procedure EditZdet1V2OChange(Sender: TObject); - procedure EditZdet2V2OChange(Sender: TObject); - procedure EditZdet1V3FChange(Sender: TObject); - procedure EditZdet2V3FChange(Sender: TObject); - procedure EditZdet1V3OChange(Sender: TObject); - procedure EditZdet2V3OChange(Sender: TObject); - procedure EditZdet1V4FChange(Sender: TObject); - procedure EditZdet1V4OChange(Sender: TObject); - procedure EditZdet2V4OChange(Sender: TObject); procedure ButtonTestFermeClick(Sender: TObject); procedure ButtonTestOuvreClick(Sender: TObject); procedure CheckPnPulseClick(Sender: TObject); @@ -518,12 +455,6 @@ type procedure ListBoxTrainsKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure ButtonPFCDMClick(Sender: TObject); - procedure EditV5FChange(Sender: TObject); - procedure EditV5OChange(Sender: TObject); - procedure EditZdet1V5FChange(Sender: TObject); - procedure EditZdet2V5FChange(Sender: TObject); - procedure EditZdet1V5OChange(Sender: TObject); - procedure EditZdet2V5OChange(Sender: TObject); procedure EditLAYChange(Sender: TObject); procedure EditLAYExit(Sender: TObject); procedure Copier1Click(Sender: TObject); @@ -556,7 +487,6 @@ type Shift: TShiftState; X, Y: Integer); procedure ListBoxPNKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); - procedure EditZdet2V4FChange(Sender: TObject); procedure Slectionnertout1Click(Sender: TObject); procedure Supprimer1Click(Sender: TObject); procedure Nouveau1Click(Sender: TObject); @@ -569,6 +499,12 @@ type Shift: TShiftState; X, Y: Integer); procedure ComboBoxAccComUSBChange(Sender: TObject); procedure ButtonSupAccComClick(Sender: TObject); + procedure ListBoxAccKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure RadioButtonSimpleClick(Sender: TObject); + procedure RadioButtonZoneClick(Sender: TObject); + procedure RadioGroupActPNClick(Sender: TObject); + procedure ComboBoxPNComChange(Sender: TObject); private { Déclarations privées } @@ -656,7 +592,7 @@ var ligneclicAig,AncLigneClicAig,ligneClicSig,AncligneClicSig,EnvAigDccpp,AdrBaseDetDccpp, ligneClicBr,AncligneClicBr,ligneClicAct,AncLigneClicAct,Adressefeuclic,NumTrameCDM, Algo_localisation,Verif_AdrXpressNet,ligneclicTrain,AncligneclicTrain,AntiTimeoutEthLenz, - ligneDCC,decCourant,AffMemoFenetre,NbreComCde,ligneClicAccCOM,AncligneClicAccCOM : integer; + ligneDCC,decCourant,AffMemoFenetre,ligneClicAccCOM,AncligneClicAccCOM : integer; ack_cdm,clicliste,config_modifie,clicproprietes,confasauver,trouve_MaxPort, modif_branches,ConfigPrete,trouve_section_dccpp,trouve_section_trains,trouve_section_acccomusb, @@ -666,8 +602,15 @@ var // composants dynamiques Gp1 : TGroupBox; CheckBoxCR,Cb1,Cb2,Cb3,CbVis : TCheckBox; - EditPortCde: Tedit; - LabelPortCde : Tlabel; + EditPortCde,EditV1F,EditV1O,EditV2F,EditV2O,EditV3F,EditV3O,EditV4F,EditV4O,EditV5F,EditV5O, + EditZdet1V1F,EditZdet2V1F,EditZdet1V1O,EditZdet2V1O, + EditZdet1V2F,EditZdet2V2F,EditZdet1V2O,EditZdet2V2O, + EditZdet1V3F,EditZdet2V3F,EditZdet1V3O,EditZdet2V3O, + EditZdet1V4F,EditZdet2V4F,EditZdet1V4O,EditZdet2V4O, + EditZdet1V5F,EditZdet2V5F,EditZdet1V5O,EditZdet2V5O :Tedit; + LabelPortCde,LbPnVoie1,LbAPnVoie1,LbAPnVoie2,LbAPnVoie3,LbAPnVoie4,LbAPnVoie5,LbATitre, + LbZTitre,LbZPnVoie1,LbZPnVoie2,LbZPnVoie3,LbZPnVoie4,LbZPnVoie5 : Tlabel; + shape1,ShapeZ : Tshape; EditT : Array[1..10] of Tedit; ComboL1,ComboL2,ComboTS1,ComboTS2 : Array[1..10] of TComboBox; ShapeT : array[1..10] of TShape; @@ -910,7 +853,7 @@ begin config_com:=not( (i=0) or (NumPort>MaxPortCom) or (prot_serie=-1) or (prot_serie>4) or (i=0) ); end; -function encode_AccCOM(index : integer) : string; +function encode_Periph(index : integer) : string; var s : string; begin s:=Tablo_acc_COMUSB[index].nom; @@ -918,7 +861,7 @@ begin if Tablo_acc_COMUSB[index].ScvDet then s:=s+',1' else s:=s+',0'; if Tablo_acc_COMUSB[index].ScvAct then s:=s+',1' else s:=s+',0'; if Tablo_acc_COMUSB[index].ScvVis then s:=s+',1' else s:=s+',0'; - if Tablo_acc_COMUSB[index].cr then s:=s+',1' else s:=s+',0'; + if Tablo_acc_COMUSB[index].cr then s:=s+',1' else s:=s+',0'; s:=s+','+Tablo_acc_COMUSB[index].protocole; result:=s; @@ -1671,12 +1614,24 @@ begin end; end; - s:=s+',PN('+IntToSTR(tablo_PN[i].AdresseFerme)+','; - s:=s+intToSTR(tablo_PN[i].commandeFerme)+','; - s:=s+IntToSTR(tablo_PN[i].AdresseOuvre)+','; - s:=s+intToSTR(tablo_PN[i].commandeOuvre)+'),'; + // commande par accessoire + if tablo_PN[i].TypeCde=0 then + begin + s:=s+',PN('+IntToSTR(tablo_PN[i].AdresseFerme)+','; + s:=s+intToSTR(tablo_PN[i].commandeFerme)+','; + s:=s+IntToSTR(tablo_PN[i].AdresseOuvre)+','; + s:=s+intToSTR(tablo_PN[i].commandeOuvre)+'),'; + end; + + // commande par comusb + if tablo_PN[i].TypeCde=1 then + begin + s:=s+',PN('+intToSTR(tablo_PN[i].AdresseFerme)+','+tablo_PN[i].commandeF+','+tablo_PN[i].commandeO+',0),'; + end; + + if tablo_PN[i].pulse=1 then s:=s+'1,' else s:=s+'0,'; + if tablo_PN[i].TypeCde=1 then s:=s+'1' else s:=s+'0'; - if tablo_PN[i].pulse=1 then s:=s+'1' else s:=s+'0'; end; encode_act_pn:=s; end; @@ -1946,12 +1901,12 @@ begin end; writeln(fichierN,'0'); - // accessoires comusb + // périphériques comusb writeln(fichierN,'/------------'); writeln(fichierN,section_accCOM_ch); - for i:=1 to NbAcc_USBCOM do + for i:=1 to NbPeriph do begin - s:=encode_AccCOM(i); + s:=encode_Periph(i); writeln(fichierN,s); end; writeln(fichierN,'0'); @@ -2069,7 +2024,6 @@ var s,sa,SOrigine: string; maxTablo_act:=1; NbrePN:=0;Nligne:=1; - NbreComCde:=0; for i:=1 to 10 do tablo_com_cde[i].NumAcc:=0; // définition des actionneurs @@ -2077,203 +2031,154 @@ var s,sa,SOrigine: string; s:=lit_ligne; if (s<>'0') and (s<>'') then begin - //Affiche(s,clyellow); - sa:=s; sOrigine:=s; - - - if s[1]='A' then + // premier champ type de déclencheur-------------------- + // nombre = actionneur/détecteur + // MEM = zone + // Aaiguillage = aiguillage + s:=sOrigine; // travailler en min/maj + if (upcase(s[1])='A') then begin Tablo_actionneur[maxtablo_act].typdeclenche:=2; // type aiguillage - Delete(sa,1,1); - val(sa,j,erreur); + Delete(s,1,1); + val(s,j,erreur); Tablo_actionneur[maxtablo_act].adresse:=j; - delete(sa,1,erreur); - s:=sa; - end; - - i:=pos('MEM[',sOrigine); - if i>0 then + delete(s,1,erreur); + val(s,j,erreur); + Tablo_actionneur[maxtablo_act].etat:=j; + delete(s,1,erreur); + i:=pos(',',s); + Tablo_actionneur[maxtablo_act].traindecl:=copy(s,1,i-1); // inutile mais stocké + delete(s,1,i); + end + else + if upcase(s[1])='M' then //MEM[ begin Tablo_actionneur[maxtablo_act].typdeclenche:=3; // type mémoire de zone - Delete(sa,1,4); - val(sa,j,erreur); + Delete(s,1,4); + val(s,j,erreur); Tablo_actionneur[maxtablo_act].adresse:=j; - i:=pos(',',sa);delete(sa,1,i); - val(sa,j,erreur); - i:=pos(',',sa); + i:=pos(',',s);delete(s,1,i); + val(s,j,erreur); + i:=pos(',',s); Tablo_actionneur[maxtablo_act].adresse2:=j; - delete(sa,1,i); - s:=sa; // mémo s + delete(s,1,i); + val(s,j,erreur); + Tablo_actionneur[maxtablo_act].etat:=j; + delete(s,1,erreur); + i:=pos(',',s); + Tablo_actionneur[maxtablo_act].traindecl:=copy(s,1,i-1); // inutile mais stocké + delete(s,1,i); + end + else + if (s[1]<>'(') then + begin + // nombre + Tablo_actionneur[maxtablo_act].typdeclenche:=0; // type actionneur 0=actionneur/détecteur + val(s,j,erreur); + Tablo_actionneur[maxtablo_act].adresse:=j; + delete(s,1,erreur); + val(s,j,erreur); delete(s,1,erreur); + Tablo_actionneur[maxtablo_act].etat:=j; + i:=pos(',',s); // encadre le nom du train + Tablo_actionneur[maxtablo_act].TrainDecl:=copy(s,1,i-1); + delete(s,1,i); end; - if length(sOrigine)>1 then + // type d'action ------------------------- + // F,etat,X + // A,etat,X + // "fichierson" + // ACCnum + if upcase(s[1])='F' then begin - if (sOrigine[1]<>'(') and (sorigine[1]<>'A') and (pos('MEM[',sOrigine)=0) then // si pas détecteur de PN - begin - Tablo_actionneur[maxtablo_act].typdeclenche:=0; // type actionneur - val(sa,j,erreur); - Tablo_actionneur[maxtablo_act].adresse:=j; - delete(sa,1,erreur); - s:=sa; - end; + // -----------------fonction loco + Tablo_actionneur[maxtablo_act].act:=false; + Tablo_actionneur[maxtablo_act].loco:=true; + Tablo_actionneur[maxtablo_act].son:=false; + Tablo_actionneur[maxtablo_act].cde:=false; + + delete(s,1,1); + val(s,j,erreur); + Tablo_actionneur[maxTablo_act].fonction:=j; + Delete(s,1,erreur); + + val(s,j,erreur); + Tablo_actionneur[maxTablo_act].tempo:=j; + Delete(s,1,erreur); + + Tablo_actionneur[maxTablo_act].trainDest:=s; + s:=''; + + inc(maxTablo_act); end; - // vérifier si F ou A ou " au 4eme champ - i:=pos(',',sa); - if i>0 then delete(sa,1,i) else s:='0'; - i:=pos(',',sa); - if i>0 then delete(sa,1,i) else s:='0'; - - inc(Nligne); - - if length(sa)>1 then if (sa[1]='"') then - // -----------------son + if uppercase(copy(s,1,3))='ACC' then begin + // -----------------fonction commande périphérique com usb + Tablo_actionneur[maxtablo_act].act:=false; + Tablo_actionneur[maxtablo_act].loco:=false; + Tablo_actionneur[maxtablo_act].son:=false; + Tablo_actionneur[maxtablo_act].cde:=true; + + delete(s,1,3); + val(s,j,erreur); + Tablo_actionneur[maxTablo_act].fonction:=j; // numéro d'accessoire + Delete(s,1,erreur); + + Tablo_actionneur[maxTablo_act].trainDest:=s; + + + { + i:=pos(',',sOrigine); + i:=posEx(',',sOrigine,i+1); + i:=posEx(',',sOrigine,i+1); + i:=posEx(',',sOrigine,i+1); + Delete(sOrigine,1,i); + tablo_actionneur[maxTablo_act].trainDest:=sOrigine;} + inc(maxTablo_act); // incrémenter index de stockage du tableau des actionneurs + s:=''; + end + else + + if length(s)>0 then if s[1]='"' then + begin + // -----------------son Tablo_actionneur[maxtablo_act].act:=false; Tablo_actionneur[maxtablo_act].son:=true; Tablo_actionneur[maxtablo_act].loco:=false; Tablo_actionneur[maxtablo_act].cde:=false; + delete(s,1,1); + i:=pos('"',s); + s:=copy(s,1,i-1); - i:=pos(',',s); - if i<>0 then - begin - val(s,j,erreur); - Tablo_actionneur[maxTablo_act].etat:=j; - Delete(s,1,erreur); - - i:=pos(',',s); - Tablo_actionneur[maxTablo_act].trainDecl:=copy(s,1,i-1); - Delete(s,1,i); - - i:=pos('"',s);if i<>0 then Delete(s,i,1); - i:=pos('"',s);if i<>0 then Delete(s,i,1); - Tablo_actionneur[maxTablo_act].fichierSon:=s; - inc(maxTablo_act); - end; - end; - - if length(sa)>1 then if (sa[1]='A') and (sa[2]<>'C') then // pour différencier ACC - // -----------------accessoire + Tablo_actionneur[maxtablo_act].FichierSon:=s; + s:=''; + inc(maxTablo_act); + end + else + if length(s)>0 then if (upcase(s[1])='A') and (upcase(s[2])<>'C') then begin Tablo_actionneur[maxtablo_act].act:=true; Tablo_actionneur[maxtablo_act].son:=false; Tablo_actionneur[maxtablo_act].loco:=false; Tablo_actionneur[maxtablo_act].cde:=false; - i:=pos(',',s); - if i<>0 then - begin - val(s,j,erreur); - Tablo_actionneur[maxTablo_act].etat:=j; - Delete(s,1,erreur); - - i:=pos(',',s); - Tablo_actionneur[maxTablo_act].trainDecl:=copy(s,1,i-1); - Delete(s,1,i); - - i:=pos('A',s); - if i<>0 then - begin - Delete(s,1,1); - val(s,j,erreur); - Tablo_actionneur[maxTablo_act].Accessoire:=j; - - i:=pos(',',s); - if i<>0 then - begin - Delete(S,1,i); - val(s,j,erreur); - Tablo_actionneur[maxTablo_act].sortie:=j; - end; - - i:=pos(',',s); - if i<>0 then - begin - Delete(S,1,i); - Tablo_actionneur[maxTablo_act].RAZ:=s[1]='Z'; - inc(maxTablo_act); - end; - - end; - s:='';i:=0; - end; - end; - - if length(sa)>1 then if (sa[1]='F') then - // -----------------fonction loco - begin - Tablo_actionneur[maxtablo_act].act:=false; - Tablo_actionneur[maxtablo_act].loco:=true; - Tablo_actionneur[maxtablo_act].son:=false; - Tablo_actionneur[maxtablo_act].cde:=false; - - // 815,1,CC406526,F2,450 - i:=pos(',',s); - if i<>0 then - begin - val(s,j,erreur); - Tablo_actionneur[maxTablo_act].etat:=j; - Delete(s,1,erreur); - - i:=pos(',',s); - Tablo_actionneur[maxTablo_act].trainDecl:=copy(s,1,i-1); - Delete(s,1,i); - - i:=pos('F',s); - if i<>0 then - begin - Delete(s,1,1); - val(s,j,erreur); - Tablo_actionneur[maxTablo_act].Fonction:=j; - - i:=pos(',',s);// champ tempo - if i<>0 then - begin - Delete(S,1,i); - val(s,j,erreur); - Tablo_actionneur[maxTablo_act].Tempo:=j; - i:=pos(',',s); // champ train dest - if i=0 then tablo_actionneur[maxTablo_act].TrainDest:=tablo_actionneur[maxTablo_act].TrainDecl - else - begin - tablo_actionneur[maxTablo_act].TrainDest:=copy(s,i+1,length(s)-i); - end; - inc(maxTablo_act); - end; - end; - s:='';i:=0; - end; - end; - - if length(sa)>3 then if copy(sa,1,3)='ACC' then - // -----------------fonction commande COM - begin - Tablo_actionneur[maxtablo_act].act:=false; - Tablo_actionneur[maxtablo_act].loco:=false; - Tablo_actionneur[maxtablo_act].son:=false; - Tablo_actionneur[maxtablo_act].cde:=true; - - // 815,1,CC406526,F2,450 - i:=pos(',',s); + delete(s,1,1); val(s,j,erreur); - Tablo_actionneur[maxTablo_act].etat:=j; + Tablo_actionneur[maxTablo_act].accessoire:=j; + delete(s,1,erreur); + + val(s,j,erreur); + Tablo_actionneur[maxTablo_act].sortie:=j; Delete(s,1,erreur); - i:=pos(',',s); - Tablo_actionneur[maxTablo_act].trainDecl:=copy(s,1,i-1); - Delete(s,1,i); + Tablo_actionneur[maxTablo_act].RAZ:=s[1]='Z'; + inc(maxTablo_act); + s:=''; + end; - delete(sa,1,3); - val(sa,i,erreur); // com - tablo_actionneur[maxTablo_act].fonction:=i; // numéro d'accessoire - - - i:=pos(',',sa); - delete(sa,1,i); - tablo_actionneur[maxTablo_act].trainDest:=sa; - inc(maxTablo_act); // incrémenter index de stockage du tableau des actionneurs - end; + inc(Nligne); // Passage à niveau if (pos('PN',s)<>0) then @@ -2325,33 +2230,37 @@ var s,sa,SOrigine: string; Tablo_PN[NbrePN].NbVoies:=NbreVoies; Delete(s,1,3); // Supprime PN( val(s,j,erreur); - Tablo_PN[NbrePN].Adresseferme:=j; - Delete(s,1,erreur-1); - if s[1]=',' then delete(s,1,1); - if s[1]='+' then Tablo_PN[NbrePN].CommandeFerme:=2 - else - if s[1]='-' then Tablo_PN[NbrePN].CommandeFerme:=1 - else + Tablo_PN[NbrePN].Adresseferme:=j; // adresse ferme ou numéro accessoire + Delete(s,1,erreur); + // prendre le 4 paramètre (commande ACC ou COMUSB + i:=pos(',',s); + i:=posEx(',',s,i+1); + i:=posEx(',',s,i+1); + i:=posEx(',',s,i+1); + val(copy(s,i+1,1),asp,erreur); + if asp=0 then // S peut peut être un nombre ou une chaine begin - // nouvelle syntaxe val(s,j,erreur); Tablo_PN[NbrePN].CommandeFerme:=j; - end; - j:=pos(',',s); - Delete(s,1,j); // supprime séparateurs + j:=pos(',',s); + Delete(s,1,j); // supprime séparateurs - val(s,j,erreur); - Tablo_PN[NbrePN].AdresseOuvre:=j; - Delete(s,1,erreur-1); - if s[1]=',' then delete(s,1,1); - if s[1]='+' then Tablo_PN[NbrePN].CommandeOuvre:=2 - else - if s[1]='-' then Tablo_PN[NbrePN].CommandeOuvre:=1 - else - begin - // nouvelle syntaxe + val(s,j,erreur); + Tablo_PN[NbrePN].AdresseOuvre:=j; + Delete(s,1,erreur); val(s,j,erreur); Tablo_PN[NbrePN].CommandeOuvre:=j; + end + else + begin + // commande usb + i:=pos(',',s); + Tablo_PN[NbrePN].CommandeF:=copy(s,1,i-1); + delete(s,1,i); + i:=pos(',',s); + Tablo_PN[NbrePN].CommandeO:=copy(s,1,i-1); + delete(s,1,i); + end; j:=pos(')',s); Delete(s,1,j); // supprime séparateurs @@ -2361,7 +2270,14 @@ var s,sa,SOrigine: string; if s[1]=',' then delete(s,1,1); val(s,i,erreur); Tablo_PN[NbrePN].Pulse:=i; + if erreur<>0 then + begin + delete(s,1,erreur); + val(s,i,erreur); + Tablo_PN[NbrePN].TypeCde:=i; + end; s:=''; + end; end; end; @@ -2422,7 +2338,7 @@ var s,sa,SOrigine: string; begin aiguillage[maxaiguillage].modele:=aig; end; - if croi then aiguillage[maxaiguillage].modele:=crois; + if croi then aiguillage[maxaiguillage].modele:=crois; if (triC) then begin @@ -2815,51 +2731,63 @@ var s,sa,SOrigine: string; end; end; - procedure compile_acc_comusb; + procedure compile_periph; var i,erreur : integer; begin - NbAcc_USBCOM:=0; + NbPeriph:=0; + NbPeriph_COMUSB:=0; + NbPeriph_socket:=0; repeat lit_ligne; if s<>'0' then begin - inc(NbAcc_USBCOM); + inc(NbPeriph); sa:=sOrigine; i:=pos(',',sa); - Tablo_acc_COMUSB[NbAcc_USBCOM].nom:=copy(sa,1,i-1); + Tablo_acc_COMUSB[NbPeriph].nom:=copy(sa,1,i-1); delete(sa,1,i); val(sa,i,erreur); - Tablo_acc_COMUSB[NbAcc_USBCOM].ScvAig:=i=1; + Tablo_acc_COMUSB[NbPeriph].ScvAig:=i=1; i:=pos(',',sa);Delete(sa,1,i); val(sa,i,erreur); - Tablo_acc_COMUSB[NbAcc_USBCOM].ScvDet:=i=1; + Tablo_acc_COMUSB[NbPeriph].ScvDet:=i=1; i:=pos(',',sa);Delete(sa,1,i); val(sa,i,erreur); - Tablo_acc_COMUSB[NbAcc_USBCOM].ScvAct:=i=1; + Tablo_acc_COMUSB[NbPeriph].ScvAct:=i=1; i:=pos(',',sa);Delete(sa,1,i); val(sa,i,erreur); - Tablo_acc_COMUSB[NbAcc_USBCOM].ScvVis:=i=1; + Tablo_acc_COMUSB[NbPeriph].ScvVis:=i=1; i:=pos(',',sa);Delete(sa,1,i); val(sa,i,erreur); - Tablo_acc_COMUSB[NbAcc_USBCOM].cr:=i=1; + Tablo_acc_COMUSB[NbPeriph].cr:=i=1; i:=pos(',',sa);Delete(sa,1,i); val(sa,i,erreur); - Tablo_acc_COMUSB[NbAcc_USBCOM].protocole:=sa; + Tablo_acc_COMUSB[NbPeriph].protocole:=sa; + i:=com_socket(NbPeriph); + if i=1 then + begin + inc(NbPeriph_COMUSB); + Tablo_acc_COMUSB[NbPeriph].numComposant:=NbPeriph_COMUSB; + end; + if i=2 then + begin + inc(NbPeriph_socket); + Tablo_acc_COMUSB[NbPeriph].numComposant:=NbPeriph_socket; + end; // extraire le numéro de com5:9600,n,8,1 i:=extract_int(sa); if i=0 then Affiche('Erreur COM nul : '+sOrigine,clred); - Tablo_acc_COMUSB[NbAcc_USBCOM].NumCom:=i; - Tablo_com_cde[NbAcc_USBCOM].NumAcc:=NbAcc_USBCOM; + Tablo_acc_COMUSB[NbPeriph].NumCom:=i; + Tablo_com_cde[NbPeriph].NumAcc:=NbPeriph; end; - NbreComCde:=NbAcc_USBCOM; - until (sOrigine='0') or (NbAcc_USBCOM>=NbAccMaxi_USBCOM); + until (sOrigine='0') or (NbPeriph>=NbMaxi_Periph); end; @@ -3502,7 +3430,7 @@ var s,sa,SOrigine: string; if pos(sa,s)<>0 then begin trouve_section_acccomusb:=true; - compile_acc_comusb; + compile_periph; end; @@ -3727,7 +3655,16 @@ begin if CheckBoxVerifXpressNet.checked then Verif_AdrXpressNet:=1 else Verif_AdrXpressNet:=0; - if checkRoulage.Checked then AvecRoulage:=1 else AvecRoulage:=0; + if checkRoulage.Checked then + begin + AvecRoulage:=1; + Formprinc.roulage1.visible:=true; + end + else + begin + AvecRoulage:=0; + Formprinc.roulage1.visible:=false; + end; // contrôle adresse IP interface s:=EditIPLenz.text; @@ -3949,6 +3886,7 @@ begin EditDevieS2.Visible:=false; Label18.Visible:=false; Label20.Visible:=false; + if AvecRoulage=1 then LabelInfVitesse.Visible:=false else LabelInfVitesse.Visible:=true; EditP1.ReadOnly:=false; EditP2.ReadOnly:=false; @@ -4123,31 +4061,95 @@ begin if pos('Act',s)<>0 then Tablo_acc_COMUSB[ligneClicAccCOM+1].ScvAct:=cb.Checked; if pos('Vis',s)<>0 then Tablo_acc_COMUSB[ligneClicAccCOM+1].ScvVis:=cb.Checked; if s='CheckBoxCR' then Tablo_acc_COMUSB[ligneClicAccCOM+1].CR:=cb.Checked; - s:=encode_AccCOM(ligneClicAccCOM+1); + s:=encode_Periph(ligneClicAccCOM+1); ListBoxAcc.Items[ligneClicAccCOM]:=s; ListBoxAcc.Selected[ligneClicAccCOM]:=true; end; +procedure ajoute_champs_combos(i : integer); +var j : integer; + s : string; +begin + j:=com_socket(i); + if j=1 then + begin + s:=Tablo_acc_COMUSB[i].nom+' (COM'+intToSTR(Tablo_acc_COMUSB[i].NumCom)+')'; + formConfig.ComboBoxAccComUSB.Items.Add(s); + formconfig.ComboBoxPNCom.Items.Add(s); + end; + if j=2 then + begin + s:=Tablo_acc_COMUSB[i].nom+' ('+Tablo_acc_COMUSB[i].protocole+')'; + formconfig.ComboBoxAccComUSB.Items.Add(s); + formconfig.ComboBoxPNCom.Items.Add(s); + end; +end; + + +procedure maj_champs_combos(i: integer); +var j,n : integer; + s : string; +begin + j:=com_socket(i); + if j=1 then s:=Tablo_acc_COMUSB[i].nom+' (COM'+intToSTR(Tablo_acc_COMUSB[i].NumCom)+')'; + if j=2 then s:=Tablo_acc_COMUSB[i].nom+' ('+Tablo_acc_COMUSB[i].protocole+')'; + with formconfig do + begin + n:=comboBoxACCComUSB.Items.Count; + if n=0 then exit; + if nMaxComUSBCde then labelInfo.Caption:='Nombre maxi de périphériques COM/USB atteint'; + Tablo_acc_COMUSB[i].numComposant:=NbPeriph_COMUSB; + Tablo_com_cde[i].NumAcc:=NbPeriph_COMUSB; + end; + if v=2 then + begin + inc(NbPeriph_Socket); + if NbPeriph_Socket>2 then labelInfo.Caption:='Nombre maxi de périphériques socket atteint'; + Tablo_acc_COMUSB[NbPeriph].numComposant:=NbPeriph_socket; + Tablo_com_cde[i].NumAcc:=NbPeriph_Socket; + end; + end; end; @@ -4164,7 +4166,7 @@ begin Feu_Supprime.Adresse:=0; Feu_sauve.adresse:=0; clicListe:=false; - if AvecRoulage=1 then LabelInfVitesse.Visible:=false else LabelInfVitesse.Visible:=true; + ConfigPrete:=true; richBranche.HideSelection:=false; // pour pouvoir copier coller la fenetre groupBox21.Top:=304; @@ -4268,6 +4270,421 @@ begin end; end; + GroupBoxPN.Top:=16; + // composants passage à niveau + with GroupBoxPNA do + begin + Left:=8; + top:=GroupBoxPN.Top+GroupBoxPN.Height+5; + width:=240; + height:=200; + visible:=false; + end; + with GroupBoxPNZ do + begin + Left:=8; + top:=GroupBoxPN.Top+GroupBoxPN.Height+5; + width:=240; + height:=200; + visible:=false; + end; + + LbATitre:=Tlabel.create(formconfig.GroupBoxPNA); + with LbATitre do + begin + Left:=64;Top:=20;Width:=50;Height:=12; + caption:='Act ferme Act ouvre'; + name:='LbATitre'; + parent:=GroupBoxPNA; + end; + Shape1:=TShape.Create(formconfig.GroupBoxPNA); + with Shape1 do + begin + Left:=64;Top:=40;Width:=140;Height:=2; + name:='Shape1A'; + parent:=GroupBoxPNA; + end; + + LbAPnVoie1:=Tlabel.create(formconfig.GroupBoxPNA); + with LbAPnVoie1 do + begin + Left:=10;Top:=50;Width:=50;Height:=12; + caption:='Voie1'; + name:='LbAPnVoie1'; + parent:=GroupBoxPNA; + end; + EditV1F:=TEdit.create(FormConfig.GroupBoxPNA); + with EditV1F do + begin + Name:='EditV1F'; + left:=64;Top:=50;Width:=41;Height:=21; + text:=''; + parent:=GroupBoxPNA; + onChange:=formConfig.modif_editT; + end; + EditV1O:=TEdit.create(FormConfig.GroupBoxPNA); + with EditV1O do + begin + Name:='EditV1O'; + left:=152;Top:=50;Width:=41;Height:=21; + text:=''; + parent:=GroupBoxPNA; + onChange:=formConfig.modif_editT; + end; + + + LbAPnVoie2:=Tlabel.create(formconfig.GroupBoxPNA); + with LbAPnVoie2 do + begin + Left:=10;Top:=74;Width:=50;Height:=12; + caption:='Voie2'; + name:='LbAPnVoie2'; + parent:=GroupBoxPNA; + end; + EditV2F:=TEdit.create(FormConfig.GroupBoxPNA); + with EditV2F do + begin + Name:='EditV2F'; + left:=64;Top:=74;Width:=41;Height:=21; + text:=''; + parent:=GroupBoxPNA; + onChange:=formConfig.modif_editT; + end; + EditV2O:=TEdit.create(FormConfig.GroupBoxPNA); + with EditV2O do + begin + Name:='EditV2O'; + left:=152;Top:=74;Width:=41;Height:=21; + text:=''; + parent:=GroupBoxPNA; + onChange:=formConfig.modif_editT; + end; + + LbAPnVoie3:=Tlabel.create(formconfig.GroupBoxPNA); + with LbAPnVoie3 do + begin + Left:=10;Top:=98;Width:=50;Height:=12; + caption:='Voie3'; + name:='LbAPnVoie3'; + parent:=GroupBoxPNA; + end; + EditV3F:=TEdit.create(FormConfig.GroupBoxPNA); + with EditV3F do + begin + Name:='EditV3F'; + left:=64;Top:=98;Width:=41;Height:=21; + text:=''; + parent:=GroupBoxPNA; + onChange:=formConfig.modif_editT; + end; + EditV3O:=TEdit.create(FormConfig.GroupBoxPNA); + with EditV3O do + begin + Name:='EditV3O'; + left:=152;Top:=98;Width:=41;Height:=21; + text:=''; + parent:=GroupBoxPNA; + onChange:=formConfig.modif_editT; + end; + + LbAPnVoie4:=Tlabel.create(formconfig.GroupBoxPNA); + with LbAPnVoie4 do + begin + Left:=10;Top:=122;Width:=50;Height:=12; + caption:='Voie4'; + name:='LbAPnVoie4'; + parent:=GroupBoxPNA; + end; + EditV4F:=TEdit.create(FormConfig.GroupBoxPNA); + with EditV4F do + begin + Name:='EditV4F'; + left:=64;Top:=122;Width:=41;Height:=21; + text:=''; + parent:=GroupBoxPNA; + onChange:=formConfig.modif_editT; + end; + EditV4O:=TEdit.create(FormConfig.GroupBoxPNA); + with EditV4O do + begin + Name:='EditV4O'; + left:=152;Top:=122;Width:=41;Height:=21; + text:=''; + parent:=GroupBoxPNA; + onChange:=formConfig.modif_editT; + end; + + + LbAPnVoie5:=Tlabel.create(formconfig.GroupBoxPNA); + with LbAPnVoie5 do + begin + Left:=10;Top:=146;Width:=50;Height:=12; + caption:='Voie5'; + name:='LbAPnVoie5'; + parent:=GroupBoxPNA; + end; + EditV5F:=TEdit.create(FormConfig.GroupBoxPNA); + with EditV5F do + begin + Name:='EditV5F'; + left:=64;Top:=146;Width:=41;Height:=21; + text:=''; + parent:=GroupBoxPNA; + onChange:=formConfig.modif_editT; + end; + EditV5O:=TEdit.create(FormConfig.GroupBoxPNA); + with EditV5O do + begin + Name:='EditV5O'; + left:=152;Top:=146;Width:=41;Height:=21; + text:=''; + parent:=GroupBoxPNA; + onChange:=formConfig.modif_editT; + end; + + //détecteurs de zone-------------------------------------------- + LbZTitre:=Tlabel.create(formconfig.GroupBoxPNZ); + with LbZTitre do + begin + Left:=64;Top:=20;Width:=50;Height:=12; + caption:='Zone ferme Zone ouvre'; + name:='LbZTitre'; + parent:=GroupBoxPNZ; + end; + ShapeZ:=TShape.Create(formconfig.GroupBoxPNZ); + with ShapeZ do + begin + Left:=64;Top:=40;Width:=150;Height:=2; + name:='ShapeZ'; + parent:=GroupBoxPNZ; + end; + + LbZPnVoie1:=Tlabel.create(formconfig.GroupBoxPNA); + with LbZPnVoie1 do + begin + Left:=10;Top:=50;Width:=50;Height:=12; + caption:='Voie1'; + name:='LbZPnVoie1'; + parent:=GroupBoxPNZ; + end; + EditZDet1V1F:=TEdit.create(FormConfig.GroupBoxPNA); + with EditZDet1V1F do + begin + Name:='EditZDet1V1F'; + left:=64;Top:=50;Width:=35;Height:=21; + text:=''; + parent:=GroupBoxPNZ; + onChange:=formConfig.modif_editT; + end; + EditZDet2V1F:=TEdit.create(FormConfig.GroupBoxPNA); + with EditZDet2V1F do + begin + Name:='EditZDet2V1F'; + left:=100;Top:=50;Width:=35;Height:=21; + text:=''; + parent:=GroupBoxPNZ; + onChange:=formConfig.modif_editT; + end; + EditZDet1V1O:=TEdit.create(FormConfig.GroupBoxPNA); + with EditZDet1V1O do + begin + Name:='EditZDet1V1O'; + left:=152;Top:=50;Width:=35;Height:=21; + text:=''; + parent:=GroupBoxPNZ; + onChange:=formConfig.modif_editT; + end; + EditZDet2V1O:=TEdit.create(FormConfig.GroupBoxPNA); + with EditZDet2V1O do + begin + Name:='EditZDet2V1O'; + left:=190;Top:=50;Width:=35;Height:=21; + text:=''; + parent:=GroupBoxPNZ; + onChange:=formConfig.modif_editT; + end; + + LbZPnVoie2:=Tlabel.create(formconfig.GroupBoxPNA); + with LbZPnVoie2 do + begin + Left:=10;Top:=74;Width:=40;Height:=12; + caption:='Voie2'; + name:='LbZPnVoie2'; + parent:=GroupBoxPNZ; + end; + EditZDet1V2F:=TEdit.create(FormConfig.GroupBoxPNA); + with EditZDet1V2F do + begin + Name:='EditZDet1V2F'; + left:=64;Top:=74;Width:=35;Height:=21; + text:=''; + parent:=GroupBoxPNZ; + onChange:=formConfig.modif_editT; + end; + EditZDet2V2F:=TEdit.create(FormConfig.GroupBoxPNA); + with EditZDet2V2F do + begin + Name:='EditZDet2V2F'; + left:=100;Top:=74;Width:=35;Height:=21; + text:=''; + parent:=GroupBoxPNZ; + onChange:=formConfig.modif_editT; + end; + EditZDet1V2O:=TEdit.create(FormConfig.GroupBoxPNA); + with EditZDet1V2O do + begin + Name:='EditZDet1V2O'; + left:=152;Top:=74;Width:=35;Height:=21; + text:=''; + parent:=GroupBoxPNZ; + onChange:=formConfig.modif_editT; + end; + EditZDet2V2O:=TEdit.create(FormConfig.GroupBoxPNA); + with EditZDet2V2O do + begin + Name:='EditZDet2V2O'; + left:=190;Top:=74;Width:=35;Height:=21; + text:=''; + parent:=GroupBoxPNZ; + onChange:=formConfig.modif_editT; + end; + + // voie 3 + LbZPnVoie3:=Tlabel.create(formconfig.GroupBoxPNA); + with LbZPnVoie3 do + begin + Left:=10;Top:=98;Width:=50;Height:=12; + caption:='Voie3'; + name:='LbZPnVoie3'; + parent:=GroupBoxPNZ; + end; + EditZDet1V3F:=TEdit.create(FormConfig.GroupBoxPNA); + with EditZDet1V3F do + begin + Name:='EditZDet1V3F'; + left:=64;Top:=98;Width:=35;Height:=21; + text:=''; + parent:=GroupBoxPNZ; + onChange:=formConfig.modif_editT; + end; + EditZDet2V3F:=TEdit.create(FormConfig.GroupBoxPNA); + with EditZDet2V3F do + begin + Name:='EditZDet2V3F'; + left:=100;Top:=98;Width:=35;Height:=21; + text:=''; + parent:=GroupBoxPNZ; + onChange:=formConfig.modif_editT; + end; + EditZDet1V3O:=TEdit.create(FormConfig.GroupBoxPNA); + with EditZDet1V3O do + begin + Name:='EditZDet1V3O'; + left:=152;Top:=98;Width:=35;Height:=21; + text:=''; + parent:=GroupBoxPNZ; + onChange:=formConfig.modif_editT; + end; + EditZDet2V3O:=TEdit.create(FormConfig.GroupBoxPNA); + with EditZDet2V3O do + begin + Name:='EditZDet2V3O'; + left:=190;Top:=98;Width:=35;Height:=21; + text:=''; + parent:=GroupBoxPNZ; + onChange:=formConfig.modif_editT; + end; + // voie 4 + LbZPnVoie4:=Tlabel.create(formconfig.GroupBoxPNA); + with LbZPnVoie4 do + begin + Left:=10;Top:=122;Width:=50;Height:=12; + caption:='Voie4'; + name:='LbZPnVoie4'; + parent:=GroupBoxPNZ; + end; + EditZDet1V4F:=TEdit.create(FormConfig.GroupBoxPNA); + with EditZDet1V4F do + begin + Name:='EditZDet1V4F'; + left:=64;Top:=122;Width:=35;Height:=21; + text:=''; + parent:=GroupBoxPNZ; + onChange:=formConfig.modif_editT; + end; + EditZDet2V4F:=TEdit.create(FormConfig.GroupBoxPNA); + with EditZDet2V4F do + begin + Name:='EditZDet2V4F'; + left:=100;Top:=122;Width:=35;Height:=21; + text:=''; + parent:=GroupBoxPNZ; + onChange:=formConfig.modif_editT; + end; + EditZDet1V4O:=TEdit.create(FormConfig.GroupBoxPNA); + with EditZDet1V4O do + begin + Name:='EditZDet1V4O'; + left:=152;Top:=122;Width:=35;Height:=21; + text:=''; + parent:=GroupBoxPNZ; + onChange:=formConfig.modif_editT; + end; + EditZDet2V4O:=TEdit.create(FormConfig.GroupBoxPNA); + with EditZDet2V4O do + begin + Name:='EditZDet2V4O'; + left:=190;Top:=122;Width:=35;Height:=21; + text:=''; + parent:=GroupBoxPNZ; + onChange:=formConfig.modif_editT; + end; + // voie 5 + LbZPnVoie5:=Tlabel.create(formconfig.GroupBoxPNA); + with LbZPnVoie5 do + begin + Left:=10;Top:=146;Width:=50;Height:=12; + caption:='Voie5'; + name:='LbZPnVoie5'; + parent:=GroupBoxPNZ; + end; + EditZDet1V5F:=TEdit.create(FormConfig.GroupBoxPNA); + with EditZDet1V5F do + begin + Name:='EditZDet1V5F'; + left:=64;Top:=146;Width:=35;Height:=21; + text:=''; + parent:=GroupBoxPNZ; + onChange:=formConfig.modif_editT; + end; + EditZDet2V5F:=TEdit.create(FormConfig.GroupBoxPNA); + with EditZDet2V5F do + begin + Name:='EditZDet2V5F'; + left:=100;Top:=146;Width:=35;Height:=21; + text:=''; + parent:=GroupBoxPNZ; + onChange:=formConfig.modif_editT; + end; + EditZDet1V5O:=TEdit.create(FormConfig.GroupBoxPNA); + with EditZDet1V5O do + begin + Name:='EditZDet1V5O'; + left:=152;Top:=146;Width:=35;Height:=21; + text:=''; + parent:=GroupBoxPNZ; + onChange:=formConfig.modif_editT; + end; + EditZDet2V5O:=TEdit.create(FormConfig.GroupBoxPNA); + with EditZDet2V5O do + begin + Name:='EditZDet2V5O'; + left:=190;Top:=146;Width:=35;Height:=21; + text:=''; + parent:=GroupBoxPNZ; + onChange:=formConfig.modif_editT; + end; + // remplit les 5 fenêtres de config des aiguillages branches signaux, actionneurs, accessoires comusb for i:=1 to NbreDecPers do begin @@ -4360,6 +4777,7 @@ begin comboBoxNation.Items.add('Française'); comboBoxNation.Items.add('Belge'); + EdittrainDecl.Hint:='déclencheur pour lequel la condition s''applique (mettre X pour tous les trains)'+#13+'déclenchement par actionneur uniquement'; // actionneurs Train ou accessoire ListBoxAct.Clear; @@ -4418,50 +4836,37 @@ begin with ListBoxTrains do begin clear; - for i:=1 to ntrains do - begin - items.Add(Train_tablo(i)); - end; + for i:=1 to ntrains do items.Add(Train_tablo(i)); end; - // accessoires + // périphériques with listBoxAcc do begin clear; formConfig.ComboBoxAccComUSB.Clear; - for i:=1 to NbAcc_USBCOM do + formconfig.ComboBoxPNCom.Clear; + for i:=1 to NbPeriph do begin - items.Add(encode_AccCOM(i)); - formConfig.ComboBoxAccComUSB.Items.Add(Tablo_acc_COMUSB[i].nom+' (COM'+intToSTR(Tablo_acc_COMUSB[i].NumCom)+')'); + items.Add(encode_Periph(i)); + ajoute_champs_combos(i); end; end; - if NbAcc_USBCOM>MaxComUSBCde then LabelInfoAcc.caption:='Nombre maxi de com atteint : '+intToStr(MaxComUSBCde); + // composants dynamiques car on ne peut plus ajouter de composants en mode conception! //--------- groupbox gp1:=TgroupBox.Create(FormConfig.TabSheetAccessoires); with gp1 do begin - Left:=264;Top:=groupBoxDesc.top+groupBoxDesc.Height+10;Width:=groupBoxDesc.Width;Height:=70; + Left:=264;Top:=groupBoxDesc.top+groupBoxDesc.Height+10;Width:=groupBoxDesc.Width;Height:=90; parent:=TabSheetAccessoires; - caption:='Services envoyés à l''accessoire'; + caption:='Services envoyés au périphérique'; Name:='Gp1'; end; - cb1:=TCheckBox.Create(FormConfig.TabSheetAccessoires); - with cb1 do - begin - Left:=10;Top:=25;Width:=100;Height:=12; - caption:='Aiguillages'; - name:='cbAig'; - parent:=gp1; - hint:='Envoie les évènements aiguillages'; - ShowHint:=true; - onclick:=formconfig.cb_onclick; - end; cb2:=TCheckBox.Create(FormConfig.TabSheetAccessoires); with cb2 do begin - Left:=110;Top:=25;Width:=100;Height:=12; + Left:=10;Top:=25;Width:=100;Height:=12; caption:='Détecteurs'; name:='cbDet'; parent:=gp1; @@ -4480,15 +4885,14 @@ begin ShowHint:=true; onclick:=formconfig.cb_onclick; end; - - cbVis:=TCheckBox.Create(FormConfig.TabSheetAccessoires); - with cbVis do + cb1:=TCheckBox.Create(FormConfig.TabSheetAccessoires); + with cb1 do begin - Left:=110;Top:=45;Width:=100;Height:=12; - caption:='Mode visible'; - name:='cbVis'; + Left:=10;Top:=65;Width:=100;Height:=12; + caption:='Aiguillages'; + name:='cbAig'; parent:=gp1; - hint:='Affiche le texte à l''écran lors de l''envoi'; + hint:='Envoie les évènements aiguillages'; ShowHint:=true; onclick:=formconfig.cb_onclick; end; @@ -4508,11 +4912,12 @@ begin EditPortCde:=TEdit.Create(FormConfig.TabSheetAccessoires); with EditPortCde do begin - Left:=150;Top:=76;Width:=170;Height:=12; + Left:=150;Top:=95;Width:=170;Height:=12; name:='EditPortCde'; text:=''; parent:=GroupBoxDesc; - hint:='Protocole de communication'; + hint:='COMX:vitesse,parité,nombre de bits de données, nombre de bits de stop ou'+#13+ + 'AdresseIPV4:port'; ShowHint:=true; OnChange:=formconfig.tb_onChange; end; @@ -4520,7 +4925,7 @@ begin LabelPortCde:=TLabel.Create(FormConfig.TabSheetAccessoires); with LabelPortCde do begin - Left:=10;Top:=78;Width:=170;Height:=12; + Left:=10;Top:=98;Width:=170;Height:=12; caption:='Protocole de communication'; name:='LabelPortCde'; parent:=GroupBoxDesc; @@ -4528,6 +4933,19 @@ begin ShowHint:=true; end; + cbVis:=TCheckBox.Create(FormConfig.TabSheetAccessoires); + with cbVis do + begin + parent:=groupBoxDesc; + Left:=10;Top:=75;Width:=100;Height:=12; + caption:='Mode visible'; + name:='cbVis'; + hint:='Affiche le texte à l''écran lors des envoi'; + ShowHint:=true; + onclick:=formconfig.cb_onclick; + end; + + {if FileExists('Image_Signaux.jpg') then ImageSignaux.Picture.LoadFromFile('Image_Signaux.jpg') else @@ -4578,13 +4996,14 @@ end; procedure Aff_champs_accCOMUSB_tablo(index : integer); begin - if (index<1) or (index>NbAccMaxi_USBCOM) then exit; + if (index<1) or (index>NbPeriph) then exit; clicliste:=true; formConfig.editNomAcc.Text:=Tablo_acc_COMUSB[index].nom; cb1.Checked:=Tablo_acc_COMUSB[index].ScvAig; cb2.Checked:=Tablo_acc_COMUSB[index].ScvDet; cb3.Checked:=Tablo_acc_COMUSB[index].ScvAct; cbVis.Checked:=Tablo_acc_COMUSB[index].ScvVis; + CheckBoxCR.Checked:=Tablo_acc_COMUSB[index].cr; EditPortCde.text:=Tablo_acc_COMUSB[index].protocole; clicliste:=false; end; @@ -4636,7 +5055,7 @@ begin EditL.Visible:=false; LabelL.Visible:=false; GroupBoxEtatTJD.Visible:=true; - if aiguillage[ind].EtatTJD=2 then + if aiguillage[ind].EtatTJD=2 then begin RadioButtonTJD2.Checked:=true;RadioButtonTJD4.Checked:=false; EditP1.Visible:=false;EditP2.Visible:=false;EditP3.Visible:=false;EditP4.Visible:=false; @@ -4660,7 +5079,7 @@ begin LabelL.Visible:=true; LabelL.Caption:='L'; EditL.Text:=IntToSTR(aiguillage[ind].tjsint)+aiguillage[ind].tjsintB; - end; + end; ImageAffiche.Picture.BitMap:=Imagetjd.Picture.Bitmap; labelBG.Caption:='S'; Edit_HG.Visible:=true; @@ -4833,7 +5252,8 @@ begin GroupBoxRadio.Visible:=false; GroupBoxAct.Visible:=false; GroupBoxPN.Top:=16; - GroupBoxPN.Left:=16; + GroupBoxPN.Left:=8; + GroupBoxPNA.Visible:=true; GroupBoxPN.Visible:=true; Visible:=true; RadioButtonLoc.Checked:=false; @@ -4862,7 +5282,6 @@ begin GroupBox19.Top:=GroupBox18.Top+GroupBox18.Height+8; GroupBox19.Height:=96; ButtonTestAct.Top:=GroupBox19.Top+GroupBox19.Height+8; - // ComboBoxAccComUSB.top:= end; end; @@ -4871,7 +5290,6 @@ begin with formconfig do begin positionne; - ButtonOuvreCom.Visible:=false; CheckRaz.Visible:=false; ComboBoxAccComUSB.Visible:=false; GroupBoxAct.Caption:='Action pour fonction F de locomotive'; @@ -4889,6 +5307,8 @@ begin GroupBoxAct.Visible:=true; GroupBoxPN.Visible:=false; + GroupBoxPNA.Visible:=false; + GroupBoxPNZ.Visible:=false; EditSon.Visible:=false; SpeedButtonJoue.Visible:=false; SpeedButtonCharger.Visible:=false; @@ -4922,6 +5342,8 @@ begin RadioButtonCde.Checked:=true; GroupBoxAct.Visible:=true; GroupBoxPN.Visible:=false; + GroupBoxPNA.Visible:=false; + GroupBoxPNZ.Visible:=false; EditSon.Visible:=false; SpeedButtonJoue.Visible:=false; SpeedButtonCharger.Visible:=false; @@ -4932,8 +5354,6 @@ begin EditTempo.Visible:=false; label42.Visible:=true; Label42.caption:='Commande'; - ButtonOuvreCom.Top:=GroupBox19.Top+GroupBox19.Height+8; - ButtonOuvreCom.Visible:=true; end; end; @@ -4946,7 +5366,6 @@ begin GroupBoxAct.Caption:='Action pour accessoire'; CheckRaz.Visible:=true; - ButtonOuvreCom.Visible:=false; LabelTempo.Visible:=false; EditTempo.visible:=false;editEtatFoncSortie.visible:=true;LabelA.Visible:=true; LabelFonction.visible:=true; LabelFonction.caption:='Action : Accessoire'; @@ -4955,6 +5374,8 @@ begin RadioButtonAccess.Checked:=true; GroupBoxAct.Visible:=true; GroupBoxPN.Visible:=false; + GroupBoxPNA.Visible:=false; + GroupBoxPNZ.Visible:=false; EditFonctionAccess.Top:=14; LabelFonction.Top:=18; EditSon.Visible:=false; @@ -4974,7 +5395,6 @@ begin Positionne; GroupBoxAct.Caption:='Action pour son'; CheckRaz.Visible:=true; - ButtonOuvreCom.Visible:=false; ComboBoxAccComUSB.Visible:=false; LabelTempo.Visible:=false; EditTempo.visible:=false; EditFonctionAccess.Top:=14; @@ -4996,6 +5416,8 @@ begin GroupBoxAct.Visible:=true; GroupBoxPN.Visible:=false; + GroupBoxPNA.Visible:=false; + GroupBoxPNZ.Visible:=false; editTrainDest.Visible:=false; label42.Visible:=false; end; @@ -5459,7 +5881,7 @@ procedure raz_champs_pn; begin with formconfig do begin - editAdrFerme.Text:='';EditCmdFerme.text:=''; + editAdrFerme.Text:='';EditCdeFerme.text:=''; editAdrOuvre.Text:='';EditCdeOuvre.text:=''; editV1F.Text:='';editV1O.Text:=''; editV2F.Text:='';editV2O.Text:=''; @@ -5474,6 +5896,66 @@ begin end; end; +procedure champs_pn_act; +var s : string; +begin + with formConfig do + begin + comboBoxPNCom.Visible:=false; + EditCdeOuvre.width:=25; + editCdeFerme.Width:=25; + editCdeOuvre.width:=25; + editCdeFerme.top:=80; + editCdeFerme.Left:=168; + editCdeOuvre.Left:=168; + + EditCdeOuvre.Hint:='Commande d''ouverture (0 à 2)'; + EditCdeFerme.Hint:='Commande de fermeture (0 à 2)'; + ButtonTestFerme.Hint:='Test de fermeture (mode CDM ou connecté à l''interface)'; + ButtonTestOuvre.Hint:='Test d''ouverture (mode CDM ou connecté à l''interface)'; + + editCdeOuvre.Visible:=true; + editAdrOuvre.Visible:=true; + EditAdrFerme.Visible:=true; + Label22.visible:=true; + CheckPnPulse.Visible:=true; + Label21.Caption:='Adresse de fermeture'; + ButtonTestFerme.Top:=80; + EditAdrFerme.text:=IntToSTR(Tablo_PN[lignecliqueePN+1].AdresseFerme); + EditAdrOuvre.text:=IntToSTR(Tablo_PN[lignecliqueePN+1].AdresseOuvre); + EditCdeFerme.text:=intToSTR(Tablo_PN[lignecliqueePN+1].CommandeFerme); + EditCdeOuvre.text:=intToSTR(Tablo_PN[lignecliqueePN+1].CommandeOuvre); + + end; +end; + +procedure champs_pn_COMUSB; +var s : string; +begin + with formConfig do + begin + comboBoxPNCom.Visible:=true; + EditAdrFerme.visible:=false; + editAdrOuvre.Visible:=false; + CheckPnPulse.Visible:=false; + EditCdeOuvre.width:=65; + editCdeFerme.width:=65; + editCdeFerme.top:=128; + editCdeFerme.Left:=144; + editCdeOuvre.Left:=144; + ButtonTestFerme.Hint:='Test de fermeture (par interface COM/USB)'; + ButtonTestOuvre.Hint:='Test d''ouverture (par interface COM/USB)'; + editcdeFerme.Hint:='Commande ASCII de fermeture'; + EditCdeOuvre.Hint:='Commande ASCII d''ouverture'; + Label22.visible:=false; + ButtonTestFerme.Top:=128; + Label21.Caption:='Périphérique COM/USB Commandes'; + EditCdeFerme.Text:=Tablo_PN[lignecliqueePN+1].CommandeF; + EditCdeOuvre.Text:=Tablo_PN[lignecliqueePN+1].CommandeO; + ComboBoxPnCom.ItemIndex:=Tablo_PN[lignecliqueePN+1].AdresseFerme; + end; +end; + // affiche les champs de l'actionneur PN en fonction de l'index du tableau procedure aff_champs_PN(i : integer); var adresse,erreur,j,v : integer; @@ -5506,18 +5988,21 @@ begin until trouve or (i>NbrePN); if not(trouve) then exit; - with formConfig do + with formConfig do //zizi begin - EditAdrFerme.text:=IntToSTR(Tablo_PN[i].AdresseFerme); - EditAdrOuvre.text:=IntToSTR(Tablo_PN[i].AdresseOuvre); - EditCmdFerme.text:=intToSTR(Tablo_PN[i].CommandeFerme); - EditCdeOuvre.text:=intToSTR(Tablo_PN[i].CommandeOuvre); + RadioGroupActPN.itemindex:=Tablo_PN[i].TypeCde; + + if Tablo_PN[i].TypeCde=0 then champs_pn_act; + if Tablo_PN[i].TypeCde=1 then champs_pn_comusb; + if Tablo_PN[i].Pulse=1 then trouve:=true else trouve:=false; CheckPnPulse.Checked:=trouve; // par actionneur if Tablo_PN[i].voie[1].ActFerme<>0 then begin + RadioButtonSimple.Checked:=true; + RadioButtonZone.Checked:=false; EditV1F.text:=intToSTR(Tablo_PN[i].voie[1].ActFerme); EditV1O.text:=intToSTR(Tablo_PN[i].voie[1].ActOuvre); v:=Tablo_PN[i].nbvoies; @@ -5546,9 +6031,11 @@ begin else begin // par zone de détecteurs + RadioButtonSimple.Checked:=false; + RadioButtonZone.Checked:=true; v:=Tablo_PN[i].nbvoies; j:=Tablo_PN[i].voie[1].detZ1F;if j<>0 then - begin + begin EditZdet1V1F.text:=intToSTR(j); EditZdet2V1F.text:=intToSTR(Tablo_PN[i].voie[1].detZ2F); EditZdet1V1O.text:=intToSTR(Tablo_PN[i].voie[1].detZ1O); @@ -5582,7 +6069,7 @@ begin EditZdet2V5O.text:=intToSTR(Tablo_PN[i].voie[5].detZ2O); end; end; - end; + end; end; end end; @@ -7159,7 +7646,7 @@ begin feux[index]:=Feu_sauve; ListBoxSig.Items[ligneClicSig]:=encode_sig_feux(index); ListBoxSig.selected[ligneClicSig]:=true; - aff_champs_sig_feux(index); // réaffiche les champs + aff_champs_sig_feux(index); // réaffiche les champs Maj_Hint_Signal(index); // change l'image du feu dans la feuille graphique principale Feux[index].Img.picture.Bitmap:=Select_dessin_feu(feux[index].aspect); @@ -7346,7 +7833,7 @@ begin end; end; -procedure TFormConfig.EditCmdFermeChange(Sender: TObject); +procedure TFormConfig.EditCdeFermeChange(Sender: TObject); var s : string; i,erreur : integer; begin @@ -7355,21 +7842,18 @@ begin if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then with Formconfig do begin - s:=EditCmdFerme.Text; - { - if (s='+') or (s='-') then + s:=EditCdeFerme.Text; + if tablo_PN[lignecliqueePN+1].TypeCde=1 then begin - if s='-' then act:=1 else act:=2; - LabelInfo.caption:=' '; - tablo_PN[lignecliqueePN+1].CommandeFerme:=act; - s:=encode_act_PN(lignecliqueePN+1); - ListBoxPN.items[lignecliqueePN]:=s; + tablo_PN[lignecliqueePN+1].CommandeF:=s; end - } - val(s,i,erreur); - if (i<0) or (i>2) or (erreur<>0) then begin LabelInfo.caption:='Erreur Commande ferme actionneur';exit;end; - LabelInfo.caption:=' '; - tablo_PN[lignecliqueePN+1].CommandeFerme:=i; + else + begin + val(s,i,erreur); + if (i<0) or (i>2) or (erreur<>0) then begin LabelInfo.caption:='Erreur Commande ferme actionneur';exit;end; + LabelInfo.caption:=' '; + tablo_PN[lignecliqueePN+1].CommandeFerme:=i; + end; s:=encode_act_PN(lignecliqueePN+1); ListBoxPN.items[lignecliqueePN]:=s; ListBoxPN.selected[lignecliqueePN]:=true; @@ -7408,186 +7892,28 @@ begin with Formconfig do begin s:=EditCdeOuvre.Text; - val(s,i,erreur); - if (i<0) or (i>2) or (erreur<>0) then begin LabelInfo.caption:='Erreur Commande ferme actionneur';exit;end; - LabelInfo.caption:=' '; - tablo_PN[lignecliqueePN+1].CommandeOuvre:=i; + + if tablo_PN[lignecliqueePN+1].TypeCde=1 then + begin + tablo_PN[lignecliqueePN+1].CommandeO:=s; + end + else + begin + val(s,i,erreur); + if (i<0) or (i>2) or (erreur<>0) then begin LabelInfo.caption:='Erreur Commande ferme actionneur';exit;end; + LabelInfo.caption:=' '; + tablo_PN[lignecliqueePN+1].CommandeOuvre:=i; + end; + s:=encode_act_PN(lignecliqueePN+1); ListBoxPN.items[lignecliqueePN]:=s; ListBoxPN.selected[lignecliqueePN]:=true; - {if (s='+') or (s='-') then - begin - if s='-' then act:=1 else act:=2; - LabelInfo.caption:=' '; - tablo_PN[lignecliqueePN+1].CommandeOuvre:=act; - s:=encode_act_PN(lignecliqueePN+1); - ListBoxPN.items[lignecliqueePN]:=s; - end - else - LabelInfo.caption:='Erreur Commande ouvre actionneur';exit } end; end; -procedure TFormConfig.EditV1FChange(Sender: TObject); -var s : string; - act,erreur : integer; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditV1F Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditV1F.Text; - Val(s,act,erreur); - if (erreur<>0) then - begin - LabelInfo.caption:='Erreur adresse actionneur voie 1 ferme'; - tablo_PN[lignecliqueePN+1].voie[1].ActFerme:=0; - exit - end else LabelInfo.caption:=' '; - tablo_PN[lignecliqueePN+1].voie[1].ActFerme:=act; - s:=encode_act_PN(lignecliqueePN+1); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; -procedure TFormConfig.EditV1OChange(Sender: TObject); -var s : string; - act,erreur : integer; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditV1O Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditV1O.Text; - Val(s,act,erreur); - if erreur<>0 then - begin - LabelInfo.caption:='Erreur adresse actionneur voie 1 ouvre';exit - end else LabelInfo.caption:=' '; - tablo_PN[lignecliqueePN+1].voie[1].ActOuvre:=act; - s:=encode_act_PN(lignecliqueePN+1); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; - -procedure TFormConfig.EditV2FChange(Sender: TObject); -var s : string; - act,erreur,NbVoies,i : integer; - V2valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditV2F Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditV2F.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse actionneur voie 2 ferme';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[2].ActFerme:=act; - V2valide:=(EditV2O.text<>'') and (EditV2F.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V2Valide and (NbVoies=1) then tablo_PN[i].NbVoies:=2; - if not(V2Valide) then tablo_PN[i].NbVoies:=1; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; - -end; - -procedure TFormConfig.EditV2OChange(Sender: TObject); -var s : string; - act,erreur,NbVoies,i : integer; - V2valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditV2O Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditV2O.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse actionneur voie 2 ouvre';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[2].ActOuvre:=act; - V2valide:=(EditV2O.text<>'') and (EditV2F.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V2Valide and (NbVoies=1) then tablo_PN[i].NbVoies:=2; - if not(V2Valide) then tablo_PN[i].NbVoies:=1; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; - -procedure TFormConfig.EditV3FChange(Sender: TObject); -var s : string; - act,erreur,NbVoies,i : integer; - V3valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditV3F Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditV3F.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse actionneur voie 3 ferme';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[3].ActFerme:=act; - V3valide:=(EditV3O.text<>'') and (EditV3F.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V3Valide and (NbVoies=2) then tablo_PN[i].NbVoies:=3; - if not(V3Valide) then tablo_PN[i].NbVoies:=2; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; - -procedure TFormConfig.EditV3OChange(Sender: TObject); -var s : string; - i,act,erreur,NbVoies : integer; - V3valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditV3O Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditV3O.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse actionneur voie 3 ouvre';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[3].ActOuvre:=act; - V3valide:=(EditV3O.text<>'') and (EditV3F.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V3Valide and (NbVoies=2) then tablo_PN[i].NbVoies:=3; - if not(V3Valide) then tablo_PN[i].NbVoies:=2; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; procedure ajoute_actionneur; var s: string; @@ -8952,6 +9278,7 @@ begin Affiche('qui se trouve dans la plage des accessoires DCC interdits (257-272) en Xpressnet',clred); end; end; + if Tablo_actionneur[i].cde then begin j:=Tablo_actionneur[i].fonction; @@ -8962,8 +9289,8 @@ begin Affiche('Erreur 15.3 L''actionneur '+intToSTR(Tablo_actionneur[i].adresse)+' n''a pas d''accessoire COM/USB d''affecté',clOrange); ok:=false; end; - end; + end; if not(AdrOk) then @@ -8979,9 +9306,19 @@ begin end; end; - // actionneurs de zone + // actionneurs for i:=1 to maxTablo_act do begin + if tablo_actionneur[i].cde then + begin + adresse:=tablo_actionneur[i].fonction; + if adresse>NbPeriph then + begin + Affiche('Erreur 18 : l''actionneur '+intToSTR(tablo_actionneur[i].adresse)+' est lié à un périphérique n°'+intToSTR(adresse)+' COM/USB/Socket inexistant',clred); + ok:=false; + end; + end; + if Tablo_actionneur[i].typdeclenche=3 then // si actionneur de zone begin adresse:=Tablo_actionneur[i].Adresse; @@ -8990,7 +9327,7 @@ begin if (suivant=0) or (suivant>9995) then begin ok:=false; - s:='Erreur 18: l''actionneur '+IntToSTR(Tablo_actionneur[i].adresse)+' est enclenché par les détecteurs '+intToSTR(adresse)+' ' +intToSTR(adresse2)+' qui ne sont pas contigus'; + s:='Erreur 19: l''actionneur '+IntToSTR(Tablo_actionneur[i].adresse)+' est enclenché par les détecteurs '+intToSTR(adresse)+' ' +intToSTR(adresse2)+' qui ne sont pas contigus'; Affiche(s,clred); end; end; @@ -8999,6 +9336,7 @@ begin // vérification des compatibilités des décodeurs de signaux et des aspects if not(verif_dec_sig(true)) then ok:=false; + verif_coherence:=ok; end; @@ -9953,119 +10291,6 @@ begin formconfig.ListBoxAig.items[ligneclicAig]:=s; end; -procedure TFormConfig.EditV4FChange(Sender: TObject); -var s : string; - act,erreur,NbVoies,i : integer; - V4valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditV4F Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditV4F.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse actionneur voie 4 ferme';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[4].ActFerme:=act; - V4valide:=(EditV4O.text<>'') and (EditV4F.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V4Valide and (NbVoies<=3) then tablo_PN[i].NbVoies:=4; - if not(V4Valide) then tablo_PN[i].NbVoies:=3; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; - -procedure TFormConfig.EditV4OChange(Sender: TObject); -var s : string; - i,act,erreur,NbVoies : integer; - V4valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditV4O Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditV4O.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse actionneur voie 4 ouvre';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[4].ActOuvre:=act; - V4valide:=(EditV4O.text<>'') and (EditV4F.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V4Valide and (NbVoies<=3) then tablo_PN[i].NbVoies:=4; - if not(V4Valide) then tablo_PN[i].NbVoies:=3; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; - -procedure TFormConfig.EditV5FChange(Sender: TObject); -var s : string; - i,act,erreur,NbVoies : integer; - V5valide : boolean; - begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditV5F Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditV5F.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse actionneur voie 4 ferme';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[5].ActFerme:=act; - V5valide:=(EditV4O.text<>'') and (EditV5F.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V5Valide and (NbVoies<=4) then tablo_PN[i].NbVoies:=5; - if not(V5Valide) then tablo_PN[i].NbVoies:=4; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; - -procedure TFormConfig.EditV5OChange(Sender: TObject); - var s : string; - i,act,erreur,NbVoies : integer; - V5valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditV5O Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditV5O.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse actionneur voie 4 ouvre';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[5].ActOuvre:=act; - V5valide:=(EditV4O.text<>'') and (EditV5F.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V5Valide and (NbVoies<=4) then tablo_PN[i].NbVoies:=5; - if not(V5Valide) then tablo_PN[i].NbVoies:=4; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; - -end; - procedure TFormConfig.EditLChange(Sender: TObject); var s : string; i, erreur :integer; @@ -10437,573 +10662,53 @@ begin end; -procedure TFormConfig.EditZdet1V1FChange(Sender: TObject); -var s : string; - det,erreur : integer; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditZdet1V1F Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditZdet1V1F.Text; - Val(s,det,erreur); - if (erreur<>0) then - begin - LabelInfo.caption:='Erreur adresse détecteur voie 1 ferme';exit - end else LabelInfo.caption:=' '; - tablo_PN[lignecliqueePN+1].voie[1].DetZ1F:=det; - s:=encode_act_PN(lignecliqueePN+1); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; - -procedure TFormConfig.EditZdet2V1FChange(Sender: TObject); -var s : string; - det,erreur : integer; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditZdet2V1F Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditZdet2V1F.Text; - Val(s,det,erreur); - if (erreur<>0) then - begin - LabelInfo.caption:='Erreur adresse détecteur voie 1 ferme';exit - end else LabelInfo.caption:=' '; - tablo_PN[lignecliqueePN+1].voie[1].DetZ2F:=det; - s:=encode_act_PN(lignecliqueePN+1); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; - -procedure TFormConfig.EditZdet1V1OChange(Sender: TObject); -var s : string; - det,erreur : integer; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditZdet1V1O Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditZdet1V1O.Text; - Val(s,det,erreur); - if (erreur<>0) then - begin - LabelInfo.caption:='Erreur adresse détecteur voie 1 ouvre';exit - end else LabelInfo.caption:=' '; - tablo_PN[lignecliqueePN+1].voie[1].DetZ1O:=det; - s:=encode_act_PN(lignecliqueePN+1); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; - -procedure TFormConfig.EditZdet2V1OChange(Sender: TObject); -var s : string; - det,erreur : integer; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditZdet2V1O Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditZdet2V1O.Text; - Val(s,det,erreur); - if (erreur<>0) then - begin - LabelInfo.caption:='Erreur adresse détecteur voie 1 ouvre';exit - end else LabelInfo.caption:=' '; - tablo_PN[lignecliqueePN+1].voie[1].DetZ2O:=det; - s:=encode_act_PN(lignecliqueePN+1); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; - -procedure TFormConfig.EditZdet1V2FChange(Sender: TObject); -var s : string; - act,erreur,NbVoies,i : integer; - V2valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditZdet1V2F Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditZdet1V2F.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse détecteur voie 2 ferme';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[2].detZ1F:=act; - V2valide:=(EditZdet1V2F.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V2Valide and (NbVoies=1) then tablo_PN[i].NbVoies:=2; - if not(V2Valide) then tablo_PN[i].NbVoies:=1; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; - -procedure TFormConfig.EditZdet2V2FChange(Sender: TObject); -var s : string; - act,erreur,NbVoies,i : integer; - V2valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditZdet2V2F Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditZdet2V2F.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse détecteur voie 2 ferme';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[2].detZ2F:=act; - V2valide:=(EditZdet2V2F.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V2Valide and (NbVoies=1) then tablo_PN[i].NbVoies:=2; - if not(V2Valide) then tablo_PN[i].NbVoies:=1; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; - -procedure TFormConfig.EditZdet1V2OChange(Sender: TObject); -var s : string; - act,erreur,NbVoies,i : integer; - V2valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditZdet1V2O Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditZdet1V2O.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse détecteur voie 2 ouvre';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[2].detZ1O:=act; - V2valide:=(EditZdet1V2O.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V2Valide and (NbVoies=1) then tablo_PN[i].NbVoies:=2; - if not(V2Valide) then tablo_PN[i].NbVoies:=1; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; - -procedure TFormConfig.EditZdet2V2OChange(Sender: TObject); -var s : string; - act,erreur,NbVoies,i : integer; - V2valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditZdet2V2F Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditZdet2V2O.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse détecteur voie 2 ouvre';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[2].detZ2O:=act; - V2valide:=(EditZdet2V2O.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V2Valide and (NbVoies=1) then tablo_PN[i].NbVoies:=2; - if not(V2Valide) then tablo_PN[i].NbVoies:=1; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; - -end; - -procedure TFormConfig.EditZdet1V3FChange(Sender: TObject); -var s : string; - act,erreur,NbVoies,i : integer; - V2valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditZdet1V3F Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditZdet1V3F.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse détecteur voie 3 ferme';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[3].detZ1F:=act; - V2valide:=(EditZdet1V3F.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V2Valide and (NbVoies=2) then tablo_PN[i].NbVoies:=3; - if not(V2Valide) then tablo_PN[i].NbVoies:=2; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; - -procedure TFormConfig.EditZdet2V3FChange(Sender: TObject); - var s : string; - act,erreur,NbVoies,i : integer; - V2valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditZdet2V3F Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditZdet2V3F.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse détecteur voie 3 ferme';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[3].detZ2F:=act; - V2valide:=(EditZdet2V3F.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V2Valide and (NbVoies=2) then tablo_PN[i].NbVoies:=3; - if not(V2Valide) then tablo_PN[i].NbVoies:=2; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; - -procedure TFormConfig.EditZdet1V3OChange(Sender: TObject); -var s : string; - act,erreur,NbVoies,i : integer; - V2valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditZdet1V3O Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditZdet1V3O.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse détecteur voie 3 ouvre';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[3].detZ1O:=act; - V2valide:=(EditZdet1V3O.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V2Valide and (NbVoies=2) then tablo_PN[i].NbVoies:=3; - if not(V2Valide) then tablo_PN[i].NbVoies:=2; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; - -end; - -procedure TFormConfig.EditZdet2V3OChange(Sender: TObject); -var s : string; - act,erreur,NbVoies,i : integer; - V2valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditZdet2V3O Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditZdet2V3O.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse détecteur voie 3 ouvre';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[3].detZ2O:=act; - V2valide:=(EditZdet2V3O.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V2Valide and (NbVoies=2) then tablo_PN[i].NbVoies:=3; - if not(V2Valide) then tablo_PN[i].NbVoies:=2; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; - -end; - -procedure TFormConfig.EditZdet1V4FChange(Sender: TObject); -var s : string; - act,erreur,NbVoies,i : integer; - V2valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditZdet1V4F Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditZdet1V4F.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse détecteur voie 4 ferme';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[4].detZ1F:=act; - V2valide:=(EditZdet1V4F.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V2Valide and (NbVoies=3) then tablo_PN[i].NbVoies:=4; - if not(V2Valide) then tablo_PN[i].NbVoies:=3; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; - -procedure TFormConfig.EditZdet2V4FChange(Sender: TObject); - var s : string; - act,erreur,NbVoies,i : integer; - V3valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditZdet2V4F Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditZdet2V4F.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse détecteur voie 4 ferme';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[4].detZ2F:=act; - V3valide:=(EditZdet2V4F.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V3Valide and (NbVoies=3) then tablo_PN[i].NbVoies:=4; - if not(V3Valide) then tablo_PN[i].NbVoies:=3; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; - - -procedure TFormConfig.EditZdet1V5FChange(Sender: TObject); - var s : string; - act,erreur,NbVoies,i : integer; - V2valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditZdet1V5F Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditZdet1V5F.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse détecteur voie 5 ferme';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[5].detZ1F:=act; - V2valide:=(EditZdet1V5F.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V2Valide and (NbVoies=4) then tablo_PN[i].NbVoies:=5; - if not(V2Valide) then tablo_PN[i].NbVoies:=4; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; - -procedure TFormConfig.EditZdet2V5FChange(Sender: TObject); -var s : string; - act,erreur,NbVoies,i : integer; - V2valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditZdet2V5F Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditZdet2V5F.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse détecteur voie 5 ferme';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[5].detZ2F:=act; - V2valide:=(EditZdet2V5F.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V2Valide and (NbVoies=4) then tablo_PN[i].NbVoies:=5; - if not(V2Valide) then tablo_PN[i].NbVoies:=4; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; - -end; - -procedure TFormConfig.EditZdet1V4OChange(Sender: TObject); -var s : string; - act,erreur,NbVoies,i : integer; - V2valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditZdet1V4O Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditZdet1V4O.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse détecteur voie 4 ouvre';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[4].detZ1O:=act; - V2valide:=(EditZdet1V4O.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V2Valide and (NbVoies=3) then tablo_PN[i].NbVoies:=4; - if not(V2Valide) then tablo_PN[i].NbVoies:=3; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; - -procedure TFormConfig.EditZdet1V5OChange(Sender: TObject); -var s : string; - act,erreur,NbVoies,i : integer; - V2valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditZdet1V5O Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditZdet1V5O.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse détecteur voie 5 ouvre';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[5].detZ1O:=act; - V2valide:=(EditZdet1V5O.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V2Valide and (NbVoies=4) then tablo_PN[i].NbVoies:=5; - if not(V2Valide) then tablo_PN[i].NbVoies:=4; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; - -end; - -procedure TFormConfig.EditZdet2V4OChange(Sender: TObject); -var s : string; - act,erreur,NbVoies,i : integer; - V2valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditZdet2V4O Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditZdet2V4O.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse détecteur voie 4 ouvre';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[4].detZ2O:=act; - V2valide:=(EditZdet2V4O.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V2Valide and (NbVoies=3) then tablo_PN[i].NbVoies:=4; - if not(V2Valide) then tablo_PN[i].NbVoies:=3; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; - -procedure TFormConfig.EditZdet2V5OChange(Sender: TObject); -var s : string; - act,erreur,NbVoies,i : integer; - V2valide : boolean; -begin - if clicliste or (lignecliqueePN<0) then exit; - if affevt then affiche('Evt EditZdet2V5O Change',clyellow); - if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then - with Formconfig do - begin - s:=EditZdet2V5O.Text; - Val(s,act,erreur); - if (erreur<>0) and (s<>'') then - begin - LabelInfo.caption:='Erreur adresse détecteur voie 5 ouvre';exit - end else LabelInfo.caption:=' '; - i:=lignecliqueePN+1; - tablo_PN[i].voie[5].detZ2O:=act; - V2valide:=(EditZdet2V5O.text<>''); - NbVoies:=tablo_PN[i].NbVoies; - if V2Valide and (NbVoies=4) then tablo_PN[i].NbVoies:=5; - if not(V2Valide) then tablo_PN[i].NbVoies:=4; - s:=encode_act_PN(i); - ListBoxPN.items[lignecliqueePN]:=s; - ListBoxPN.Selected[lignecliqueePN]:=true; - end; -end; procedure TFormConfig.ButtonTestFermeClick(Sender: TObject); -var adr,cmd,erreur : integer; +var i,adr,cmd,erreur : integer; ts : Taccessoire; -begin - val(editAdrFerme.Text,adr,erreur);if erreur<>0 then exit; - val(editCmdFerme.Text,cmd,erreur);if erreur<>0 then exit; - if ligneCliqueePN=-1 then exit; - aff_acc:=true; - if Tablo_PN[ligneCliqueePN+1].pulse=1 then ts:=aigP else ts:=feu; - pilote_acc(adr,cmd,ts); - aff_acc:=false; +begin + i:=ligneCliqueePN+1; + if i<1 then exit; + if Tablo_PN[i].TypeCde=0 then + begin + val(editAdrFerme.Text,adr,erreur);if erreur<>0 then exit; + val(editCdeFerme.Text,cmd,erreur);if erreur<>0 then exit; + aff_acc:=true; + if Tablo_PN[i].pulse=1 then ts:=aigP else ts:=feu; + pilote_acc(adr,cmd,ts); + aff_acc:=false; + end + else + begin + cmd:=Tablo_PN[i].AdresseFerme; // numéro accessoire + cmd:=com_socket(cmd); + if cmd=1 then ferme_pn_usb(i); + if cmd=2 then ferme_pn_socket(i); + end; end; procedure TFormConfig.ButtonTestOuvreClick(Sender: TObject); -var adr,cmd,erreur : integer; +var adr,cmd,erreur,i : integer; ts : Taccessoire; begin - if (lignecliqueePN<0) then exit; - val(editAdrOuvre.Text,adr,erreur);if erreur<>0 then exit; - val(editCdeOuvre.Text,cmd,erreur);if erreur<>0 then exit; - if ligneCliqueePN=-1 then exit; - aff_acc:=true; - if Tablo_PN[ligneCliqueePN+1].pulse=1 then ts:=aigP else ts:=feu; - pilote_acc(adr,cmd,ts); - aff_acc:=false; + i:=ligneCliqueePN+1; + if i<1 then exit; + if Tablo_PN[i].TypeCde=0 then + begin + val(editAdrOuvre.Text,adr,erreur);if erreur<>0 then exit; + val(editCdeOuvre.Text,cmd,erreur);if erreur<>0 then exit; + aff_acc:=true; + if Tablo_PN[ligneCliqueePN+1].pulse=1 then ts:=aigP else ts:=feu; + pilote_acc(adr,cmd,ts); + aff_acc:=false; + end + else + begin + cmd:=Tablo_PN[i].AdresseFerme; // numéro accessoire + cmd:=com_socket(cmd); + if cmd=1 then ouvre_pn_usb(i); + if cmd=2 then ouvre_pn_socket(i); + end; end; procedure TFormConfig.CheckPnPulseClick(Sender: TObject); @@ -11617,19 +11322,151 @@ end; // modif editT procedure Tformconfig.modif_editT(Sender : TObject); var te : tEdit; - adr,i,erreur :integer; + adr,i,NbVoies,erreur,act,voie,det,numDet :integer; + ouvre,ferme,v2Valide,v3valide,v4valide,v5valide : boolean; + s : string; begin if deccourant=0 then exit; te:=Sender as Tedit; - adr:=extract_int(te.name); - val(te.Text,i,erreur); - if erreur<>0 then + s:=lowercase(te.Name); + + if pos('tditt',s)<>0 then begin - labelInfo.caption:='Erreur adresse'; + adr:=extract_int(s); + val(s,i,erreur); + if erreur<>0 then + begin + labelInfo.caption:='Erreur adresse'; + exit; + end; + labelInfo.caption:=''; + decodeur_pers[deccourant].desc[adr].offsetAdresse:=i; exit; end; - labelInfo.caption:=''; - decodeur_pers[deccourant].desc[adr].offsetAdresse:=i; + + // passage à niveau + if pos('editv',s)<>0 then + begin + i:=lignecliqueePN+1; + voie:=extract_int(s); + ouvre:=pos('o',s)<>0; + ferme:=pos('f',s)<>0; + if clicliste or (lignecliqueePN<0) then exit; + if affevt then affiche('Evt EditVXX Change',clyellow); + if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then + with Formconfig do + begin + s:=te.Text; + Val(s,act,erreur); + if (erreur<>0) then + begin + LabelInfo.caption:='Erreur adresse actionneur'; + if ferme then tablo_PN[i].voie[voie].ActFerme:=0; + if ouvre then tablo_PN[i].voie[voie].ActOuvre:=0; + exit; + end else LabelInfo.caption:=' '; + if ferme then tablo_PN[i].voie[voie].ActFerme:=act; + if ouvre then tablo_PN[i].voie[voie].ActOuvre:=act; + NbVoies:=tablo_PN[i].NbVoies; + + if voie=2 then + begin + V2valide:=(EditV2O.text<>'') and (EditV2F.text<>''); + if V2Valide and (NbVoies=1) then tablo_PN[i].NbVoies:=2; + if not(V2Valide) then tablo_PN[i].NbVoies:=1; + end; + + if voie=3 then + begin + V3valide:=(EditV3O.text<>'') and (EditV3F.text<>''); + if V3Valide and (NbVoies=2) then tablo_PN[i].NbVoies:=3; + if not(V3Valide) then tablo_PN[i].NbVoies:=2; + end; + + if voie=4 then + begin + V4valide:=(EditV4O.text<>'') and (EditV4F.text<>''); + if V4Valide and (NbVoies=3) then tablo_PN[i].NbVoies:=4; + if not(V4Valide) then tablo_PN[i].NbVoies:=3; + end; + + if voie=5 then + begin + V5valide:=(EditV5O.text<>'') and (EditV5F.text<>''); + if V4Valide and (NbVoies=4) then tablo_PN[i].NbVoies:=5; + if not(V5Valide) then tablo_PN[i].NbVoies:=4; + end; + + s:=encode_act_PN(i); + ListBoxPN.items[lignecliqueePN]:=s; + ListBoxPN.Selected[lignecliqueePN]:=true; + end; + exit; + end; + + // PN zones + if pos('editz',s)<>0 then //ex pour la voie 2: EditZdet1V2F EditZdet2V2F EditZdet1V2O EditZdet2V2O + begin + if clicliste or (lignecliqueePN<0) then exit; + if affevt then affiche('Evt EditZdetXVX Change',clyellow); + if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then + with Formconfig do + begin + i:=pos('det1',s);if i<>0 then begin numdet:=1;delete(s,1,i+3);end; + i:=pos('det2',s);if i<>0 then begin numdet:=2;delete(s,1,i+3);end; + + voie:=extract_int(s); + ouvre:=pos('o',s)<>0; + ferme:=pos('f',s)<>0; + + s:=te.Text; + Val(s,det,erreur); + if (erreur<>0) then + begin + LabelInfo.caption:='Erreur adresse détecteur';exit + end else LabelInfo.caption:=' '; + i:=lignecliqueePN+1; + if (numdet=1) and ferme then tablo_PN[i].voie[voie].DetZ1F:=det; + if (numdet=1) and ouvre then tablo_PN[i].voie[voie].DetZ1O:=det; + if (numdet=2) and ferme then tablo_PN[i].voie[voie].DetZ2F:=det; + if (numdet=2) and ouvre then tablo_PN[i].voie[voie].DetZ2O:=det; + + NbVoies:=tablo_PN[i].NbVoies; + if voie=2 then + begin + V2valide:=(EditZdet1V2F.text<>'') and (EditZdet1V2o.text<>''); + if V2Valide and (NbVoies=1) then tablo_PN[i].NbVoies:=2; + if not(V2Valide) then tablo_PN[i].NbVoies:=1; + end; + + if voie=3 then + begin + V3valide:=(EditZdet1V3F.text<>'') and (EditZdet1V3O.text<>''); + if V3Valide and (NbVoies=2) then tablo_PN[i].NbVoies:=3; + if not(V3Valide) then tablo_PN[i].NbVoies:=2; + end; + + if voie=4 then + begin + V4valide:=(EditZdet1V4F.text<>'') and (EditZdet1V4O.text<>''); + if V4Valide and (NbVoies=3) then tablo_PN[i].NbVoies:=4; + if not(V4Valide) then tablo_PN[i].NbVoies:=3; + end; + + if voie=5 then + begin + V5valide:=(EditZdet1V5F.text<>'') and (EditZdet1V5O.text<>''); + if V5Valide and (NbVoies=4) then tablo_PN[i].NbVoies:=5; + if not(V5Valide) then tablo_PN[i].NbVoies:=4; + end; + + + s:=encode_act_PN(i); + ListBoxPN.items[lignecliqueePN]:=s; + ListBoxPN.Selected[lignecliqueePN]:=true; + end; + end; + end; // changement combobox choix sorties 1 ou 2 @@ -12217,6 +12054,7 @@ begin clicListe:=false; end; + procedure TFormConfig.Slectionnertout1Click(Sender: TObject); var tl: TListBox; begin @@ -12228,13 +12066,14 @@ begin end; end; -procedure supprime_acc; +// supprimer un périphérique +procedure supprime_periph; var ss,s : string; n,i,j : integer; begin ss:=''; n:=0; - for i:=0 to NbAcc_USBCOM-1 do + for i:=0 to NbPeriph-1 do begin if formconfig.ListBoxAcc.selected[i] then begin @@ -12260,36 +12099,36 @@ var ss,s : string; if formconfig.ListBoxAcc.selected[i-1] then begin - for j:=i to NbAcc_USBCOM-1 do + for j:=i to NbPeriph-1 do begin formconfig.ListBoxAcc.selected[j-1]:=formconfig.ListBoxAcc.selected[j]; tablo_acc_comusb[j]:=tablo_acc_comusb[j+1]; end; - dec(NbAcc_USBCOM); - tablo_acc_comusb[NbAcc_USBCOM+1].NumCom:=0; + dec(NbPeriph); + tablo_acc_comusb[NbPeriph+1].NumCom:=0; i:=0; end; inc(i); - until i>NbAcc_USBCOM; + until i>NbPeriph; - if NbAcc_USBCOM<=MaxComUSBCde then formConfig.LabelInfoAcc.caption:=''; - NbreComCde:=NbAcc_USBCOM; + if NbPeriph<=NbMaxi_periph then formConfig.LabelInfoAcc.caption:=''; config_modifie:=true; FormConfig.ListBoxAcc.Clear; formConfig.ComboBoxAccComUSB.Clear; + formconfig.ComboBoxPNCom.Clear; // réafficher la liste - for i:=1 to NbAcc_USBCOM do + for i:=1 to NbPeriph do begin - s:=encode_AccCOM(i); + s:=encode_Periph(i); if s<>'' then begin Tablo_com_cde[i].NumAcc:=i; FormConfig.ListBoxAcc.items.Add(s); - formConfig.ComboBoxAccComUSB.Items.Add(Tablo_acc_COMUSB[i].nom+' (COM'+intToSTR(Tablo_acc_COMUSB[i].NumCom)+')'); + maj_champs_combos(i); end; - end; + end; ligneclicAccCom:=-1; AncligneclicAccCom:=-1; clicliste:=false; @@ -12299,9 +12138,9 @@ procedure ajoute_acc; var i : integer; s : string; begin - if NbAcc_USBCOM>=NbAccMaxi_USBCOM then + if NbPeriph>=NbMaxi_Periph then begin - Affiche('Nombre maximal d''accessoires COM/USB',clRed); + Affiche('Nombre maximal de périphériques COM/USB sockets',clRed); exit; end; clicliste:=true; @@ -12310,14 +12149,14 @@ begin with formconfig.ListBoxAcc do for i:=0 to items.Count-1 do Selected[i]:=false; - inc(NbAcc_USBCOM); - if NbAcc_USBCOM>MaxComUSBCde then formConfig.LabelInfoAcc.caption:='Nombre maxi de com atteint : '+intToStr(MaxComUSBCde); + inc(NbPeriph); + if NbPeriph>10 then formConfig.LabelInfoAcc.caption:='Nombre maxi de périphériques atteint : '+intToStr(NbPeriph); - i:=NbAcc_USBCOM; + i:=NbPeriph; Tablo_acc_COMUSB[i].nom:=''; Tablo_acc_COMUSB[i].NumCom:=0; - s:=encode_AccCOM(i); + s:=encode_Periph(i); // scroller à la fin et sélectionner with formconfig.ListBoxAcc do begin @@ -12331,7 +12170,10 @@ begin ligneClicAccCOM:=i-1; AncligneClicAccCOM:=ligneClicAccCom; Aff_champs_accCOMUSB_tablo(i); - formConfig.ComboBoxAccComUSB.Items.Add('nouveau'); + s:='nouveau'; + formConfig.ComboBoxAccComUSB.Items.Add(s); + formconfig.ComboBoxPNCom.Items.Add(s); + formconfig.EditNomAcc.text:=s; clicliste:=false; config_modifie:=true; end; @@ -12349,7 +12191,7 @@ begin if s='ListBoxSig' then supprime_sig; if s='ListBoxAig' then supprime_aig; if s='ListBoxTrains' then supprime_Train; - if s='ListBoxAcc' then supprime_acc; + if s='ListBoxAcc' then supprime_periph; end; @@ -12391,20 +12233,32 @@ end; procedure TFormConfig.ButtonOuvreComClick(Sender: TObject); var i,index : integer; + s : string; begin -// Affiche(intToSTr(componentcount),clyellow); +// Affiche(intToSTr(componentcount),clyellow); - for i:=1 to 10 do + for i:=1 to NbMaxi_Periph do begin - deconnecte_usb_cde(i); + index:=com_socket(i); + if index=1 then deconnecte_usb_periph(i); + if index=2 then deconnecte_socket_periph(i); end; - for i:=1 to NbreComCde do + for i:=1 to NbPeriph do begin index:=tablo_com_cde[i].NumAcc; - if connecte_port_usb_cde(index) then - Affiche('COM'+intToSTR(tablo_acc_comusb[index].numcom)+' périphérique ouvert',clLime) - else Affiche('COM'+intToSTR(tablo_acc_comusb[index].numcom)+' périphérique non ouvert',clOrange); + + if com_socket(i)=1 then + begin + if connecte_port_usb_acc(index) then + Affiche('COM'+intToSTR(tablo_acc_comusb[index].numcom)+' périphérique ouvert',clLime) + else Affiche('COM'+intToSTR(tablo_acc_comusb[index].numcom)+' périphérique non ouvert',clOrange); + end + else + begin + connecte_socket_acc(i); + end; + end; end; @@ -12423,8 +12277,8 @@ begin begin s:=EditNomAcc.Text; Tablo_acc_COMUSB[ligneClicAccCOM+1].nom:=s; - ComboBoxAccComUSB.Items[ligneClicAccCOM]:=s+' (COM'+intToSTR(Tablo_acc_COMUSB[ligneClicAccCOM+1].NumCom)+')'; - s:=encode_AccCOM(ligneClicAccCOM+1); + maj_champs_combos(ligneClicAccCOM+1); + s:=encode_Periph(ligneClicAccCOM+1); ListBoxAcc.Items[ligneClicAccCOM]:=s; ListBoxAcc.Selected[ligneClicAccCOM]:=true; end; @@ -12438,8 +12292,7 @@ var i,lc : integer; s : string; begin clicliste:=true; - if NbAcc_USBCOM<1 then exit; - + if NbPeriph<1 then exit; with Formconfig.ListBoxAcc do begin i:=0; @@ -12476,9 +12329,102 @@ end; procedure TFormConfig.ButtonSupAccComClick(Sender: TObject); begin - supprime_acc; + supprime_periph end; - end. + procedure TFormConfig.ListBoxAccKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if NbPeriph<1 then exit; + if key=VK_delete then supprime_periph; + if ord(Key)=VK_UP then + begin + if clicListe then exit; + clicListe:=true; + if affevt then affiche('Evt ListBoxAcc.Items keydown',clyellow); + with Formconfig.ListBoxAcc.Items do + begin + if ligneclicAccCom>0 then + begin + AncligneclicAccCom:=ligneclicAccCom; + dec(ligneclicAccCom); + if AncligneclicAccCom<>ligneclicAccCom then + begin + Aff_champs_accCOMUSB_tablo(ligneclicAccCom+1); + end; + end; + end; + end; + + if ord(Key)=VK_DOWN then + begin + if clicListe then exit; + clicListe:=true; + if affevt then affiche('Evt ListBoxAcc.Items keydown',clyellow); + with Formconfig.ListBoxAcc.Items do + begin + if ligneclicAccComligneclicAccCom then + begin + Aff_champs_accCOMUSB_tablo(ligneclicAccCom+1); + end; + end; + end; + end; + clicListe:=false; + +end; + +procedure TFormConfig.RadioButtonSimpleClick(Sender: TObject); + begin + GroupBoxPNA.Visible:=true; + GroupBoxPNZ.Visible:=false; +end; + +procedure TFormConfig.RadioButtonZoneClick(Sender: TObject); + begin + GroupBoxPNA.Visible:=false; + GroupBoxPNZ.Visible:=true; +end; + + +procedure TFormConfig.RadioGroupActPNClick(Sender: TObject); +var s : string; + begin + if clicliste or (lignecliqueePN<0) then exit; + if affevt then affiche('Evt radio',clyellow); + if FormConfig.PageControl.ActivePage=FormConfig.TabSheetAct then + begin + if RadioGroupActPN.itemindex=0 then + begin + tablo_PN[lignecliqueePN+1].TypeCde:=0; + champs_PN_Act; + end; + if RadioGroupActPN.itemindex=1 then + begin + tablo_PN[lignecliqueePN+1].TypeCde:=1; + champs_PN_COMUSB; + end; + s:=encode_act_PN(lignecliqueePN+1); + ListBoxPN.items[lignecliqueePN]:=s; + + end; +end; + +procedure TFormConfig.ComboBoxPNComChange(Sender: TObject); + var s : string; + begin + if clicliste or (lignecliqueePN<0) then exit; + if affevt then affiche('Evt Edit portPN Change',clyellow); + Tablo_PN[lignecliqueePN+1].AdresseFerme:=ComboBoxPNCom.ItemIndex+1; + s:=encode_act_PN(lignecliqueePN+1); + ListBoxPN.Items[lignecliqueePN]:=s; + ListBoxPN.Selected[lignecliqueePN]:=true; +end; + +end. diff --git a/UnitPrinc.dfm b/UnitPrinc.dfm index b04f759..645ef3b 100644 --- a/UnitPrinc.dfm +++ b/UnitPrinc.dfm @@ -2437,4 +2437,24 @@ object FormPrinc: TFormPrinc OnClick = Informationsdusignal1Click end end + object ClientSocketCde1: TClientSocket + Active = False + ClientType = ctNonBlocking + Port = 0 + OnConnect = ClientSocketCde1Connect + OnRead = ClientSocketCde1Read + OnError = ClientSocketCde1Error + Left = 1152 + Top = 344 + end + object ClientSocketCde2: TClientSocket + Active = False + ClientType = ctNonBlocking + Port = 0 + OnConnect = ClientSocketCde2Connect + OnRead = ClientSocketCde2Read + OnError = ClientSocketCde2Error + Left = 1152 + Top = 384 + end end diff --git a/UnitPrinc.pas b/UnitPrinc.pas index 303bbe1..27c9b17 100644 --- a/UnitPrinc.pas +++ b/UnitPrinc.pas @@ -212,6 +212,8 @@ type ButtonIndex: TButton; MSCommCde1: TMSComm; MSCommCde2: TMSComm; + ClientSocketCde1: TClientSocket; + ClientSocketCde2: TClientSocket; procedure FormCreate(Sender: TObject); procedure MSCommUSBLenzComm(Sender: TObject); @@ -330,6 +332,20 @@ type Panel: TStatusPanel; const Rect: TRect); procedure MSCommCde1Comm(Sender: TObject); procedure MSCommCde2Comm(Sender: TObject); + procedure ClientSocketCde1Connect(Sender: TObject; + Socket: TCustomWinSocket); + procedure ClientSocketCde1Error(Sender: TObject; + Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; + var ErrorCode: Integer); + procedure ClientSocketCde1Read(Sender: TObject; + Socket: TCustomWinSocket); + procedure ClientSocketCde2Connect(Sender: TObject; + Socket: TCustomWinSocket); + procedure ClientSocketCde2Error(Sender: TObject; + Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; + var ErrorCode: Integer); + procedure ClientSocketCde2Read(Sender: TObject; + Socket: TCustomWinSocket); // procedure MSCommCdeComm(Sender: TObject); private { Déclarations privées } @@ -359,7 +375,7 @@ MaxElBranches=200; NbreMaxiAiguillages=200; NbreMaxiSignaux=200; NbreMaxiDecPers=10; // nombre maxi de décodeurs personnalisés -NbAccMaxi_USBCOM=10; // nombre maxi d'accessoires COM +NbMaxi_Periph=10; // nombre maxi de périphériques LargImg=50;HtImg=91; // Dimensions image des feux MaxComUSBCde=2; // Nombre maxi de périphériques USB commande const_droit=2; // positions aiguillages transmises par la centrale LENZ @@ -524,7 +540,7 @@ var ServeurRetroCDM,TailleFonte,Nb_Det_Dist,Tdoubleclic,algo_Unisemaf,fA,fB, etape,idEl,avecRoulage,intervalle_courant,filtrageDet0,SauvefiltrageDet0, TpsTimeoutSL,formatY,OsBits,NbreDecPers,NbDecodeur,NbDecodeurdeBase, - LargeurF,HauteurF,OffsetXF,OffsetYF,PosSplitter,NbAcc_USBCOM : integer; + LargeurF,HauteurF,OffsetXF,OffsetYF,PosSplitter,NbPeriph,NbPeriph_COMUSB,NbPeriph_Socket : integer; ack,portCommOuvert,traceTrames,AffMem,CDM_connecte,dupliqueEvt,affiche_retour_dcc, Raz_Acc_signaux,AvecInit,AvecTCO,terminal,Srvc_Aig,Srvc_Det,Srvc_Act,MasqueBandeauTCO, @@ -594,9 +610,10 @@ var Index_Accessoire : array[0..MaxAcc] of integer; // tableau d'index des accessoires aiguillages et signaux sur le bus DCC // tableau des accessoires - Tablo_acc_COMUSB : array[1..NbAccMaxi_USBCOM] of record + Tablo_acc_COMUSB : array[1..NbMaxi_Periph] of record nom : string; - NumCom : integer; // numéro de port COM + NumCom : integer; // numéro de port COM si c'est une liaison com usb + numComposant : integer ; // numéro de composant MSCOM ou clientSocket ScvAig,ScvDet,ScvAct,ScvVis,cr : boolean ; // services, visible, avecCR protocole: string; end; @@ -623,17 +640,17 @@ var Tablo_actionneur : array[0..Max_actionneurs] of record - loco,act,son,cde: boolean; // destinataire loco acessoire ou son + loco,act,son,cde : boolean; // destinataire loco acessoire son ou périphérique adresse,adresse2, // adresse: adresse de base ; adresse2=cas d'une Zone etat, - fonction, // fonction F de train ou accessoire + fonction, // fonction F de train ou périphérique tempo,TempoCourante, accessoire,sortie, - typdeclenche : integer; // déclencheur: 0=actionneur/détecteur 2=evt aig 3=MemZone + typdeclenche : integer; // déclencheur: 0=actionneur/détecteur 2=evt aig 3=MemZone Raz : boolean; FichierSon,trainDecl, TrainDest, // train destinataire ou Commande - TrainCourant : string; + TrainCourant : string; end; decodeur_pers : array[1..NbreMaxiDecPers] of @@ -652,12 +669,14 @@ var KeyInputs: array of TInput; Tablo_PN : array[0..Max_actionneurs] of record - AdresseFerme : integer; // adresse de pilotage DCC pour la fermeture + AdresseFerme : integer; // adresse de pilotage DCC pour la fermeture ou numéro de périphérique pour pilotage usb commandeFerme : integer; // commande de fermeture (1 ou 2) AdresseOuvre : integer; // adresse de pilotage DCC pour l'ouverture commandeOuvre : integer; // commande d'ouverture (1 ou 2) NbVoies : integer; // Nombre de voies du PN Pulse : integer; // 0=commande maintenue 1=Impulsionnel + TypeCde : integer; // 0=par accessoire / 1=par COMUSB + commandeF,CommandeO : string; compteur : integer; // comptage actionneurs fermeture et décomptage actionneurs ouverture Voie : array [1..5] of record ActFerme,ActOuvre : integer ; // actionneurs provoquant la fermeture et l'ouverture @@ -757,8 +776,10 @@ procedure Affiche(s : string;lacouleur : TColor); procedure envoi_signal(Adr : integer); procedure pilote_direction(Adr,nbre : integer); procedure connecte_USB; -function connecte_port_usb_cde(index : integer) : boolean; -procedure deconnecte_usb_cde(index : integer); +function connecte_port_usb_acc(index : integer) : boolean; +procedure deconnecte_usb_periph(index : integer); +procedure connecte_socket_acc(index : integer); +procedure deconnecte_socket_periph(index : integer); procedure deconnecte_usb; function IsWow64Process: Boolean; procedure Dessine_signal_mx(CanvasDest : Tcanvas;x,y : integer;FrX,frY : real;adresse : integer;orientation : integer); @@ -803,6 +824,11 @@ function extract_int(s : string) : integer; Procedure Menu_tco(i : integer); procedure Affiche_Fenetre_TCO(i : integer;laisseOuvert : boolean); procedure positionne_elements(i : integer); +procedure ouvre_pn_usb(i : integer); +procedure ferme_pn_usb(i : integer); +procedure ouvre_pn_socket(i : integer); +procedure ferme_pn_socket(i : integer); +function com_socket(i : integer) : integer; implementation @@ -10104,10 +10130,109 @@ begin end; +// ouvre le PN index dans le tablo_pn +procedure ferme_pn_usb(i : integer); +var numacc,v : integer; + s : string; +begin + numacc:=Tablo_pn[i].AdresseFerme; // numéro de périphérique + if numacc=0 then exit; + v:=Tablo_acc_COMUSB[numacc].NumCom; // numéro de com + if v=0 then exit; + if Tablo_com_cde[numacc].PortOuvert then + begin + s:=Tablo_PN[i].CommandeF; + if Tablo_acc_COMUSB[numacc].cr then s:=s+#13; + if numacc=1 then Formprinc.MSCommCde1.Output:=s; + if numacc=2 then Formprinc.MSCommCde2.Output:=s; + Affiche('Envoie port COM'+intToSTR(v)+' commande: '+s,clWhite); + end + else Affiche('Envoi commande impossible ; COM'+intToSTR(v)+' non détecté',clred); +end; + +procedure ouvre_pn_usb(i : integer); +var numacc,v : integer; + s : string; +begin + numacc:=Tablo_pn[i].AdresseFerme; // numéro d'accessoire + if numacc=0 then exit; + v:=Tablo_acc_COMUSB[numacc].NumCom; // numéro de com + if v=0 then exit; + if Tablo_com_cde[numacc].PortOuvert then + begin + s:=Tablo_PN[i].CommandeO; + if Tablo_acc_COMUSB[numacc].cr then s:=s+#13; + if numacc=1 then Formprinc.MSCommCde1.Output:=s; + if numacc=2 then Formprinc.MSCommCde2.Output:=s; + Affiche('Envoie port COM'+intToSTR(v)+' commande: '+s,clWhite); + end + else Affiche('Envoi commande impossible ; COM'+intToSTR(v)+' non détecté',clred); +end; + +procedure ouvre_pn_socket(i : integer); +var numacc : integer; + s : string; +begin + numacc:=Tablo_pn[i].AdresseFerme; // numéro d'accessoire + if numacc=0 then exit; + s:=Tablo_PN[i].CommandeO; + if Tablo_acc_COMUSB[numacc].cr then s:=s+#13; + if numacc=1 then Formprinc.ClientSocketCde1.Socket.SendText(s); + if numacc=2 then Formprinc.ClientSocketCde2.Socket.SendText(s); + Affiche('Envoie socket'+intToSTR(numacc)+' commande: '+s,clWhite); +end; + +procedure ferme_pn_socket(i : integer); +var numacc : integer; + s : string; +begin + numacc:=Tablo_pn[i].AdresseFerme; // numéro d'accessoire + if numacc=0 then exit; + s:=Tablo_PN[i].CommandeF; + if Tablo_acc_COMUSB[numacc].cr then s:=s+#13; + if numacc=1 then Formprinc.ClientSocketCde1.Socket.SendText(s); + if numacc=2 then Formprinc.ClientSocketCde2.Socket.SendText(s); + Affiche('Envoie socket'+intToSTR(numacc)+' commande: '+s,clWhite); +end; + + +procedure envoi_periph_usb(i : integer); +var numacc,v : integer; + s : string; +begin + numacc:=Tablo_actionneur[i].fonction; // numéro de périphérique + if numacc=0 then exit; + v:=Tablo_acc_COMUSB[numacc].NumCom; // numéro de com + + if v=0 then exit; + if Tablo_com_cde[numacc].PortOuvert then + begin + s:=Tablo_actionneur[i].trainDest; + if Tablo_acc_COMUSB[numacc].cr then s:=s+#13; + if numacc=1 then Formprinc.MSCommCde1.Output:=s; + if numacc=2 then Formprinc.MSCommCde2.Output:=s; + end + else Affiche('Envoi commande impossible ; COM'+intToSTR(v)+' non détecté',clred); +end; + +// envoi le texte traindest de l'accessoire sur le socket du périphérique i +procedure envoi_socket_periph(i : integer); +var v,numacc : integer; + s : string; +begin + v:=Tablo_actionneur[i].fonction; // numéro de périphérique + numacc:=Tablo_acc_COMUSB[v].numComposant; //numéro de composant + s:=Tablo_actionneur[i].trainDest; + if Tablo_acc_COMUSB[numacc].cr then s:=s+#13; + if numacc=1 then Formprinc.ClientSocketCde1.socket.SendText(s); + if numacc=2 then Formprinc.ClientSocketCde2.socket.SendText(s); + Affiche('Envoi socket '+s,clYellow); +end; + // traitement des évènements actionneurs (detecteurs aussi) // adr adr2 : pour mémoire de zone procedure Event_act(adr,adr2,etat : integer;trainDecl : string); -var typ,i,v,etatAct,Af,Ao,Access,sortie,dZ1F,dZ2F,dZ1O,dZ2O,numacc : integer; +var typ,i,v,etatAct,Af,Ao,Access,sortie,dZ1F,dZ2F,dZ1O,dZ2O : integer; s,st,trainDest : string; fm,fd,adresseOk,etatvalide : boolean; Ts : TAccessoire; @@ -10198,26 +10323,15 @@ begin PlaySound(pchar(Tablo_actionneur[i].FichierSon),0,SND_ASYNC); end; - // commande COM/USB + // commande COM/USB socket if adresseOK and (Tablo_actionneur[i].cde) and ((s=trainDecl) or (s='X') or (trainDecl='X') or (trainDecl='')) and (etatValide) then begin - numacc:=Tablo_actionneur[i].fonction; // numéro d'accessoire - if numacc=0 then exit; - v:=Tablo_acc_COMUSB[numacc].NumCom; // numéro de com - - if v=0 then exit; - if Tablo_com_cde[numacc].PortOuvert then - begin - trainDest:=Tablo_actionneur[i].trainDest; - if Tablo_acc_COMUSB[numacc].cr then trainDest:=TrainDest+#13; - if numacc=1 then Formprinc.MSCommCde1.Output:=TrainDest; - if numacc=2 then Formprinc.MSCommCde2.Output:=TrainDest; - Affiche(st+' TrainDecl='+trainDecl+' Envoie port COM'+intToSTR(v)+' commande: '+TrainDest,clyellow); - end - else Affiche('Envoi commande impossible ; COM'+intToSTR(v)+' non détecté',clred); + v:=tablo_actionneur[i].fonction; + af:=com_socket(v); + if af=1 then envoi_periph_usb(i); // numéro d'actionneur + if af=2 then envoi_socket_periph(i); // numéro de périphérique,numéro d'actionneur + Affiche(st+' TrainDecl='+trainDecl+' Envoie port COM'+intToSTR(v)+' commande: '+TrainDest,clWhite); end; - - end; // dans le tableau des PN @@ -10237,8 +10351,18 @@ begin if tablo_pn[i].compteur=1 then // compteur du nombre de trains sur le PN begin Affiche('Ouverture PN'+intToSTR(i)+' par act '+intToSTr(adr)+' (train voie '+IntToSTR(v)+')',clOrange); - if Tablo_PN[i].pulse=1 then ts:=aigP else ts:=feu; - pilote_acc(Tablo_PN[i].AdresseOuvre,Tablo_PN[i].CommandeOuvre,ts); + if tablo_pn[i].TypeCde=0 then + begin + if Tablo_PN[i].pulse=1 then ts:=aigP else ts:=feu; + pilote_acc(Tablo_PN[i].AdresseOuvre,Tablo_PN[i].CommandeOuvre,ts); + end + else + begin + typ:=Tablo_PN[i].AdresseFerme; // numéro accessoire + typ:=com_socket(v); + if typ=1 then ouvre_pn_usb(i); + if typ=2 then ouvre_pn_socket(i); + end; end; if tablo_pn[i].compteur>0 then dec(tablo_pn[i].compteur); end; @@ -10250,8 +10374,18 @@ begin begin s:='Fermeture PN'+IntToSTR(i)+' par act '+intToSTr(adr)+' (train voie '+IntToSTR(v)+')'; Affiche(s,clOrange); - if Tablo_PN[i].pulse=1 then ts:=aigP else ts:=feu; - pilote_acc(Tablo_PN[i].AdresseFerme,Tablo_PN[i].CommandeFerme,ts); + if tablo_pn[i].TypeCde=0 then + begin + if Tablo_PN[i].pulse=1 then ts:=aigP else ts:=feu; + pilote_acc(Tablo_PN[i].AdresseFerme,Tablo_PN[i].CommandeFerme,ts); + end + else + begin + typ:=Tablo_PN[i].AdresseFerme; // numéro accessoire + typ:=com_socket(v); + if typ=1 then ferme_pn_usb(i); + if typ=2 then ferme_pn_socket(i); + end; end; end; end @@ -10274,8 +10408,18 @@ begin s:='Ouverture PN'+intToSTR(i)+' par zone '+intToSTr(adr)+' '+intToSTR(adr2); Affiche(s,clorange); //if AffAigDet then AfficheDebug(s,clorange); - if Tablo_PN[i].pulse=1 then ts:=aigP else ts:=feu; - pilote_acc(Tablo_PN[i].AdresseOuvre,Tablo_PN[i].CommandeOuvre,ts); + if tablo_pn[i].TypeCde=0 then + begin + if Tablo_PN[i].pulse=1 then ts:=aigP else ts:=feu; + pilote_acc(Tablo_PN[i].AdresseOuvre,Tablo_PN[i].CommandeOuvre,ts); + end + else + begin + typ:=Tablo_PN[i].AdresseFerme; // numéro accessoire + typ:=com_socket(v); + if typ=1 then ouvre_pn_usb(i); + if typ=2 then ouvre_pn_socket(i); + end; if tablo_pn[i].compteur>0 then dec(tablo_pn[i].compteur); end; end; @@ -10287,30 +10431,56 @@ begin begin s:='Fermeture PN'+IntToSTR(i)+' par zone '+intToSTr(adr)+' '+intToSTR(adr2)+' (train voie '+IntToSTR(v)+')'; affiche(s,clorange); - //if AffAigDet then AfficheDebug(s,clorange); - if Tablo_PN[i].pulse=1 then ts:=aigP else ts:=feu; - pilote_acc(Tablo_PN[i].AdresseFerme,Tablo_PN[i].CommandeFerme,ts); + if tablo_pn[i].TypeCde=0 then + begin + if Tablo_PN[i].pulse=1 then ts:=aigP else ts:=feu; + pilote_acc(Tablo_PN[i].AdresseFerme,Tablo_PN[i].CommandeFerme,ts); + end + else + begin + typ:=Tablo_PN[i].AdresseFerme; // numéro accessoire + typ:=com_socket(v); + if typ=1 then ferme_pn_usb(i); + if typ=2 then ferme_pn_socket(i); + end; end; end; end; end; end; + // service actionneur if (adr>650) then - for i:=1 to NbAcc_USBCOM do + for i:=1 to NbPeriph do begin - if tablo_com_cde[i].portOuvert then + v:=com_socket(i); + if v=1 then begin - // envoyer event det à accessoire - if Tablo_acc_COMUSB[i].ScvAct then + if tablo_com_cde[i].portOuvert then + begin + // envoyer event det à accessoire + if Tablo_acc_COMUSB[i].ScvAct then + begin + s:='A'+intToSTR(adr)+','+intToSTR(etat)+','+trainDecl; + if Tablo_acc_COMUSB[i].cr then s:=s+#13; + if Tablo_acc_COMUSB[i].ScvVis then Affiche(s,clWhite); + if i=1 then Formprinc.MSCommCde1.Output:=s; + if i=2 then Formprinc.MSCommCde2.Output:=s; + end; + end; + end; + + if v=2 then + begin + if (Tablo_acc_COMUSB[i].ScvDet) then begin s:='A'+intToSTR(adr)+','+intToSTR(etat)+','+trainDecl; if Tablo_acc_COMUSB[i].cr then s:=s+#13; if Tablo_acc_COMUSB[i].ScvVis then Affiche(s,clWhite); - if i=1 then Formprinc.MSCommCde1.Output:=s; - if i=2 then Formprinc.MSCommCde2.Output:=s; + if i=1 then Formprinc.ClientSocketCde1.Socket.SendText(s); + if i=2 then Formprinc.ClientSocketCde2.Socket.SendText(s); end; - end; + end; end; end; @@ -10494,21 +10664,35 @@ begin FormDebug.MemoEvtDet.lines.add('Raz sur débordement'); end; - // vers accessoires - for i:=1 to NbAcc_USBCOM do + // vers périphériques + for i:=1 to NbPeriph do begin - // envoyer event act à accessoire - if tablo_com_cde[i].portOuvert then + dr:=com_socket(i); + // envoyer event act au périphérique + if dr=1 then begin - if Tablo_acc_COMUSB[i].ScvDet then + if (tablo_com_cde[i].portOuvert) and (Tablo_acc_COMUSB[i].ScvDet) then begin s:='D'+intToSTR(adresse)+','+intToSTR(etat01)+','+train; if Tablo_acc_COMUSB[i].cr then s:=s+#13; - if Tablo_acc_COMUSB[i].ScvVis then Affiche(s,clOrange); + if Tablo_acc_COMUSB[i].ScvVis then Affiche(s,clWhite); if i=1 then Formprinc.MSCommCde1.Output:=s; if i=2 then Formprinc.MSCommCde2.Output:=s; end; end; + if dr=2 then + begin + if (Tablo_acc_COMUSB[i].ScvDet) then + begin + s:='D'+intToSTR(adresse)+','+intToSTR(etat01)+','+train; + if Tablo_acc_COMUSB[i].cr then s:=s+#13; + if Tablo_acc_COMUSB[i].ScvVis then Affiche(s,clWhite); + if i=1 then Formprinc.ClientSocketCde1.Socket.SendText(s); + if i=2 then Formprinc.ClientSocketCde2.Socket.SendText(s); + end; + end; + + end; // attention à partir de cette section le code est susceptible de ne pas être exécuté?? @@ -10593,22 +10777,37 @@ begin if (typ=2) and (Adr=adresse) then event_act(Adresse,0,pos,''); // évent aig end; - // pour accessoires - for i:=1 to NbAcc_USBCOM do + // pour périphériques + for i:=1 to NbPeriph do begin // envoyer event act à accessoire - if tablo_com_cde[i].portOuvert then + typ:=com_socket(i); + if typ=1 then + begin + if tablo_com_cde[i].portOuvert then + begin + if Tablo_acc_COMUSB[i].ScvAig then + begin + s:='T'+intToSTR(adresse)+','+intToSTR(pos); + if Tablo_acc_COMUSB[i].cr then s:=s+#13; + if Tablo_acc_COMUSB[i].ScvVis then Affiche(s,clWhite); + if i=1 then Formprinc.MSCommCde1.Output:=s; + if i=2 then Formprinc.MSCommCde2.Output:=s; + end; + end; + end; + if typ=2 then begin if Tablo_acc_COMUSB[i].ScvAig then begin s:='T'+intToSTR(adresse)+','+intToSTR(pos); if Tablo_acc_COMUSB[i].cr then s:=s+#13; - if Tablo_acc_COMUSB[i].ScvVis then Affiche(s,clOrange); - if i=1 then Formprinc.MSCommCde1.Output:=s; - if i=2 then Formprinc.MSCommCde2.Output:=s; - end; - end; - end; + if Tablo_acc_COMUSB[i].ScvVis then Affiche(s,clWhite); + if i=1 then Formprinc.ClientSocketCde1.Socket.SendText(s); + if i=2 then Formprinc.ClientSocketCde2.Socket.SendText(s); + end; + end; + end; end; // pilote une sortie à 0 à l'interface dont l'adresse est à 1 ou 2 (octet) @@ -11544,7 +11743,7 @@ end; // connecte un port usb pour la comm actionneurs. Si le port n'est pas ouvert, renvoie false // index= index du tableau tablo_com_cde -function connecte_port_usb_cde(index : integer) : boolean; +function connecte_port_usb_acc(index : integer) : boolean; var i,j,numport,vitesse,erreur : integer; trouve : boolean; s,sc,portComCde : string; @@ -11618,6 +11817,50 @@ begin result:=tablo_com_cde[index].PortOuvert; end; +// détermine si l'accessoire i est un comusb ou un socket +// =1 comusb +// =2 socket +function com_socket(i : integer) : integer; +var s : string; +begin + result:=0; + s:=Tablo_acc_COMUSB[i].protocole; + if length(s)>1 then if upcase(s[1])='C' then result:=1 else result:=2; +end; + +procedure connecte_socket_acc(index :integer); +var s: string; + i,erreur,NumSocket : integer; + com : TClientSocket; +begin + if (index<0) or (index>10) then + begin + affiche('Le nombre maxi de portCom acc comusb est atteint - Le port COM'+inttostr(tablo_acc_comusb[index].NumCom)+' ne sera pas ouvert',clred); + exit; + end; + + // déterminer dans l'index le numéro de client + NumSocket:=0; + for i:=1 to index do + begin + if com_socket(i)=2 then inc(NumSocket); + end; + + case numSocket of + 1 : com:=formprinc.ClientsocketCde1; + 2 : com:=formprinc.ClientSocketCde2; + end; + + s:=tablo_acc_comusb[index].protocole; + i:=pos(':',s); + com.address:=copy(s,1,i-1); + delete(s,1,i); + val(s,i,erreur); + com.port:=i; + com.open; + Affiche('Demande d''ouverture du socket '+tablo_acc_comusb[index].protocole,clYellow); +end; + // connecte un port usb interface. Si le port n'est pas ouvert, renvoie 0, sinon renvoie // le numéro de port function connecte_port_usb(port : integer) : integer; @@ -12384,7 +12627,6 @@ begin ScrollBox1.Left:=633; procetape(''); //0 - NbreTCO:=1; N_Trains:=0; NivDebug:=0; @@ -12392,7 +12634,7 @@ begin EnvAigDccpp:=0; debugtrames:=false; algo_Unisemaf:=1; - NbAcc_USBCOM:=0; + NbPeriph:=0; MaxPortCom:=30; roulage:=false; espY:=15; @@ -12420,7 +12662,7 @@ begin Decodeur[9]:='LS-DEC-NMBS';Decodeur[10]:='B-models'; OsBits:=0; - if IsWow64Process then + if IsWow64Process then begin OsBits:=64; CheminProgrammes:=GetCurrentProcessEnvVar('PROGRAMFILES(X86)'); @@ -12429,7 +12671,7 @@ begin begin OsBits:=32; CheminProgrammes:=GetCurrentProcessEnvVar('PROGRAMFILES'); - end; + end; // version d'OS pour info application.ProcessMessages; @@ -12475,12 +12717,20 @@ begin lit_config; // ouvre com commandes actionneurs, car on a lu les com dans la config - for i:=1 to NbreComCde do + for i:=1 to NbPeriph do begin //index:=tablo_acc_comUSB[i].NumAcc; // numéro d'accessoire - if connecte_port_usb_cde(i) then - Affiche('COM'+intToSTR(tablo_acc_comusb[i].numcom)+' commande actionneurs ouvert',clLime) - else Affiche('COM'+intToSTR(tablo_acc_comusb[i].numcom)+' commande actionneurs non ouvert',clOrange); + index:=com_socket(i); // comusb ou socket ? + if index=1 then + begin + if connecte_port_usb_acc(i) then + Affiche('COM'+intToSTR(tablo_acc_comusb[i].numcom)+' commande actionneurs ouvert',clLime) + else Affiche('COM'+intToSTR(tablo_acc_comusb[i].numcom)+' commande actionneurs non ouvert',clOrange); + end; + if index=2 then + begin + connecte_socket_acc(i); + end; end; Menu_tco(NbreTCO); @@ -12838,7 +13088,7 @@ begin end; procedure TFormPrinc.FormClose(Sender: TObject; var Action: TCloseAction); -var res : integer ; +var i,res : integer ; begin Ferme:=true; @@ -12849,7 +13099,9 @@ begin end; for res:=1 to 10 do begin - deconnecte_USB_cde(res); + i:=com_socket(res); + if i=1 then deconnecte_USB_periph(res); + if i=2 then deconnecte_socket_periph(res); end; ClientSocketCDM.close; ClientSocketInterface.close; @@ -13384,14 +13636,27 @@ begin end; end; -procedure deconnecte_usb_cde(index : integer); +procedure deconnecte_usb_periph(index : integer); begin if tablo_com_cde[index].PortOuvert then begin tablo_com_cde[index].PortOuvert:=false; if index=1 then Formprinc.MscommCde1.Portopen:=false; if index=2 then Formprinc.MscommCde2.Portopen:=false; - if debug>0 then Affiche('Port COM'+intToSTR(tablo_acc_comusb[index].NumCom)+' actionneurs déconnecté',clyellow); + if debug>0 then Affiche('Port COM'+intToSTR(tablo_acc_comusb[index].NumCom)+' périphérique déconnecté',clyellow); + Formprinc.StatusBar1.Panels[3].Text:=''; + end; +end; + +// déconnecte le périphérique socket +procedure deconnecte_socket_periph(index : integer); +begin + if tablo_com_cde[index].PortOuvert then + begin + tablo_com_cde[index].PortOuvert:=false; + if index=1 then Formprinc.ClientSocketCde1.Close; + if index=2 then Formprinc.ClientSocketCde1.close; + if debug>0 then Affiche('Socket '+intToSTR(tablo_acc_comusb[index].NumCom)+' périphérique déconnecté',clyellow); Formprinc.StatusBar1.Panels[3].Text:=''; end; end; @@ -16312,7 +16577,6 @@ begin v:=index_accessoire[i]; if v<>0 then affiche('adresse='+intToSTR(i)+' index = '+intToSTR(v),clLime); end; - end; procedure TFormPrinc.StatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect); @@ -16378,5 +16642,69 @@ begin end; end; +procedure TFormPrinc.ClientSocketCde1Connect(Sender: TObject; + Socket: TCustomWinSocket); +begin + Affiche('Socket '+ClientSocketCde1.Address+':'+intToSTR(ClientSocketCde1.port)+' connecté ',clYellow); + +end; + +procedure TFormPrinc.ClientSocketCde1Error(Sender: TObject; + Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;var ErrorCode: Integer); +var s : string; +begin + s:='Erreur '+IntToSTR(ErrorCode)+' socket '+ClientSocketCde1.Address+':'+intToSTR(ClientSocketCde1.port); + case ErrorCode of + 10053 : s:=s+': Connexion avortée - Timeout'; + 10054 : s:=s+': Connexion avortée par un tiers'; + 10060 : s:=s+': Timeout'; + 10061 : s:=s+': Connexion refusée'; + 10065 : s:=s+': Port non connecté'; + end; + if nivDebug=3 then + begin + afficheDebug(s,clOrange); + end; + affiche(s,clOrange); + ErrorCode:=0; +end; + +procedure TFormPrinc.ClientSocketCde1Read(Sender: TObject; Socket: TCustomWinSocket); +begin + Affiche(CLientSocketCde1.Socket.ReceiveText,clWhite); +end; + +procedure TFormPrinc.ClientSocketCde2Connect(Sender: TObject;Socket: TCustomWinSocket); +begin + Affiche('Socket '+ClientSocketCde2.Address+':'+intToSTR(ClientSocketCde2.port)+' connecté ',clYellow); +end; + +procedure TFormPrinc.ClientSocketCde2Error(Sender: TObject; + Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;var ErrorCode: Integer); +var s : string; +begin + s:='Erreur '+IntToSTR(ErrorCode)+' socket '+ClientSocketCde2.Address+':'+intToSTR(ClientSocketCde2.port); + case ErrorCode of + 10053 : s:=s+': Connexion avortée - Timeout'; + 10054 : s:=s+': Connexion avortée par un tiers'; + 10060 : s:=s+': Timeout'; + 10061 : s:=s+': Connexion refusée'; + 10065 : s:=s+': Port non connecté'; + end; + if nivDebug=3 then + begin + afficheDebug(s,clOrange); + end; + affiche(s,clOrange); + ErrorCode:=0; +end; + + +procedure TFormPrinc.ClientSocketCde2Read(Sender: TObject; + Socket: TCustomWinSocket); +begin + Affiche(CLientSocketCde2.Socket.ReceiveText,clWhite); +end; + end. diff --git a/verif_version.pas b/verif_version.pas index 930c0b7..b6e38ce 100644 --- a/verif_version.pas +++ b/verif_version.pas @@ -25,7 +25,7 @@ var verifVersion,notificationVersion : boolean; date_creation : string; -Const Version='8.2'; // sert à la comparaison de la version publiée +Const Version='8.21'; // sert à la comparaison de la version publiée SousVersion=' '; // A B C ... en cas d'absence de sous version mettre un espace function GetCurrentProcessEnvVar(const VariableName: string): string; @@ -72,15 +72,15 @@ var i : integer; t : longint; begin - Result := False; + Result:=False; t:=0; - Try Fs := TFileStream.Create(s,fmCreate); + Try Fs:=TFileStream.Create(s,fmCreate); //hSession := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); - hSession := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, nil, nil, 0); + hSession:=InternetOpen('MyApp',INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY,nil,nil,0); try if Assigned(hSession) then begin - hService := InternetOpenUrl(hSession, PChar(aUrl), nil, 0, INTERNET_FLAG_RELOAD, 0); + hService:=InternetOpenUrl(hSession,PChar(aUrl),nil,0,INTERNET_FLAG_RELOAD,0); i:=getLastError; if i<>0 then case i of diff --git a/versions.txt b/versions.txt index ff350d8..25fe3ca 100644 --- a/versions.txt +++ b/versions.txt @@ -190,12 +190,8 @@ version 8.2 : Optimisation de la rapidit Epaisseur des voies des TCOs paramétrable. Possibilité d'envoyer des commandes sur un port COM/USB sur évènement actionneur/détecteur/aiguillage. - - - - - - - +version 8.21 : Correction passage en majuscule de la commande port COM/USB. + Ajout du pilotage des passage à niveaux par COM/USB. + Ajout de l'envoi des commandes sur un socket (réseau Ethernet/wifi)