Vai al contenuto

Connessione dispositivo TCP/IP generico

Home Forum Terminali operatore (Weintek) Connessione dispositivo TCP/IP generico

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

    Avremmo necessità di collegare un puntatore laser al pannello operatore, il puntatore in questione lavora su protocollo TCP/IP ASCII, mi stavo chiedendo come quale tipo di dispositivo sarebbe opportuno configurarlo nel progetto EasyBuilderPro.

    #76406
    Sergio Bertana
    Amministratore del forum

    Se il dispositivo come credo non ha un protocollo noto e quindi supportato dal pannello, l’unica soluzione è gestirlo con il Free Protocol.

    Da macro le istruzioni INPORT ed OUTPORT è possibile ricevere ed inviare caratteri sul protocollo configurato come come client TCP. Se cerchi nel forum INPORT troverai alcuni topics che trattano l’argomento.

    Se sull’impianto hai un nostro sistema programmabile SlimLine puoi far gestire a lui il puntatore, nella knowledge base trovi molti esempi di gestione di protocolli di comunicazione. In questo articolo l’esempio ST_SerialDataReceive , in questo articolo l’esempio ST_WindSonicDriver sono esempi di driver di comunicazione. Entrambi utilizzano una porta seriale ma sostituendo il FB SysSerialPort con il FB SysTCPClient o con il FB SysTCPServer è possibile comunicare in TCP/IP.

    #76620
    fbossio
    Partecipante

    Sto provando a comunicare con il puntatore tramite Free protocol ma non riesco ad avere risposta dal dispositivo, ne su pannello ne dall’accensione del laser.

    Questo è il codice con cui sto lavorando

    macro_command main()
    short wResponse[2], receive_len
    char byCommand[9]
    bool stato
    
    GetData(stato, “Local HMI”, LB, 1, 1) 
    
    if stato then
        StringCopy(“LASER ON”, byCommand[0])
        SetData(byCommand[0], “Local HMI”, LW, 1000, 9)
        OUTPORT(byCommand[0], “Free Protocol”, 9)//  send 4 bytes
    end if
    
    if not stato then
        StringCopy(“LASER OFF”, byCommand[0])
        SetData(byCommand[0], “Local HMI”, LW, 1000, 9)
        OUTPORT(byCommand[0], “Free Protocol”, 9)//  send 4 bytes
    end if
    
    DELAY(1000)
    INPORT(wResponse[0], “Free Protocol”, 2, receive_len)//  read 144 words
    
    if receive_len >= 1 then
        SetData(wResponse[0], “Local HMI”, LW, 145, 2)//  set responses to LW0
    end if
    end macro_command
    #76672
    Sergio Bertana
    Amministratore del forum

    Ho modificato la tua macro in questo modo.

    macro_command main()
    short Lenght=0
    char Command[16]={0}, Response[16]={0}
    bool State=false
    
    FILL(Command[0], 0x20, 16)
    SetData(Command[0], "Local HMI", LW, 100, 16) //Copy command to LW 1000
    
    FILL(Response[0], 0x20, 16)
    SetData(Response[0], "Local HMI", LW, 200, 16) //Copy response to LW 1000
    
    GetData(State, "Local HMI", LB, 0, 1) 
    if State then
        StringCopy("LASER ON", Command[0])
    else
        StringCopy("LASER OFF", Command[0])
    end if
    
    Lenght=StringLength(Command[0])
    SetData(Command[0], "Local HMI", LW, 100, Lenght) //Copy command to LW 1000
    OUTPORT(Command[0], "Free Protocol", Lenght)
    INPORT2(Response[0], "Free Protocol", Lenght, 1000)
    
    if (Lenght <> 0) then
        SetData(Response[0], "Local HMI", LW, 200, Lenght) //Copy response to LW 1000
    end if
    end macro_command

    E l’ho testata con la nostra utility Toolly in modo Terminal->TCP Server (Vedi articolo) e funziona regolarmente. Ma visto che dici che non hai nessun riscontro neanche nelle word di visualizzazione comando mi viene il dubbio che tu non abbia settato l’esecuzione periodica della macro. Ecco due brevi spiegazioni sul funzionamento.

    • Ho impostato il Free protocol con connessione ethernet verso l’IP del PC dove è eseguito Toolly.
    • Ho settato l’esecuzione periodica ad 1 secondo della macro, quindi ogni secondo si entra in macro e si invia il messaggio sulla connessione ethernet.
    • La funzione INPORT2 attende i dati in risposta e li bufferizza, se non si ricevono più dati dopo 1 secondo esce con i dati in Response.
Stai visualizzando 4 post - dal 1 a 4 (di 4 totali)
  • Devi essere connesso per rispondere a questo topic.