Pages: [1] 2   Go Down
Author Topic: [Risolto] - Ricezione UDP da scheda di rete Netman Plus  (Read 1993 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 46
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

BuonGiorno,
ho comprato la Ethernet Shield con l'intenzione di comunicare direttamente con la scheda di rete Netman Plus 102 montata sull'inverter dell'impianto fotovoltaico.
La scheda di rete supporta sia SNMP che UDP. Inizialmente sono partito con l'SNMP ma poi ho visto che esiste la libreria EthernetUDP quindi sto provando con quella.
Purtroppo però non riesco a ricevere nulla smiley-mad(

Pacchetti in rete dovrebbero essercene perché sul PC mi gira un programma che mostra i dati relativi alla produzione e se dalla Scheda di Rete disabilito la trasmissione UDP oppure cambio la porta, il programma sul PC non riceve più niente.

Ho provato ad utilizzare lo sketch di Esempio UDPSendReceive mettendo:

IPAddress ip(192, 168, 0, 10); // IP assegnato ad Arduino dal Router
unsigned int localPort = 33000;      // Porta utilizzata dalla Netman Plus per l'UDP.

il resto dell'esempio è rimasto uguale. Ho solo commentato la parte di codice che Invia la risposta:
// send a reply, to the IP address and port that sent us the packet we received
//    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
//    Udp.write(ReplyBuffer);
//    Udp.endPacket();

Ma non riesco a ricevere niente.
Cosa sbaglio? Cosa posso provare?

Alessio.
« Last Edit: January 27, 2013, 05:56:37 am by AlessioZ » Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 103
Posts: 6579
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Prova prima a vedere su PC il tipo di dati che trasmette la centralina. Usa uno sniffer tipo wireshark.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 1
Posts: 46
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao Paolo,
grazie per la risposta.

Ho seguito il tuo consiglio e utilizzando WireShark su PC vedo i Pacchetti UDP che transitano dall'IP dell'Inverter all'IP del mio PC sulla porta.
Porta utilizzata dall'inverter 33000 (come da configurazione).
Porta utilizzzata dal PC mcs-fastmail (ovvero 3302).

Ho provato allora a cambiare la porta configurata nello sketch mettendo 3302 ma niente. Poi ho provato a configurare l'inverter sulla porta 8888 (quella di default dello sketch di esempio per l'EthernetUDP) ma niente lo stesso, c'è comunque comunicazione tra Inverter e PC ma Arduino resta sordo come una campana!

Nel pacchetto UDP ci sono informazioni che potrebbero essere utili per venirne fuori?
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 103
Posts: 6579
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Controlla che non sia il PC che inizializza la trasmissione e l'inverter risponda solamente.
Vedi se oltre all'UDP il PC esce con una trasmissione TCP. Su wireshark, senza filtri, dovresti visualizzare tutto il traffico in entrata e in uscita.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 1
Posts: 46
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Eccomi qui.
Dunque, dopo aver visto con WireShark che prima partiva un pacchetto dal PC e l'Inverter rispondeva ho provato a fare lo stesso con Arduino.
Se prima invio un pacchetto con un messaggio qualsiasi poi ricevo una risposta.
E qui nascono nuove problematiche.
Nella console di arduino quando vado a "stampare" il pacchetto ricevuto non lo visualizzo. Mi dice che ho ricevuto un pacchetto lungo 690 ma non vedo niente.
Ho fatto altre prove creando sul pc un ServerUDP. Qui lo scambio di messaggi tra PC e Arduino funziona a dovere.
Ma la domanda principale a questo punto è:
ammesso che io riesca a visualizzare i Dati del pacchetto inviato dall'Inverter, temo che dovrei avere anche l'informazione di come mappare poi quella lunga stringa di numeri e lettere. Altrimenti chi me lo dice dove si trova la tensione, la corrente, la potenza...   Insomma, nel CD della Scheda di Rete che ho montato sull'inverter non ho trovato nulla. UDP non funziona come l'SNMP che ha i file .mib come descrittori dei dati? Altrimenti non mi resta che contattare la casa produttrice della scheda di rete.

Aggiungo che ho provato ad utilizzare la libreria Agentuino per utilizzare il protocollo SNMP ma..  questa non riesco nemmeno a compilarla smiley-mad((((
Suggerimenti?
Logged

Napoli
Offline Offline
Sr. Member
****
Karma: 5
Posts: 349
Post fata resurgo
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,

come ti è stato consigliato devi capire quale sia il flusso delle informazioni, ci sono due possibilità: 1) il PC richiede i dati all'inverter; 2) l'inverter fa broadcast dei dati.

Nel primo caso troverai pacchetti con indirizzi IP sorgente e destinazione pari a quelli del PC e dell'inverter, nel secondo ci sarà solo quello dell'inverter.

L'aspetto più importante è un'altro, UDP è un protocollo di trasporto, ovvero non definisce alcuna struttura dati il che significa che pur riuscendo a ricevere non avrai qualcosa di automaticamente intellegibile.
Nel tuo caso, con buona probabilità, l'inverter utilizza un protocollo Modbus (anche se normalmente non viaggia su UDP), se inserisci la parte "Data" dei pacchetti visti in WireShark posso dirti se il protocollo sia o meno quello.

Saluti,
Dario.
Logged

Souliss - Open-source Distributed Home Automation with Arduino and Android

http://www.souliss.net
Follow at @soulissteam

@veseotech

Offline Offline
Newbie
*
Karma: 1
Posts: 46
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sembrerebbe che il Client richiede i dati all'inverter perché da WireShark ci sono pacchetti con ip sorgente e destinatario precisi.
Cronologicamente prima un pacchetto da PC a Inverter e poi l'Inverter risponde.

Dovrei aver allegato 2 file.
Data da Inverter è l'export del solo campo data del pacchetto in arrivo dall'inverter.
ComunicazioneUDP è il salvataggio del FollowUDPStream.

Se riesci a visualizzarlo, per maggior chiarezza sappi che 192.168.0.5 è il PC mentre 192.168.0.60 è l'Inverter.


* Data da Inverter (0.67 KB - downloaded 9 times.)
* ComunicazioneUDP (11.82 KB - downloaded 10 times.)
Logged

Napoli
Offline Offline
Sr. Member
****
Karma: 5
Posts: 349
Post fata resurgo
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Senza estensione non riesco ad aprirli, puoi dirmi qual'è l'estensione di salvataggio? Al volo, viene riportato Modbus (o un altro tipo di protocollo) nel datatype?

Saluti,
Dario.
Logged

Souliss - Open-source Distributed Home Automation with Arduino and Android

http://www.souliss.net
Follow at @soulissteam

@veseotech

Offline Offline
Newbie
*
Karma: 1
Posts: 46
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hai ragione, sorry.
Io stesso non so come riaprili ;0PP

Carico un altro file:

PacchettoDaInverter

questo lo puoi aprire direttamente con Wireshark e contiene lo scambio tra PC (192.168.0.5) e Inverter (192.168.0.60).

Ho dato un'occhiata ma di protocolli particolari non ho vistro traccia...  almeno non mi pare smiley-mad(

Alessio ;0)

Ps: Hai per caso esperienza anche con Agentuino?

* PacchettoDaInverter.pcapng (4.61 KB - downloaded 14 times.)
Logged

Napoli
Offline Offline
Sr. Member
****
Karma: 5
Posts: 349
Post fata resurgo
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

In effetti non è uno di quei protocolli riconosciuti, quindi con buona probabilitàè un protocollo proprietario. Questo però non significa che l'inverter non supporti anche protocolli standardizzati, come primo passo direi di verificare sulla scheda tecnica dell'inverter se esistono altri protocolli supportati.

Se così non fosse, dovresti provare a fare un reverse, non dovrebbe essere poi troppo complesso perché sembra che ci sia sempre la stessa richiesta. Posso provare a darti una mano, però è un lavoro che non necessariamente giunge a buon fine.

Saluti,
Dario.
Logged

Souliss - Open-source Distributed Home Automation with Arduino and Android

http://www.souliss.net
Follow at @soulissteam

@veseotech

Napoli
Offline Offline
Sr. Member
****
Karma: 5
Posts: 349
Post fata resurgo
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Non ho mai utilizzato la librerie Agentuino, ho dato un occhio al volo e non è chiaro se quella libreria implementa un manager o meno. Mi aspetto che l'inverter sia un nodo managed che quindi fornisca le informazioni al manager, tu avresti bisogno di un manager per raccogliere i dati lato arduino.

In generale se non sei riuscito a compilare è perché la libreria è ferma alla IDE0019, contro l'attuale IDE100 (o 1), se cerchi nel forum dovresti riuscire a trovare una guida per migrare la libreria alla IDE attuale o in alternativa utilizzare la IDE0019 (sconsigliato).

Se andiamo avanti per passi vediamo se questa strada sia percorribile.

Saluti,
Dario.
Logged

Souliss - Open-source Distributed Home Automation with Arduino and Android

http://www.souliss.net
Follow at @soulissteam

@veseotech

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 103
Posts: 6579
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Qui un topic sull'Agentuino --> http://arduino.cc/forum/index.php/topic,50848.0.html
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 1
Posts: 46
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie ragazzi,
grazie a tutti per la gentilezza e la disponibilità ;0)

Mi studio un po la discussione su Agentuino che ha linkato Paolo (non vado proprio spedito spedito con l'Inglese).
Sono riuscito a compilare l'esempio di Agentuino. Poi ho messo su una sorta di client in java sul pc per fare chiamate SNMP verso Arduino ma non ha funzionato, o il PC non ha chiamato o Arduino non ha ricevuto.
Purtroppo le prove con l'Inverter le posso fare solo di giorno (per ovvi motivi) e domani lavorerò quindi per le prove pratiche se ne riparlerà dopodomani.

Non voglio però abbandonare la via parallela dell'UDP.

Per quel che mi pare di capire l'UDP va bene per fare cose personalizzate. Se sono io che chiamo e rispondo l'UDP va bene, altrimenti forse è più opportuno l'SNMP.
Alla fine quello migliore sarà quello che funzionerà prima ;0))))

Alessio ;0)
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 46
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ehi, forse sto proprio fuori io ma da quel che capisco Agentuino è una libreria che ti permette di ricevere delle richieste e fornire delle risposte.
Ma proprio non riesco a capire se si può usare per fare delle richieste e ricevere delle risposte!!

In attesa di un vostro parere mi ributto un po sulla EthernetUDP.
Logged

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora facciamo chiarezza. UDP è il protocollo di trasporto dati, ma non fornisce nessuna indicazione sul tipo di dati trasportati e quindi sulla loro codifica.
L'SNMP è un protocollo che usa l'UDP (ma volendo può usare anche il TCP) come protocollo per il trasporto dati, e ma dice anche come vanno codificati i comandi e come vanno fatte le richieste. Essendo uno standard che si pone come sistema di comunicazione semplificato per qualsiasi tipo di macchina, non sono definiti i comandi disponibili, ma solo come vanno "richiesti". Diciamo che ci sono due famiglie di comani, quelli per fare le impostazioni e quelli per leggere le impostazioni/dati.

Quindi quei dati grezzi che hai letto via UDP non sono altro che i comandi SNMP

I comandi disponibili per la determinata macchina li hai attraverso i MIB file che fornisce il venditore.

altre info: http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol

quindi devi capire come inviare le richieste che ti interessano usando la libreria che hai trovato, per il resto fregatene di UDP che fa tutto la libreria
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: [1] 2   Go Up
Jump to: