Realizzare una comunicazione TCP/IP con protocollo libero
Home › Forum › Terminali operatore (Weintek) › Realizzare una comunicazione TCP/IP con protocollo libero
Taggato: Comunicazione, Protocollo, TCP/IP
- Questo topic ha 3 risposte, 1 partecipante ed è stato aggiornato l'ultima volta 4 anni, 3 mesi fa da
Sergio Bertana.
-
AutorePost
-
Gennaio 13, 2021 alle 12:04 pm #58689
Mastergumi
PartecipanteSto sviluppando un’applicazione che deve effettuare uno scambio dati tra HMI Weintek e dispositivo VideoJet (codificatore). Il dispositivo VideoJet supporta solo il protocollo TCP/IP (no modbus), quindi lato Weintek ho deciso di utilizzare il “Free Protocol” assegnando IP e Porta su cui comunicare.
Il codificatore riceve delle stringhe di comando in ingresso e in risponde sempre con delle stringhe in output. La mia idea iniziale era di creare una Macro dedicata allo scambio dati su Weintek mediante l’utilizzo delle funzioni OUTPORT/INPORT.
Lo stato attuale del progetto è che la comunicazione (a livello ETH) è presente, infatti sul pannello del codificatore io vedo che rileva l’indirizzo IP del mio HMI, però non riesco ad effettuare lo scambio dati, in quanto non ricevo nessuna risposta dal codificatore.
Ho provato ad effettuare lo scambio dati con il codificatore utilizzando un tool che manda/riceve comandi in TCP/IP (Hercules) e in questo caso la comunicazione funziona correttamente, infatti mando e ricevo le stringhe correttamente.
Se qualcuno può avere idea del tipo di driver/dispositivo utilizzare su Weintek non esiti a contattarmi.
Gennaio 13, 2021 alle 12:21 pm #58777Sergio Bertana
Amministratore del forumSui terminali Weintek direi che la soluzione FreeProtocol sia corretta, eventualmente da verificare l’uso dell’INPORT, di questi ce ne sono 3 differenti a seconda del tipo di risposta che può arrivare.
Proverei con inport2 in modo da poter non definire il numero di byte che mi aspetto ma tenendo aperta la lettura per x ms quindi analizzarli.
[Description] Read data from a communication port. After the data is read, if there's no upcoming data during the designated time interval, the function returns. [Usage] INPORT2(response[start], device_name, receive_len, wait_time) note : the length of data being recieved is written into receive_len (unit : byte). [Example] short wResponse[6], receive_len, wait_time=20 INPORT2(wResponse[0], "Free Protocol", receive_len, wait_time) //wait_time's unit : millisecond if receive_len >= 6 then SetData(wResponse[0], "Local HMI", LW, 0, 6) //set responses to LW0 end if
Aggiungo, visto che produciamo PLC che utilizzando un sistema SlimLine con il FB SysTCPClient puoi gestire la connessione al server e poi hai le classiche funzione Sysfread, Sysfwrite, SysVsscanf, SysVfprintf, ecc.. per gestire il tuo protocollo in piena libertà.
Gennaio 15, 2021 alle 9:05 am #58799Mastergumi
PartecipanteBene, in effetti sono riuscito ad instaurare correttamente la comunicazione TCP/IP. Il problema che avevo nella mia macro era che non mandava il carattere 13 (carried return) a fine comando.
Ora avrei un’altra domanda. La mia applicazione deve gestire una risposta che nel peggio dei casi è 4000 caratteri. Nella macro di processo della risposta del dispositivo (lista di ricette presenti) se utilizzo una variabile char di dimensione 4000 vado a sforare la capacità massima di memoria delle variabili per macro di 4kb.
Avevo pensato allora di fare una macro dove eseguo l’INPORT del messaggio, poi andrei a richiamare due volte lo stesso FB che mi gestisca i primi 2000 char del messaggio e i 2000 char finali.
Lei ha già lavorato con i FB Librerie su EasyBuilderPro? Ha qualche consiglio?
Gennaio 18, 2021 alle 9:08 am #58813Sergio Bertana
Amministratore del forumPuoi provare a creare 2 macro per inviare 2000 caratteri per volta che richiamerai in modalita sincrona dalla tua macro. Credo che il tutto possa funzionare senza troppe latenze.
SYNC_TRIG_MACRO: Triggers the execution of a macro synchronously in a running macro. The current macro will pause until the end of execution of this called macro.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.