Gambas-it

Gambas3 => Programmazione => Topic aperto da: Pino Zollo - 06 Aprile 2020, 17:30:24

Titolo: Due connessioni UDP
Inserito da: Pino Zollo - 06 Aprile 2020, 17:30:24
Ciao...
Il mio programma cerca di parlare con due Arduino (ESP32, Wamos ESP8266) via Wi-Fi in UDP.
I due Arduino si collegano al PC usando IP statici differenti....e porte differenti.
Il programma Gambas3 fa polling e gli Arduino rispondono solo se interrogati.
Con uno va tutto bene....
...ma le cose mi si confondono se aggiungo un altro Socket nel form.

la Public Sub UDPServer_Read()  sembra essere unica, cioè non differenziabile fra i due Socket.

Si può fare con un solo Socket ?
Grazie
Pino ZP4KFX
Titolo: Re:Due connessioni UDP
Inserito da: Gianluigi - 06 Aprile 2020, 18:34:52
Questo:
https://www.gambas-it.org/smf/index.php?topic=7670.msg47972#msg47972

è lo stesso quesito?
Titolo: Re:Due connessioni UDP
Inserito da: vuott - 06 Aprile 2020, 19:19:04
Con uno va tutto bene....
...ma le cose mi si confondono se aggiungo un altro Socket nel form.

la Public Sub UDPServer_Read()  sembra essere unica, cioè non differenziabile fra i due Socket.
Dunque hai inserito due routine diverse ...Server_Read( ), una per ciascun Socket ?
Titolo: Re:Due connessioni UDP
Inserito da: Pino Zollo - 06 Aprile 2020, 19:58:59
Non mi permette di avere 2 Server_Read
Titolo: Re:Due connessioni UDP
Inserito da: vuott - 06 Aprile 2020, 20:04:27
Non mi permette di avere 2 Server_Read
...più precisamente cosa accade ? Viene sollevato un avviso di errore o cos'altro ?
Titolo: Re:Due connessioni UDP
Inserito da: vuott - 07 Aprile 2020, 01:57:59
Potresti provare :-\ a differenziare l'apertura delle porte di ciascun Arduino in due distinte Classi
La porta del primo Arduino la apri - ad esempio - nella Classe principale; quella del secondo la apri in una Classe secondaria appositamente creata via codice ed ovviamente richiamata in/da quella principale.

Ad esempio, quindi nella Classe principale:
Codice: [Seleziona]
Public cl As New Class1


Public Sub Main()

' Invochiamo la sub-procedura della Classe secondaria per aprire e leggere la porta del "secondo" Arduino:
  cl.ApreSecondoArduino()

' Qui invece viene aperta la porta del "primo" Arduino:
  ...etc...
  ...etc...

End


Public Sub UDPServer_Read()

' Qui in codice per leggere la porta del "primo" Arduino:
   .........
   ...etc....

Ovviamente nella Classe secondaria sarà posto il codice analogo necessario per aprire e leggere la porta del secondo Arduino.
Titolo: Re:Due connessioni UDP
Inserito da: Pino Zollo - 08 Aprile 2020, 03:39:09
Potresti provare :-\ a differenziare l'apertura delle porte di ciascun Arduino in due distinte Classi
La porta del primo Arduino la apri - ad esempio - nella Classe principale; quella del secondo la apri in una Classe secondaria appositamente creata via codice ed ovviamente richiamata in/da quella principale.

Ad esempio, quindi nella Classe principale:
Codice: [Seleziona]
Public cl As New Class1


Public Sub Main()

' Invochiamo la sub-procedura della Classe secondaria per aprire e leggere la porta del "secondo" Arduino:
  cl.ApreSecondoArduino()

' Qui invece viene aperta la porta del "primo" Arduino:
  ...etc...
  ...etc...

End


Public Sub UDPServer_Read()

' Qui in codice per leggere la porta del "primo" Arduino:
   .........
   ...etc....

Ovviamente nella Classe secondaria sarà posto il codice analogo necessario per aprire e leggere la porta del secondo Arduino.

Se capisco bene dovrei fare due Form, in uno gestico una connessione e nell'altro la seconda.....

C'é  modo di farlo via istruzioni ?...senza un secondo Form ?
Grazie.
Titolo: Re:Due connessioni UDP
Inserito da: vuott - 08 Aprile 2020, 08:47:15
Se capisco bene dovrei fare due Form
No. Non due Form, bensì uno solo.
Servendoti delle risorse grafiche, puoi anche usare un solo Form (dove richiami la porta del primo Arduino) e una Classe (senza Form), da te creata nell'IDE, nella quale inserisci il codice necessario per gestire la porta del secondo Arduino.
Instanzierai tale Classe, da te creata (...priva di un Form), dalla Classe del Form principale (FMain.class), e da qui stesso la invocherai.


Quanto sopra da me suggerito si basa sulla soluzione di un problema analogo, a me accaduto per la lettura contemporanea di due porte seriali da due distinti dispositivi MIDI esterni.
...magari sarà risolutivo anche in questo tuo caso.  :-\