Comunicazione tra due SlimLine via Ethernet
Home › Forum › Controllori SlimLine e Netsyst (LogicLab) › Comunicazione tra due SlimLine via Ethernet
- Questo topic ha 4 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 9 anni, 4 mesi fa da
Sergio Bertana.
-
AutorePost
-
Dicembre 2, 2015 alle 8:33 am #35893
Luis
PartecipanteStò 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.
Dicembre 2, 2015 alle 9:07 am #39239Sergio Bertana
Amministratore del forumIl 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).
Dicembre 2, 2015 alle 5:35 pm #39250Luis
PartecipanteNon 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.
Dicembre 3, 2015 alle 7:49 am #39251Sergio Bertana
Amministratore del forumVisto 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.
Dicembre 3, 2015 alle 7:56 am #39252Sergio Bertana
Amministratore del forumA 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).
-
AutorePost
- Devi essere connesso per rispondere a questo topic.