CSCP — CloudScale Communication Protocol
Guida ai comandi CSCP per Neutron: struttura dei messaggi, pesatura, configurazione, conteggio, controllo del peso e I/O digitali.
NEUTRON · PROTOCOLLO DI COMUNICAZIONE
Riferimento Neutron Modbus RTU/TCP per l’integrazione PLC, SCADA e HMI: collegamento, indirizzamento, registri, calibrazione e controllo della selezionatrice ponderale automatica.
Versione | Data | Descrizione della modifica |
|---|---|---|
| Giugno 2026 | Prima edizione del manuale Neutron Modbus. |
CloudScale Neutron NS e Neutron NT offrono un’interfaccia Modbus per leggere dati di pesatura, informazioni di stato, I/O digitali e dati di taratura e per eseguire comandi selezionati della bilancia. L’interfaccia è destinata a integrazioni con PLC, SCADA, HMI, MES e software su misura.
Neutron supporta le seguenti varianti di trasporto Modbus:
Modbus RTU tramite interfaccia RS-232 o RS-485. L’ID slave / unità Modbus predefinito è 1.
Modbus TCP tramite Wi-Fi o Ethernet. La porta TCP predefinita è 502.
Le funzioni e le aree dei registri disponibili costituiscono la stessa interfaccia logica per Modbus TCP e Modbus RTU, salvo che TCP utilizza un Unit Identifier soltanto dove richiesto dal client o dal gateway.
Importante: i parametri di comunicazione, come le impostazioni della porta seriale e della rete, devono essere configurati in Neutron prima di collegare il master Modbus. Il dispositivo utilizza l’indirizzo Modbus configurato dal parametro MBA.
Modbus TCP è disponibile tramite la connessione di rete di Neutron. Utilizzate l’indirizzo IP assegnato al dispositivo e la porta TCP 502. La comunicazione TCP non richiede una configurazione della linea seriale.
Per utilizzare Modbus TCP, selezionate Modbus TCP tra le interfacce di comunicazione della bilancia (parametro SCI). Potete utilizzare Modbus TCP insieme ad altre interfacce, ad esempio continuare a usare RS-232 per comunicare con un computer tramite protocollo CSCP.
Configurazione | Risultato |
|---|---|
SCI = 10 | Attiva soltanto Modbus TCP. |
SCI = 5,10 | Attiva la normale comunicazione RS-232 della bilancia insieme a Modbus TCP. |
SCI = 6,10 | Attiva la normale comunicazione RS-485 della bilancia insieme a Modbus TCP. |
| Imposta l’indirizzo slave / unità Modbus. Predefinito: 1. |
Porta TCP | |
Quando sono indicati più valori SCI, configurate le interfacce in base alla configurazione di comunicazione Neutron selezionata. Dopo aver applicato le modifiche, riavviate la comunicazione o il dispositivo quando richiesto dal menu di configurazione.
Elemento | Esempio |
|---|---|
Master Modbus | |
Trasporto | TCP/IP tramite Ethernet o Wi-Fi |
Indirizzo di destinazione | Indirizzo IP di Neutron |
Porta del servizio | |
Unit ID | Valore MBA; predefinito 1 |
Per un’installazione industriale stabile, Ethernet è consigliata quando è disponibile una rete cablata. Il Wi-Fi introduce latenza dipendente dalla rete e deve essere valutato nell’ambiente applicativo.
Modbus RTU può essere utilizzato tramite RS-232 o RS-485. Le impostazioni di comunicazione seriale del master Modbus devono corrispondere a quelle dell’interfaccia seriale configurate in Neutron. L’ID slave Modbus è impostato da MBA ed è predefinito a 1.
Per utilizzare Modbus RTU, selezionate Modbus RS-232 oppure Modbus RS-485 tra le interfacce di comunicazione della bilancia (parametro SCI).
Interfaccia | Principio di cablaggio tipico | Nota importante |
|---|---|---|
RS-232 | Collegate TX, RX e GND tra Neutron e il master Modbus. Potrebbe essere necessario incrociare TX/RX a seconda che le porte collegate siano DTE o DCE. | Utilizzate collegamenti punto a punto brevi e una massa di segnale comune. |
RS-485 | Collegate A ad A e B a B secondo le indicazioni dei morsetti di entrambi i dispositivi; collegate il riferimento di segnale / GND quando richiesto dall’installazione. | Utilizzate una topologia a catena. Non utilizzate un cablaggio a stella. Applicate la terminazione della linea soltanto alle due estremità fisiche, quando necessario. |
Seguite sempre le indicazioni dei morsetti Neutron e lo schema di cablaggio fornito con il dispositivo. I produttori non indicano sempre allo stesso modo la polarità RS-485; se non si stabilisce la comunicazione, verificate la polarità A/B e la configurazione del master.
Questo manuale utilizza la notazione di riferimento Modbus convenzionale, ad esempio 40101. Molti strumenti client Modbus utilizzano indirizzi iniziali a base zero. In questi strumenti, eliminate la cifra iniziale dell’area dei registri e sottraete 1 all’indirizzo di riferimento.
Notazione di riferimento | Indirizzo iniziale a base zero | Esempio |
|---|---|---|
| | Holding register 40001 |
| | Holding register 40101 |
| | Holding register 40232 |
| | Holding register 40380 |
Confermate la convenzione di indirizzamento del master Modbus prima della messa in servizio. Uno scostamento di un registro è la causa più comune di interpretazione errata dei dati.
I valori di lordo, netto e tara sono interi con segno a 32 bit memorizzati in due registri consecutivi a 16 bit.
La parola alta viene trasmessa per prima, con ordine dei registri big-endian.
La posizione decimale è riportata nel registro di configurazione uscite / stato, bit 14..13.
I registri di lordo e netto ad alta risoluzione 40109–40112 utilizzano due decimali aggiuntivi quando il valore ad alta risoluzione è disponibile.
Esempio: quando il campo della posizione decimale indica 2 decimali, il valore con segno a 32 bit 12345 rappresenta 123.45 nell’unità attiva. L’unità è disponibile nel registro 40113 ed è anche codificata nel registro di configurazione uscite/stato.
Funzione | Nome | Utilizzo in Neutron |
|---|---|---|
| Read Coils | Legge gli stati delle uscite digitali; le coil 1..6 corrispondono a DO1..DO6. |
| Read Holding Registers | Legge i registri scrivibili e quelli relativi ai comandi. |
| Read Input Registers | Legge dati di processo, pesi e registri di stato. |
| Write Single Coil | Imposta un’uscita digitale quando la relativa funzione è disattivata. |
| Write Single Register | Scrive un holding register, compresi i campi relativi ai comandi. |
| Write Multiple Coils | Imposta più uscite digitali quando le relative funzioni sono disattivate. |
| Write Multiple Registers | Scrive in blocco comando, parametri e dati di taratura. |
Le operazioni di scrittura sulle uscite controllate da una funzione configurata vengono rifiutate. Tra le uscite tipicamente controllate da funzioni vi sono quelle di tolleranza e dosaggio.
Riferimento Input / Holding | Descrizione | Tipo di dati / note |
|---|---|---|
| Peso lordo | INT32 con segno, ordine dei registri big-endian. |
| Peso netto | INT32 con segno, ordine dei registri big-endian. |
| Stato della bilancia | Campo di bit; vedere la sezione 6.3. |
| Stato del comando | Stato di elaborazione del comando. |
| Configurazione uscite / stato | Campo di bit: uscite, unità e posizione decimale. |
La mappa principale consente ai master semplici di ottenere peso netto o lordo e dati di stato essenziali utilizzando un piccolo intervallo contiguo di registri.
Holding register | Descrizione | Tipo di dati / note |
|---|---|---|
| Peso lordo | INT32 con segno. |
| Peso netto | INT32 con segno. |
| Peso di tara | INT32 con segno. |
| Stato della bilancia | Campo di bit; vedere la sezione 6.3. |
| Configurazione uscite / stato | Campo di bit; vedere la sezione 6.3. |
| Lordo ad alta risoluzione | INT32 con segno; due decimali aggiuntivi, se disponibili. |
| Netto ad alta risoluzione | INT32 con segno; due decimali aggiuntivi, se disponibili. |
| Unità | 0 = g; 1 = kg; 2 = t; 3 = lb. |
| Maschera degli ingressi digitali | Bit 0..5 = DI1..DI6. |
| Maschera delle uscite digitali | Bit 0..5 = DO1..DO6. |
| Maschera delle funzioni delle uscite | Un bit impostato indica che l’uscita corrispondente è controllata da una funzione. |
| Punti ADC | Valore ADC grezzo. |
| Millivolt | Segnale della cella di carico in mV. |
| Stato del comando | Stato di elaborazione del comando. |
| Comando | Scrivete qui il codice del comando. |
| Parametro 1 del comando | Parametro opzionale del comando in 40232. |
Bit | Significato (se il valore del bit=1) |
|---|---|
| Il peso netto è negativo. |
| Il peso lordo è negativo. |
| Il peso è stabile. |
| Condizione di sottocarico. |
| Condizione di sovraccarico. |
| La tara è attiva. |
| La tara preimpostata / manuale è attiva. |
| Il peso lordo è zero. |
| L’ingresso digitale 1 è attivo. |
| L’ingresso digitale 2 è attivo. |
| È attivo un errore della bilancia / ADC. |
Bit | Significato |
|---|---|
| Stato delle uscite digitali: DO1..DO6. |
| Codice dell’unità attiva: 0 = g; 1 = kg; 2 = t; 3 = lb. |
| Errore della bilancia / cella di carico. |
| Codice della posizione decimale per i valori di peso standard. |
Per le applicazioni che richiedono tutti gli stati delle uscite, utilizzate il registro 40115. Utilizzate il registro 40116 per determinare quali uscite sono attualmente riservate dalla funzione attiva.
Scrivete un codice di comando nell’holding register 40232. Scrivete il parametro opzionale in 40233 prima di inviare il comando. Lo stato del comando può essere letto da 40231. Il codice di comando 0 azzera il blocco delle ripetizioni e consente di eseguire nuovamente lo stesso comando.
Codice del comando | Parametro 40233 | Azione |
|---|---|---|
| | Nessun comando; azzera il blocco delle ripetizioni. |
| | Azzera dopo il controllo della stabilità. |
| | Azzera immediatamente. |
| | Esegue la tara dopo il controllo della stabilità. |
| | Esegue immediatamente la tara. |
| | Cancella la tara. |
| Maschera di bit delle uscite | Imposta le uscite digitali secondo la maschera di bit. |
Scorciatoia: anche la scrittura del codice di comando nell’holding register 40001 esegue il comando. Per un’integrazione prevedibile sono consigliati i registri dei comandi estesi 40232 e 40233, soprattutto quando serve un parametro.
Le coil 1..6 corrispondono a DO1..DO6.
Utilizzate le funzioni 01, 05 e 15 per leggere o scrivere le coil.
Un’uscita può essere modificata tramite Modbus soltanto quando la relativa funzione è disattivata.
Se un’uscita è controllata da una funzione di tolleranza, dosaggio o altra funzione attiva, il dispositivo rifiuta le scritture Modbus su quell’uscita.
Esempio: per attivare DO1 e DO3 con il codice di comando 25, scrivete la maschera di bit binaria 000101 (decimale 5) in 40233, quindi scrivete 25 in 40232. Verificate il risultato tramite il registro 40115 o le coil 1..6.
La calibrazione viene eseguita tramite holding register. I dati di calibrazione riuscita vengono memorizzati nella memoria flash. Se la calibrazione fallisce, i dati modificati non vengono salvati.
Riferimento Holding | Indirizzo iniziale a base zero | Descrizione |
|---|---|---|
| | Campo di bit dello stato di calibrazione. |
| | Canale della bilancia. |
| | Numero di decimali utilizzati per i pesi di calibrazione. |
| | Numero di punti di calibrazione validi. |
| | Punto ADC di zero, INT32 con segno. |
Bit dello stato di calibrazione | Significato |
|---|---|
| Il punto di zero esiste. |
| Il primo punto del peso di calibrazione esiste. |
| La bilancia dispone della calibrazione minima valida. |
| È attivo un errore della bilancia / ADC. |
Il punto 1 inizia da 40310, indirizzo iniziale a base zero 309. Ogni punto di calibrazione utilizza otto registri. Il registro iniziale del punto N è 40310 + ((N - 1) x 8).
Offset nel blocco del punto | Descrizione |
|---|---|
| Indicatore di validità: 0 = non valido; 1 = valido. |
| Peso di calibrazione, INT32 con segno. |
| Punto ADC, INT32 con segno. |
| Fattore x100, INT32 con segno. |
| Riservato. |
Esempi: punto 1 = 40310-40317; punto 2 = 40318-40325; punto 3 = 40326-40333; punto 8 = 40366-40373.
Riferimento Holding | Indirizzo iniziale a base zero | Descrizione |
|---|---|---|
| | Comando. |
| | Numero del punto. |
| | Peso di calibrazione, INT32 con segno. |
| | Indicatori. |
| | Attivazione. |
| | Risultato del comando. |
| | Ultimo comando eseguito. |
Comando | Descrizione |
|---|---|
| Calibra lo zero. |
| Calibra il punto di peso. |
| Elimina il punto di calibrazione. |
| Elimina il punto di zero. |
| Elimina tutta la calibrazione. |
| Ricarica / inizializza la bilancia. |
Registro degli indicatori 40384: il bit 0 determina se è richiesta la stabilità. Il valore 0 esegue immediatamente; il valore 1 richiede una media ADC stabile. Tutti gli altri bit degli indicatori sono riservati.
Risultato 40386 | Significato |
|---|---|
| OK. |
| Comando errato. |
| Dati non validi. |
| Non consentito. |
| Comando non supportato. |
| Calibrazione fallita. |
Il firmware elabora la calibrazione soltanto quando il registro di attivazione 40385 passa a un valore diverso da zero. Utilizzate la sequenza seguente per ogni comando di calibrazione:
Scrivete il comando e tutti i parametri richiesti.
Scrivete 40385 = 1 per eseguire l’operazione.
Attendete il completamento del comando e leggete 40386.
Scrivete 40385 = 0 per azzerare l’attivazione.
Per il comando successivo, scrivete i parametri e portate nuovamente 40385 a 1.
Comando | Calibrare lo zero |
|---|---|
Scopo | Write Multiple Registers a partire dall’indirizzo a base zero 379. |
Risposte | |
| Comando: calibrare lo zero. |
| Numero del punto non utilizzato. |
| Peso di calibrazione non utilizzato. |
| Richiede una media ADC stabile. |
| Avvia l’operazione. |
Leggete 40386 | Risultato previsto: 0 (OK). |
Comando | Calibrare il punto 1 con 10.000 kg |
|---|---|
Scopo | Per 40302 = 3, moltiplicate il peso di calibrazione per 1000. |
Risposte | |
| Comando: calibrare il punto di peso. |
| Numero del punto 1. |
| 10.000 kg x 1000. |
| Richiede una media ADC stabile. |
| Avvia l’operazione. |
Leggete 40386 | Risultato previsto: 0 (OK). |
Comando | Eliminare il punto 1 |
|---|---|
Scopo | Rimuove il primo punto di calibrazione. |
Risposte | |
| Comando: eliminare il punto di calibrazione. |
| Numero del punto 1. |
| Avvia l’operazione. |
Comando | Eliminare tutta la calibrazione |
|---|---|
Scopo | Rimuove tutti i dati di calibrazione memorizzati. |
Risposte | |
| Comando: eliminare tutta la calibrazione. |
| Avvia l’operazione. |
Configurate SCI per la combinazione di interfacce richiesta e impostate MBA sull’ID slave / unità Modbus richiesto.
Per Modbus TCP, confermate l’indirizzo IP e collegatevi alla porta TCP 502. Per Modbus RTU, fate corrispondere i parametri seriali e verificate il cablaggio.
Leggete un registro noto, come 40113 (unità) o 40107 (stato della bilancia), per validare l’indirizzamento.
Leggete 40101-40106 e decodificate i valori con segno a 32 bit di lordo, netto e tara utilizzando la posizione decimale riportata.
Verificate lo stato della bilancia, gli ingressi e le uscite digitali prima di attivare le funzioni di controllo.
Utilizzate i registri dei comandi e le funzioni di calibrazione soltanto dopo aver confermato che il canale corretto della bilancia e lo stato applicativo siano attivi.
Sintomo | Causa probabile | Azione |
|---|---|---|
Nessuna risposta Modbus | L’interfaccia di comunicazione della bilancia (SCI) non è configurata per l’interfaccia selezionata; IP/porta o impostazioni seriali errati; cablaggio non corretto. | Verificate SCI, porta TCP 502, MBA, raggiungibilità di rete, parametri seriali e cablaggio fisico. |
I valori appaiono spostati o non validi | Il client utilizza una conversione errata tra riferimenti e registri a base zero; le parole a 32 bit vengono decodificate nell’ordine sbagliato. | Controllate la convenzione di indirizzamento del client e utilizzate INT32 con segno con ordine dei registri big-endian. |
Il peso ha una posizione decimale errata | Il client ignora la configurazione della posizione decimale o il formato ad alta risoluzione. | Leggete 40108 e applicate i bit 14..13; utilizzate i registri ad alta risoluzione soltanto quando necessario. |
Non è possibile scrivere l’uscita | L’uscita è controllata da una funzione assegnata. | Leggete 40116 e disattivate la funzione dell’uscita interessata prima di controllarla tramite Modbus. |
Lo stesso comando non viene eseguito nuovamente | Il blocco delle ripetizioni non è stato azzerato. | Scrivete il comando 0 in 40232, quindi inviate nuovamente il comando. |
Il comando di calibrazione non ha effetto | L’attivazione non è passata a un valore diverso da zero oppure non è stata azzerata dopo un comando precedente. | Impostate tutti i parametri, portate 40385 a 1, leggete 40386, quindi riportate 40385 a 0. |
Nota di sicurezza: calibrazione, azzeramento, tara e controllo delle uscite possono influire sul risultato della pesatura e sulle macchine collegate. Applicate il controllo degli accessi, validate i comandi nell’applicazione host e assicuratevi che tutte le operazioni rispettino i requisiti metrologici e di sicurezza delle macchine applicabili.
Questo capitolo descrive l’interfaccia CHECKWEIGHER di base, versione 1 della mappa dei registri. Supporta la lettura dello stato del processo e dell’ultimo risultato completato, la selezione di una ricetta esistente, la configurazione dell’avvio automatico e START / STOP / STOP NOW / RESET. Modifica delle ricette, configurazione dei filtri, selezione dell’applicazione, assegnazione degli I/O e streaming diagnostico dettagliato non sono inclusi. Configurateli tramite la normale interfaccia di impostazione prima di utilizzare questo blocco.
La mappa è identica su Modbus TCP e sulle interfacce Modbus RTU attivate. Utilizzate un solo client/master di controllo; ulteriori lettori possono monitorare i dati. Esiste una sola casella dei comandi condivisa tra tutti i trasporti, non una per client. Non utilizzate richieste broadcast per questa interfaccia. Prima di controllare, leggete il blocco e confermate application=4 (CHECKWEIGHER), canale e validità dell’istantanea.
Gli indirizzi seguenti sono indirizzi PDU a base zero. Per i client che utilizzano la notazione 4xxxx, riferimento = 40001 + indirizzo: l’indirizzo 400 è 40401 e l’indirizzo 480 è 40481. Utilizzate la funzione 03 (o 04) per leggere. Scrivete i comandi soltanto con la funzione 16 (0x10), iniziando da 480 e scrivendo esattamente otto registri. La funzione 06 e le scritture parziali vengono rifiutate. I registri di risultato e stato sono di sola lettura. L’intervallo tra i blocchi di lettura e scrittura non è leggibile.
Leggete l’indirizzo 400, quantità 48, per ottenere stato, conferma del comando e ultimo risultato in un’unica richiesta. In alternativa, leggete 400/quantità 24 per lo stato oppure 424/quantità 24 per il risultato. Tutti i valori a 32 bit utilizzano prima la parola alta; ogni registro segue l’ordine Modbus standard con byte alto per primo. Non dividete un valore a 32 bit tra richieste separate.
PDU / riferimento | Parole | Nome / tipo | Descrizione |
|---|---|---|---|
| | MAP_VERSION / UINT16 | 1 per questa mappa. |
| | BOOT_ID / UINT32 | Token di sessione casuale diverso da zero generato all’avvio del dispositivo. Riportatelo in ogni scrittura; non viene mantenuto dopo un riavvio. Non è una credenziale di sicurezza. |
| | CHANNEL / UINT16 | Canale di pesatura attuale. |
| | APPLICATION / UINT16 | Deve essere 4 per il controllo. |
| | STATE / UINT16 | 0 IDLE; 1 START_CHECK; 2 RUN; 3 DRAINING; 4 PAUSED; 5 STOPPED; 6 ERROR; 7 CONS_LOST. |
| | ACTIVE_ID / UINT16 | Ricetta selezionata; può differire da RESULT_ID del prodotto precedente. |
| | AUTOSTART / UINT16 | CWAUTO persistente: 0 disattivato, 1 attivato. |
| | PROCESS_ERROR / UINT16 | Errore di processo bloccante attuale; 0 nessuno. |
| | BELT / UINT16 | Richiesta logica del nastro, 0/1; non è un feedback del motore. |
| | CONS / INT16 | -1 (0xFFFF) non assegnato; 0 inattivo; 1 attivo. |
| | PQ / UINT16 | Prodotti in attesa. |
| | EQ / UINT16 | Eventi delle uscite in attesa/attivi. |
| | AUTO_STATE / UINT16 | Esito dell’avvio automatico: vedere 10.5. |
| | AUTO_ERROR / UINT16 | Errore dell’avvio automatico all’accensione; 0 nessuno. |
| | SNAPSHOT_VALID / UINT16 | 1 istantanea utilizzabile; 0 non disponibile. Controllate anche APPLICATION prima del controllo. |
| | REQUEST_ID / UINT32 | Ultima richiesta accettata; cambia immediatamente all’accettazione. |
| | ACK_ID / UINT32 | Ultima richiesta completata. 0 significa nessuna dall’avvio. |
| | COMMAND_STATE / UINT16 | 0 IDLE; 1 BUSY; 2 DONE; 3 ERROR. |
| | COMMAND_ERROR / UINT16 | Errore applicativo della richiesta completata; vedere 10.4. |
| | APPLIED_MASK / UINT16 | Bit 0 selezione della ricetta applicata; bit 1 avvio automatico applicato. Può essere diverso da zero se START fallisce. |
| | LAST_COMMAND / UINT16 | Codice di comando dell’ultima richiesta accettata. |
| | RESULT_SEQ / UINT32 | Sequenza dell’ultimo prodotto completato; confrontate insieme a BOOT_ID. |
| | RESULT_ID / UINT16 | Ricetta utilizzata per questo risultato. |
| | RESULT_FLAGS / UINT16 | Bit 0 risultato esistente; bit 1 massa valida/rappresentabile; bit 2 limiti rappresentabili; bit 3 overflow/conversione numerica non valida. |
| | DECIMALS / UINT16 | Decimali per W, LO e HI di questo risultato. |
| | UNIT / UINT16 | 0 g; 1 kg; 2 t; 3 lb; 4 oz; 5 N; 65535 altra/sconosciuta. Non assumete g per unità sconosciute. |
| | W / INT32 | Massa netta che tiene conto della tara; dividete per 10^DECIMALS. Utilizzate soltanto quando il bit 1 di RESULT_FLAGS è impostato. |
| | LO / INT32 | Limite inferiore di tolleranza; utilizzate soltanto con il bit 2 degli indicatori. |
| | HI / INT32 | Limite superiore di tolleranza; utilizzate soltanto con il bit 2 degli indicatori. |
| | WS / UINT16 | Classificazione della massa: 0 LOW; 1 OK; 2 HIGH; 3 ERROR. |
| | LTS / UINT16 | Lunghezza: 0 OK; 1 LENGTH_LOW; 2 LENGTH_HIGH; 3 DISABLED. |
| | RESULT / UINT16 | 0 LOW; 1 OK; 2 HIGH; 3 ERROR; 4 OVERLAP; 5 ABORTED; 6 ABORTED_CONS. |
| | PRODUCT_ERROR / UINT16 | Errore di questo prodotto; separato da PROCESS_ERROR. |
| | NS / UINT16 | Campioni accettati dell’ultimo risultato completato, prima del taglio dei valori estremi; non il conteggio dei campioni del prodotto attuale. |
| | TD / UINT32 | Tempo di rilevamento in millisecondi dall’avvio; torna a zero dopo circa 49.7 giorni. |
| | ET / UINT32 | Millisecondi dal rilevamento al risultato. |
| | LT / UINT32 | Durata ON del sensore prodotto in millisecondi; 0 in modalità di attivazione tramite massa. |
| | RESERVED / UINT16 | 0; ignorate per la versione 1. |
Stato e ultimo risultato vengono copiati sotto il blocco del processo. Ogni risposta contiene un’istantanea coerente; una richiesta successiva può vedere dati più recenti. RESULT_SEQ, RESULT_ID, DECIMALS e UNIT appartengono al risultato memorizzato, non alla ricetta attualmente selezionata. Prima del primo risultato, il bit 0 degli indicatori non è impostato: non interpretate i campi del risultato riempiti di zeri come un prodotto reale di peso zero. La lettura non consuma né cancella mai un risultato.
Esempio: W high=0x0000, low=0x07D1 fornisce l’intero con segno 2001. Con DECIMALS=1 e UNIT=0, la massa è 200.1 g. I valori negativi utilizzano il complemento a due a 32 bit. Se la conversione supera INT32 o il valore della bilancia non è rappresentabile, il bit di validità corrispondente non è impostato, i relativi registri numerici sono zero e viene impostato il bit 3 degli indicatori. Il risultato originale del prodotto non cambia.
Indirizzo / riferimento | Nome | Valore |
|---|---|---|
| | 0 solo impostazioni; 1 START; 2 STOP DRAIN; 3 STOP NOW; 4 RESET. |
| CHANGE_MASK | Bit 0: seleziona RECIPE_ID. Bit 1: imposta AUTOSTART. Gli altri bit devono essere 0. |
| RECIPE_ID | 1–500 quando il bit 0 della maschera è impostato. Altrimenti scrivete 0. La ricetta deve già esistere. |
| | 0 o 1 quando il bit 1 della maschera è impostato. Altrimenti scrivete 0. |
| REQUEST_ID | |
| BOOT_ID | |
Per COMMAND 2, 3 o 4, CHANGE_MASK, RECIPE_ID e AUTOSTART devono essere tutti 0. Le impostazioni possono essere combinate con COMMAND 0 o 1. Le modifiche alla selezione della ricetta e all’avvio automatico richiedono un processo arrestato e svuotato. START senza il bit di modifica della ricetta avvia quella attualmente selezionata. La selezione dell’applicazione e la creazione delle ricette restano fuori dall’ambito Modbus.
L’intero frame viene validato prima dell’accettazione. Nessuna scrittura parziale del blocco di controllo ha effetto. Una risposta normale alla funzione 16 significa che la richiesta è stata accettata nella casella, non che START sia riuscito. L’esecuzione avviene nel ciclo principale esistente. Interrogate finché ACK_ID corrisponde all’ID inviato e COMMAND_STATE è DONE o ERROR. BUSY può durare troppo poco per essere osservato; non richiedete mai di osservarlo prima di accettare DONE.
Mantenete una sola richiesta in sospeso. Se la scrittura va in timeout, rileggete BOOT_ID, REQUEST_ID e ACK_ID. Se il token di avvio è invariato, ritrasmettete, se necessario, esattamente le stesse otto parole. La ripetizione dell’ultima richiesta accettata con dati identici viene confermata senza eseguirla di nuovo, sia durante l’attesa sia dopo il completamento. Vengono rifiutati lo stesso ID con dati modificati, ID saltati o vecchi, un token di avvio diverso o un’altra richiesta durante BUSY. Dopo un riavvio, risincronizzatevi con il nuovo token e lo stato attuale del processo; non ripetete automaticamente un vecchio START.
Per rilevare i duplicati viene conservata soltanto l’ultima richiesta; non esiste un registro persistente dei comandi. Un riavvio della rete senza riavvio del dispositivo non cancella la casella. Questo protocollo presuppone un solo PLC di controllo; non arbitra scrittori concorrenti. Il token di avvio e il contatore delle richieste impediscono ripetizioni accidentali, non accessi non autorizzati.
Viene applicata prima la selezione della ricetta, poi l’avvio automatico e infine il comando. Sintassi, intervallo degli ID e validità della ricetta vengono verificati prima delle modifiche alle impostazioni. Errori della flash possono comunque lasciare applicata un’impostazione precedente. APPLIED_MASK indica esattamente quali impostazioni richieste sono riuscite. Ad esempio, la ricetta 25 e AUTOSTART=1 possono essere salvati mentre START viene rifiutato perché CONS è inattivo: COMMAND_STATE=ERROR, COMMAND_ERROR=11, APPLIED_MASK=3. Le impostazioni non vengono ripristinate. Rileggete ACTIVE_ID e AUTOSTART prima di decidere cosa riprovare.
I codici di errore seguenti appartengono a COMMAND_ERROR e non vanno confusi con i campi di errore del processo o del prodotto. Una scrittura rifiutata a livello di trasporto non modifica la casella o ACK_ID. Indirizzi non validi, scritture su dati di sola lettura, scritture parziali e intervalli di blocco non supportati restituiscono l’eccezione Modbus 02. Una scrittura di controllo di otto parole con indirizzo corretto ma dati, token, sequenza o stato della casella non validi restituisce l’eccezione 03.
Codice | Significato |
|---|---|
| Operazione riuscita. |
| Ricetta selezionata assente o non valida. |
| START rifiutato: peso fuori dall’intervallo consentito. |
| Memoria richiesta non disponibile. |
| CONS configurato è inattivo. |
| L’unità della ricetta non corrisponde a quella della bilancia. |
| La configurazione o lo stato del sensore impedisce l’operazione. |
| Applicazione errata, processo in esecuzione, guasto non risolto o operazione concorrente della bilancia. |
| Argomenti della richiesta non validi o sistema di misura non pronto. |
| Errore di lettura o scrittura delle impostazioni o del database. |
STOP DRAIN non accetta nuovi prodotti e completa prodotti ed eventi delle uscite già accettati. La conferma DONE indica che l’arresto è stato richiesto; STATE=5 ne conferma il completamento. STOP NOW annulla prodotti ed eventi aperti e disattiva le uscite di processo. STOP non sostituisce RESET in presenza di un guasto bloccante. RESET ricontrolla bilancia e prerequisiti e non avvia il nastro; se la causa permane, fallisce. Tutti i comandi utilizzano i normali interblocchi della selezionatrice ponderale. Un risultato è l’esito di una misura, non la conferma che un attuatore fisico di espulsione abbia funzionato.
AUTOSTART è l’impostazione persistente CWAUTO, predefinita a 0. Attivarla non provoca un avvio immediato; combinatela con COMMAND=1 per uno START immediato. All’avvio successivo del dispositivo, l’applicazione CHECKWEIGHER deve essere selezionata, l’azzeramento iniziale deve essere abilitato e riuscire e deve essere disponibile una ricetta permanente valida, l’ultima attiva. Restano validi i normali controlli START. Un tentativo fallito all’avvio non viene ripetuto se un ingresso cambia in seguito. STOP manuale, PAUSE o guasti non provocano un riavvio automatico. Valori invariati non causano un’altra scrittura delle impostazioni.
AUTO_STATE: 0 DISABLED; 1 WAIT_ZERO; 2 ZERO_DISABLED; 3 ZERO_FAILED; 4 NO_PRODUCT; 5 STARTED; 6 START_FAILED; 7 CANCELLED; 8 INACTIVE; 9 INIT_FAILED. AUTO_ERROR è il codice dello START rifiutato all’avvio. Questo è l’esito del tentativo all’avvio; STATE e PROCESS_ERROR descrivono il processo attuale.
Esempio 1 — leggere tutto: funzione 03, PDU start=400, count=48 (riferimento 40401). Verificate MAP_VERSION=1, APPLICATION=4 e SNAPSHOT_VALID=1. Salvate BOOT_ID e ACK_ID. Non serve un comando per leggere i dati.
Esempio 2 — selezionare la ricetta 25, attivare l’avvio automatico e START con un’unica scrittura. Supponete BOOT_ID=0x12345678 e ACK_ID=0. Scrivete la funzione 16, PDU start=480, count=8 con parole decimali: [1, 3, 25, 1, 0, 1, 4660, 22136]. Le parole di avvio sono illustrative: copiatele sempre dal dispositivo. Attendete ACK_ID=1 e COMMAND_STATE=2, quindi verificate STATE=2 (RUN). Se COMMAND_STATE=3, controllate COMMAND_ERROR e APPLIED_MASK.
Esempio 3 — STOP DRAIN. Supponendo completata la richiesta precedente, inviate [2, 0, 0, 0, 0, 2, 4660, 22136]. Attendete ACK_ID=2. DONE conferma l’accettazione; continuate a interrogare finché STATE=5 (STOPPED). I prodotti in attesa possono ancora produrre risultati durante DRAINING.
Esempio 4 — modificare soltanto la ricetta, una volta arrestato il processo: [0, 1, 26, 0, 0, 3, 4660, 22136]. Lascia invariato l’avvio automatico e non avvia. Avviate successivamente con [1, 0, 0, 0, 0, 4, 4660, 22136].
Esempio 5 — ripristinare dopo un guasto risolto: COMMAND=4 con mask/recipe/autostart=0, ID della richiesta successivo e BOOT_ID attuale. Attendete una conferma riuscita; inviate uno START separato, se necessario. Non inviate RESET ripetutamente senza diagnosticare il guasto.
Logica PLC ciclica suggerita (pseudocodice Structured Text; adattate i nomi dei blocchi Modbus al vostro PLC):
ReadHoldingRegisters(Start := 400, Count := 48, Data := Rx);
BootId := JoinUInt32(Rx[1], Rx[2]);
AckId := JoinUInt32(Rx[18], Rx[19]);
IF BootId <> SavedBootId THEN
SavedBootId := BootId; HaveSeenResult := FALSE;
(* Resynchronise command handling; do not replay old START. *)
END_IF;
IF (Rx[15] = 1) AND ((Rx[27] AND 1) <> 0) THEN
Seq := JoinUInt32(Rx[24], Rx[25]);
IF NOT HaveSeenResult OR (Seq <> SavedSeq) THEN
SavedSeq := Seq; HaveSeenResult := TRUE;
IF ((Rx[27] AND 2) <> 0) AND (Rx[29] <> 65535) THEN
Mass := SignedInt32(Rx[30], Rx[31]) / Power10(Rx[28]);
END_IF;
Samples := Rx[40]; ProductResult := Rx[38];
(* Process this snapshot once, including invalid/rejected products. *)
END_IF;
END_IF;NS si riferisce all’ultimo prodotto completato e rimane invariato finché arriva un nuovo risultato. Un blocco dei registri dell’ultimo risultato non è una coda: se due prodotti terminano tra le interrogazioni, il risultato intermedio non è recuperabile tramite questa mappa di base. Monitorate le variazioni di SEQ e scegliete un intervallo di interrogazione inferiore al più breve intervallo tra prodotti. Dopo una riconnessione, decidete se registrare il primo risultato disponibile come istantanea recuperata o utilizzarlo soltanto come riferimento iniziale. Questa interfaccia non garantisce una traccia di audit per ogni prodotto.
Verificate entrambe le convenzioni di indirizzamento, l’ordine delle parole e masse positive e negative note; leggete tutte le 48 parole ed entrambi i sottoblocchi di 24 parole.
Verificate gli indicatori di assenza del risultato prima del primo prodotto, quindi un prodotto OK, LOW e non valido; confermate che ID e unità del risultato restino associati al risultato memorizzato dopo un cambio della ricetta selezionata.
Ripetete una scrittura accettata identica prima e dopo il completamento: deve essere eseguita una volta. Provate dati modificati con lo stesso ID, un ID saltato, una scrittura parziale e una scrittura su dati di sola lettura: ciascuno deve essere rifiutato senza modificare le impostazioni accettate.
Provate START con CONS inattivo e controllate APPLIED_MASK; provate STOP DRAIN fino a STOPPED, STOP NOW, RESET del guasto e uno START successivo.
Disconnettete e riconnettete e riavviate il dispositivo. Verificate la risincronizzazione delle richieste e il rifiuto di un vecchio token di avvio. Provate l’avvio automatico attivo e disattivo con azzeramento iniziale riuscito e fallito.
Ripetete sul PLC effettivo e su entrambi i trasporti TCP/RTU configurati. Confermate che la comunicazione ciclica non impedisca la pesatura o la temporizzazione delle uscite.
Le tabelle dei registri utilizzano riferimenti 4xxxx a base uno. Per il riferimento 40101, l’indirizzo PDU a base zero è 100. Utilizzate la convenzione di indirizzamento richiesta dal vostro client Modbus.
I pesi lordo e netto ad alta risoluzione nei registri 40109–40112 utilizzano due decimali aggiuntivi, se disponibili. Decodificateli come valori con segno a 32 bit e tenete conto della configurazione della posizione decimale.
No. Contiene il risultato dell’ultimo prodotto completato e rimane invariato finché arriva un nuovo risultato. Monitorate SEQ e scegliete un intervallo di interrogazione inferiore al più breve intervallo tra prodotti. I risultati intermedi non possono essere recuperati da questa mappa di base.
Risincronizzate la gestione dei comandi quando cambia BOOT_ID. Leggete BOOT_ID e ACK_ID attuali, non ripetete un vecchio START e seguite la sequenza della casella dei comandi e i controlli descritti negli esempi PLC.
Guida ai comandi CSCP per Neutron: struttura dei messaggi, pesatura, configurazione, conteggio, controllo del peso e I/O digitali.
Integrazione OPC UA per Neutron: connessioni sicure, dati di pesatura in tempo reale, acquisizione stabile e integrazione PLC/SCADA.
Vi serve aiuto con il software, la connettività o l’utilizzo di una soluzione? Descrivete il problema, così potremo aiutarvi a individuare il passo successivo.