Plancia configurabile su Modbus RTU

Due programmi che condividono uModbusRTU e uGauge:

- Console/PlanciaConsole: plancia nautica descritta da file XML, con
  modalita' plancia e modalita' configurazione. Comandi, spie, selettori,
  strumenti e allarmi sonori; il bus gira in un thread suo perche' la
  finestra non si fermi mai.
- ProjectPlancia: il programma di prova piu' vecchio, usato per collaudare
  i canali.

Le plance sono in Console/*.xml, la documentazione in Console/LEGGIMI.md.
Esclusi dal versionamento i compilati (.exe, .dcu), i file dell'IDE e un
audio da 17 MB.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
f.bittiandClaude Opus 5 committed 2026-09-22 16:56:34 +02:00
commit 4a01a2ec88
69 files changed
+11658

No files matched your search

+972
View File
@@ -0,0 +1,972 @@
object ConsoleForm: TConsoleForm
Left = 0
Top = 0
Caption = 'Plancia'
ClientHeight = 760
ClientWidth = 1200
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Segoe UI'
Font.Style = []
Position = poScreenCenter
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
OnDestroy = FormDestroy
OnKeyDown = FormKeyDown
OnKeyPress = FormKeyPress
TextHeight = 15
object pnlToolbar: TPanel
Left = 0
Top = 0
Width = 1200
Height = 44
Align = alTop
BevelOuter = bvNone
TabOrder = 0
object lblZoom: TLabel
Left = 702
Top = 15
Width = 30
Height = 15
Caption = 'Zoom'
end
object lblFile: TLabel
Left = 852
Top = 15
Width = 3
Height = 15
end
object btnNuovo: TButton
Left = 10
Top = 8
Width = 80
Height = 28
Caption = 'Nuovo'
TabOrder = 0
OnClick = btnNuovoClick
end
object btnApri: TButton
Left = 96
Top = 8
Width = 80
Height = 28
Caption = 'Apri...'
TabOrder = 1
OnClick = btnApriClick
end
object btnSalva: TButton
Left = 182
Top = 8
Width = 80
Height = 28
Caption = 'Salva'
TabOrder = 2
OnClick = btnSalvaClick
end
object btnSalvaCome: TButton
Left = 268
Top = 8
Width = 110
Height = 28
Caption = 'Salva con nome...'
TabOrder = 3
OnClick = btnSalvaComeClick
end
object btnAnnulla: TButton
Left = 390
Top = 8
Width = 80
Height = 28
Hint = 'Annulla l'#39'ultima modifica (Ctrl+Z)'
Caption = 'Annulla'
Enabled = False
ParentShowHint = False
ShowHint = True
TabOrder = 6
OnClick = btnAnnullaClick
end
object btnRipeti: TButton
Left = 476
Top = 8
Width = 80
Height = 28
Hint = 'Ripete la modifica annullata (Ctrl+Y)'
Caption = 'Ripeti'
Enabled = False
ParentShowHint = False
ShowHint = True
TabOrder = 7
OnClick = btnRipetiClick
end
object chkGriglia: TCheckBox
Left = 568
Top = 14
Width = 120
Height = 17
Caption = 'Griglia 10 px'
Checked = True
State = cbChecked
TabOrder = 4
OnClick = chkGrigliaClick
end
object cboZoom: TComboBox
Left = 742
Top = 11
Width = 84
Height = 23
Style = csDropDownList
TabOrder = 5
OnChange = ZoomChanged
end
end
object pnlStatus: TPanel
Left = 0
Top = 730
Width = 1200
Height = 30
Align = alBottom
BevelOuter = bvNone
TabOrder = 1
object shpLed: TShape
Left = 12
Top = 8
Width = 14
Height = 14
Brush.Color = clGray
Shape = stCircle
end
object lblStatus: TLabel
Left = 36
Top = 8
Width = 3
Height = 15
end
object btnModo: TButton
Left = 1040
Top = 3
Width = 150
Height = 24
Anchors = [akTop, akRight]
Caption = 'Vai in plancia'
TabOrder = 0
OnClick = btnModoClick
end
object btnNotte: TButton
Left = 934
Top = 3
Width = 100
Height = 24
Anchors = [akTop, akRight]
Caption = 'Notte'
TabOrder = 1
OnClick = btnNotteClick
end
object btnAllarmi: TButton
Left = 470
Top = 3
Width = 228
Height = 24
Hint = 'Rimette in funzione gli allarmi sonori zittiti'
Anchors = [akTop, akRight]
Caption = 'Allarmi zittiti'
ParentShowHint = False
ShowHint = True
TabOrder = 3
TabStop = False
Visible = False
OnClick = btnAllarmiClick
end
object cboPlancia: TComboBox
Left = 704
Top = 3
Width = 224
Height = 23
Hint = 'Passa a un'#39'altra plancia della stessa cartella'
Style = csDropDownList
Anchors = [akTop, akRight]
ParentShowHint = False
ShowHint = True
TabOrder = 2
TabStop = False
Visible = False
OnSelect = cboPlanciaSelect
end
end
object pnlPalette: TPanel
Left = 0
Top = 44
Width = 200
Height = 686
Align = alLeft
BevelOuter = bvNone
TabOrder = 2
object lblPaletteTitle: TLabel
Left = 10
Top = 6
Width = 44
Height = 15
Caption = 'Palette'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Segoe UI'
Font.Style = [fsBold]
ParentFont = False
end
object gbImmagini: TGroupBox
Left = 6
Top = 306
Width = 188
Height = 160
Caption = 'Libreria immagini'
TabOrder = 0
object lstImmagini: TListBox
Left = 10
Top = 20
Width = 168
Height = 100
ItemHeight = 15
TabOrder = 0
end
object btnImgAdd: TButton
Left = 10
Top = 126
Width = 80
Height = 26
Caption = 'Aggiungi...'
TabOrder = 1
OnClick = btnImgAddClick
end
object btnImgDel: TButton
Left = 96
Top = 126
Width = 82
Height = 26
Caption = 'Rimuovi'
TabOrder = 2
OnClick = btnImgDelClick
end
end
object gbGenerale: TGroupBox
Left = 0
Top = 486
Width = 200
Height = 200
Align = alBottom
Caption = 'Generale'
TabOrder = 1
object lblPort: TLabel
Left = 10
Top = 18
Width = 55
Height = 15
Caption = 'Porta COM'
end
object lblBaud: TLabel
Left = 105
Top = 18
Width = 27
Height = 15
Caption = 'Baud'
end
object lblPoll: TLabel
Left = 10
Top = 62
Width = 65
Height = 15
Caption = 'Polling (ms)'
end
object lblPanelSize: TLabel
Left = 105
Top = 62
Width = 88
Height = 15
Caption = 'Pannello L x A'
end
object lblTitolo: TLabel
Left = 10
Top = 106
Width = 76
Height = 15
Caption = 'Titolo plancia'
end
object lblSfondo: TLabel
Left = 10
Top = 150
Width = 105
Height = 15
Caption = 'Immagine di sfondo'
end
object cboPort: TComboBox
Left = 10
Top = 36
Width = 88
Height = 23
TabOrder = 0
Text = 'COM1'
OnChange = GeneralChanged
end
object cboBaud: TComboBox
Left = 105
Top = 36
Width = 85
Height = 23
TabOrder = 1
Text = '9600'
OnChange = GeneralChanged
end
object edtPoll: TEdit
Left = 10
Top = 80
Width = 60
Height = 23
TabOrder = 2
Text = '500'
OnChange = GeneralChanged
end
object edtPanelW: TEdit
Left = 105
Top = 80
Width = 40
Height = 23
TabOrder = 3
Text = '1000'
OnChange = GeneralChanged
end
object edtPanelH: TEdit
Left = 150
Top = 80
Width = 40
Height = 23
TabOrder = 4
Text = '640'
OnChange = GeneralChanged
end
object edtTitolo: TEdit
Left = 10
Top = 124
Width = 180
Height = 23
TabOrder = 5
Text = 'Plancia'
OnChange = GeneralChanged
end
object cboSfondo: TComboBox
Left = 10
Top = 168
Width = 180
Height = 23
Style = csDropDownList
TabOrder = 6
OnChange = BackgroundChanged
end
end
end
object pnlProps: TPanel
Left = 956
Top = 44
Width = 244
Height = 686
Align = alRight
BevelOuter = bvNone
TabOrder = 3
object lblPropTitle: TLabel
Left = 12
Top = 10
Width = 158
Height = 15
Caption = 'Nessun elemento selezionato'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Segoe UI'
Font.Style = [fsBold]
ParentFont = False
end
object lblTipo: TLabel
Left = 12
Top = 32
Width = 25
Height = 15
Caption = 'Tipo'
end
object cboTipo: TComboBox
Left = 12
Top = 50
Width = 210
Height = 23
Style = csDropDownList
TabOrder = 16
OnChange = KindChanged
end
object lblCap: TLabel
Left = 12
Top = 82
Width = 48
Height = 15
Caption = 'Etichetta'
end
object lblFontSize: TLabel
Left = 180
Top = 82
Width = 42
Height = 15
Caption = 'Testo px'
end
object lblSlave: TLabel
Left = 12
Top = 130
Width = 30
Height = 15
Caption = 'Slave'
end
object lblCanale: TLabel
Left = 122
Top = 130
Width = 39
Height = 15
Caption = 'Canale'
end
object lblPos: TLabel
Left = 12
Top = 178
Width = 78
Height = 15
Caption = 'Posizione X / Y'
end
object lblSize: TLabel
Left = 12
Top = 226
Width = 105
Height = 15
Caption = 'Larghezza / altezza'
end
object edtCaption: TEdit
Left = 12
Top = 100
Width = 162
Height = 23
TabOrder = 0
OnChange = PropChanged
end
object edtFontSize: TEdit
Left = 180
Top = 100
Width = 42
Height = 23
TabOrder = 10
OnChange = PropChanged
end
object edtSlave: TEdit
Left = 12
Top = 148
Width = 96
Height = 23
TabOrder = 1
OnChange = PropChanged
end
object edtCanale: TEdit
Left = 122
Top = 148
Width = 100
Height = 23
TabOrder = 2
OnChange = PropChanged
end
object edtLeft: TEdit
Left = 12
Top = 196
Width = 96
Height = 23
TabOrder = 3
OnChange = PropChanged
end
object edtTop: TEdit
Left = 122
Top = 196
Width = 100
Height = 23
TabOrder = 4
OnChange = PropChanged
end
object edtWidth: TEdit
Left = 12
Top = 244
Width = 96
Height = 23
TabOrder = 5
OnChange = PropChanged
end
object edtHeight: TEdit
Left = 122
Top = 244
Width = 100
Height = 23
TabOrder = 6
OnChange = PropChanged
end
object gbImgElem: TGroupBox
Left = 8
Top = 276
Width = 228
Height = 212
Caption = 'Aspetto'
TabOrder = 7
object lblShape: TLabel
Left = 12
Top = 20
Width = 35
Height = 15
Caption = 'Forma'
end
object lblCapPos: TLabel
Left = 117
Top = 20
Width = 51
Height = 15
Caption = 'Etichetta'
end
object lblOnColor: TLabel
Left = 12
Top = 66
Width = 148
Height = 15
Caption = 'Colore acceso / a riposo'
end
object lblImgOff: TLabel
Left = 12
Top = 112
Width = 178
Height = 15
Caption = 'Immagine a riposo (vuoto = disegno)'
end
object lblImgOn: TLabel
Left = 12
Top = 158
Width = 90
Height = 15
Caption = 'Immagine attiva'
end
object cboShape: TComboBox
Left = 12
Top = 38
Width = 95
Height = 23
Style = csDropDownList
TabOrder = 0
OnChange = PropChanged
end
object cboCapPos: TComboBox
Left = 117
Top = 38
Width = 95
Height = 23
Style = csDropDownList
TabOrder = 1
OnChange = PropChanged
end
object edtOnColor: TEdit
Left = 12
Top = 84
Width = 95
Height = 23
TabOrder = 2
OnChange = PropChanged
end
object edtOffColor: TEdit
Left = 117
Top = 84
Width = 95
Height = 23
TabOrder = 5
OnChange = PropChanged
end
object cboImgOff: TComboBox
Left = 12
Top = 130
Width = 200
Height = 23
Style = csDropDownList
TabOrder = 3
OnChange = PropChanged
end
object cboImgOn: TComboBox
Left = 12
Top = 176
Width = 200
Height = 23
Style = csDropDownList
TabOrder = 4
OnChange = PropChanged
end
end
object gbGauge: TGroupBox
Left = 8
Top = 276
Width = 228
Height = 272
Caption = 'Scala del gauge'
TabOrder = 8
object lblRaw: TLabel
Left = 12
Top = 20
Width = 133
Height = 15
Caption = 'Registro: minimo / massimo'
end
object lblEng: TLabel
Left = 12
Top = 68
Width = 128
Height = 15
Caption = 'Valore reale: min / max'
end
object lblUnits: TLabel
Left = 12
Top = 116
Width = 80
Height = 15
Caption = 'Unit'#224' di misura'
end
object lblWarn: TLabel
Left = 12
Top = 164
Width = 116
Height = 15
Caption = 'Allarme sotto / sopra'
end
object edtRawMin: TEdit
Left = 12
Top = 38
Width = 95
Height = 23
TabOrder = 0
OnChange = PropChanged
end
object edtRawMax: TEdit
Left = 117
Top = 38
Width = 95
Height = 23
TabOrder = 1
OnChange = PropChanged
end
object edtEngMin: TEdit
Left = 12
Top = 86
Width = 95
Height = 23
TabOrder = 2
OnChange = PropChanged
end
object edtEngMax: TEdit
Left = 117
Top = 86
Width = 95
Height = 23
TabOrder = 3
OnChange = PropChanged
end
object edtUnits: TEdit
Left = 12
Top = 134
Width = 95
Height = 23
TabOrder = 4
OnChange = PropChanged
end
object edtWarnLo: TEdit
Left = 12
Top = 182
Width = 95
Height = 23
TabOrder = 5
OnChange = PropChanged
end
object edtWarnHi: TEdit
Left = 117
Top = 182
Width = 95
Height = 23
TabOrder = 6
OnChange = PropChanged
end
object lblDigits: TLabel
Left = 12
Top = 212
Width = 34
Height = 15
Caption = 'Cifre'
end
object lblDecimals: TLabel
Left = 117
Top = 212
Width = 51
Height = 15
Caption = 'Decimali'
end
object edtDigits: TEdit
Left = 12
Top = 230
Width = 95
Height = 23
TabOrder = 7
OnChange = PropChanged
end
object edtDecimals: TEdit
Left = 117
Top = 230
Width = 95
Height = 23
TabOrder = 8
OnChange = PropChanged
end
end
object gbTesto: TGroupBox
Left = 8
Top = 276
Width = 228
Height = 170
Caption = 'Testo'
TabOrder = 12
object lblFontName: TLabel
Left = 12
Top = 20
Width = 148
Height = 15
Caption = 'Font (vuoto = quello del pannello)'
end
object lblSpacing: TLabel
Left = 12
Top = 66
Width = 128
Height = 15
Caption = 'Spaziatura fra le lettere'
end
object lblFrame: TLabel
Left = 12
Top = 112
Width = 128
Height = 15
Caption = 'Cornice e spessore'
end
object edtFontName: TEdit
Left = 12
Top = 38
Width = 200
Height = 23
TabOrder = 0
OnChange = PropChanged
end
object edtSpacing: TEdit
Left = 12
Top = 84
Width = 95
Height = 23
TabOrder = 1
OnChange = PropChanged
end
object cboFrame: TComboBox
Left = 12
Top = 130
Width = 140
Height = 23
Style = csDropDownList
TabOrder = 2
OnChange = PropChanged
end
object edtFrameWidth: TEdit
Left = 160
Top = 130
Width = 52
Height = 23
TabOrder = 3
OnChange = PropChanged
end
end
object gbRotary: TGroupBox
Left = 8
Top = 276
Width = 228
Height = 205
Caption = 'Selettore'
TabOrder = 11
object lblPositions: TLabel
Left = 12
Top = 20
Width = 55
Height = 15
Caption = 'Posizioni'
end
object lblLegend: TLabel
Left = 12
Top = 68
Width = 145
Height = 15
Caption = 'Legenda sopra la manopola'
end
object cboPositions: TComboBox
Left = 12
Top = 38
Width = 95
Height = 23
Style = csDropDownList
TabOrder = 0
OnChange = PropChanged
end
object edtLegend: TEdit
Left = 12
Top = 86
Width = 200
Height = 23
TabOrder = 1
OnChange = PropChanged
end
object lblCanale2: TLabel
Left = 12
Top = 116
Width = 200
Height = 15
Caption = 'Canale lato destro'
end
object edtCanale2: TEdit
Left = 12
Top = 134
Width = 60
Height = 23
Hint = 'Bobina del lato destro; vuoto = canale + 1'
ParentShowHint = False
ShowHint = True
TabOrder = 2
OnChange = PropChanged
end
object chkMolla: TCheckBox
Left = 12
Top = 166
Width = 205
Height = 32
Hint =
'Tiene la posizione finch'#233' lo tieni premuto e torna al centro al ' +
'rilascio, come il comando di avviamento'
Caption = 'Ritorno a molla (torna al centro)'
ParentShowHint = False
ShowHint = True
TabOrder = 3
WordWrap = True
OnClick = PropChanged
end
end
object gbSuono: TGroupBox
Left = 8
Top = 492
Width = 228
Height = 74
Caption = 'Allarme sonoro'
TabOrder = 12
object chkAllarme: TCheckBox
Left = 12
Top = 18
Width = 205
Height = 17
Hint = 'Suona quando la spia si accende'
Caption = 'Suona quando si accende'
ParentShowHint = False
ShowHint = True
TabOrder = 0
OnClick = PropChanged
end
object cboSuono: TComboBox
Left = 12
Top = 40
Width = 134
Height = 23
Hint = 'File nella cartella "suoni" accanto alla plancia'
Style = csDropDownList
ParentShowHint = False
ShowHint = True
TabOrder = 1
OnChange = PropChanged
end
object btnSuoniRileggi: TButton
Left = 152
Top = 40
Width = 66
Height = 23
Hint = 'Rilegge la cartella dei suoni'
Caption = 'Aggiorna'
ParentShowHint = False
ShowHint = True
TabOrder = 2
OnClick = btnSuoniRileggiClick
end
end
object btnElimina: TButton
Left = 12
Top = 566
Width = 210
Height = 30
Caption = 'Elimina elemento'
TabOrder = 9
OnClick = btnEliminaClick
end
end
object scrCanvas: TScrollBox
Left = 200
Top = 44
Width = 756
Height = 686
Align = alClient
BevelInner = bvNone
BevelOuter = bvNone
BorderStyle = bsNone
Color = clAppWorkSpace
ParentColor = False
TabOrder = 4
object pnlCanvas: TPanel
Left = 0
Top = 0
Width = 1000
Height = 640
BevelOuter = bvNone
Color = clBtnFace
ParentBackground = False
TabOrder = 0
OnDragDrop = CanvasDragDrop
OnDragOver = CanvasDragOver
OnMouseDown = CanvasMouseDown
end
end
object tmrPoll: TTimer
Enabled = False
Interval = 500
OnTimer = tmrPollTimer
Left = 640
Top = 96
end
object dlgApri: TOpenDialog
DefaultExt = 'xml'
Filter =
'Configurazione plancia (*.xml)|*.xml|Tutti i file (*.*)|*.*'
Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing]
Title = 'Apri configurazione'
Left = 704
Top = 96
end
object dlgSalva: TSaveDialog
DefaultExt = 'xml'
Filter =
'Configurazione plancia (*.xml)|*.xml|Tutti i file (*.*)|*.*'
Options = [ofOverwritePrompt, ofHideReadOnly, ofPathMustExist, ofEnableSizing]
Title = 'Salva configurazione'
Left = 768
Top = 96
end
object dlgImmagine: TOpenPictureDialog
Options = [ofHideReadOnly, ofAllowMultiSelect, ofPathMustExist, ofFileMustExist, ofEnableSizing]
Title = 'Aggiungi immagini alla libreria'
Left = 832
Top = 96
end
end