Realizzare una comunicazione TCP/IP con protocollo libero

Attenzione !I messaggi sul forum potrebbero essere modificati dal nostro staff. La data e l'ora dei messaggi potrebbe non essere quella di invio ma quella di moderazione da parte dello staff. Grazie per l'attenzione.

Home Forum Terminali operatore (Weintek) Realizzare una comunicazione TCP/IP con protocollo libero

Stai visualizzando 4 post - dal 1 a 4 (di 4 totali)
  • Autore
    Post
  • #58689
    Mastergumi
    Partecipante

    Sto 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.

    #58777
    Sergio Bertana
    Amministratore del forum

    Sui 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à.

    #58799
    Mastergumi
    Partecipante

    Bene, 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?

    #58813
    Sergio Bertana
    Amministratore del forum

    Puoi 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.

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