Oppure

Loading
17/01/18 17:28
Thejuster
Salve ragazzi sono ancora alle prese con il mio progetto ormai quasi terminato.

Dopo un problema di debounce che ho avuto con dei pulsanti industriali,
Ho finalmente ripreso il cammino per la lettura.

Chiedevo se c'è un metodo più corretto per misurare i giri.

La scorsa volta nel topic precedente, avevo dimostrato di dovere leggere i valori
tramite i due sensori

Quando sono:

Sensore1: ON Sensore2: ON ( Giro Completo)

in questo caso quando il giro è completo faccio fare:


contagiri++;



però arrivo ad un punto dove la cifrà anche se la variabile è long non tiene tutto.
si ferma tipo a 99999 e poi si riazzera.

Mi servirebbe un modo più preciso di calcolare i giri.
Anche con un algoritmo diverso o magari una divisione degli stessi.

Cosa mi consigliate?
mire.forumfree.it/ - Mire Engine
C# UI Designer
17/01/18 17:40
Mikelius
Si ferma al valore massimo di long, oppure proprio a 99999?
Perché se si ferma a 99999 e si resetta, mi sa che c'è un bug nel programma, se invece come presumo, va in overflow, non credo ci sia molto da fare che creare utilizzare una variabile maggiore.
Hai la possibilità di utilizzare un tipo "unsigned long long" (hai bisogno di numeri negativi ad esempio) ?
altrimenti dovresti spezzettarli, tipo ogni 100.000 giri aumenti la variabile centomilaGiri, e cosi via...
Con questo metodo riusciresti a contare un valore fino al quadrato di quello che conti attualmente.
Poi se li devi mostrare a video usi una stringa numerica.

Oppure un long double (non useresti la parte con la virgola)
Ultima modifica effettuata da Mikelius 17/01/18 17:42
aaa
17/01/18 18:16
nessuno
Non ho capito nulla perché non ho letto la precedente discussione ma la questione dell'overflow del long non mi sembra sensata
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
17/01/18 18:23
Thejuster
ho dichiarato una variabile di tipo unsigned long contagiri;

ogni volta che i sensori dell'encoder sono Alti, viene aumentata la variabile di 1.
e cmq si arriva precisamente a 99999 in una frazione di qualche secondo
per poi ricominciare da 1000 e non da 0

bug non saprei, anche perché semplicemente va ad aumentare solo li quella variabile.
Solo in quel ciclo e nulla più.

mire.forumfree.it/ - Mire Engine
C# UI Designer
17/01/18 18:42
Mikelius
Postato originariamente da Thejuster:

ho dichiarato una variabile di tipo unsigned long contagiri;

ogni volta che i sensori dell'encoder sono Alti, viene aumentata la variabile di 1.
e cmq si arriva precisamente a 99999 in una frazione di qualche secondo
per poi ricominciare da 1000 e non da 0

bug non saprei, anche perché semplicemente va ad aumentare solo li quella variabile.
Solo in quel ciclo e nulla più.



Senza vedere il codice è difficile...
Controllato se hai Hardware guasto?
i valori del contagiri li vedi dal debug, o li mostri a video su un LCD?
Ultima modifica effettuata da Mikelius 17/01/18 18:44
aaa
17/01/18 20:18
Roby94
Postato originariamente da Mikelius:
Controllato se hai Hardware guasto?

A pancia sembra strano un difetto HW crei un errore cosi "preciso", mi aspetterei errori in base 2 non in base 10, sembra molto piu un errore umano.
aaa
17/01/18 21:04
Mikelius
Postato originariamente da Roby94:

Postato originariamente da Mikelius:
Controllato se hai Hardware guasto?

A pancia sembra strano un difetto HW crei un errore cosi "preciso", mi aspetterei errori in base 2 non in base 10, sembra molto piu un errore umano.


Penso anche io più a problema lato SW che HW, ma tutto può essere, comunque ho scritto Hardware guasto, ma includevo pure "errori di progetto", cioè riguardare pure se lato HW tutto è ok.

aaa
18/01/18 10:31
Thejuster
Capisco,
Le ipotesi cmq possono essere tante.

Andando un attimo in :ot:

In primis, sappiamo tutti che programmare arduino per uso aziendale comporta delle controindicazioni.
La più gettonata è ovviamente la limitazione del voltaggio.

Siamo costretti ad operare a 5v.

Su macchine come queste che girano a 380V e più, e un problema.
Basta una scintilla per bruciare tutto.

Mi è capitato già diverse volte in questa riparazione.
1° di dover buttare un arduino
2° di dover buttare il display lcd.
3° di dover buttare il modulo relay.

Purtroppo non avendo la possibilità di acquistare un PLC Siemens dal costo esorbitante,
e tentare di impararlo a programmare, (Anche se la vedo dura) opto spesso per arduino.
Sia per il low cost, che l'assortimento degli accessori con prezzo accessibile.

Molti dei macchinari che abbiamo sono Home made, nel senso costruiti apposta per quel determinato scopo.
E i produttori / costruttori che le hanno fabbricate, hanno chiuso bottega o venduto il marchio.

Alcuni componenti come appunto i PLC che sono già programmati, se si brucia la CPU come è successo a questo, e non avendo più il riferimento della casa madre, era da buttare via tutto il macchinario.
Ma giocando con arduino ho risolto il problema.

Il macchinario è questa enorme bestia :rotfl:

cdn.discordapp.com/attachments/278928749246939136/402429604561813514/…

Con un pò di olio di gomito ho ricostruito tutta la plancia e un contenitore ad hoc
per contenere sia il display che tutto il resto

cdn.discordapp.com/attachments/278928749246939136/402424261752651776/…

come vedete dalla foto a sinistra c'è quel carro stringente che cammina nel senso che ruota su asse X

L'encoder mi serve per stringere lo spessore del vetro che entrerà in quella macchina.
Se è troppo stretto, spaccherà tutto il vetro. Se troppo largo, il vetro scivolerà sui motori combinando un vero distrastro.

Deve essere settato al punto giusto, Non troppo stretto per evitare rotture o vibrazioni,
e ne troppo largo per evitare che scivoli.

Ora il problema è proprio questo.

avendo quella variabile contagiri++ quando viene azionato il realy da 5v da arduino che a sua volta
va ad eccitare la bobina del relay a 24v della macchina per permettere ai motori di allargare o stringere il carro.

L'encoder o meglio la variabile, mi da un incredibile numero di incremento molto veloce.
tipo da 0 a 2 secondi un valore tipo 10000.

quello che mi servirebbe e poter contare correttamente quanti giri fa questo benedetto encoder.
in modo da poter salvare i dati nella EEPROM e confrontarli ogni volta che si imposta uno spessore manualmente dal display tramite pulsanti.

Attualmente ho misurato con un calibro.

Spessore di 5 mm
equivale dalla plancia al pistone 9,6mm precisi.

Spessore di 8mm = 9,2mm precisi.

L'unico problema che ho ora e questo.
Cercare un modo per contare dei giri in modo preciso.

L'encoder in questione è questo:

mouser.com/ds/2/307/…
mire.forumfree.it/ - Mire Engine
C# UI Designer