Connessione dispositivo TCP/IP generico
Home › Forum › Terminali operatore (Weintek) › Connessione dispositivo TCP/IP generico
- Questo topic ha 3 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 1 anno fa da
Sergio Bertana.
-
AutorePost
-
Marzo 8, 2024 alle 11:04 am #76395
fbossio
PartecipanteAvremmo 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.
Marzo 12, 2024 alle 8:21 am #76406Sergio Bertana
Amministratore del forumSe 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.
Aprile 5, 2024 alle 10:48 am #76620fbossio
PartecipanteSto 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
Aprile 8, 2024 alle 9:20 am #76672Sergio Bertana
Amministratore del forumHo 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.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.