software:mdurosettacncmodbus

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:

  1. È un protocollo pubblicato apertamente e royalty-free.
  2. Muove raw bits e words senza porre molte restrizioni ai produttori.
  3. 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.

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
  • Ultima modifica: 2023/03/22 09:07
  • (modifica esterna)