I/O utente

Sezione dedicata a RosettaCNC
Rispondi
Avatar utente
Pedro
God
God
Messaggi: 7021
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

I/O utente

Messaggio da Pedro » giovedì 14 marzo 2019, 0:37

stavo leggendomi i manuali e non ho capito come posso fare delle macro attivabili da un input utente, segnale esterno, e come attivare, sempre da una macro, una uscita utente.Un esempio sarebbe utile
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

Avatar utente
shineworld
Senior
Senior
Messaggi: 673
Iscritto il: venerdì 18 marzo 2016, 9:44
Località: Vicenza
Contatta:

Re: I/O utente

Messaggio da shineworld » giovedì 14 marzo 2019, 8:43

Con macro si descrive un sistema che in se è molto articolato.

In RosettaCNC si parla di macro:

- Macro locali, presente nel programma principale, e richiamabili con M98, G65, G66. Iniziano con la lettera O<numero_macro> e finiscono con M99.

- Ci sono macro esterne e memorizzate sulla cartella privata macros di ogni macchina (<dati utente>\RosettaCNC-1\machines\<macchina>\macros.
Queste possono essere richiamate per nome

1 - avere un nome (eg: flange_holes) e richiamate con M98 p"flange_holes" o con G65/G66 p"flange_holes" <parametri A B C...>.
2 - avere un numero (eg: 210.ngc) e richiamate con M98 p201 o con G65/G66 p201 <parametri A B C...>.
3 - essere il codice di un nuovo comando custom G (200..499) o M(100.199) ed avere nome m100.ngc g400.ngc ed e essere
richiamate nel codice con M100 <parametri A B C...> G400 <parametri A B C...> con un normale comando del linguaggio estendendone
quindi facilmente il set nativo.

Sto sviluppando la possibilità di avere dei bottoni sulla UI per richiamare delle macro quando la CNC è in stato di IDLE (non sta lavorando) e
di fare la stessa cosa con alcuni ingressi della scheda configurati per richiedere l'esecuzione di una macro (sempre con CNC in IDLE).

Penso sarà disponibile se non con il prossimo rilascio al massimo con quello che seguirà.

In questo momento ho finito la gestione dei comandi dinamici, ovvero la possibiltà di gestire e modificare dinamicamente il codice G in esecuzione sulla base di input numerici da utente, stato di un ingresso, probing, etc. che però hanno effetto solo quando la CNC va eseguire il blocco di codice G in cui è presente un M66 (test ingresso), M109/M120 (interfaccia UI con utente), G38.2/3/4/5 probing.

Un esempio, sebbene non propriamente una lavorazione reale, del nuovo sistema dinamico in questo video:
https://youtu.be/9Bq6dk-wTik

Nella prima parte si vede infatti che quando il codice arriva alla linea 5:

Codice: Seleziona tutto

M66 P1 L1 Q3
attende per 3 secondi che lo stato dell'ingresso utente 1 vada o sia HIGH e se questo non succede toglie dinamicamente dal percorso utensile un'intera lavorazione fatta con un ciclo custom (G66/G67) chiamando una macro esterna p9212 che fa una svuotatura usando internamente il G12 di fanuc.

Questo è un esempio di come durante l'esecuzione di un programma si possa o meno eseguire una macro in un punto specifico in base allo stato di un ingresso.

Codice: Seleziona tutto

(External data handling)
G0 X0 Y0 Z0 F5000

G1 X100
M66 P1 L1 Q3
M109 P"Input level 1 is #5398" q4
WHILE [#5398 EQ 1] DO01
  G66 p9212 x0 y50 d30 a8 r20 z-20 q1 h1 t1 f5000
  Y50
  G67
  Y0
  BREAK01
END01

G1 X200
G38.2 Z-100 F100
M109 P"Input level 2 is #5398" q4

G1 X300 F5000
#5399 = 10.0 ; Set the default value
M109 Q3 P"Please enter a number"
M109 P"User wrote #5399" q4
G65 P1000

G1 X400
#5399 = 20.0 ; Set the default value
M109 Q3 P"Please enter a number"
M109 P"User wrote #5399" q4
WHILE [#5399 LE 20] DO01
    G65 P1000
    GOTO 1
END01
WHILE [#5399 GT 20] DO01
    G65 P1000
    #5399=[#5399-1]
END01
N1

G1 Y100
#5399 = 0.0 ; Set the default value
M109 Q3 P"Please enter rotation angle"
G68 X0 Y0 R#5399
#5399=50
G65 P1000

M2

( draw a box of user entered size )
o1000
  G91
  G1 X#5399
  Y#5399
  X-#5399
  Y-#5399
  G90
M99
Per la seconda domanda le uscite utente sono gestibili in una macro tramite la funzione:

Codice: Seleziona tutto

M62	P<numero_uscita>	Turn out ON	
M63	P<numero_uscita>	Turn out OFF
Spero di aver centrato le richieste.

Avatar utente
Pedro
God
God
Messaggi: 7021
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

Re: I/O utente

Messaggio da Pedro » giovedì 14 marzo 2019, 9:20

tutto molto chiaro :)
ringrazio e chiedo: con il comando attendi per n secondi l'input N. x posso inserire una macro nidificata, mentre attendo l'input x attendo un input y? se si, quante nidificazioni posso fare?
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

Avatar utente
shineworld
Senior
Senior
Messaggi: 673
Iscritto il: venerdì 18 marzo 2016, 9:44
Località: Vicenza
Contatta:

Re: I/O utente

Messaggio da shineworld » giovedì 14 marzo 2019, 9:34

In questo momento non sono possibili altre operazioni (macro) su attesa di un'istruzione dinamica ma solo come effetto della conclusione della stessa.
Ci devo pensare su un po', si può sempre mettere mano al codice e cambiare le cose...

Avatar utente
Pedro
God
God
Messaggi: 7021
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

Re: I/O utente

Messaggio da Pedro » giovedì 14 marzo 2019, 9:41

ho capito, grazie della risposta.
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

Avatar utente
shineworld
Senior
Senior
Messaggi: 673
Iscritto il: venerdì 18 marzo 2016, 9:44
Località: Vicenza
Contatta:

Re: I/O utente

Messaggio da shineworld » giovedì 14 marzo 2019, 9:50

Essendo di base un PLC non è precluso che in futuro non apriremo la possibilità di costruire blocchi di codice in linguaggio strutturato o grafico da usare per operazioni real-time e cicliche, oppure che tramite la G100 non creiamo un set di funzioni real-time prefatte da attivare/disattivare...

Codice: Seleziona tutto

G100	P A B C …	Internal PLC function Call
Il sistema è ancora un libro bianco su tante aspetti e su cui abbiamo molta libertà d'azione :)

Avatar utente
Pedro
God
God
Messaggi: 7021
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

Re: I/O utente

Messaggio da Pedro » giovedì 14 marzo 2019, 10:27

a mio modestissimo modo di vedere alcune funzioni già potrebbero servire come input, esterni o da pannello, durante il runtime come, una per tutte, l'attivazione e disattivazione del lubrorefrigerante, utile se si sta eseguendo un gcode che non lo prevedeva ma che in lavorazione appare utile o l'attivazione disattivazione dell'aspiratore trucioli; sono solo piccoli esempi
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

Avatar utente
shineworld
Senior
Senior
Messaggi: 673
Iscritto il: venerdì 18 marzo 2016, 9:44
Località: Vicenza
Contatta:

Re: I/O utente

Messaggio da shineworld » giovedì 14 marzo 2019, 10:37

Durante la lavorazione sono disponibili dei bottoni su toolbar per attivare e disattivare al volo alcune uscite (Aux1..Aux4) fatto apposta per avviare in corso d'opera eventuali extra-lubrificazioni, soffio aria, etc.

Avatar utente
Pedro
God
God
Messaggi: 7021
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

Re: I/O utente

Messaggio da Pedro » giovedì 14 marzo 2019, 10:52

chiarissimo, grazie
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

Rispondi

Torna a “RosettaCNC”