Indice del manuale
Manuale tecnico LinkMachine¶
DOCUMENTAZIONE TECNICA · EDIZIONE SETTEMBRE 2026
Un sistema, quattro componenti¶
Configurare l'ambiente, collegare le macchine, acquisire i dati e consultare la produzione. Il manuale segue questi passaggi e distingue il compito di ogni componente.
-
01 · LinkMachine Manager
Configurazione e supervisione locale: database, processi, istanze Agent, attivazioni e accesso a EasyMES.
-
02 · LinkMachine Agent
Collegamento tra pannello industriale e database: Modbus TCP, ordini, contatori, eventi e mapping dei registri.
-
03 · LinkMachine Platform
Dashboard web, configurazione Platform Setting ed engine di acquisizione per stati macchina e storico delle produzioni.
-
04 · LinkMachine Panel
Sezione predisposta. Il manuale del pannello sarà completato con le specifiche hardware, firmware e operative.
Da dove iniziare¶
| Esigenza | Percorso |
|---|---|
| Comprendere componenti e flusso dati | Architettura del sistema |
| Installare e creare le prime istanze | Installazione Manager, Istanze |
| Collegare un pannello e acquisire registri | Installazione Agent, Mapping |
| Configurare il monitoraggio MES | Installazione Platform, Platform Setting, Engine |
| Integrare database e sistemi esterni | Contratti tra componenti |
| Verificare una nuova installazione | Collaudo |
La documentazione è ricavata dalle memorie dei progetti SETTING, BASE e Platform, consolidate rispettivamente al 25, 28 e 23 settembre 2026. Fonti e criteri di aggiornamento descrive il perimetro di questa edizione. I comportamenti riscontrati nel sorgente e quelli collaudati su un impianto reale sono distinti nei capitoli pertinenti.
Usare la ricerca per trovare parametri, tabelle e funzioni. La voce Stampa / PDF riunisce il manuale e consente di salvarlo in PDF dalla stampa del browser.
Panoramica del sistema
Architettura del sistema¶
Componenti e responsabilità¶
| Componente | Progetto di origine | Tecnologia | Responsabilità |
|---|---|---|---|
| LinkMachine Manager | SETTING | VB.NET, Windows Forms, .NET 8, x86 | Configura e supervisiona processi e istanze; gestisce profili, attivazioni e runtime EasyMES |
| LinkMachine Agent | BASE | VB.NET, Windows Forms, .NET 8, x86 | Scambia dati con il pannello via Modbus TCP e legge/scrive sui database di produzione |
| LinkMachine Platform — Web | Platform | PHP e JavaScript | Presenta dashboard, dettaglio macchina, eventi e storico produzioni |
| Platform Setting | Platform, cartella setting/ |
PHP e hook custom | Configura macchine, sorgenti, mapping, stati, pause e causali |
| LinkMachine Platform — Engine | Platform, cartella engine/ |
C#, Worker Service .NET 10 | Acquisisce righe sorgente e aggiorna stato, eventi e snapshot nel database MES |
| LinkMachine Panel | Specifiche da acquisire | Da documentare | Interfaccia e funzionamento del pannello operatore |
Il diagramma sintetizza le responsabilità documentate. Il collegamento tra dati Agent e sorgenti Platform richiede un contratto dati configurato e collaudato: non deriva automaticamente dalla presenza dei programmi sullo stesso computer.
I tre livelli di persistenza¶
- Configurazione locale. Manager usa
config.mdbe gli INI delle istanze. Agent usaconfig.inie, per il mapping,mapping.ini. - Dati operativi Agent/EasyMES. Il Manager identifica MySQL EasyMES come archivio operativo LinkMachine. Agent usa due connessioni logiche, DB1 LinkMachine e DB2 Gestionale/produzione, secondo la propria configurazione.
- Database MES Platform. Contiene
machines,machine_status,machine_events,machine_productionse le tabelle di configurazione dell'engine.
EasyMES, distribuito con il Manager nella cartella linkweb, e la nuova Platform sono applicazioni distinte. Le rispettive tabelle macchine e machines, per esempio, non hanno un'equivalenza automatica. L'engine legge le sorgenti configurate e costruisce il proprio modello MES.
Avvio e ciclo di vita¶
Manager è una singola applicazione desktop: una seconda invocazione riporta in primo piano la finestra esistente. Agent può invece eseguire più copie, ciascuna nella propria cartella. Platform separa server web e Worker: la dashboard può essere raggiungibile anche quando l'engine è fermo.
La chiusura completa del Manager può arrestare i processi LinkMachine gestiti e i runtime PHP/MySQL avviati per EasyMES. Occorre distinguere l'uscita dalla riduzione nell'area di notifica.
Contratti tra componenti¶
Dal pannello alla Platform¶
Il percorso di integrazione da verificare per ogni installazione è:
Pannello → Agent → database sorgente → Engine → database MES → Dashboard
Manager configura e supervisiona le istanze Agent. Il mapping Agent associa registri a colonne di una tabella DB1; il mapping Platform associa colonne di una sorgente ai dati del MES. Sono due configurazioni successive con funzioni diverse.
| Confine | Contratto documentato | Verifica necessaria |
|---|---|---|
| Manager → Agent | Cartella istanza, eseguibile e config.ini; avvio e supervisione dei processi |
Percorso effettivo, identità dell'istanza, parametri e autostart |
| Agent ↔ pannello | Modbus TCP, porta 502, 118 holding register letti da indirizzo 101 | Firmware, indirizzamento e significato di ogni registro |
| Agent → DB1 | Tabella/filtro/campi scelti in mapping.ini; update dei valori cambiati |
Riga destinazione, conversioni e cardinalità del filtro |
| Sorgente → Engine | ID, codice macchina, stato, timestamp e flag Elaborato |
Schema, mapping stati, tabella fisica di update e privilegi |
| Engine → MES | Transazione per stato, eventi, snapshot e campioni; marcatura sorgente dopo il commit | Idempotenza e ripresa dopo errori |
| MES → Web | API JSON e tabelle MES | Schema installato, fuso orario e accessi |
Tabella corrente e storico a variazione¶
La memoria Platform descrive un'evoluzione concordata:
dati_macchina → trigger su variazione → dati_macchina_log → Engine
Il trigger e la migrazione della sorgente sono ancora da implementare e collaudare. La tabella corrente conserva lo stato attuale; il log dovrà ricevere una fotografia completa per ogni aggiornamento rilevante, con id, cod_macchina, cod_stato, created_at, elaborato=0 e tutti i campi richiesti dal mapping. È prevista una riga iniziale per ogni macchina.
Non sostituire il mapping sorgente esistente con quello della tabella log prima che tabella, trigger e popolamento iniziale siano disponibili. La sorgente attualmente descritta nelle memorie usa uno storico configurato separatamente; i nomi vanno verificati nell'installazione.
Compatibilità dei database¶
Il supporto dei provider cambia tra componenti:
- Manager: Access, MySQL, SQL Server e ODBC nei profili; le personalizzazioni SQL correnti usano EasyMES/MySQL.
- Agent: MySQL/MariaDB, Access e SQL Server; un solo provider globale per DB1 e DB2.
- Engine v0.1.0: sorgenti MySQL/MariaDB di tipo
DATI_MACCHINA. ERP/ODBC non sono ancora implementati nel Worker.
I test schema ODBC dell'area Platform Setting non attestano il supporto ODBC dell'engine.
Glossario¶
| Termine | Significato nel sistema |
|---|---|
| Manager / SETTING | Applicazione desktop di configurazione e supervisione |
| Agent / BASE | Applicazione di comunicazione tra pannello e database |
| Platform | Dashboard web, amministrazione Platform Setting ed engine MES |
| Panel | Pannello operatore industriale; manuale specifico da completare |
EasyMES / linkweb |
Portale PHP/MySQL distribuito con il Manager |
| Istanza | Cartella e configurazione di una copia Agent o di un processo ausiliario gestito |
| DB1 | Connessione logica Agent al database LinkMachine |
| DB2 | Connessione logica Agent al database Gestionale/produzione |
| MES | Modello centrale usato dalla Platform per monitoraggio e storico |
| Mapping Agent | Associazione tra offset Modbus e campo della tabella DB1 |
| Mapping Platform | Associazione tra macchina MES, sorgente e nomi delle colonne da acquisire |
| Valore sorgente | Contenuto effettivo di una colonna, per esempio cod_stato=1 |
| Nome campo sorgente | Nome della colonna configurato nella regola; non il suo valore |
| Stato produttivo | Fase della lavorazione: NO_JOB, LOADED, RUNNING, PAUSED, COMPLETED, FAULT, UNKNOWN |
| Stato dashboard | Stato tecnico mostrato: RUN, STOP, PAUSE, OFFLINE |
Elaborato |
Flag sorgente: 0 da acquisire, 1 acquisito dopo il commit MES |
| Snap Date | Giorno della fotografia produttiva, calcolato nel fuso configurato |
| STO | Storico a variazione; una riga rappresenta una variazione, non un heartbeat periodico |
| Heartbeat / polling riuscito | Evidenza di raggiungibilità della sorgente; non necessariamente attività del singolo PLC |
| HWID | Identificativo hardware; licenza .lic e attivazioni possono usare calcoli distinti |
| AXP | Progetto sorgente Platform Setting da cui generare l'applicazione PHP |
| Hook Platform Setting | Punto di estensione per logica custom mantenuta attraverso le rigenerazioni |
Nel manuale, implementato indica che la memoria descrive una funzione presente nel codice. Collaudato richiede una verifica esplicita del comportamento. Previsto indica un'evoluzione che non è ancora disponibile.
Stato e compatibilità di questa edizione¶
Questa edizione descrive le memorie disponibili a settembre 2026. Non è una verifica in tempo reale delle installazioni cliente o dei pacchetti online.
| Componente | Riferimento documentale | Stato e limiti |
|---|---|---|
| Manager | Memoria del 25/09/2026; release 1.26.8 pubblicata e confrontata negli artefatti secondo la memoria | Configurazione, supervisione, query, VNC e aggiornamento silent; collaudo interattivo completo ancora necessario |
| Agent | Memoria del 28/09/2026; progetto 1.26.2, assembly ancora 1.26.1 | Mapping in mapping.ini e scheda Database presenti nel workspace; publish e deploy delle modifiche non eseguiti nella verifica descritta |
| Platform | Memoria del 23/09/2026; Engine 0.1.0 | Dashboard e Worker implementati; 38 test engine documentati e un precedente ciclo live controllato |
| Panel | Nessuna memoria specifica fornita | Sezione da completare |
Limiti che incidono sull'installazione¶
- Manager richiede componenti esterni al solo sorgente:
config.mdb, runtime e portale EasyMES. L'importazione AXP non migra integralmente un database esistente. - Agent non include uno schema database certificato. Il contratto è ricostruito dalle query e va verificato sulle viste/tabelle di destinazione.
- Il mapping Agent è stato verificato offline; collegamento a database e pannello reali resta da collaudare.
- L'HWID delle licenze Agent
.licpresenta un problema di stabilità tra processi .NET 8. L'HWID delle attivazioni è un meccanismo distinto. - Le pagine Agent S7, OPC UA e Query personalizzate non costituiscono integrazioni complete.
- Le migrazioni Platform per Operatore AUX/Note e dati pannello/job non risultano applicate al database operativo nelle memorie. Le API nascondono i campi mancanti; il nuovo engine deve essere validato contro lo schema aggiornato.
- Engine 0.1.0 non implementa ERP/ODBC, calcolo completo dei fermi dinamici, esclusione pause/setting, record orari o retention raw.
- Il timeout
OFFLINEverifica la raggiungibilità della sorgente condivisa; manca un heartbeat distinto per macchina.
Per avviare l'esercizio usare il collaudo per componenti e le verifiche specifiche indicate nei manuali.
Collaudo di una installazione¶
Il collaudo seguente è una procedura operativa proposta a partire dai flussi documentati. Va eseguito su dati e apparati predisposti per la prova; questa edizione non attesta che sia già stato svolto sul proprio impianto.
1. Configurazione e avvio¶
- Annotare versioni effettive, cartelle, nomi degli eseguibili e schemi database.
- Salvare una copia di
config.mdb,config.ini,mapping.inie delle configurazioni Platform. - Aprire Manager e verificare profilo, connessioni, attivazioni e cartelle istanza.
- Avviare una sola istanza Agent con autostart temporaneamente disabilitato, per osservare eventuali errori senza un ciclo continuo di riavvio.
- Verificare separatamente runtime web ed engine.
2. Comunicazione e persistenza¶
| Prova | Esito da osservare |
|---|---|
| Lettura Modbus | I 118 valori si aggiornano e corrispondono alla mappa firmware |
| Mapping Agent | Un valore cambiato aggiorna la colonna prevista; il filtro seleziona la riga prevista |
| Valore invariato | Nessun update superfluo dal mapping |
| Database non raggiungibile | Diagnostica coerente; distinguere errori mapping dalla terminazione delle routine legacy |
| Ordine e quantità | Gli identificativi della vista corrispondono alla riga aggiornata in programmazione_link |
Engine --validate |
Schema e mapping validi, senza consumo di righe sorgente |
| Singolo ciclo engine | Stato/eventi/snapshot scritti; flag sorgente a 1 solo dopo commit MES |
| Stato non mappato | Errore diagnostico e riga lasciata a 0 |
3. Dashboard e continuità¶
Provare RUNNING, PAUSED e chiusura produzione. Controllare RUN, PAUSE, STOP, timeline e Snap Date. Un polling sorgente riuscito senza nuove righe deve conservare lo stato precedente; una sorgente non raggiungibile deve portare a OFFLINE dopo il timeout configurato.
Verificare che Ultimo dato rappresenti l'evento sorgente e che Ultimo aggiornamento della dashboard rappresenti una run con righe lette. Controllare causali fermo, note manuali e campi opzionali mappati.
4. Funzioni dell'ambiente¶
Collaudare stampante/PDF, etichette, VNC, autorizzazioni Platform Setting, avvio Windows, autostart e chiusura Manager. Per aggiornamenti software conservare le configurazioni specifiche e provare il ritorno alla versione precedente.
Registrare versione, esito, dati di prova e anomalie. Un test riuscito della build o della sola interfaccia non sostituisce la verifica del flusso completo.
Fonti e aggiornamento del manuale¶
Origine dei contenuti¶
| Sezione | Memoria usata | Consolidamento funzionale |
|---|---|---|
| Manager | linkmachine_setting/.project-memory |
25 settembre 2026 |
| Agent | Linkmachine_base/.project-memory |
28 settembre 2026 |
| Platform | linkmachine_platform/.project-memory |
23 settembre 2026 |
| Panel | In attesa di specifiche e memoria dedicate | Da completare |
I capitoli funzionali derivano da DOCUMENTATION.md e CURRENT_STATE.md; architettura, database, integrazioni e distribuzione usano anche ARCHITECTURE.md, DATABASE.md, API.md e DEPLOYMENT.md. KNOWN_ISSUES.md precisa i limiti. Decisioni, storia, attività aperte e roadmap servono a distinguere comportamento corrente ed evoluzioni previste.
Il manuale riorganizza questi contenuti per utilizzo tecnico. Le memorie non vengono pubblicate integralmente: cronologia di sviluppo, percorsi interni, configurazioni cliente e segreti non servono al manuale pubblico.
Attendibilità¶
- Un comportamento descritto come verificato nella memoria è riportato entro il suo perimetro di verifica.
- Una funzione presente nel workspace non viene presentata automaticamente come distribuita online.
- Una proposta o decisione ancora da implementare è indicata come prevista.
- Schema e parametri di impianto devono essere confermati sulla specifica installazione.
Aggiornamenti successivi¶
Il progetto della documentazione conserva una mappa tra capitoli e file di memoria e un manifesto con le impronte delle fonti. Prima di una nuova build il controllo confronta le memorie attuali con quelle usate per questa edizione e segnala le variazioni.
Quando cambiano le fonti, i capitoli interessati devono essere riletti e aggiornati semanticamente; il controllo delle impronte non scrive da solo nuovi contenuti. Una nuova sezione Panel potrà seguire lo stesso procedimento appena sarà disponibile il suo materiale.
La documentazione precedente è conservata in un archivio locale di sorgenti e sito pubblicato. La nuova navigazione segue i quattro componenti e sostituisce la precedente suddivisione Core/Panel.
LinkMachine Manager
LinkMachine Manager¶
LinkMachine Manager, originato dal progetto SETTING, configura e supervisiona l'ambiente locale LinkMachine. È un'applicazione Windows Forms .NET 8 x86 con archivio di configurazione Microsoft Access.
Funzioni principali¶
- Gestione dei processi: avvio, pausa, ripresa, arresto e avvio automatico.
- Creazione e configurazione di istanze Agent numerate o riconoscimento di cartelle personalizzate.
- Profili DEMO/OPERATIVO e connessioni database.
- Parametri generali, azienda, attivazioni e personalizzazioni SQL.
- Avvio del portale EasyMES con runtime PHP/MySQL locali e visualizzazione WebView2.
- Accesso al pannello tramite UltraVNC Viewer esterno.
- Aggiornamenti, download e guida introduttiva.
Aree dell'interfaccia¶
| Area | Uso |
|---|---|
| Processi | Vista unificata dei processi configurati, delle cartelle istanza e dei processi Windows rilevati |
| Database | Connessioni, profili e test |
| Parametri | Supervisione, azienda, personalizzazioni, attivazioni e impostazioni avanzate |
| EasyMES | Avvio e consultazione del portale locale, URL LAN e QR |
| Schede istanza | Configurazione, stato, avvio e log della singola copia |
Il desktop non presenta un sistema locale di ruoli utente. L'accesso web EasyMES usa invece gestione utenti e gruppi.
Percorso di utilizzo¶
Seguire Installazione, configurare parametri e profili, creare le istanze, quindi verificare la supervisione dei processi. I dettagli di persistenza e query sono in Database; EasyMES e VNC sono in Integrazioni.
Il riferimento di questa edizione è la memoria Manager consolidata al 25/09/2026, che documenta il rilascio 1.26.8. Le verifiche sull'impianto restano indicate nei singoli capitoli.
Installazione del Manager¶
Prerequisiti¶
| Requisito | Motivo |
|---|---|
| Windows compatibile con applicazioni x86 | Il progetto è compilato per Windows x86 |
| .NET 8 Desktop Runtime x86 | La pubblicazione è framework-dependent |
| Provider Jet/ACE compatibile x86 | Apertura di config.mdb e funzioni Access |
| Microsoft Edge WebView2 Runtime | Visualizzazione incorporata di EasyMES |
| Cartella applicativa scrivibile | Configurazioni, log, istanze e aggiornamenti |
| Accesso agli endpoint HTTPS del prodotto | Attivazioni, aggiornamenti e download |
Runtime PHP, MySQL 5.7 e portale linkweb |
Uso di EasyMES nella distribuzione locale documentata |
| UltraVNC Viewer compatibile, se richiesto | Apertura remota del pannello dal Manager |
Il solo eseguibile compilato non rappresenta una installazione completa. Predisporre una distribuzione con database Access iniziale e componenti necessari alle funzioni utilizzate.
Primo avvio¶
- Copiare la distribuzione nella cartella definitiva e controllarne i permessi.
- Salvare una copia del database di configurazione e degli INI forniti.
- Avviare il Manager. Il controllo aggiornamenti può precedere la finestra principale.
- Se manca WebView2, scegliere il recupero guidato, l'installazione manuale o la prosecuzione senza browser incorporato.
- Configurare azienda, Partita IVA, profilo e connessioni database.
- Verificare le attivazioni e i componenti EasyMES.
- Creare una prima istanza di prova e verificarla prima di abilitare l'autostart.
Il Manager applica adeguamenti additivi allo schema Access all'avvio. Non risulta un sistema di migrazioni versionate con rollback automatico.
Recupero WebView2¶
Il recupero automatico viene proposto all'utente, scarica il bootstrapper ufficiale Microsoft, ne verifica firma e destinazione e richiede l'elevazione UAC per l'installazione. Al termine tenta di inizializzare il browser nella sessione corrente; può proporre un riavvio se necessario.
Per ambienti offline predisporre il runtime separatamente. WebView2Loader.dll x86 non sostituisce il runtime WebView2.
La memoria descrive build e verifiche offline; il flusso completo su una macchina pulita priva di WebView2 richiede ancora collaudo.
Configurazione del Manager¶
Ordine consigliato¶
- Inserire ragione sociale e Partita IVA.
- Controllare HWID e attivazioni disponibili.
- Selezionare il profilo DEMO oppure OPERATIVO.
- Configurare e testare le connessioni.
- Impostare intervalli di controllo e preferenze di avvio.
- Configurare istanze e personalizzazioni.
- Abilitare gli automatismi dopo la prova manuale.
Parametri generali¶
| Gruppo | Impostazioni documentate |
|---|---|
| Supervisione | Debug, tempo controllo, aggiornamento DB, terminazione pianificata dei processi |
| Visualizzazione | Nomi macchina, tempo di esecuzione, colonne della griglia |
| Avvio | Avvio con Windows, riduzione nell'area di notifica, guida automatica |
| Azienda | Ragione sociale e Partita IVA |
| EasyMES | URL, porte e avvio automatico del portale/runtime |
| Avanzate | Percorso globale del VNC Viewer |
| Personalizzazioni | Selezioni attive, Query update e Query select |
L'avvio con Windows è registrato per l'utente corrente nel ramo Run di HKCU. Va verificato con il profilo Windows che userà il programma.
Profili e attivazioni¶
Il Manager invia Partita IVA e HWID al backend HTTPS e legge le attivazioni disponibili. Le selezioni sono salvate localmente. Una risposta non valida o l'assenza di attivazioni può forzare il profilo DEMO e limitare le operazioni.
Un problema di rete deve quindi essere distinto dall'assenza effettiva di abilitazione. Verificare i messaggi e ripetere il controllo quando l'endpoint è raggiungibile.
Salvataggio e propagazione¶
I parametri globali sono in config.mdb. Le configurazioni istanza sono conservate sia nelle righe di Cfg_IstanzeParametri sia nei rispettivi config.ini; il profilo database può propagare valori alle istanze.
Prima di modificare il profilo di un impianto esistente conservare una copia degli INI e verificare quali istanze ricevono la nuova configurazione. L'apertura delle schede può integrare chiavi mancanti: non usare configurazioni di un'altra macchina come modello senza revisione.
Gestione delle istanze¶
Convenzioni delle cartelle¶
| Famiglia | Esempio | Comportamento |
|---|---|---|
| Numerata | linkmachine1 |
Creata secondo la numerazione del Manager |
| DEMO | linkmachine0 |
Istanza dimostrativa speciale |
| Personalizzata | linkmachine-pressa |
Rilevata dal filesystem, senza alterare la numerazione classica |
Il suffisso personalizzato può contenere lettere ASCII, numeri, punto, trattino e underscore. Il nome completo è limitato a 50 caratteri.
Creazione¶
- Selezionare profilo e parametri.
- Verificare i prerequisiti e le attivazioni dell'istanza operativa.
- Avviare la creazione: il Manager scarica ed estrae il pacchetto.
- Controllare cartella ed eseguibile rinominato secondo l'istanza.
- Verificare il
config.inigenerato e la scheda corrispondente. - Avviare manualmente e controllare lo stato prima di selezionare Esecuzione automatica.
L'aggiornamento INI tenta di preservare ordine e commenti. Le chiavi supportate vengono esposte nell'editor dinamico e replicate in Access.
Eseguibile ausiliario¶
Una istanza può dichiarare in [parametri]:
[parametri]
exeauxpath=tools
exeauxfile=processo-esempio.exe
È un esempio di struttura, da adattare a un eseguibile realmente disponibile. Un percorso relativo parte dalla cartella istanza; un percorso assoluto viene usato direttamente. Il Manager riconosce l'ausiliario tramite il percorso completo, così programmi omonimi in cartelle diverse restano distinti.
Il pulsante avvio e l'autostart gestiscono separatamente Agent e ausiliario mancanti. La riduzione a icona si applica a entrambi. Una cartella personalizzata può funzionare soltanto tramite ausiliario, senza eseguibile Agent omonimo.
Log di accensione e spegnimento¶
Il pulsante Log mostra log_stato.txt della cartella istanza, in ordine dal più recente. Il formato è:
2026-09-28 09:00:00;ACCESA
2026-09-28 10:30:00;SPENTA
Gli eventi derivano dalle transizioni rilevate durante la supervisione. La prima osservazione della sessione memorizza lo stato senza produrre un evento fittizio. Il log misura lo stato del processo, non l'accensione fisica della macchina, e non dispone di rotazione automatica documentata.
Supervisione dei processi¶
Lettura della griglia¶
La scheda Processi unisce processi configurati in Access, cartelle istanza e processi Windows effettivamente rilevati. Le righe vengono deduplicate con il nome canonico del processo.
La griglia mostra, quando disponibili, stato, eseguibile, versione, macchina, indirizzo pannello, versione pannello e tempo di esecuzione. Visibilità e ordine delle colonne sono persistiti in Cfg_ProcessiGridFields.
Comandi¶
| Comando | Effetto |
|---|---|
| Avvio | Avvia il processo o l'istanza selezionata |
| Pausa / ripresa | Applica la gestione di sospensione prevista per la riga |
| Kill / arresto | Termina il processo gestito |
| Aggiorna | Rilegge configurazione e stato |
| Log | Apre lo storico quando la riga corrisponde a una vera cartella istanza |
| VNC | Apre UltraVNC se indirizzo, porta, password e viewer sono configurati |
La cella Log resta vuota per righe che non hanno una cartella istanza. La cella VNC dipende dai parametri del pannello; la password non compare nella griglia.
Controllo automatico¶
Il timer confronta configurazione e processi attivi. Se una voce abilitata risulta assente, tenta di avviarla; per le istanze controlla anche l'eventuale ausiliario. Prima di terminare deliberatamente un processo per manutenzione, verificare il relativo flag di esecuzione automatica per evitare il riavvio immediato.
Le transizioni documentate possono attivare query:
Non attivo → In avvio → In esecuzione → Non attivo
Le query sono configurate nella sezione Personalizzazioni e database. Sono transizioni del processo software; non equivalgono agli stati produttivi normalizzati dell'engine Platform.
Chiusura del Manager¶
La preferenza di riduzione nell'area di notifica può mantenere il programma attivo. L'uscita completa arresta i runtime EasyMES avviati dal Manager e può terminare i processi LinkMachine gestiti. Verificare questa differenza prima di chiudere una postazione di supervisione.
Database e personalizzazioni SQL¶
Configurazione locale e dati operativi¶
config.mdb è l'archivio locale di configurazione. I dati operativi LinkMachine sono nel database MySQL EasyMES; le schede Query update e Query select usano quest'ultima connessione.
| Tabella Access | Contenuto |
|---|---|
Cfg_Parametri |
Parametri globali, azienda, attivazioni, EasyMES e percorso VNC |
Cfg_Processi |
Eseguibile, percorso, note e abilitazione dei processi |
Cfg_ServerMySql |
Profili e configurazioni database, anche multi-provider |
Cfg_IstanzeParametri |
NomeIstanza, SectionName, ParamKey, ParamValue |
Cfg_ProcessiGridFields |
Colonne visibili e ordine |
Cfg_Parametri_query |
Trigger, testo SQL e spiegazioni per gli update |
Cfg_Parametri_query_select |
SELECT configurabili per valori della griglia |
Cfg_Stato |
Stato e ultimo errore |
Lo schema locale viene adeguato con metodi di creazione/aggiunta colonne. Un vecchio config.mdb non è necessariamente già allineato al codice corrente.
Query select: versione pannello¶
La configurazione iniziale della voce Versione pannello è:
SELECT ver_panel
FROM macchine
WHERE cod_macchina = @cod_macchina
LIMIT 1
@cod_macchina viene passato come parametro database. Il risultato scalare alimenta la griglia Processi. Il seed è inserito in modo idempotente; Salva parametri persiste le modifiche.
Query update¶
Le righe di Cfg_Parametri_query sono associate alle transizioni dei processi. Il comportamento storico usa sostituzione dei tag nel testo SQL e registra SQL originario e finale nei log. Verificare query e destinatari su un database di prova; evitare dati sensibili nel testo salvato o nei log.
Un database nuovo non dispone di un seed affidabile delle query update. La creazione della tabella non implica che siano già configurate query operative.
Creazione da progetto AXP¶
easymes.axp descrive 11 tabelle applicative, tra cui macchine, programmazione_link, registro_pannello, dati_macchine ed etichette_prod.
L'importatore crea tabelle mancanti e chiave primaria. Non migra colonne esistenti, lookup, relazioni, indici secondari o dati. Le evoluzioni del portale sono anche in updateDB.php; la presenza del codice di migrazione non prova la sua applicazione sul database installato.
EasyMES, VNC e servizi esterni¶
EasyMES¶
Il Manager cerca il portale linkweb e i runtime PHP/MySQL distribuiti con l'applicazione. Può inizializzare MySQL al primo uso, predisporre database e utenti, avviare il server PHP incorporato e aprire l'URL configurato.
Nella scheda EasyMES sono disponibili browser WebView2, apertura nel browser esterno, indirizzo locale, indirizzo LAN e codice QR. Porte e URL devono corrispondere alla configurazione effettiva e non essere già occupati.
Il portale EasyMES è un'applicazione PHP distinta dalla cartella setting/ della Platform. Gestisce anagrafiche, programmazione, ordini, lavorazioni, stati ed etichette. Il Manager accede direttamente al database per SELECT/UPDATE; non usa una API REST EasyMES dedicata.
Il server PHP locale descritto nella distribuzione espone HTTP in LAN. Verificare rete e autorizzazioni prima di renderlo disponibile ad altre postazioni.
VNC dal Manager¶
- Predisporre un UltraVNC Viewer compatibile.
- In Parametri > Avanzate, selezionare l'eseguibile con Sfoglia.... Il percorso può essere assoluto oppure relativo alla cartella Manager.
- Nell'istanza configurare indirizzo pannello,
vncportevncpasswordnella sezione[Pannello]. - Controllare la comparsa dell'azione VNC nella griglia Processi.
- Avviare la sessione e verificarla sull'apparato.
La porta VNC predefinita è 5900; è distinta dalla porta Modbus 502. Il Manager usa la sintassi UltraVNC -password <password> <ip>::<porta>, con argomenti separati.
La password è mascherata nell'editor e assente dai log, ma rimane nella configurazione locale ed è passata al processo viewer. La sola comparsa del pulsante non prova la disponibilità del server VNC.
Backend e telemetria¶
Il Manager usa HTTPS per attivazioni, aggiornamenti, pacchetti e teleassistenza. All'avvio invia anche un evento con versione e informazioni dell'ambiente Windows/rete; nelle memorie non risulta un controllo desktop per disattivarlo.
Il backend attivazioni non è ricostruibile integralmente dal repository perché manca una sua dipendenza. Per problemi di contratto o abilitazione occorre verificare il servizio effettivo oltre allo stato locale.
Aggiornamenti e diagnostica del Manager¶
Aggiornamento applicativo¶
Il canale documentato del Manager è update/setting. Il manifest contiene versione, URL del pacchetto, modalità, stato contrattuale e messaggio opzionale.
| Modalità | Comportamento documentato |
|---|---|
optional |
Domanda Sì/No |
force |
Avviso e prosecuzione obbligatoria |
silent |
Download e installazione senza domanda di conferma quando il contratto è attivo |
Il supporto reale a silent è documentato dalla release 1.26.8. Il primo aggiornamento da una versione precedente può ancora mostrare la domanda, perché viene gestito dal vecchio client. Errori e stati contrattuali non attivi restano visibili.
Prima di un aggiornamento conservare config.mdb e configurazioni istanza. Il client non dispone di rollback automatico o verifica crittografica del pacchetto documentati nelle memorie.
Diagnostica¶
| Sintomo | Controlli |
|---|---|
| Profilo OPERATIVO non disponibile | Partita IVA, HWID, risposta backend e connettività HTTPS |
| EasyMES non si apre | Presenza linkweb e runtime, porte, processi PHP/MySQL, URL e WebView2 |
| Istanza non rilevata | Convenzione nome cartella, eseguibile omonimo o ausiliario, config.ini |
| Processo si riavvia dopo l'arresto | Flag esecuzione automatica e supervisione ausiliario |
| Versione pannello vuota | SELECT salvata, codice macchina, connessione EasyMES e macchine.ver_panel |
| VNC assente o non avviabile | Percorso viewer, IP, porta valida e password dell'istanza |
| Query update non eseguita | Riga configurata, trigger, testo SQL e connessione operativa |
I log applicativi sono nella cartella logger; quelli delle transizioni istanza in log_stato.txt. Le query possono includere valori operativi: condividere soltanto gli estratti necessari alla diagnosi.
Build e distribuzione tecnica¶
La pubblicazione documentata usa Release win-x86, profilo FolderProfile e offuscamento prima del bundle single-file. Una normale build Release non invoca automaticamente il target separato ObfuscateRelease.
Da clone pulito eseguire restore e build; per il profilo sotto My Project usare PublishProfileFullPath. Verificare l'artefatto finale e la presenza dei componenti esterni: la compilazione non assembla da sola tutta la distribuzione EasyMES.
LinkMachine Agent
LinkMachine Agent¶
LinkMachine Agent, originato dal progetto BASE, collega un pannello operatore industriale ai database di produzione. Il ciclo principale legge ordini pianificati, invia dati al pannello tramite Modbus TCP, acquisisce contatori e stati e aggiorna quantità ed eventi.
È un'applicazione VB.NET Windows Forms per .NET 8 x86. Può essere distribuita in più cartelle istanza e supervisionata dal Manager.
Funzioni e disponibilità¶
| Area | Funzione documentata |
|---|---|
| PANNELLO / DATA PANEL | Collegamento Modbus e consultazione dei valori letti |
| MAPPING | Associazione delle 118 letture a colonne DB1 e sincronizzazione dei valori cambiati |
| DATABASE | Consultazione in sola lettura di DB1 e DB2, con password mascherata |
| Ordini e produzione | Lettura coda, invio dati al pannello, quantità prodotta ed eventi |
| Documenti / etichette | Stampa PDF e inserimento richieste etichetta |
| LICENZA | Licenze firmate e gestione separata delle attivazioni P.IVA/HWID |
| FILE / ALTRO | Flussi che richiedono configurazioni e componenti esterni |
S7, OPC UA e Query personalizzate non sono funzioni complete nel flusso corrente. La pagina Query personalizzate è accessibile senza licenza, ma contiene soltanto testo informativo.
Come procedere¶
Preparare installazione e configurazione, verificare il pannello, configurare il mapping, poi collaudare ciclo produttivo e contratto database.
La memoria del 28/09/2026 include modifiche locali con build e prove offline riuscite. Publish e deploy del nuovo mapping INI e della scheda Database non risultano eseguiti nella verifica descritta: controllare la versione realmente installata prima di applicare queste istruzioni.
Installazione dell'Agent¶
Prerequisiti¶
- Windows compatibile x86 e .NET 8 Desktop Runtime x86.
- Cartella applicativa scrivibile per configurazioni, log e aggiornamenti.
- Connessione ai due database logici e schema compatibile con le query.
- Pannello Modbus TCP raggiungibile sulla porta 502.
- Provider Access ACE x86, se usato; credenziali e opzioni corrette per il provider scelto.
pdfium.dllx86 per stampa/render PDF e stampante configurata, se richiesti.- Viewer VNC e componenti esterni solo per le funzioni effettivamente utilizzate.
Preparazione dell'istanza¶
- Creare una cartella distinta per ogni Agent oppure utilizzare la creazione istanze del Manager.
- Copiare il pacchetto e le dipendenze richieste.
- Preparare un
config.inispecifico con pannello, database e identità macchina. - Verificare permessi di scrittura e accesso rete.
- Avviare manualmente e controllare licenza, database e comunicazione.
- Configurare il mapping e svolgere la prova di persistenza prima dell'autostart.
Le configurazioni cliente non vanno sostituite con quelle di un ambiente diverso. Dal 28/09/2026 il mapping ha un file separato, mapping.ini, che va conservato durante gli aggiornamenti.
Più copie sullo stesso computer¶
Agent non impone una singola istanza. Il nome dell'eseguibile influenza l'identità di licenza e il badge della finestra:
| Nome | Badge |
|---|---|
LinkMachine.exe |
Nessuno |
LinkMachine_2.exe |
2 |
LinkMachine_TEST.exe |
TEST |
Il badge deriva dal nome del file, non dal numero di processi attivi. Una copia rinominata ha la propria identità di licenza. Separare anche le cartelle per evitare configurazioni e file runtime condivisi involontariamente.
Simulazione¶
Con indirizzo pannello locale l'Agent può cercare PanelSimulator.exe accanto all'eseguibile e attendere la porta 502. Il simulatore è un artefatto esterno: non è incluso nello ZIP di istanza esaminato nella memoria. La sua presenza deve essere verificata, senza considerare loopback una simulazione già funzionante.
Configurazione dell'Agent¶
File e sezioni¶
config.ini si trova accanto all'eseguibile e contiene configurazione generale e alcuni valori runtime. mapping.ini conserva esclusivamente le impostazioni del mapping pannello/database.
Sezione config.ini |
Contenuto documentato |
|---|---|
[Pannello] |
ipaddress del pannello |
[Database] |
Provider, server, porte, database o file Access e opzioni di autenticazione |
[parametri] |
Identità macchina, stampa/PDF, etichettatrici, debug, integrazioni e valori precedenti |
[step7] |
IP e tipo macchina S7; flusso non operativo corrente |
[file] |
Configurazione file; il codice richiede anche FolderFile |
[altro] |
Integrazione esterna |
[registri] |
Indirizzo iniziale usato per le stringhe ricetta |
[dati] |
Ultimo errore persistito |
[guida] |
eseguiAllAvvio per il tour |
[licenza] |
Azienda, P.IVA, licenze e attivazioni locali |
Le due connessioni¶
| Connessione | Chiavi principali |
|---|---|
| DB1 LinkMachine | serverName, port, databaseName, accessFileName |
| DB2 Gestionale/produzione | serverName2, port2, databaseName2, accessFileName2 |
Il motore usa un solo provider per entrambe le connessioni. provider2 può essere presente nel file ma non viene consumato. Anche username e password sono condivisi. Il comportamento di fallback DB2 ai valori DB1 va verificato sulla configurazione specifica.
La scheda DATABASE rilegge i valori all'avvio e quando viene selezionata. È in sola lettura, maschera la password e non apre connessioni: vedere una configurazione in griglia non significa che il database sia raggiungibile.
Abilitazione delle integrazioni¶
exchangeS7, exchangeFL ed exchangeOT controllano i percorsi S7, file e integrazione esterna. Attivare un flag soltanto quando il relativo flusso e gli asset sono disponibili. Nel materiale analizzato risultano disabilitati.
closeerror=1 abilita la chiusura forzata in diversi errori di comunicazione. Le routine database legacy possono terminare il processo dopo il fallimento definitivo; gli errori del nuovo mapping seguono invece una diagnostica separata.
Licenza e attivazioni¶
Le licenze .lic sono firmate RSA/SHA-256. Le attivazioni recuperate tramite P.IVA/HWID sono un elenco separato e non introducono un nuovo collegamento documentato tra codice attivazione e funzione.
La Partita IVA viene validata formalmente; cambi di P.IVA/HWID possono eliminare lo stato delle attivazioni locali. Il difetto di stabilità dell'HWID .lic va distinto dall'HWID stabile delle attivazioni. Senza licenza valida il collegamento pannello ha una tolleranza documentata di 30 minuti.
Mapping pannello → database¶
Scopo e tempi¶
La scheda MAPPING, accanto a DATA PANEL, espone le 118 letture Modbus correnti. Gli offset sono 0–117; il ciclo legge a partire dall'indirizzo 101, normalmente indicato come registri 101–218. La convenzione di indirizzamento deve essere confermata con il firmware.
L'interfaccia mostra offset, registro, descrizione disponibile, valore letto, ultimo valore inviato e campo DB selezionato. Il polling pannello è di 500 ms; la sincronizzazione DB ha intervallo predefinito di 5 secondi.
Procedura¶
- Verificare la configurazione DB1 e una lettura Modbus riuscita.
- Scegliere la tabella destinazione, predefinita
dati_macchine. - Impostare un filtro semplice
campo=valoreche identifichi la macchina prevista. - Premere RICARICA CAMPI DB per leggere le colonne reali della tabella.
- Associare gli offset ai campi selezionabili. Le associazioni sono salvate immediatamente.
- Salvare le impostazioni e controllare il conteggio righe aggiornate.
- Verificare sul database il valore di un registro cambiato e il comportamento dei valori invariati.
Il filtro accetta una sola uguaglianza. {macchina} è risolto con il nome macchina e {codmacchina} con il codice macchina. Controllare questa distinzione: il default cod_macchina={macchina} non garantisce che nome e codice siano uguali nella propria installazione.
Un filtro che corrisponde a più righe le aggiorna tutte. Il mapping non crea automaticamente la tabella o la riga della macchina.
File mapping.ini¶
Dal 28/09/2026 la configurazione ha questa struttura:
[Mapping]
table=dati_macchine
where=cod_macchina={codmacchina}
enabled=1
refreshIntervalMs=5000
[PANEL_TO_DB]
; Associazioni Text4_n → nome colonna, salvate dalla UI
[PANEL_PREVIOUS_VALUES]
; Ultimi valori inviati con successo
È un esempio per un'installazione che usa il codice macchina come filtro. Le associazioni concrete dipendono dalla mappa registri approvata e dai tipi delle colonne.
Se il file manca, il primo caricamento importa le sezioni legacy da config.ini e crea il file dedicato. Se esiste, mapping.ini è autorevole. L'importazione non modifica config.ini; le sezioni legacy rimaste non vengono più usate. Il file non è copiato automaticamente dalla build/publish.
Scritture e gestione degli errori¶
La sincronizzazione procede soltanto dopo una lettura Modbus riuscita e aggiorna i valori cambiati rispetto a quelli persistiti. L'intervallo configurabile è limitato dal codice tra 1.000 e 60.000 ms.
Gli update di un ciclo usano parametri e una transazione DB1. Tabelle e campi vengono quotati secondo il provider. I valori dei registri sono passati come stringhe: la conversione al tipo della colonna dipende dal database/provider.
Gli errori compaiono nella scheda e nei log senza la terminazione forzata delle routine legacy. Le prove descritte nelle memorie verificano build, interfaccia e persistenza offline; tipi, filtro e update su database/pannello reali restano da collaudare.
Ordini e ciclo produttivo¶
Percorso documentato¶
Vista ordini DB2 → coda Agent → dati al pannello
Pannello → contatori/stati Agent → quantità DB2 ed eventi DB1
L'Agent legge view_ordini_prod e mostra fino a otto ordini pianificati. Le routine di lettura array possono recuperare fino a dieci valori; la query non applica un limite SQL ed ordina per ordinamento DESC.
Caricamento dell'ordine¶
La coda usa descrizione articolo, ordine, lavorazione/ricetta, quantità, macchina e note. view_articoli fornisce la descrizione della lavorazione tramite idlavorazione e Descrizione.
Per ogni installazione verificare:
- che il filtro macchina corrisponda al codice configurato;
- che l'ordinamento rappresenti la priorità voluta;
- che i riferimenti
idord,cod_ord,cod_ordineeiddettabbiano la semantica richiesta dalle query; - che i dati scritti nei registri corrispondano al firmware del pannello.
Acquisizione durante la produzione¶
Il polling interpreta cambi ricetta, avvio/arresto, cambio cesta, quantità e stato. L'aggiornamento attivo della produzione scrive programmazione_link.qta_prodotta usando view_ordini_prod.iddett come identificativo della riga.
Gli eventi sono inseriti in registro_pannello sul DB1. Il nuovo mapping può aggiornare colonne configurate nella tabella DB1, seguendo il proprio timer e la rilevazione delle variazioni.
Operazioni legacy¶
Alcune routine storiche di cambio stato ordine, aggiornamento dati macchina, bolle e aggiustamenti costruiscono soltanto SQL o hanno l'esecuzione commentata. Un messaggio nell'interfaccia o nel log non prova la persistenza su database.
Il collaudo deve confrontare i dati effettivamente salvati prima e dopo l'operazione. In particolare, il mapping nuovo è distinto dalla routine legacy UPDATEDATI, che non esegue l'update documentato nel vecchio flusso.
Documenti e richieste etichetta¶
Stampa e richiesta etichetta possono dipendere da articolo/lavorazione e configurazione macchina. L'Agent compone il percorso dei PDF dai dati e invia il job allo spooler Windows; le richieste etichetta vengono inserite in DB1, ma il consumatore esterno non è incluso. Vedere Integrazioni.
Contratto database dell'Agent¶
Il contenuto seguente descrive il contratto ricostruito dalle query, non uno schema DDL certificato. Le memorie non includono dump, migrazioni o verifica dello schema reale Agent.
DB1 — LinkMachine¶
| Oggetto | Operazione attiva | Campi principali |
|---|---|---|
Tabella scelta nel mapping, default dati_macchine |
UPDATE dei valori cambiati | Colonne associate e campo del filtro |
registro_pannello |
INSERT eventi | operazione, macchina, db, software |
etichette_prod |
INSERT richieste | desarticolo, macchina, codarticolo, linkimage, qta, idarticolo |
| Tabella versione pannello del flusso legacy | UPDATE | macchina, ver_panel; il codice contiene uno schema specifico da verificare |
DB2 — Gestionale/produzione¶
| Oggetto | Uso | Campi richiesti dalle query |
|---|---|---|
view_ordini_prod |
Coda e lookup ordini | desart, idord, cod_lavorazione, qtaord, idmacchina, ordinamento, NoteOrdine, cod_stato, iddett, nord, cod_ord, cod_ordine |
view_articoli |
Descrizione lavorazione | idlavorazione, Descrizione |
programmazione_link |
Quantità prodotta | id, qta_prodotta |
documenti |
Ricerca PDF | ID documento, Descrizione |
link documenti-files |
Percorso documento | ID documento, Percorso, Nomefile |
view_foto_articoli |
Immagine articolo | IdPrimary, NomeFile |
articoli |
Codice articolo etichetta | ID articolo, Codice Articolo |
La relazione tra view_ordini_prod.iddett e programmazione_link.id deve essere confermata. Non assumere che campi simili come cod_ord e cod_ordine siano intercambiabili.
Provider e comportamento¶
MySQL/MariaDB, Access ACE e SQL Server sono supportati dal codice con un provider globale. La compatibilità delle query cross-provider è parziale, soprattutto per nomi con spazi, schema qualificato e particolarità MySQL.
Le routine legacy aprono una connessione per operazione, tentano fino a tre volte con un secondo tra i tentativi e usano CommandTimeout=0. Dopo un errore definitivo registrano l'errore e terminano il processo. Il loro SQL usa interpolazione e non una transazione applicativa comune.
Il mapping nuovo usa invece update parametrizzati/transazionali e diagnostica separata. Questa differenza non cambia le altre query dell'Agent.
Verifica prima dell'esercizio¶
Confrontare viste, colonne, tipi, chiavi, cardinalità e privilegi con lo schema reale. Verificare quantità, eventi e identificativi su dati di prova. Le tabelle presenti in EasyMES forniscono un contesto utile, ma non garantiscono da sole che le due connessioni Agent siano configurate verso lo stesso schema o siano compatibili con tutte le query.
Protocolli e integrazioni dell'Agent¶
Modbus TCP¶
| Parametro | Comportamento documentato |
|---|---|
| Ruolo | Client/master |
| Host | [Pannello] ipaddress |
| Porta | 502 nel flusso corrente |
| Lettura | ReadHoldingRegisters(101, 118) |
| Polling | 500 ms |
| Timeout connessione | 2 secondi |
| Scrittura | WriteMultipleRegisters, function code 16, anche per un registro |
Le stringhe usano ASCII, lunghezza fissa 50 caratteri, padding a spazi e troncamento oltre il limite. Il codice scrive un carattere per indirizzo con schema RegIni + indice * 2. Non è una mappa registri approvata: offset, semantica e firmware vanno verificati prima dell'integrazione.
PDF ed etichette¶
PdfiumViewer apre il documento risolto dal database e genera il job sulla stampante configurata. Controllare file, permessi Windows, driver e nome stampante.
La coda principale di etichettatura è etichette_prod; la generazione/stampa finale dipende dal consumatore esterno. Esiste anche un percorso file legacy, che va verificato separatamente senza dedurne un servizio incluso nel pacchetto.
Scambio CSV e Fanuc¶
Con exchangeFL e [file] FolderFile configurati, il flusso produce rcpfile.csv, lo copia alla destinazione e ne archivia una copia in filesent. Il formato documentato è:
deslav;ORDlotto;cassone;qual;pzcolpo;colpipz;<CR>
Cartelle, gestione separatori e conferma del consumatore devono essere verificate. Nel file analizzato la destinazione manca e il flusso è disabilitato.
Il percorso Fanuc, subordinato a exchangeOT, scrive fanuc/config.ini e avvia testfanucprot.exe. Gli asset richiesti non sono inclusi nel repository/pacchetto esaminato; non è un'integrazione collaudata end-to-end.
VNC e protocolli incompleti¶
L'Agent usa un viewer esterno in modalità sola visualizzazione. La riga di comando e il comportamento password sono diversi dall'integrazione UltraVNC del Manager e richiedono verifica con il binario distribuito.
S7 ha wrapper e conversioni ma client/handler non collegati al flusso operativo. OPC UA è una pagina predisposta senza client implementato. La presenza delle schede non attesta il supporto del protocollo.
Agent non espone una API HTTP pubblica in ingresso: integra sistemi tramite database, Modbus, file e processi locali.
Manutenzione e diagnostica dell'Agent¶
Conservazione delle configurazioni¶
Per ogni istanza salvare config.ini, mapping.ini e i file operativi necessari. mapping.ini contiene associazioni e ultimi valori inviati; non sostituirlo con quello di un'altra macchina o con un modello generico durante l'aggiornamento.
Il file viene creato/importato al primo avvio se manca e non è copiato automaticamente dal publish. Verificare la migrazione su una copia della configurazione prima di aggiornare una installazione esistente.
Diagnostica¶
| Sintomo | Controlli |
|---|---|
| Timeout pannello | IP, rete, porta 502, servizio Modbus, firmware e log |
| Registri incoerenti | Indirizzamento, offset, mappa firmware e conversioni |
| Nessuna colonna nel mapping | Connessione DB1, tabella reale e permessi lettura schema |
| Update mapping inatteso | Placeholder nome/codice, filtro e numero righe coinvolte |
| Processo termina | Ultimo errore, retry DB legacy, closeerror e supervisione Manager |
| Quantità non aggiornata | iddett della vista e id di programmazione_link |
| Licenza cambia tra avvii | Problema HWID .lic, distinto dalle attivazioni P.IVA/HWID |
| PDF/etichette mancanti | Percorsi, stampante e consumatore esterno |
La scheda Database permette di controllare i parametri locali senza tentare una connessione. Gli errori operativi sono nei log locali e in config.ini, sezione dati/ultimo errore.
Aggiornamento e versioni¶
Le memorie descrivono un manifest testuale, ZIP e script di sostituzione/riavvio. Nel workspace aggiornato il canale è stato spostato verso agent; alcuni riferimenti storici indicano ancora linkmachine. Verificare il manifest consumato dall'eseguibile effettivamente installato.
Nel workspace analizzato il progetto dichiara 1.26.2 e l'assembly 1.26.1: prima di un rilascio allineare i riferimenti e controllare la versione incorporata. Il client non verifica firma/hash del pacchetto e non documenta un rollback automatico.
Compilazione e rilascio¶
La build distribuibile usa Release x86 e Obfuscar. Il profilo è single-file e framework-dependent; il bundle finale deve essere controllato, insieme a pdfium.dll e viewer esterno.
Sono presenti due copie del profilo FolderProfile: scegliere un percorso esplicito. Build e smoke test offline riusciti non equivalgono a publish, firma o deploy. Le modifiche del 28/09/2026 sono documentate come non pubblicate nella verifica della memoria.
L'avvio invia telemetria di ambiente/rete e può contattare updater e database. Un collaudo offline della sola Form evita questi effetti, ma non verifica la normale esecuzione.
LinkMachine Platform
LinkMachine Platform¶
LinkMachine Platform comprende tre parti complementari:
-
Web / Dashboard
Consulta macchine, KPI, timeline e storico produzioni. Consente causali fermo e note manuali.
-
Platform Setting
Gestisce macchine, sorgenti, mapping, normalizzazione degli stati, regole e calendari.
-
Engine
Legge righe sorgente, normalizza i dati e scrive stato, eventi e snapshot nel MES.
Perimetro della versione documentata¶
La dashboard operativa usa PHP/JavaScript e il database MES, con DEMO_MODE=false. Il modello iniziale completo è schema_engine.sql; schema.sql è uno schema demo legacy.
L'engine v0.1.0 è un Worker .NET 10 e supporta sorgenti MySQL/MariaDB di tipo DATI_MACCHINA. La presenza di configurazioni ERP o di lettura schema ODBC in Platform Setting non rende questi driver già operativi nel Worker.
Platform è distinta dal portale EasyMES distribuito con il Manager. Platform Setting è l'area web di amministrazione, nella cartella setting/. Il progetto desktop SETTING corrisponde invece al LinkMachine Manager.
Percorso di configurazione¶
Seguire Installazione, configurare Platform Setting, mapping e stati, quindi usare --validate prima di avviare l'engine. Consultare Database e API per le integrazioni.
La memoria di riferimento è consolidata al 23/09/2026. Le nuove colonne opzionali richiedono migrazioni e allineamento dell'applicazione generata: la disponibilità del codice non prova la loro presenza nel database operativo.
Installazione della Platform¶
Requisiti¶
| Parte | Requisiti documentati |
|---|---|
| Web | PHP; ambiente locale verificato con PHP 8.3.33, estensioni PDO MySQL/MySQLi da verificare sul server |
| Database | MySQL/MariaDB e schema engine aggiornato |
| Configurazione | Cartella setting/ Platform Setting con utenti, gruppi e permessi appropriati |
| Engine | Runtime .NET 10; SDK .NET 10 per build/test e batch di sviluppo |
| Sorgenti | MySQL/MariaDB DATI_MACCHINA, connessioni e mapping configurati |
Il server web definitivo e la compatibilità PHP/database devono essere confermati sull'ambiente di destinazione. L'avvio locale tramite PHP incorporato descritto di seguito serve alla verifica del progetto.
Preparazione¶
- Creare o selezionare il database MES.
- Importare
schema_engine.sql; non usare lo schema demo come base operativa. - Applicare le migrazioni necessarie confrontandole con lo schema esistente.
- Configurare
config.phpper il database centrale e verificareDEMO_MODE=false. - Distribuire
language.inielanguage.phpcon la root web. - Predisporre le configurazioni sorgente protette e gli accessi Platform Setting.
- Preparare l'INI dell'engine da un file
.examplee collegarlo allo stesso MES. - Configurare macchine, sorgenti, regole e valori stato.
- Eseguire
--validate; procedere al primo ciclo solo dopo la validazione.
Per gli aggiornamenti di settembre 2026 applicare prima 20260923_optional_operator_aux_note.sql, poi 20260923_optional_panel_job_fields.sql, secondo lo stato dello schema. Allineare successivamente l'applicazione Platform Setting e validare il nuovo engine.
Avvio locale web¶
Dalla root del progetto:
avviaweb.bat
Il batch documentato usa PHP, porta 8080 e router.php. L'indirizzo locale risultante è http://localhost:8080/; i percorsi del batch devono corrispondere all'installazione.
Configurazione distribuita dell'engine¶
L'INI reale e i file sorgente protetti non vengono inclusi automaticamente nel publish. Predisporli separatamente. Se il mapping usa config_file/config_ref, collocare il file dove il resolver può leggerlo oppure configurare LINKMACHINE_SOURCE_CONFIG_ROOT.
L'esempio Linux usa un'unità systemd; percorso, utente e permessi sono da adattare. Vedere Engine per le modalità e Manutenzione per build e diagnosi.
Uso della dashboard web¶
Vista generale¶
La dashboard mostra KPI di turno, card macchina e tabella riepilogo. I dati includono stato, lotto, commessa, part number, cliente, operatori, pezzi, efficienza e pezzi/ora.
| Stato visuale | Lettura operativa |
|---|---|
RUN |
Macchina in produzione secondo la normalizzazione configurata |
STOP |
Stato tecnico di fermo |
PAUSE |
Produzione in pausa, distinta dal fermo |
OFFLINE |
Sorgente non raggiunta entro il timeout gateway |
OFFLINE non certifica che il singolo PLC sia spento: nella versione documentata il controllo è sulla sorgente condivisa.
I tre riferimenti temporali¶
- Ultimo aggiornamento nell'header: conclusione dell'ultima run engine con righe lette. Il LED è spento se non esiste acquisizione, verde quando disponibile e lampeggia per una nuova acquisizione.
- Ultimo dato della macchina:
last_signal_at, timestamp dell'ultimo evento sorgente, convertito da UTC. - Polling gateway: rinnova la raggiungibilità anche senza righe nuove; non è l'orario del refresh browser.
Uno stato stabile può essere corretto anche con un evento sorgente datato, se il polling continua a riuscire.
Dettaglio macchina¶
Selezionare una macchina per aprire stato ed eventi. La timeline mostra data e ora locali, ordinata per timestamp decrescente e ID a parità di secondo. Include le transizioni di pausa produttiva come production_pause.
Sugli eventi di fermo oltre soglia selezionare una causale disponibile. Le pause programmate sono consultate dal calendario centrale; la presentazione/accounting API va distinta dalle funzioni ancora incomplete dell'engine.
Storico produzioni¶
- Aprire Produzioni dalla tabella macchine.
- Selezionare ultimi 30, 60, 90 o 120 giorni, anno corrente o tutto.
- Cercare part number, articolo, lavorazione o lotto.
- Espandere la gerarchia Part Number / Articolo / Lavorazione → Lotto / Commessa → Snap Date.
- Aprire Dettaglio sulla giornata per gli eventi; la chiusura riporta allo storico.
- Inserire/modificare la nota della produzione con il pulsante dedicato.
Le note manuali sono distinte dalle note acquisite dalla sorgente.
Campi opzionali e testi¶
Operatore AUX, note sorgente e dati pannello/job compaiono solo con mapping attivo e colonne disponibili. Un campo mappato vuoto può mostrare -; un campo non mappato viene nascosto.
I testi descrittivi sono centralizzati in language.ini. Modificare il valore e ricaricare la pagina; conservare i segnaposto necessari, come {machine} e {count}. Il file non traduce i dati salvati nel database né l'amministrazione Platform Setting.
Platform Setting¶
Platform Setting è l'area di amministrazione web nella cartella setting/. Gestisce configurazioni, utenti e permessi; le funzioni AJAX custom richiedono login e accesso alle rispettive tabelle.
Moduli¶
| Gruppo | Tabelle |
|---|---|
| Anagrafiche | machines, stop_causes |
| Sorgenti e mapping | mapping_sources, machine_mapping_rules, machine_mapping_status_values |
| Fermi e pause | machine_stop_rules, machine_pause_templates, machine_pause_calendar |
| Dati operativi | machine_status, machine_events, machine_productions |
| Engine e diagnostica | engine_settings, engine_runs, machine_signal_samples |
| Consultazione | v_dashboard_machine_status |
Configurare una macchina¶
- Inserire la macchina in
machinese verificarne il codice. - Creare la sorgente in Sorgenti mapping.
- Se disponibile, selezionare un file root
dati_*.phpe il profilo della chiavesources. - Premere Importa per compilare host, porta, database/schema, utente, tipo e JSON tecnico.
- Premere Salva nella Platform Setting: Importa compila la form, non sostituisce il salvataggio.
- Creare una regola in
machine_mapping_rulesassociando macchina e sorgente. - Usare Carica tabelle/campi e completare il mapping.
- Nella tabella figlia Valori stato, associare ogni stato grezzo alla semantica produttiva.
- Definire causali, regole stop, template e calendario pause.
- Validare con l'engine prima del consumo delle righe.
Le password inline non vengono restituite dall'endpoint di importazione o copiate nella form/database. Viene conservato il riferimento file/profilo; un password_ref sicuro può essere importato separatamente.
Campi sorgente e descrizioni¶
I campi della regola contengono nomi di colonne, per esempio il nome del campo quantità, non valori come la quantità corrente. I caption con tipo tra parentesi sono indicazioni visuali; il database conserva il nome della colonna.
Caption, descrizioni, obbligatorietà, tipi e lookup sono nel progetto linkmachine_platform.axp. Le modifiche diventano presenti nei CRUD generati dopo sincronizzazione/rigenerazione, non soltanto cambiando il file sorgente AXP.
Personalizzazioni e rigenerazione¶
Mantenere campi, tipi, descrizioni e relazioni nel progetto AXP della Platform Setting. Usare hook, helper, plugin, JavaScript e CSS per il comportamento dinamico. Le modifiche dirette ai file generati rischiano di essere sovrascritte; eventuali eccezioni richiedono una procedura documentata di reinserimento in CUSTOMIZATIONS.md.
La memoria segnala un vecchio outputFolder nell'AXP: controllare la destinazione prima di rigenerare. Il nuovo nome del progetto non implica che debba essere rinominato anche il database.
Sorgenti e regole di mapping¶
Sorgente e connessione¶
mapping_sources contiene tipo funzionale, host, porta, database/schema, utente e riferimento password. Driver, charset e opzioni tecniche sono nel JSON connection_json.
La connessione può essere risolta anche tramite:
{
"config_file": "dati_macchine.php",
"config_ref": "dati_macchina"
}
È un riferimento a un profilo disponibile, da adattare alla propria configurazione. Il resolver C# legge array PHP letterali senza eseguire PHP, accetta basename root conformi a dati_*.php e blocca percorsi arbitrari. Le opzioni JSON esplicite hanno precedenza sul file.
Il tipo funzionale ERP può essere configurato nell'amministrazione, ma l'engine 0.1.0 accetta soltanto DATI_MACCHINA MySQL/MariaDB.
Campi sempre richiesti¶
| Campo regola | Significato |
|---|---|
machine_id |
Macchina nel MES |
source_id |
Sorgente configurata |
source_machine_code |
Valore del codice macchina nella sorgente |
field_machine_code |
Nome della colonna codice macchina |
status_value_field |
Nome della colonna stato grezzo |
field_snap_date |
Timestamp dell'evento; default previsto created_at |
field_source_row_id |
ID esposto dalla sorgente di lettura |
field_elaborato |
Flag da leggere/filtrare nella sorgente |
elaborato_update_table |
Tabella fisica da marcare dopo l'acquisizione |
elaborato_update_id_field |
ID della tabella fisica, confrontato con quello letto |
elaborato_update_field |
Colonna flag fisica da impostare a 1 |
L'obbligatorietà è definita nel progetto AXP; schema installato e righe esistenti devono essere allineati. Ogni valore stato effettivo deve avere una voce nella tabella figlia.
Lettura da vista, update su tabella fisica¶
La sorgente di lettura può essere una vista. L'ID che espone deve permettere di individuare la riga nella tabella fisica di update. Carica campi distingue tabelle/viste di lettura dalle sole tabelle fisiche proposte per la marcatura.
Leggi riga dalla sorgente: Elaborato = 0
Commit della transazione MES
Marca tabella fisica: Elaborato = 1, usando l'ID letto
Filtro SQL, nomi colonna e codice macchina devono riferirsi allo schema reale. Un filtro legacy su un campo inesistente rende la regola non valida anche quando la connessione funziona.
Campi opzionali¶
| Mapping | Valore nel MES |
|---|---|
field_operator_aux |
operator_aux |
field_note |
source_note, distinta dalla nota manuale produzione |
field_quantitadalavorare |
Quantità da lavorare |
field_colpi_ora_panel, field_pezzi_colpo_panel, field_efficency_panel |
Valori pannello |
field_colpi_ora, field_pezzi_colpo |
Colpi/ora e pezzi/colpo sorgente |
field_datetime_inizio |
Timestamp iniziale, normalizzato in UTC |
Coppie field_time_job_*, field_time_stopped_*, field_duration_job_* |
Ore/minuti di job, fermo e durata |
Ore non negative e minuti 0–59 sono validati. machine_status.efficiency resta l'efficienza canonica calcolata dall'engine; il valore efficency_panel è separato.
Un campo opzionale appare sul web soltanto con regola e sorgente abilitate, colonna configurata e schema centrale disponibile. Applicare le migrazioni prima di validare il nuovo Worker.
Stati e riferimenti temporali¶
Stati produttivi¶
La tabella machine_mapping_status_values, figlia della regola mapping, converte lo stato grezzo della sorgente nella semantica produttiva.
| Stato | Significato |
|---|---|
NO_JOB |
Nessuna lavorazione |
LOADED |
Lavorazione caricata, non avviata |
RUNNING |
Produzione avviata |
PAUSED |
Pausa temporanea senza chiusura |
COMPLETED |
Produzione terminata |
FAULT |
Allarme/errore con produzione aperta |
UNKNOWN |
Valore riconosciuto esplicitamente senza semantica produttiva specifica |
Non esiste una corrispondenza universale tra i codici numerici del pannello e questi stati: configurarla per ogni sorgente/firmware.
Stato tecnico della dashboard¶
Una voce stato può indicare AUTO, RUN, STOP, PAUSE o OFFLINE. Con AUTO:
| Stato produttivo | Stato dashboard |
|---|---|
RUNNING |
RUN |
PAUSED |
PAUSE |
| Altri stati | STOP |
Un mapping esplicito a UNKNOWN riconosce consapevolmente il valore senza modificare la produzione. Un valore grezzo senza mapping produce invece diagnostica e non viene marcato come elaborato.
Transizioni e produzione¶
RUNNINGapre o continua la produzione.PAUSEDconserva la produzione aperta, azzerastop_started_ate generaproduction_pause.COMPLETEDoNO_JOBchiudono la produzione.
Inizio/fine derivano dai timestamp delle transizioni sorgente. field_started_at e field_stopped_at sono campi legacy nascosti, non la configurazione corrente di queste date.
Il timestamp sorgente fornisce anche la Snap Date nel fuso configurato. I dati centrali temporali vengono trattati in UTC e convertiti per la visualizzazione.
Stato stabile e OFFLINE¶
Una sorgente STO produce nuove righe soltanto quando qualcosa cambia. L'assenza di righe non implica fermo o perdita di comunicazione.
L'engine rinnova machine_status.updated_at dopo ogni query sorgente riuscita, anche vuota. Il timeout gateway usa questo riferimento; last_signal_at conserva invece l'ultimo evento elaborato.
Quando la sorgente torna raggiungibile, il recupero deve rispettare l'ultimo stato produttivo, inclusa PAUSED → PAUSE. In assenza di un heartbeat per macchina, un database raggiungibile non permette di distinguere un PLC silenzioso da un valore legittimamente stabile.
LinkMachine Engine¶
Ruolo e perimetro¶
Engine v0.1.0 è un Worker Service C# .NET 10. Acquisisce sorgenti MySQL/MariaDB DATI_MACCHINA e alimenta il MES. Non espone una API HTTP.
Modalità di avvio¶
Dalla cartella dell'artefatto, con configurazione e runtime predisposti:
dotnet LinkMachine.Engine.dll --validate
dotnet LinkMachine.Engine.dll --once
dotnet LinkMachine.Engine.dll
| Modalità | Effetto |
|---|---|
--validate |
Controlla schema centrale, mapping e metadati sorgente in sola lettura; exit code non zero in caso di errori |
--once |
Esegue un ciclo; può scrivere sul MES e marcare le righe sorgente |
| Senza argomenti | Esegue subito un ciclo e prosegue con polling |
Nel progetto Windows, engine/test-engine.bat propone le tre modalità e verifica SDK .NET 10 e configurazione. Il file engine/deploy/linkmachine-engine.service è il modello di servizio Linux da adattare.
Ciclo di acquisizione¶
- Verifica le tabelle/colonne del MES.
- Carica macchine, sorgenti, regole e valori stato abilitati.
- Risolve le connessioni dal database e dai riferimenti protetti.
- Valida identificatori, campi letti e tabella fisica di update.
- Legge righe con
Elaborato=0, ordinate per timestamp e ID. - Normalizza stati e campi, rispettando il fuso configurato.
- In una transazione MES aggiorna stato, eventi, snapshot e campione raw.
- Dopo il commit centrale marca la riga fisica sorgente a
Elaborato=1. - Rinnova la raggiungibilità dopo ogni lettura riuscita, anche senza nuove righe.
- Applica il timeout gateway in caso di sorgente non raggiunta.
Chiavi deterministiche rendono idempotenti eventi, snapshot e campioni in caso di rilettura. La marcatura sul database sorgente avviene dopo il commit MES: i due database non partecipano a una singola transazione distribuita.
Configurazione¶
L'INI locale contiene il bootstrap del database MES in [database] e opzioni Worker in [engine]: nome, polling, batch, campioni raw, fallback lotto e fuso. Non è il catalogo delle sorgenti.
Le sorgenti e i campi provengono da mapping_sources, machine_mapping_rules e machine_mapping_status_values. I segreti possono essere risolti tramite riferimenti env:, file:, ini: o file PHP protetto. LINKMACHINE_SOURCE_CONFIG_ROOT permette di indicare la radice dei file referenziati.
Limiti della v0.1.0¶
ERP/ODBC, fermi dinamici completi, esclusione pause/setting, record orari e retention raw non sono implementati nel Worker. La presenza di tabelle o funzioni dashboard per questi dati non amplia automaticamente il perimetro dell'engine.
Le memorie riportano 38 test automatici e un precedente ciclo live controllato. La versione con nuove colonne opzionali deve superare --validate sullo schema aggiornato prima dell'avvio continuo.
Database MES e migrazioni¶
Schema operativo¶
schema_engine.sql è il modello iniziale completo. Gli script non impongono il nome database con CREATE DATABASE/USE; selezionarlo prima dell'importazione. schema.sql e machine_scheduled_pauses appartengono alla demo legacy.
| Oggetto | Responsabilità |
|---|---|
machines |
Anagrafica, codice, reparto, timeout e default produttivi |
mapping_sources |
Connessioni e riferimenti sorgente |
machine_mapping_rules |
Mapping dei campi e del flag Elaborato |
machine_mapping_status_values |
Normalizzazione degli stati |
machine_status |
Stato corrente, produzione, contatori e timestamp |
machine_events |
Timeline, fermi, causali e transizioni |
machine_productions |
Snapshot giornalieri e note manuali |
machine_production_note_history |
Struttura di audit note prevista nello schema |
machine_stop_rules |
Regole di fermo dinamiche e tempi setting |
machine_pause_templates, machine_pause_calendar |
Modelli e calendario pause |
stop_causes |
Causali fermo |
engine_settings, engine_runs |
Impostazioni ed esecuzioni Worker |
machine_signal_samples |
Campioni raw |
Le viste documentate sono v_dashboard_machine_status, v_engine_current_article_rate e v_engine_machine_stop_rules. La presenza nello schema di strutture per fermi/setting non implica che l'engine 0.1.0 implementi già tutto il loro calcolo.
Snapshot giornalieri¶
Una produzione identifica macchina, part number, articolo, lavorazione, lotto/commessa e Snap Date. Lo storico web organizza queste fotografie per articolo/lavorazione, lotto/commessa e giornata. Se il lotto non è gestito, il mapping può usare lot=order_code.
source_note dello stato macchina è distinta da machine_productions.note: la prima è acquisita dalla sorgente, la seconda è modificata dall'operatore.
Migrazioni disponibili¶
| File | Scopo |
|---|---|
20260709_dynamic_stop_rules.sql |
Regole stop e viste per soglie dinamiche |
20260709_source_types.sql |
Separazione tipo funzionale sorgente e driver |
20260709_mapping_examples.sql |
Esempi di mapping disabilitati |
20260730_engine_v1_schema.sql |
Flag Elaborato, valori stato, stato produttivo e vincolo univoco |
20260923_optional_operator_aux_note.sql |
Mapping/valori opzionali Operatore AUX e Note |
20260923_optional_panel_job_fields.sql |
Tredici mapping/valori pannello e job |
Il registro completo delle migrazioni applicate al database operativo non è ricostruito. Confrontare lo schema prima di eseguire gli script; salvare un backup e verificare in staging.
Le memorie segnalano anche l'assenza nel database live del vincolo univoco (mapping_rule_id, source_value), pur previsto nel modello. Le due migrazioni opzionali di settembre non risultano applicate all'ambiente operativo descritto.
Colonne opzionali¶
Operatore AUX e nota sorgente sono testuali. datetime_inizio è un DATETIME UTC; ore/minuti sono sei colonne INT UNSIGNED, con minuti 0–59. I restanti valori pannello/job sono testuali nel modello corrente.
Il web può continuare a rispondere nascondendo campi assenti. Il nuovo engine può invece fallire la validazione sullo schema vecchio: completare l'allineamento prima di sostituire il Worker.
API web e interfacce tecniche¶
Gli endpoint custom sotto api/ restituiscono JSON e nella modalità operativa usano il MES. I percorsi sono relativi alla root della Platform, non al sito del manuale.
Letture dashboard¶
| Metodo e percorso | Parametri | Dati principali |
|---|---|---|
GET api/dashboard.php |
_ facoltativo per cache-busting |
server_time, kpi, machines |
GET api/engine_activity.php |
_ facoltativo |
ok, timezone, server_time, engine_activity |
GET api/machine_detail.php |
id obbligatorio; date=YYYY-MM-DD facoltativo |
machine, events, counters, day_context, scheduled_pauses, stop_causes |
GET api/machine_productions.php |
id; period=30/60/90/120/year/all |
machine, period, summary, tree, rows |
engine_activity descrive l'ultima run conclusa con rows_read>0 e può essere null. L'orario è convertito dal valore UTC nel fuso configurato, con fallback Europe/Rome.
Dashboard e dettaglio espongono last_signal_at nel campo JSON storico updated_at, convertito al fuso applicativo. Questo valore rappresenta l'evento sorgente, non il polling gateway.
I campi opzionali sono accompagnati da flag show_<campo>. Le API verificano schema, regola e sorgente abilitate prima di mostrarli; senza colonne o mapping valido mantengono i flag a false.
Scritture¶
POST api/update_stop_cause.php riceve:
{"event_id":123,"cause_id":1}
Verifica la causale e aggiorna soltanto eventi stop_threshold.
POST api/update_production_note.php riceve:
{"production_id":123,"note_key":"chiave-fallback","note":"Testo nota"}
Aggiorna machine_productions.note, con limite di 255 caratteri. Gli identificativi negli esempi sono illustrativi e devono riferirsi a record validi.
Endpoint Platform Setting¶
setting/ajax-mapping-source-schema.php: restituiscetables,columns_by_table,update_tables,update_columns_by_tableewarnings; distingue sorgente di lettura e tabella fisica di update.GET setting/ajax-mapping-source-config.php: senza parametri elenca file/profili; confileesectionprepara i dati non sensibili da importare nella form.
Questi endpoint richiedono login Platform Setting e permessi view sulle tabelle coinvolte. Il secondo non restituisce password inline, soltanto metadati o riferimenti ammessi.
Accessi e perimetro¶
Nelle memorie non è documentato un layer di autenticazione custom degli endpoint dashboard. L'autenticazione Platform Setting del setting non dimostra automaticamente che tutte le API web siano protette. Verificare i controlli effettivi prima di esporre la Platform.
Non risulta una specifica OpenAPI versionata o un contratto completo dei codici di errore. L'engine usa CLI e tabelle MES, senza endpoint HTTP dedicati.
Manutenzione e diagnostica della Platform¶
Sequenza di diagnosi¶
- Verificare schema MES e connessione centrale.
- Eseguire
Engine --validate. - Controllare sorgente, regola, nomi campo, filtro e valori stato.
- Consultare
engine_runse i campioni raw disponibili. - Confrontare ultima riga sorgente, flag Elaborato e stato MES.
- Verificare API e dashboard dopo la persistenza centrale.
| Sintomo | Controlli |
|---|---|
| Dashboard vuota | DEMO_MODE=false, database configurato, macchine abilitate e stato acquisito |
| Nessuna acquisizione LED | Run conclusa con righe lette; polling vuoto non accende una nuova acquisizione |
| Ultimo dato vecchio con macchina RUN | Stato STO invariato e polling riuscito: può essere corretto |
| OFFLINE inatteso | Connessione sorgente, ultimo polling riuscito e timeout gateway |
| Riga a Elaborato 0 | Mapping completo, stato grezzo mappato, errore centrale o marcatura sorgente fallita |
| Colonne opzionali assenti | Migrazioni, nomi campo, regola/sorgente abilitate e flag API |
| Validazione fallisce dopo update | Nuove colonne engine non ancora applicate nel MES |
| Campo sorgente non trovato | Differenza tra codice macchina e nome colonna; filtro SQL legacy |
| UI Platform Setting non allineata | AXP aggiornato ma CRUD non sincronizzati/rigenerati |
Build, test e publish engine¶
Dalla cartella engine/:
dotnet restore LinkMachine.Engine.slnx
dotnet test LinkMachine.Engine.slnx -c Release
dotnet publish src/LinkMachine.Engine/LinkMachine.Engine.csproj -c Release
La memoria documenta 38 test superati, build Release senza errori/warning e publish con Obfuscar 2.2.50. Verificare nuovamente l'artefatto aggiornato e la sua esecuzione con --validate.
Il publish rimuove configurazioni reali eventualmente residue. INI e file sorgente protetti devono essere predisposti separatamente, insieme ai permessi del servizio.
Aggiornamenti coordinati¶
Aggiornare schema, configurazione Platform Setting, engine, API e frontend come parti compatibili. Per i campi di settembre applicare le due migrazioni nell'ordine indicato, allineare Platform Setting e validare il Worker. Il fallback web alle colonne mancanti non è una validazione dell'engine.
Conservare backup database e configurazioni e definire il ritorno all'artefatto precedente. Non è presente una pipeline di rilascio/tag completa nella memoria.
Manutenzione del web¶
Distribuire insieme language.ini e language.php, conservando UTF-8 e segnaposto. Verificare accessi degli endpoint, protezione dei file di configurazione e utilità diagnostiche come info.php/test.php prima della pubblicazione.
Non modificare i CRUD generati per elementi configurabili nel progetto AXP. Il trigger futuro dati_macchina_log, l'heartbeat per singolo PLC e la retention raw restano evoluzioni da implementare e collaudare.
LinkMachine Panel
LinkMachine Panel¶
Manuale in preparazione
La sezione Panel fa parte della nuova struttura LinkMachine. I contenuti saranno completati quando saranno disponibili le specifiche del pannello e il relativo project memory.
Ambito da documentare¶
| Capitolo previsto | Materiale necessario |
|---|---|
| Hardware e installazione | Modelli supportati, cablaggio, alimentazione e rete |
| Firmware e aggiornamenti | Versioni, distribuzione, backup e ripristino |
| Configurazione | Parametri di rete, macchina e collegamento all'Agent |
| Protocollo | Mappa registri, convenzione indirizzi, tipi e stati |
| Uso operatore | Ordini, avvio/pausa/fine lavorazione, contatori e allarmi |
| Diagnostica | Messaggi, log e verifiche di comunicazione |
Collegamenti già descritti dagli altri componenti¶
Il manuale Agent documenta il comportamento del client Modbus e il manuale Manager l'apertura del viewer VNC. Queste informazioni non sostituiscono la specifica Panel: firmware, registri e compatibilità devono essere confermati.
I precedenti capitoli Panel sono conservati nell'archivio della documentazione e non vengono usati come specifica corrente senza una revisione dedicata.