rossiroberto Inserito: 26 ottobre 2016 Segnala Inserito: 26 ottobre 2016 Buonasera a tutti! Sto cercando di far comunicare un S7-1200 1215C con un ip camera tramite tcp. L'ip camera può eseguire degli script CGI ,per esempio questo se inviato da un browser disabilita l'inserimento di ora e data nel flusso video generato dalla camera: http://192.168.0.11:2000/cgi-bin/CGIProxy.fcgi?cmd=setOSDSetting&isEnableTimeStamp=0&isEnableDevName=1&dispPos=0&isEnableOSDMask=0&usr=user&pwd=password Quello che vorrei fare è far inviare la stringa al plc. Inizialmente ho provato con l'istruzione TSEND_C, non funzionando per cercare di trovare il problema ho usato separatamente TCON e TSEND. Per quanto riguarda la comunicazione "credo" che venga creata in quanto scollegando il cavo ethernet della ip camera lo STATUS di TCON passa da 7000 a 7002. Per quanto riguarda l'invio in http con il 1200 la stringa penso vada cosi formattata: '/cgibin/CGIProxy.fcgi?cmd%3DsetOSDSetting%26isEnableTimeStamp%3D0%26isEnableDevName%3D1%26dispPos%3D0%26 isEnableOSDMask%3D0%26usr%3Duser%26pwd%3Dpassword$R$L'. Come lunghezza (LEN) imposto =0. Purtroppo,anche osservando con wireshark, non vedo nessun flusso di dati tra il plc e l'ip camera. Se provo lo stesso progetto fra il plc e un pc con una sessione di hyperterminal avviata la stringa viene ricevuta dal pc senza problemi. Secondo voi è un problema di come è formattata la richiesta o di come è creata la connessione? Grazie per i suggerimenti!
dan64100 Inserita: 27 ottobre 2016 Segnala Inserita: 27 ottobre 2016 Attenzione a Wireshark, per lavorare su un PC diverso da quello che sta comunicando hai bisogno di: - Uno Swatch con porta "monitor" oppure - Un hub anni 80 oppure - Un derivatore passivo a "T" di quelli utilizzati negli armadi switch. Altrimenti, qualunque switch anche da 10 €, indirizza i pacchetti solo verso le porte che ha mappato, cioè se capisce che sulla porta 1 e sulla 3 ci sono due equipment che comunicano fra loro non manderà nulla di quei pacchetti sulla porta 2. Ecco perché probabilmente non vedi nulla. Fatto il collegamento, attivi il filtro TCP/IP per vedere la connessione e poi quello HTTP per vedere il flusso. L'approccio dell'uomo semplice che userei io è sniffare la comunicazione con il browser, poi quella con il PLC e vedere quale carattere (perché quasi sicuramente è quello il problema) viene mandato male.
rossiroberto Inserita: 27 ottobre 2016 Autore Segnala Inserita: 27 ottobre 2016 Grazie per la risposta! Per quanto riguarda wireshark hai ragione non posso vedere il "not found" di risposta dal server sul comando sbagliato!! Quando parli di: Quote - Un derivatore passivo a "T" di quelli utilizzati negli armadi switch. intendi un network tap? Con l'approccio dell'uomo semplice (comunicazione browser-plc funzionante) trovo: Frame 28: 594 bytes on wire (4752 bits), 594 bytes captured (4752 bits) on interface 0 Ethernet II, Src: AsustekC_5d:a6:f2 (00:17:31:5d:a6:f2), Dst: 00:62:6e:63:e3:30 (00:62:6e:63:e3:30) Internet Protocol Version 4, Src: 192.168.0.2, Dst: 192.168.0.11 Transmission Control Protocol, Src Port: 50575, Dst Port: 2000, Seq: 1, Ack: 1, Len: 540 Hypertext Transfer Protocol GET /cgi-bin/CGIProxy.fcgi?cmd%3DsetOSDSetting%26isEnableTimeStamp%3D1%26isEnableDevName%3D1%26dispPos%3D0%26isEnableOSDMask%3D0%26usr%3Duser%26pwd%3password HTTP/1.1\r\n [Expert Info (Chat/Sequence): GET /cgi-bin/CGIProxy.fcgi?cmd%3DsetOSDSetting%26isEnableTimeStamp%3D1%26isEnableDevName%3D1%26dispPos%3D0%26isEnableOSDMask%3D0%26usr%3Duser%26pwd%3Dpassword HTTP/1.1\r\n] Request Method: GET Request URI: /cgi-bin/CGIProxy.fcgi?cmd%3DsetOSDSetting%26isEnableTimeStamp%3D1%26isEnableDevName%3D1%26dispPos%3D0%26isEnableOSDMask%3D0%26usr%3Duser%26pwd%3Dpassword Request URI Path: /cgi-bin/CGIProxy.fcgi Request URI Query: cmd%3DsetOSDSetting%26isEnableTimeStamp%3D1%26isEnableDevName%3D1%26dispPos%3D0%26isEnableOSDMask%3D0%26usr%3user%26pwd%3Dpassword Request URI Query Parameter: cmd%3DsetOSDSetting%26isEnableTimeStamp%3D1%26isEnableDevName%3D1%26dispPos%3D0%26isEnableOSDMask%3D0%26usr%3user%26pwd%3Dpassword Request Version: HTTP/1.1 Host: 192.168.0.11:2000\r\n User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0\r\n Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n Accept-Language: it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3\r\n Accept-Encoding: gzip, deflate\r\n Cookie: language=ITA; userName=user; remenber=; pwd=; multi=1\r\n Connection: keep-alive\r\n \r\n [Full request URI: http://192.168.0.11:2000/cgi-bin/CGIProxy.fcgi?cmd%3DsetOSDSetting%26isEnableTimeStamp%3D1%26isEnableDevName%3D1%26dispPos%3D0%26isEnableOSDMask%3D0%26usr%3Duser%26pwd%3Dpassword] [HTTP request 1/1] [Response in frame: 30] Dalla quale io ho provato questa formattazione (avendo scoperto che http 1.1 vuole la dichiarazione anche del header host): 'GET /cgi-bin/CGIProxy.fcgi?cmd%3DsetOSDSetting%26isEnableTimeStamp%3D1%26isEnableDevName%3D1%26dispPos%3D0%26isEnableOSDMask%3D0%26usr%3Duser%26pwd%3Dpassword HTTP/1.1\r\n$R$LHost: 192.168.0.11:2000\r\n$R$L$R$L Purtroppo non funziona ancora perchè sicuramente manca qualcosa!!
salto Inserita: 28 ottobre 2016 Segnala Inserita: 28 ottobre 2016 Nel frame la parte relativa al protocollo http dovrebbe essere tutta questa: GET /cgi-bin/CGIProxy.fcgi?cmd%3DsetOSDSetting%26isEnableTimeStamp%3D1%26isEnableDevName%3D1%26dispPos%3D0%26isEnableOSDMask%3D0%26usr%3Duser%26pwd%3password HTTP/1.1\r\n Host: 192.168.0.11:2000\r\n User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0\r\n Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n Accept-Language: it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3\r\n Accept-Encoding: gzip, deflate\r\n Cookie: language=ITA; userName=user; remenber=; pwd=; multi=1\r\n Connection: keep-alive\r\n \r\n
dan64100 Inserita: 28 ottobre 2016 Segnala Inserita: 28 ottobre 2016 Quote intendi un network tap? Esattamente. L'header è necessario altrimenti non è più un protocollo, sicuramente un mare di campi non verrano minimamente considerati dalla camera ma conviene che ci siano. Per non incasinarti con il protocollo ti conviene lavorare sul dump esadecimale TCP così non fai errori di caratteri di controllo, buttarlo in una DB e spedirlo.
rossiroberto Inserita: 29 ottobre 2016 Autore Segnala Inserita: 29 ottobre 2016 Grazie per le risposte!! Quote Per non incasinarti con il protocollo ti conviene lavorare sul dump esadecimale TCP.... Sto studiando come farlo
rossiroberto Inserita: 2 novembre 2016 Autore Segnala Inserita: 2 novembre 2016 Un saluto a tutti! Ho fatto un pò di passi avanti, con un tap vedo lo scambio dati e lavorando sul dump esadecimale sono riuscito ad ottenere un "200 ok" dal server del' ip camera. Avrei una domanda sul Quote buttarlo in una DB cioè sulla formattazione del dump per poi fare un copia \incolla su una DB con un array. Attualmente ho importato il dump in una tabella excel e con un pò di formule e dei copia incolla (perdendoci molto tempo!) ho ottenuto la mia bella colonna: 16#08 16#44 16#13 16#4d ... Esiste un metodo migliore o devo "automatizzare" di più il foglio excel che uso per la conversione?
dan64100 Inserita: 2 novembre 2016 Segnala Inserita: 2 novembre 2016 Quote sono riuscito ad ottenere un "200 ok" dal server del' ip Ottimo, abbiamo azzeccato la strada Quote Esiste un metodo migliore o devo "automatizzare" di più il foglio excel che uso per la conversione? Dipende da quanti telegrammi devi costruire. Se sono tanti ovviamente ti conviene automatizzare la procedura. Hai varie strade secondo me: 1) Partendo dal dump testuale di Wireshark (0x0a, 0x0b, ecc..) fai un S&R 0x->16#, ti crei una DB come sorgente e poi la importi, Notepad++ fa miracoli con i files di testo. 2) Se sai programmare puoi creare un'immagine binaria della DB e usare Snap7 per riempirla. Magari il TIA Portal ha delle funzioni avanzate per l'import/export delle DB, io purtroppo non li conosco, ma se ci sono quì senz'altro qualcuno li usa
rossiroberto Inserita: 1 dicembre 2016 Autore Segnala Inserita: 1 dicembre 2016 Rieccomi! Lavoro permettendo sono riuscito a terminare il programma per la comunicazione tra l'S7-1200 e l'IP camera. Per creare i telegrammi ho creato un file .xls dove, mettendo in una cella il dump, ottengo la mia bella tabellina da incollare in una db. Per dividere il dump nelle varie colonne ho utilizzato la formula: =STRINGA.ESTRAI($B$1;RIF.RIGA()*2-1;2) \\ con dump esadecimale posto in B1 Per il resto sono normali conversioni spostamenti.... Saluti Roberto
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora