Gambas-it

Gambas3 => Programmazione => Topic aperto da: kicco - 12 Agosto 2012, 18:36:00

Titolo: Usare un modulo?
Inserito da: kicco - 12 Agosto 2012, 18:36:00
Ciao,
sto cercando di capire che strada prendere per risolvere "bene" il mio problema.
Sto ricevendo da una porta seriale /dev/ttyUSB0 una stringa di 16 byte.
Devo scomporla in singoli in singoli byte e fare su ognuno un "ragionamento".
Alcuni sono byte su cui devo fare solo un controllo altri mi danno delle info che devo poi elaborare.
Quindi devo passare, ad una Funzione o subroutine o modulo o...è questa la questione! ;D
Dicevo devo passare una stringa e ricevere dei dati singoli.
Come si procede in questi casi? Che strada prendere?
(GAMBAS3)

Illuminati, rischiarate la mia strada...

Viva Gambas
Titolo: Re: Usare un modulo?
Inserito da: vuott - 12 Agosto 2012, 19:03:24
Dicevo devo passare una stringa e ricevere dei dati singoli.
Come si procede in questi casi? Che strada prendere?
Allora... provo a cominciare io.
Da quello che mi pare di capire il tuo problema è come passare dei dati ad una funzione specifica che devi scrivere tu nel programma.
Ti segnalo questa pagina sulla nostra WIKI:
http://www.gambas-it.org/wiki/index.php/Scrivere_una_Funzione
Titolo: Re: Usare un modulo?
Inserito da: kicco - 12 Agosto 2012, 21:39:17
Grazie per la dritta! Ho guardato l'esempio e può costituire una possibile soluzione.
La questione è che questo "coso" che devo costruire ( mi riferisco alla parte di programma che deve analizzare la stringa) potrebbe essere impiegato in differenti programmi e anche evolversi nel tempo migliorandolo ecc.
Ergo, pensavo di realizzarlo come un blocco a sè.
Ho provato a creare un modulo.... ma poi non sono riuscito ad usarlo (sono alle prime armi)

 :'(
Titolo: Re: Usare un modulo?
Inserito da: vuott - 13 Agosto 2012, 00:11:57
Ergo, pensavo di realizzarlo come un blocco a sè.
Ho provato a creare un modulo.... ma poi non sono riuscito ad usarlo (sono alle prime armi)
Altri, più esperti di me, potranno darti delucidazioni precise, migliori e più approfondite; io mi limiterò, perdonami, a darti qualche informazione semplice e basilare.

Da quello che mi pare di aver capito la impostazione del modulo a sé stante l'hai già fatta. Provo  :-X ad aggiungere solo qualche semplice notizia.
Poniamo il caso che il tuo modulo si chiami "kikko.module" e che al suo interno vi sia una sola funzione... che magari (tanto per fare un esempio) effettui una semplice unione di due stringhe, una delle quali sarà passata dalla routine chiamante, per ottenerne alla fine una sola.
Dunque, nella classe principale FMain.class avremo:
Codice: gambas [Seleziona]

Public Sub Button1_Click()

  Dim nome As String
 
' Chiamiamo la funzione "unisciStringhe" contenuta nel modulo "kikko.module",
' e le passiamo contemporaneamente la stringa "kik", affinché la elabori.
' Ci attendiamo il ritorno - dal Modulo - di un'altra stringa che sarà al suo "ritorno" inserita
' nella variabile di tipo Stringa che abbiamo chiamato "nome".
' Poiché la funzione "unisciStringhe" si trova nel modulo "kikko.module" dobbiamo specificarlo:
   nome = kikko.unisciStringhe("kik")

' vedremo in console la stringa finale:
  Print nome

End


nel modulo kikko.module, invece, avremo la funzione vera e propria:
Codice: gambas [Seleziona]

'Riceve una stringa che va ad inserire nella variabile "a",
' e restituirà una stringa (ecco perché As String)
' alla funzione chiamante nella routine della classe principale "FMain.class":
Public Function unisciStringhe(a As String) As String
  
    Dim b As String
  
' svolge l'operazione precipua della funzione
' per la quale è stata chiamata, ossia unire
' la stringa ricevuta con "ko !" :
    b = a & "ko !"
    
' restituisce alla funzione chiamante la stringa finale
    Return b
  
End


In console avremo coerentemente la scritta:
kikko !

La definizione "Function unisciStringhe(a As String) As String" può essere - per certi versi - così banalmente spiegata:
questa è una Funzione di nome "unisciStringhe", che ha la capacità di ricevere una stringa -  che sarà inserita nella variabile "a" - , e che a sua volta restituirà una Stringa alla funzione principale chiamante.

Potremmo ovviamente avere anche situazioni più complesse:
Codice: gambas [Seleziona]

Public Function complessa(a As String, by As Byte) As Integer


in tal caso, diremmo - ...lo dico sempre in termini banali, non tecnici - che la funzione ha sostanzialmente la capacità di ricevere sia un valore di tipo Stringa, sia un valore di tipo Byte.... e però restituisce alla funzione chiamante un valore di tipo Integer.

Poniamo il caso che tu voglia richiamare nel modulo un oggetto o una variabile presente in un'altra classe, ad esempio in quella principale. In tal caso dovrai rendere pubblici i simboli dei moduli ed in particolare i controlli dei Form, in questo modo:
1) nell'IDE di Gambas (dove programmi) in alto a sinistra clicca su "Progetto";
2) scegli "Proprietà";
3) nella finestra di dialogo che appare, clicca sulla scheda "Opzioni";
4) cambia in SI i due campi afferenti alla "Compilazione".
Ovviamente le variabili che vuoi utilizzare devono essere globali e dichiarate come Public.

A questo punto, sempre restando nell'esempio di sopra mettiamo che dal modulo tu voglia cambiare il colore del Button1 presente sul Form (e che quindi sarebbe gestito normalmente in FMain.class). Avremo:
Codice: gambas [Seleziona]

Public Function unisciStringhe(a As String) As String
  
    Dim b As String
  
    b = a & "ko !"

' Dopo aver effettuato l'operazione cambio da qui,
' ossia dal Modulo, il colore del Button1 sul Form principale.
' Poiché appartiene alla classe principale, lo specifico:
   FMain.Button1.Background = Color.Red
      

    Return b
  
End


Il colore di Button1 muta in rosso.  ;D



Se impari a fare le chiamate delle Funzioni, sarà un gioco da ragazzi poi per te effettuare in futuro anche le chiamate a funzioni esterne mediante Extern.

 :ciao:
Titolo: Re: Usare un modulo?
Inserito da: kicco - 13 Agosto 2012, 21:48:43
Debbo dire che la scelta non l'ho ancora fatta. :)
In verità stavo provando ad usare una Subroutine all'interno del programma (per provare).
Ho tentato di usarne una (Subroutine) nel nuovo modulo e sono incappato subito con l'impossibilità di passare le variabili dal modulo al Fmain.class anche se dichiarate globali.
Ti ringrazio perché hai buttato sul tavolo parecchi spunti (per me ovviamente) sui quali devo pensarci su un po'.

"Ravano" e poi eventualmente riappaio.... ;D
GRAZIE!
Titolo: Re: Usare un modulo?
Inserito da: Picavbg - 13 Agosto 2012, 22:48:58
citazione Kicco
Citazione
La questione è che questo "coso" che devo costruire ( mi riferisco alla parte di programma che deve analizzare la stringa) potrebbe essere impiegato in differenti programmi e anche evolversi nel tempo migliorandolo ecc.
Ti faccio una domanda: Vuoi sperimentare subito qualcosa di più evoluto , come dici tu, rispetto ad una Function o vuoi intanto sperimentare la Function, così come ti ha suggerito vuott?
Sento di informarti perchè tu possa scegliere la via che attualmente ti sembra più congeniale, sia rispetto alla tua conoscenza, sia rispetto al tuo obiettivo.  Esiste un altro percorso, ma richieda una maggiore esperienza, non tanto di programmazione, quanto di logica di programmazione. Potresti infatti realizzare una "Classe" in questo primo programma che potrebbe, poi, essere copiata più facilmente in programmi successivi; infatti la classe rappresenta un modulo distinto, come la Function, ma risiede in un'area del progetto, esterna alla Form dentro la quale puoi scrivere la tua brava Function di trattamento dati. Perciò ogni volta che ne avrai bisogno in un nuovo programma potrai inserirvi una copia senza andare a cercare la Form dentro la quale hai scritto la tale Function. So di essermi espresso in termini molto vaghi, ma non vorrei creare confusione. L'approccio tracciato da vuott è ottimo e potrà essere miogliorato anche nel prossimo programma che scriverai, però se tu volessi partire sin da subito con l'utilizzo della "Classe", dovresti modificare un pò il tuo approccio attuale. Spero di essere riuscito a trasmettere il pensiero, ma se non vi fossi invece riuscito, non ti preoccupare, segui le indicazioni dettagliate (qualche maestro che so io direbbe "anche troppo") di vuott. Ciao.
Titolo: Re: Usare un modulo?
Inserito da: vuott - 14 Agosto 2012, 00:18:26
Vuoi sperimentare subito qualcosa di più evoluto , come dici tu, rispetto ad una Function o vuoi intanto sperimentare la Function, così come ti ha suggerito vuott?
Potresti infatti realizzare una "Classe" in questo primo programma....
Ho scritto intorno ad una Funzione, poiché mi era sembrato che Kikko propendesse per quella soluzione. Ad ogni modo il suggerimento di Picavbg è interessante ed offre in via generale molte possibilità.
Io modestamente suggerirei, però, un approccio graduale; quasi ad esercizio: potresti in una prima fase imparare a scrivere ed utilizzare una Funzione. Successivamente, quando avrai preso padronanza dell'uso delle Funzioni, potresti passare ad un livello diverso. ....però, come ha già detto Picavbg, questa deve essere ovviamente una tua decisione.
Titolo: Re: Usare un modulo?
Inserito da: kicco - 14 Agosto 2012, 15:36:41
Grazie per le risposte,
per ora ho messo tutto nella classe principale in una sub così intanto verifico il funzionamento.
Picavbg, il tuo discorso fila eccome, ho capito cosa vuoi dire e credo che probabilmente se il mio progetto avrà le gambe per funzionare probabilmente la Classe sarà la scelta finale.
La soluzione di Vuott è probabilmente quella intermedia.

Per ora sto cercando di capire cosa mi serve e quali sono i "tasselli", poi dovrò capire come organizzarli in modo sistematico per avere strumenti facili da usare e "muovere" (leggi Classi o Moduli).

Fate conto che 2 settimane fa non sapevo cosa fosse la programmazione per oggetti.... ;D
Il mio programmino apre porte seriale seleziona file ci scrive dentro analizza stringhe che riceve e trasmette via radio :P, sono molto soddisfatto di Gambas di voi e di me, ma ho bisogno di un po' di tempo per digerire il tutto.

Grazie e.... vi faccio sapere :)
Titolo: Re: Usare un modulo?
Inserito da: vuott - 14 Agosto 2012, 16:41:17
per ora ho messo tutto nella classe principale in una sub così intanto verifico il funzionamento.
Ovviamente puoi piazzare la routine-Funzione anche nella classe principale.


Il mio programmino apre porte seriale seleziona file ci scrive dentro analizza stringhe che riceve e trasmette via radio....

Molto interessante.


Grazie e.... vi faccio sapere :)

....chissà se vorrai presentare ed inserire il tuo progetto nella sezione "Progetti degli Utenti"....  :-[
Titolo: Re: Usare un modulo?
Inserito da: Picavbg - 14 Agosto 2012, 22:08:54
Fate conto che 2 settimane fa non sapevo cosa fosse la programmazione per oggetti.... ;D
Complimenti!

Continua a fare Gambas per le tue ossa informatiche. Per eventuali domande puoi chiedere, tanto io arrivo al massimo secondo.
L'idea di vuott di inserire il programma fra quelli de "Progetti degli Utenti" è ottima, ma non avere fretta, semprecchè, come dice sempre vuott, tu ne abbia voglia. Però, ..., dai, ... farsi conoscere è bello; si crea una corrispondenza biunivoca con la comunità.
Ciao.
Titolo: Re: Usare un modulo?
Inserito da: kicco - 15 Agosto 2012, 16:57:56
Grazie,
vediamo se riesco a raggiungere l'obbiettivo che mi sono posto, e quando il programma sarà "maturo" volentieri lo metterò a disposizione della comunità (dovrò capire come si fa....ma a tempo debito) purtroppo è un programma molto dedicato e contiene anche un protocollo di comunicazione che non posso condividere, ma il resto sì.  Caso mai lo "ripulirò" un pochino :D :D

Kicco
Titolo: Re: Usare un modulo?
Inserito da: vuott - 15 Agosto 2012, 17:26:14
...contiene anche un protocollo di comunicazione che non posso condividere, ma il resto sì.  Caso mai lo "ripulirò" un pochino :D :D

 
:violent:
Titolo: Re: Usare un modulo?
Inserito da: Picavbg - 15 Agosto 2012, 18:10:04
@ vuott:
Molto efficace l'effetto "martellate in modo perpetuo". Ma come hai fatto, se è lecito saperlo?
Titolo: Re: Usare un modulo?
Inserito da: vuott - 15 Agosto 2012, 18:11:31
@ vuott:
Molto efficace l'effetto "martellate in modo perpetuo". Ma come hai fatto, se è lecito saperlo?

......contiene un protocollo che non posso condividere !   :rotfl:
Titolo: Re: Usare un modulo?
Inserito da: Picavbg - 15 Agosto 2012, 22:36:24
@ vuott:
Molto efficace l'effetto "martellate in modo perpetuo". Ma come hai fatto, se è lecito saperlo?

......contiene un protocollo di comunicazione che non posso condividere !   :rotfl:
Ah...Ah...Ah
Titolo: Re: Usare un modulo?
Inserito da: kicco - 16 Agosto 2012, 09:37:42
Scusate ma forse mi sfugge qualcosa:
Il sistema che sto costruendo, sostituisce un pezzo totalmente Hw che l'azienda per cui lavoro produce.
Il sistema permette di allertare ed evacuare industrie e popolazioni per catastrofi ecc.
Ora se non condivido il protocollo cosa cambia?
Che sia proprietà aziendale cambia qualcosa?
A chi importa se è di 20 byte e ogni byte comunica qualcosa e cosa!
Ognuno ci può infilare quello che vuole una volta capito come funziona.
Non mi sembra di privare la comunità d qualcosa di interessante....

Sbaglio? Fatemi sapere

...sempre grazie per l'aiuto :D
Titolo: Re: Usare un modulo?
Inserito da: Picavbg - 16 Agosto 2012, 10:48:30
Non immaginavo che lavorassi per i servizi pseudo-segreti. Capisco la tua riservatezza. Pazienza, resteremo all'oscuro, ma anche tu non avrai il ritorno che potresti ottenere dalla pubblicazione di un tuo lavoro. Ma, a parte che ognuno è libero di muoversi come vuole, ci sranno altre occasioni per farci vedere quanto vali.
Mi sorge una domandina curiosa, da programmatore, ma hai introdotto tu Linux nella tua azienda o c'era già?
Ciao
Titolo: Re: Usare un modulo?
Inserito da: vuott - 16 Agosto 2012, 15:05:40
Sbaglio? Fatemi sapere

Dalle mie parti si diceva: "Voi siete patrone".

Hai piena disponibilità e libertà di decisione su questa cosa, ovviamente.

E va bene così.
Titolo: Re: Usare un modulo?
Inserito da: kicco - 16 Agosto 2012, 19:18:25
Si  ho introdotto io linux in azienda  :) e oltretutto è l'unico O.S. che uso in azienda.
Ovviamente prima ero considerato un sognatore ignaro a cosa stessi andando incontro.
Oggi si sono resi conto non solo che sopravvivo, ma sostanzialmente non ho limiti anzi....
Purtroppo sono costretto a far girare su una virtual machine le poche applicazioni winzozz dependent.
A casa è tutta un'altra musica, ho 5 client (la famiglia)  tutti usiamo Ubuntu ovviamente felici e senza problemi.

Ora ribadisco: il fatto che il pacchetto di dati che uso per comunicare sia "segreto" non cambia nulla.
Il software lo renderò pubblico. Cosa uno trasmette via radio dipende dalle radio e da cosa deve comunicare.
Ognuno ci può mettere quello che vuole. :2birre:


Titolo: Re: Usare un modulo?
Inserito da: vuott - 16 Agosto 2012, 19:27:23
Ora ribadisco: il fatto che il pacchetto di dati che uso per comunicare sia "segreto" non cambia nulla.
Il software lo renderò pubblico. Cosa uno trasmette via radio dipende dalle radio e da cosa deve comunicare.

Capisco che io e Picavbg siamo stati un po' esagerati  :-[ ....e quindi successivamente in sostanza ti abbiamo chiesto scusa.  :)
Ti prego di comprendere semplicemente lo spirito costruttivo ai soli fini teorici per la programmazione in Gambas con cui ingenuamente abbiamo scritto. Come sai, Gambas è ancora abbastanza giovane, e pertanto molti aspetti e soprattutto molti àmbiti sono ancora poco studiati, poco sperimentati o per nulla provati.
be'... sai... quando abbiamo letto che avevi del codice gambas con il quale in via generale potevi "interloquire" con un apparato radio rice-trasmittente...... ci è sembrato manna dal cielo, ma a puri fini teorici: un elemento da aggiungere  :o agli (ancora pochi) àmbiti fin'ora provati dai programmatori Gambas!

Devo confessarti che ancora adesso la cosa in sé è molto attraente, sempre da un punto di vista teorico-accademico.

Ti saluto con fraternità.  :ciao:
Titolo: Re: Usare un modulo?
Inserito da: kicco - 16 Agosto 2012, 21:35:50
Contraccambio i saluti fraterni e rimango a disposizione se ti o vi interessa sapere di più sui moduli radio e la comunicazione con questi vi passo tutte le info senza problemi, magari aprendo un'altra discussione sull'argomento intanto cerco di orientarmi.
Tra l'altro milio mi ha risposto a proposito dei led e il programma che ha postato mi ha fatto svenire.
A prima vista l'unica cosa che o capito è che "ne ho da sfangare" prima di potermi muovere decentemente, ma la vita è fatta anche di tanti piccoli passi... :P


Titolo: Re: Usare un modulo?
Inserito da: vuott - 17 Agosto 2012, 00:41:34
...rimango a disposizione se ti o vi interessa sapere di più sui moduli radio e la comunicazione con questi vi passo tutte le info senza problemi, magari aprendo un'altra discussione sull'argomento

E' San Midi che ti manda !  :angel:

E' davvero molto apprezzabile questa tua disponibilità.

Quando riterrai di esserti "orientato" abbastanza in Gambas, credo che possa essere importante ed istruttivo per l'intera comunità dei programmatori Gambas se tu creassi un capitolo a sé stante magari nella "Guide della comunità" della nostra WIKI:
http://www.gambas-it.org/wiki/index.php/Guide_della_comunit%C3%A0
Titolo: Re: Usare un modulo?
Inserito da: Picavbg - 17 Agosto 2012, 09:24:05
Si  ho introdotto io linux in azienda  :) e oltretutto è l'unico O.S. che uso in azienda.
Ovviamente prima ero considerato un sognatore ignaro a cosa stessi andando incontro.
Oggi si sono resi conto non solo che sopravvivo, ma sostanzialmente non ho limiti anzi....
Purtroppo sono costretto a far girare su una virtual machine le poche applicazioni winzozz dependent.
A casa è tutta un'altra musica, ho 5 client (la famiglia)  tutti usiamo Ubuntu ovviamente felici e senza problemi.

Ancora complimenti! Potere seguire nel posto di lavoro una propria linea di preferenza lavorativa, anche relativamente a strumenti utlizzabili, è assai difficile. Tu ci sei riuscito; vuol dire che sei molto bravo ed apprezzato.

Ho letto nel frattempo il seguito della discussione e vedo con piacere che ti sei convertito ed hai dato la tua disponibilità per fare crescere sempre più il nostro Forum. La tua scelta non può che fare piacere. Non occorre avere grandi uidee o essere dei mostri di scienza informatica. Ognuno di noi, nel suo piccolo, può dare una mano e la somma di tutte le mani date produrrà Crescita, Crescita, Crescita, ...
Ciao.