Questa è una vecchia versione del documento!
RosettaCNC Software - Interfaccia dati MODBUS®
Gentile Cliente,
Grazie per aver acquistato questo prodotto. RosettaCNC Board A è progettato e prodotto secondo standard elevati per conferire prestazioni di alta qualità, facilità di utilizzo e di installazione.
In caso di difficoltà durante l'installazione o l'utilizzo del prodotto, si consiglia di consultare in prima istanza le istruzioni o le informazioni riportate nel sito www.RosettaCNC.com.
Serve assistenza ?
Scrivete nel forum presente nel sito www.RosettaCNC.com oppure inviate una email al seguente indirizzo: support@rosettacnc.com, il team di sviluppo di RosettaCNC sarà lieto di rispondervi in tempi brevi.
I diritti d'autore di questo manuale sono riservati. Nessuna parte di questo documento, può essere copiata o riprodotta in qualsiasi forma senza la preventiva autorizzazione scritta. RosettaCNC Motion® non presenta assicurazioni o garanzie sui contenuti e specificatamente declina ogni responsabilità inerente alle garanzie di idoneità per qualsiasi scopo particolare. Le informazioni in questo documento sono soggette a modifica senza preavviso. RosettaCNC Motion® non si assume alcuna responsabilità per qualsiasi errore che può apparire in questo documento. RosettaCNC Motion® è un marchio registrato.
Informazioni
Documento: | MDUROSETTACNCMODBUS | |||
---|---|---|---|---|
Descrizione: | Interfaccia dati MODBUS® | |||
Link: | http://wiki.rosettacnc.com/doku.php/hardware:rosettacncboard:mdurosettacncmodbus | |||
Release documento | Descrizione | Note | Data | |
1.0 | Prima release documento | / | 19/01/2018 |
1. Introduzione
Il protocollo MODBUS® rappresenta un sistema di comunicazione industriale distribuita sviluppata nel 1979 da Gould-Modicon (azienda ora parte del gruppo Schneider Electric) per integrare CNC, PLC’s, computers, terminals, inverter ed altre apparecchiature. È diventato uno standard de facto nella comunicazione di tipo industriale, ed è attualmente uno dei protocolli di connessione più diffusi al mondo fra i dispositivi elettronici industriali. Le principali ragioni di un così elevato utilizzo del MODBUS® rispetto agli altri protocolli di comunicazione sono:
- È un protocollo pubblicato apertamente e royalty-free.
- Muove raw bits e words senza porre molte restrizioni ai produttori.
- Vi sono moltissime librerie commerciali e open-source per una veloce implementazione ed uso del protocollo.
MODBUS® consente la comunicazione fra diversi dispositivi connessi alla stessa rete, nel nostro caso ad esempio una o più schede RosettaCNC che inviano dati di lavorazione e posizione a un computer di supervisione o a dei visori DRO a bordo macchina.
MODBUS® è spesso usato per connettere un computer supervisore con un'unità terminale remota (RTU) nel controllo di supervisione e sistemi di acquisizione dati (SCADA). Esistono diverse versioni del protocollo ma nel nostro caso ci interesseremo solamente di quella su tecnologia Ethernet, il protocollo MODBUS®/TCP.
MODBUS®/TCP è un protocollo di comunicazione MASTER/SLAVE in cui solo un dispositivo può essere MASTER e può controllare tutte le attività degli SLAVE connessi alla stessa rete.
Con la versione 1.6 del firmware della scheda RosettaCNC è stato introdotto all'interno della CNC un server MODBUS® SLAVE con il quale vengono esposti, tramite un certo numero di INPUT REGISTERS, i valori e stati interni della scheda.
Il protocollo implementato è il MODBUS® SLAVE TCP su porta standard 502 ed utilizzante lo stesso indirizzo IP usato dalla scheda per la connessione al software su PC.
Allo stato attuale sono disponibili solo operazioni di lettura di dati organizzati a BIT, BYTE, WORD e LONG.
Per i dati a LONG verranno utilizzati due registri adiacenti in conformazione Big-Endian.
Per i dati WORD verrà utilizzato un singolo registro.
I dati BYTE saranno incapsulati all'interno di un registro e ve ne saranno due per ognuno.
I dati BIT saranno incapsulati all'interno di un registro e ve ne saranno 16 per ognuno.
Il tempo di refresh interno dei registri è fissato a 100ms.
Per garantire l'atomicità dei dati LONG la CNC mette in LOCK lo stato dello SLAVE durante l'aggiornamento interno dei registri.
Se un MODBUS® MASTER tenta di accedere alle informazioni finchè lo SLAVE è in stato di LOCK otterrà lo stato di BUSY e dovrà rimanere in polling affinché lo SLAVE non viene sbloccato.
Per ottimizzare le operazioni di recupero dei dati interni lo SLAVE supporta la lettura multipla di INPUT REGISTER per un massimo di 32 registri alla volta.
Il contratto d'interfaccia tra il MODBUS® SLAVE nella scheda CNC e il prodotto che implementerà la connessione MODBUS® MASTER è vincolato al parametro IR_MODBUS_INTERFACE_LEVEL. La prima operazione da fare appena si accede alla comunicazione con lo SLAVE è quella di recuperare il contenuto di questo registro e adattare le successive richieste al modello di tabella dati relativa.
Attualmente è disponibile la versione 1 del MODBUS_INTERFACE_LEVEL.
Sebbene la scheda RosettaCNC-A supporti fisicamente fino a 4 assi (X/Y/Z/A) lo Slave MODBUS® espone anche gli assi B e C che avranno comunque valori fissi a 0 in quanto non configurati ed utilizzati in questa versione hardware.
Nel pacchetto installazione è presente la cartella “extra\modbusview” con un esempio .NET compilato con Visual Studio 2017 versione Community con cui è possibile vedere quanto semplice si accedere ai dati della scheda RosettaCNC tramite la realizzazione di un Master MODBUS®.
Segue la tabella della versione 1 del MODBUS_INTERFACE_LEVEL.
Tabella Input Registers
Segue la tabella indirizzi degli INPUT REGISTERS disponibili con la MODBUS INTERFACE LEVEL = 1
IR_MODBUS_INTERFACE_LEVEL 0 ; input register [W]: modbus interface level IR_FIRMWARE_VERSION 1 ; input register [W]: firmware version: ; b15..b08 = version ; b07..b00 = release IR_SERIAL_NUMBER 2 ; input register [L]: serial number IR_TARGET_POSITION_X 10 ; input register [L]: target position X [mm/1000] IR_TARGET_POSITION_Y 12 ; input register [L]: target position Y [mm/1000] IR_TARGET_POSITION_Z 14 ; input register [L]: target position Z [mm/1000] IR_TARGET_POSITION_A 16 ; input register [L]: target position A [°/1000] IR_TARGET_POSITION_B 18 ; input register [L]: target position B [°/1000] IR_TARGET_POSITION_C 20 ; input register [L]: target position C [°/1000] IR_PROGRAM_POSITION_X 22 ; input register [L]: program position X [mm/1000] IR_PROGRAM_POSITION_Y 24 ; input register [L]: program position Y [mm/1000] IR_PROGRAM_POSITION_Z 26 ; input register [L]: program position Z [mm/1000] IR_PROGRAM_POSITION_A 28 ; input register [L]: program position A [°/1000] IR_PROGRAM_POSITION_B 30 ; input register [L]: program position B [°/1000] IR_PROGRAM_POSITION_C 32 ; input register [L]: program position C [°/1000] IR_MACHINE_POSITION_X 34 ; input register [L]: machine position X [mm/1000] IR_MACHINE_POSITION_Y 36 ; input register [L]: machine position Y [mm/1000] IR_MACHINE_POSITION_Z 38 ; input register [L]: machine position Z [mm/1000] IR_MACHINE_POSITION_A 40 ; input register [L]: machine position A [°/1000] IR_MACHINE_POSITION_B 42 ; input register [L]: machine position B [°/1000] IR_MACHINE_POSITION_C 44 ; input register [L]: machine position C [°/1000] IM_PROBE_POSITION_X 46 ; input register [L]: probe position X [mm/1000] IM_PROBE_POSITION_Y 48 ; input register [L]: probe position Y [mm/1000] IM_PROBE_POSITION_Z 50 ; input register [L]: probe position Z [mm/1000] IM_PROBE_POSITION_A 52 ; input register [L]: probe position A [°/1000] IM_PROBE_POSITION_B 54 ; input register [L]: probe position B [°/1000] IM_PROBE_POSITION_C 56 ; input register [L]: probe position C [°/1000] IR_WORKING_OFFSET_X 58 ; input register [L]: working offset X [mm/1000] IR_WORKING_OFFSET_Y 60 ; input register [L]: working offset Y [mm/1000] IR_WORKING_OFFSET_Z 62 ; input register [L]: working offset Z [mm/1000] IR_WORKING_OFFSET_A 64 ; input register [L]: working offset A [°/1000] IR_WORKING_OFFSET_B 66 ; input register [L]: working offset B [°/1000] IR_WORKING_OFFSET_C 68 ; input register [L]: working offset C [°/1000] IR_ACT_VELOCITY_X 70 ; input register [L]: actual velocity X [mm/min] IR_ACT_VELOCITY_Y 72 ; input register [L]: actual velocity Y [mm/min] IR_ACT_VELOCITY_Z 74 ; input register [L]: actual velocity Z [mm/min] IR_ACT_VELOCITY_A 76 ; input register [L]: actual velocity A [°/min] IR_ACT_VELOCITY_B 78 ; input register [L]: actual velocity B [°/min] IR_ACT_VELOCITY_C 80 ; input register [L]: actual velocity C [°/min] IR_FEED_OVERRIDE 82 ; input register [W]: feed override [%/10] IR_SPINDLE_OVERRIDE 83 ; input register [W]: spindle override [%/10] IR_PRG_FEED_VELOCITY 84 ; input register [L]: programmed feed velocity [mm/min] IR_ACT_FEED_VELOCITY 86 ; input register [L]: actual feed velocity [mm/min] IR_PRG_SPINDLE_SPEED 88 ; input register [L]: programmed spindle speed [rpm] IR_ACT_SPINDLE_SPEED 90 ; input register [L]: actual spindle speed [rpm] IR_TOOL_LENGTH_OFFSET 92 ; input register [L]: tool lenght offset [mm/1000] IR_TOOL_IN_USE 94 ; input register [W]: tool in use IR_CNC_STATE 95 ; input register [W]: cnc state IR_ALARM_CODE 96 ; input register [W]: alarm code IR_ALARM_INFO_FIELD_A 97 ; input register [W]: alarm info field A IR_ALARM_INFO_FIELD_B 98 ; input register [W]: alarm info field B IR_DIGITAL_INPUTS_STATES 99 ; input register [L]: digital input states: ; b00 = PAU ; b01 = LIM ; b02 = EST1 ; b03 = PRB ; b04 = HSX or JXP ; b05 = HSY or JXM ; b06 = HSZ or JYP ; b07 = HSA or JYM ; b08 = HMO or JZP ; b09 = HMT or JZM ; b10 = HMH or JSA ; b11 = EST2 ; b12 = HPA or JSB ; b13 = HPB or JSF ; b14 = empty ; b15 = empty ; b16 = HMX ; b17 = HMY ; b18 = HMZ ; b19 = HMA ; b20 = HMB ; b21 = HMC ; b22 = empty ; b23 = empty ; b24 = I1 ; b25 = I2 ; b26 = I3 ; b27 = I4 ; b28 = I5 ; b29 = I6 ; b30 = I7 ; b31 = I8 IR_FUNCTION_OUTPUTS_STATES 101 ; input register [L]: digital outputs states: ; b00 = spindle CW ; b01 = spindle CCW ; b02 = flood ; b03 = mist ; b04 = aux1 ; b05 = aux2 ; b06 = aux3 ; b07 = aux4