Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Funzione Plc - Dentro o fuori l'area?


Messaggi consigliati

Inserito: (modificato)

Buon giorno a tutti.

Sapete se esiste un archivio dove trovere degli algoritmi vari, magari anche spiegati?

Con un plc fx3u-mitsubishi devo realizzare questa funzione.

In un piano ho un punto mobile (due assi inverter + encoder) del quale so le coodinate (x,y), il cliente poi dichiara da 3 a 6 punti fissi che formeranno un'area vietata.

Devo fare in maniera che il cliente cuando muove il punto non possa entrare innavertitamente nell'area.(eventualmente anticipando la fermate con un rallentamento). E magari al mattino se trova il punto dentro l'area dare un'allarme.(ho degli encoders assol.)

Grazie a tutti!

ciao.

Modificato: da vdorlg

Inserita:

Beh, questa è una cosa abbastanza difficile da fare con un plc e devi avere anche un po' di basi di geometria analitica.

Comunque sviluppiamola così:

- sia ABC (o anche ABCD, ABCDE, ABCEDF) un poligono non regolare delimitato dai punti ABC (..DEF)

- supponiamo per ipotesi che il poligono sia convesso, se no diventa ancora più incasinato

- sia P un punto sul piano, dobbiamo determinare se interno o esterno al poligono

- Innanzitutto devi farti una funzione che, dati 2 punti A e B, ti restituisca l'equazione della retta passante per A e B (facile)

- poi devi farti una funzione che, dato P e la retta AB, ti dia la distanza punto-retta, dove la distanza si misura sulla perpendicolare tra il punto e la retta (un po' più difficile... ma comunque sono solo formule)

- a questo punto la condizione di "pericolo" tra P e AB è:

Distanza(P,AB)<delta AND (Xp compreso tra Xa e Xb) AND (Yp compreso tra Ya e Yb)

(P si sta avvicinando al "confine" AB)

Ovviamente questa condizione di pericolo è da verificare per tutti i lati: AB, BC, CD, ecc....

- Trovare se P "è dentro o fuori" è ancora più incasinato: si tratta formalmente di risolvere un sistema di disequazioni, però non c'è un metodo semplice per sapere se P si deve trovare, ad esempio, "SOPRA" o "SOTTO" AB, "SOPRA" o "SOTTO" BC, eccetera.

Questo potresti farlo specificare all'operatore che "disegna" l'area proibita, sarebbe un po' più semplice per te. Mentre disegna l'area, ti dovrà riempire anche 3-6 flag (uno per lato) per dirti se l'area proibita è sopra o sotto ad ogni lato.

Abbastanza incasinato? Penso di sì.... Auguri!

Ciao, Emanuele

Inserita:

Sei stato chiarissimo Emanuele! grazie.

L'applicazione è un carro ponte. In base al tipo di produzione si adegua l'area di sorvolo. Attualmente il sistema funziona con una serie complessa di cammes e finecorsa (non è perfetto). Più che complesso , è macchinoso da tarare, in più bisogna prendere la scala ogni volta.

Per fare la decelerazione, la distanza punto-retta va benissimo, solo che se la traiettoria non è perpendicolare a la retta (lato del poligono) ma se arrivo da altre direzioni es. "quasi parallelo" il tutto inizia a rallentare molto prima.

Inserita:
Per fare la decelerazione, la distanza punto-retta va benissimo, solo che se la traiettoria non è perpendicolare a la retta (lato del poligono) ma se arrivo da altre direzioni es. "quasi parallelo" il tutto inizia a rallentare molto prima.

Quindi vuoi poterti muovere MOLTO VICINO alla zona pericolosa PURCHE' PARALLELO ad essa.

In questo caso puoi modificare la condizione

Distanza(P,AB)<delta AND (Xp compreso tra Xa e Xb) AND (Yp compreso tra Ya e Yb)

come:

Distanza(P,AB)<Vh * T ..... AND.. ecc....

dove Vh è la componente di velocità del carroponte PERPENDICOLARE ad AB e T è un tempo di arresto, che so, 2 secondi.

( Vx = v * sin (alfa) ) dove alfa è l'angolo compreso tra il vettore V e il segmento AB (BC,CD, ecc....)

Quindi alfa = arctg (Vy/Vx) - arctg ((By-Ay)/(Bx-Ax))

Vy e Vx sono le velocità dei tuoi assi controllati, ricavabili ad es. dall'azionamento che li pilota

Ciao, Emanuele

Inserita:

Grazie Emanuele, sei stato chiarissimo.

Volevo chiederti: la funzione:

( Vx = v * sin (alfa) )

serve per ricavare Vh ? in questo caso Vh è chiamata Vx?

ti ringrazio ancora, spero un giorno poter esserti d'aiuto.

P.s. Sapresti indicarmi qual'è la materia che tratta tutti questi concetti? cnc, gestione assi, o altro?

Ciao, grazie ancora!

Inserita:

Scusa, ho sbagliato, in realtà è:

Vh=V * sin(alfa)

(...si spiega col fatto che prima l'avevo chiamata Vx, dopo però ho usato quel simbolo per un'altra cosa quindi l'ho cambiato con Vh, ho fatto TROVA-SOSTITUISCI ma evidentemente non dappertutto...)

Ciao, Emanuele

Inserita:
P.s. Sapresti indicarmi qual'è la materia che tratta tutti questi concetti? cnc, gestione assi, o altro?

La gestione di traiettorie è compito specifico del CNC, ma in realtà quello che devi fare tu non rientra in nessuna "materia" predefinita.

L'unico settore da "prendere ad esempio" che mi viene in mente potrebbe essere quello degli LGV.

Certo, se esistesse un buon libro sui CNC, potrebbe essere interessante.... ma non dico "come programmare un CNC in linguaggio ISO" ma "come implementare le funzioni di base di un CNC".

Io ad esempio un paio di gg. fa stavo pensando se esistono "metodi semplici per la trasformazione di piani di lavoro" (tipo: devo disegnare un oggetto su un piano orizzontale usando gli assi XY, voglio disegnare lo stesso oggetto su un piano inclinato a 45° sia rispetto a X che rispetto a Y, usando quindi gli assi XYZ... esiste un algoritmo semplice per farlo?)

Però secondo me è molto difficile trovare materiale "di uso pratico" su questi temi.

Ciao, Emanuele

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...