Vai al contenuto
PLC Forum


arduino e visual net


stefano1979transam

Messaggi consigliati

stefano1979transam

Un saluto a tutti 

spero di essere nella sezione giusta in tal caso mi scuso in anticipo ma ho un problema sul mio progettino che non riesco a risolvere e mi chiedevo se qualcuno nel forum mi potrebbe aiutare.

Premetto che non sono un esperto del settore e da poco tempo ho iniziato ad usare ARDUINO nei miei progetti.

Ultimamente sto lavorando (a livello hobbistico) all'interfacciamento di aurduino con visual net (versione 2017 quella ora istallata) .

Ho creato una pagina grafica di comando con  relativi  pulsanti ,stati ,ecc, e  comando arduino  (tramite usb)  i rele con i vari carichi e stati di feedback di ritorno.

Ho aggiunto anche la lettura delle temperature di varie temperature (sensore dht11 con libreria inclusa) . 

Tutti i dati  praticamente vengono scritti  sul monitor seriale di arduino e visual basic li legge e viceversa.

Il tutto funziona egregiamente stando sempre in modo compilazione, mi spiego meglio:

Collego arduino all' usb del pc ,apro il compilatore di vb net dove ho il programma ,lo eseguo e fin li tutto bene .(i rele vanno ,gli stati dei rele vanno e le temperature ok)

Per continuare a modificare il programma (sia grafico che listato),ho creato un pulsante grafico provvisorio per interrompere l'esecuzione di visual net,con la funzione END.

Il problema si pone quando rilancio l'esecusione del compilatore ,a volte riparte tutto ok mentre altre volte il pc non legge più gli stati,i rele ecc,devo cliccare ancora  il pulsante end e rilanciarlo più volte fino a che riparte correttamente.

Penso che il problema sia perché non fermo l'esecuzione nel modo corretto; e' un problema di visual net o arduino?

Devo resettare con qualche istruzione?

E' vero che una volta creato l'EXE (cosa che non ho ancora fatto per ora) il programma dovrebbe tornare a Windows ma poi ripartira' nel modo corretto?

Qualche consiglio da voi esperti del settore?  🤔

 

Link al commento
Condividi su altri siti


Il problema è .... window.

Quando premi il pulsante di "End" ripartirebbe tutto regolarmente, forse, se tu non apportassi modifiche. Ricomplinado dopo la modifica se riparte regolarmente è puramente casuale.

 

Creando un "exe", e rilanciando il programma, non ci sono problemi perchè il programma riparte correttamente ex novo.

 

In che linguaggio hai scritto la tua applicazione? C# o VB?

 

 

Link al commento
Condividi su altri siti

stefano1979transam

Scritto in visual basic,lo fa anche se non apporto modifiche ,solo uscendo ed rilanciando nel compilatore (premendo il triangolino verde si avvia il programma ,fa il debug poi a caso riprende correttamente o diventa "sordo".

Arduino continua a stampare sulla seriale (lo vedo dal monito seriale) .

Se il problema si risolve creando l'EXE il problema non e' poi cosi importante ma volevo capire perché fa cosi? magari azzerare tutto ogni volta?

 

.

Link al commento
Condividi su altri siti

Non è una risposta ficilmente condensabile in poche righe di un messaggio.

Bisognerebbe descrivere, non in modo superficiale, come lavora windows e come lavora l'IDE di Visual.Net

 

Poi però il problema potrebbe anche essere esaltato da come hia scritto la tua applicazione; in questo caso ti ritroveresti il problema anche dopo la generazione del file exe.

 

Io è da un po' che non faccio lavori con VB.Net e ho perso un po' di immediatezza.

Tu come generi questa fine del programma, ovvero che operazioni scatena il tasto "END" ?

Link al commento
Condividi su altri siti

stefano1979transam

La fine del programma la genero io cliccando col mouse sul  tasto "button" creato in grafica che mi riporta al codice dell' evento  button.click per uscire dall'esecuzione del programma,  li scrivo la funzione END.

Se non premo il pulsante il tutto funziona all'infinito ,la prima volta il software parte correttamente e continua cosi.

(ho creato dei  pulsanti che cliccando su di essi col  mouse  vanno ad eccitare i carichi e fanno accendere la  lampadina disegnata in grafica a seconda della posizione  del rele  perché arduino legge lo stato di essi  e lo rilancia su vb,nello stesso tempo temperature e umidita vengono rilevate c🙄orrettamente.)

Il tasto di fine programma lo metto io provvisorio per fermare l'esecuzione del programma ,una volta terminato il progetto lo eliminero' e questo diventera'  il tasto di EXIT per chiudere l'EXE e tornare a windos.

Tornando al programma quando e' in esecuzione ,se  voglio aggiungere una riga di stringa o un pezzo di grafica o una scritta ,ho la necessita di  fermare l'esecuzione del programma per accedere al form (o grafico o di compilazione) e' da li che nasce il problema.; e' un continuo esci dal compilatore ,scrivi ,debug e riavvia per provare se funziona quello che ho aggiunto.

 

Per i comandi mando in seriale ad arduino una lettera o stringa e viceversa la riconosco con un ciclio IF THEN.

Il tutto funziona ,ma ogni volta dovrei chiudere tutto  visual studio ,uscire dall'ambiente di programmazione e riaprirlo.🤔

 

 

 

 

.

Link al commento
Condividi su altri siti

In vbnet la chiusura del programma deve essere fatta con      Application.Exit() e non con end, che veniva invece utilizzato con vb6.

Quando lanci un programma tra due apparati apri anche delle librerie e le porte di comunicazione che si trovano all'inizio del programma.

Le porte di comunicazione e eventuali altre funzioni, array, la pulizia dei buffer di comunicazione  le devi chiudere prima di fermare il programma

in modo che al riavvio sia tutto pulito come quando parti all'inizio. Vedi il tuo programma cosa fa all'avviamento e ragiona su cosa deve essere ripulito e messo a zero.

Anche l'eventuale inizializzazione verso arduino deve essere analizzata. A volte il problema si pone anche con altri programmi. 

E' un po di tempo che non programmo con arduino quindi quanto sopra va preso solo come indicazioni di carattere generale da verificare.

Capisco che nello sviluppo ci sia una certa velocità di modifica ma non puoi ignorare le procedure e i protocolli.

La stabilità di comunicazione è un elemento fondamentale del progetto, io interromperei lo sviluppo grafico e farei in modo di risolvere in modo corretto i problemi di comunicazione. 

 

 

Link al commento
Condividi su altri siti

del_user_97632

Se e' arduino che invia dati, li invia di continuo ? O li invia in seguito a una tua ruchiesta ? Hai scritto tu il codice lato arduino ? Io penso che il codice arduino si impalla perche invii qualche porcheria sulla seriale, e poi si riprende fortunosamente perche al restart mandi qualche altra schifezza. In questi casi, unica e' inserire qualche trace di debug lato arduino, del tipo, ricevo porcherie, ti mando una avviso e resetto. Per comunicazioni seriali si usano protocolli bitstuffed o similari, con un minimo di checksum, per avere un po di affidabilita' e buttare via comand invalidi.

Modificato: da _angelo_
Link al commento
Condividi su altri siti

13 ore fa, _angelo_ ha scritto:

Io penso che il codice arduino si impalla perche invii qualche porcheria sulla seriale,

 

E più facileche arduino s'impalli per disturbi, se non si prendono mille precauzioni basta uno sternuto di mosca per mandare il codice a ranocchie.

Però da quello che descrive, anche se sono anni che non faccio più queste cose, mi sembra più un problema legato allo stop dell'applicazione VB.Net

Link al commento
Condividi su altri siti

Poi c'è da tener di conto che comunque l'Arduino (perlomeno quello 'standard', oggi ormai si chiama Arduino un po' tutto) si resetta quando viene aperta la seriale sulla porta USB. Questo a volte è un vantaggio (es. per caricare gli sketch) a volte no, dipende dall'applicazione.

 

Ciao, Ale.

Link al commento
Condividi su altri siti

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...