Vai al contenuto

Comunicazione tra due SlimLine via Ethernet

Home Forum Controllori SlimLine e Netsyst (LogicLab) Comunicazione tra due SlimLine via Ethernet

Stai visualizzando 5 post - dal 1 a 5 (di 5 totali)
  • Autore
    Post
  • #35893
    Luis
    Partecipante

    Stò cercando di scambiare 12 words tra due SlimLine, tramite una comunicazione TCP Client/Server, il problema è che non capisco  come si estraggono le word dal file pointer Fp.

    #39239
    Sergio Bertana
    Amministratore del forum

    Il modo più semplice di scambiare dati tra diversi dispositivi SlimLine è utilizzare il FB UDPDataTxfer. Il FB utilizza il protocollo UDP per lo scambio dati ed è possibile definire la dimensione in bytes dell’area da scambiare tra i dispositivi (Topic, Topic). Naturalmente trattandosi di connessione in UDP non si parla di Client/Serrver ma di comunicazione peer to peer, però il concetto non cambia, i due sistemi si scambiano dati.

    Se invece la tua domanda è più didattica, cioè vuoi capire come sfruttare le nuove caratteristiche del firmware che permettono di realizzare connessioni Client/Server TCP occorre fare alcune premesse. Il file pointer delle FBs SysTCPClient e SysTCPServer è uno stream di comunicazione tutto quello che invii (Funzioni Sysfputc, Sysfwrite) da un lato lo puoi leggere dall’altro con le funzioni Sysfgetc, Sysfread.

    Ora per inviare dati da un sistema all’altro devi costruirti un protocollo, il mio consiglio è utilizzare ad esempio il Modbus che è già pronto, puoi usare il FB ModbusMaster, su di un sistema, mentre dall’altro il supporto del protocollo Modbus slave è già nativo. Ti posto una cartella con due progetti uno TCPModbus è la gestione del master modbus (Vedi stampa), l’altro SlaveSystem è il progetto da caricare sul sistema slave.

    Nello slave mi sono limitato a copiare la word MW100.32 sulla MW100.0, il sistema master legge 16 words dallo slave ad indirizzo 40000 (Address reale 100.0) ed invia 16 words ad indirizzo 40016 (Address reale 100.32). Con il sistema master in debug come vedi dallo screenshot puoi forzare uin valore nella MdbWr e te lo ritrovi dopo un po nella MdbRd. Il programma esegue una comunicazione modbus ogni secondo MMdb.Delay:=1000; (* Communication delay *) ma tu puoi modificare il valore (Download progetto).

    #39250
    Luis
    Partecipante

    Non sono molto esperto in linguaggio ST, ma ho capito il concetto. Ho due SlimLine che scambiano dati con la funzione UDPDataTxfer, lavorano bene quando sono collegati allo stesso switch di rete, ma quando sposto uno su un’altro switch non scambiano piu dati.

    Ho una rete LAN molto estesa, gli switch sono collegati tra loro con fibra ottica, quando faccio ping rispondono bene tutti due, posso anche andare online su entrambi con LogicLab, non riesco a capire quale sia il problema.

    #39251
    Sergio Bertana
    Amministratore del forum

    Visto che mi parli di rete LAN molto estesa posso immaginare che oltre a switch ci possano essere routers o altro che eseguono magari qualche operazione di NATting e/o frazionamento sui pacchetti. In questo caso il trasferimento in UDP potrebbe essere messo in crisi. Visto che il protocollo UDP non gestisce in modo corretto il frazionamento dei dati.

    In teoria non dovrebbe succedere visto che se come mi dici trasferisci 16 words il pacchetto UDP non dovrebbe superare i 512 bytes che sono il limite sotto il quale i pacchetti non dovrebbero essere frazionati. Per evitare ogni problema di networking ti consiglio di passsare al protocollo TCP utilizzando il programma che ti ho postato con la ModbusMaster.

    #39252
    Sergio Bertana
    Amministratore del forum

    A titolo informativo, visto che come mi dici via TCP riesci a raggiungere i due sistemi SlimLine, puoi connetterti in Telnet (Porta 23) e dare il comando arp su entrambi i sistemi per verificare se nella tabella arp dei due sistemi si trova la voce con l’indirizzo IP dell’altro sistema (Screenshot).

Stai visualizzando 5 post - dal 1 a 5 (di 5 totali)
  • Devi essere connesso per rispondere a questo topic.