{"id":24809,"date":"2017-06-11T12:12:50","date_gmt":"2017-06-11T10:12:50","guid":{"rendered":"http:\/\/help.qualiware.it\/qw-help\/?p=24809"},"modified":"2019-05-10T17:26:29","modified_gmt":"2019-05-10T15:26:29","slug":"acquisizione-dati-da-plc-tramite-protocollo-modbus-tcp","status":"publish","type":"post","link":"https:\/\/help.qualiware.it\/qw-help\/acquisizione-dati-da-plc-tramite-protocollo-modbus-tcp\/","title":{"rendered":"Acquisizione dati da PLC tramite protocollo MODBUS TCP"},"content":{"rendered":"<p>La piattaforma di sviluppo QWay consente di&nbsp;acquisire informazioni da PLC collegati a macchine di produzione, utilizzando il protocollo standard MODBUS TCP, uno standard de-facto nell&#8217;ambito dell&#8217;automazione industriale (per maggior informazioni vedere <a href=\"https:\/\/en.wikipedia.org\/wiki\/Modbus\" target=\"_blank\" rel=\"noopener noreferrer\">qui<\/a>).<\/p>\n<p>Il protocollo prevede una configurazione del tipo master-slave, con il dispositivo di controllo (PLC) che funge da <strong>slave<\/strong> e ha un proprio indirizzo IP, una porta di ascolto (normalmente la 502) e un proprio ID, e il dispositivo di lettura (nel nostro caso il server dove \u00e8 installato QualiWare) che funge da <strong>master<\/strong>.<\/p>\n<p>Esistono 4 diversi tipi di registri che \u00e8 possibile leggere e scrivere, ognuno identificato da un apposito termine standard:<\/p>\n<ul>\n<li>Coils: leggibili e&nbsp;scrivibili, 1 bit (off\/on), corrispondono a rel\u00e8<\/li>\n<li>Discrete Inputs: leggibili, 1 bit (off\/on), corrispondono a contatti<\/li>\n<li>Input Registers: leggibili, 16 bits (0 to 65,535),&nbsp;essenzialmente per misure e stato<\/li>\n<li>Holding Registers: leggibili e&nbsp;scrivibili, 16 bits (0 to 65,535),&nbsp;essenzialmente per configurazione<\/li>\n<\/ul>\n<p>La piattaforma QWay incorpora&nbsp;la libreria <strong>ModbusTCP<\/strong> che mette a disposizione primitive per scrivere e leggere i registri di cui sopra. E&#8217; disponibile un&nbsp;<a href=\"http:\/\/help.qualiware.it\/qw-help\/wp-content\/uploads\/ModBusTest.zip\">form dimostrativo<\/a>&nbsp;di tutte le funzionalit\u00e0 di lettura e scrittura, utilizzabile come punto di partenza per lo sviluppo.<\/p>\n<p>Per facilitare il test \u00e8 anche disponibile un emulatore di&nbsp;slave, scaricabile da <a href=\"http:\/\/help.qualiware.it\/qw-help\/wp-content\/uploads\/ModbusSlave.zip\">qui<\/a>. Tale emulatore trasforma il PC sul quale viene eseguito in uno slave, il cui IP sar\u00e0 quello del PC stesso, e per il quale \u00e8 possibile definire la porta di ascolto e l&#8217;ID. Prima di attivarlo, premendo il tasto &#8220;Listen&#8221;, dovr\u00e0 essere definita la funzione che dovr\u00e0 emulare, e quindi dare la possibilit\u00e0 al master di leggere\/scrivere i coils, di leggere i registri di input&nbsp;discreti, di leggere\/scrivere i registri holding o di leggere i registri di input.<\/p>\n<p>Nella parte inferiore \u00e8 possibile definire i valori che dovranno essere letti dal master, o leggere i valori scritti dal master. Nel caso di registri di input discreti e coils \u00e8 necessario cambiare il display format in LED o binary per vedere i valori corretti.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-24821\" src=\"http:\/\/help.qualiware.it\/qw-help\/wp-content\/uploads\/ModbusSlaveEmulator.png\" alt=\"\" width=\"872\" height=\"728\" srcset=\"https:\/\/help.qualiware.it\/qw-help\/wp-content\/uploads\/ModbusSlaveEmulator.png 872w, https:\/\/help.qualiware.it\/qw-help\/wp-content\/uploads\/ModbusSlaveEmulator-300x250.png 300w, https:\/\/help.qualiware.it\/qw-help\/wp-content\/uploads\/ModbusSlaveEmulator-768x641.png 768w\" sizes=\"(max-width: 872px) 100vw, 872px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>NOTE<\/p>\n<ol>\n<li>Il dispositivo dal quale QualiWare legger\u00e0 i dati deve essere configurato come SLAVE. In particolare, per i PLC Siemens SIMATIC S7 in caso di difficolt\u00e0 si suggerisce di fare riferimento a <a href=\"https:\/\/www.dmcinfo.com\/latest-thinking\/blog\/id\/8869\/using-an-s7-1200-plc-as-a-modbus-tcp-slave\" target=\"_blank\" rel=\"noopener noreferrer\">questo articolo<\/a>.<\/li>\n<li>Per verificare la corretta configurazione del dispositivo e del canale di comunicazione MODBUS \u00e8 consigliabile usare il tool CAS MODBUS SCANNER, scaricabile da <a href=\"https:\/\/store.chipkin.com\/products\/tools\/cas-modbus-scanner\" target=\"_blank\" rel=\"noopener noreferrer\">qui<\/a>.<\/li>\n<li>Sui PLC Siemens \u00e8 stato constatato che non \u00e8 possibile collegare pi\u00f9 di un master in lettura alla volta. Quando si fanno i test \u00e8 quindi necessario accertarsi che l&#8217;applicazione, o il simulatore, siano attivi su un solo PC o server alla volta, altrimenti viene restituito un errore TCP apparentemente senza significato.<\/li>\n<li>Per memorizzare valori float, il PLC utilizza 2 registri holding consecutivi da 2 byte. Per convertirli in variabili di tioo &#8220;single&#8221; una volta acquisiti dal PLC stesso, si pu\u00f2 usare la primitiva BitConverter.ToSingle, come nel codice seguente, che \u00e8 riferito alla lettura di dati da PLC Siemens S7:<\/li>\n<\/ol>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\">dim b(4) as byte\r\nb(0)=values(3)\r\nb(1)=values(2)\r\nb(2)=values(1)\r\nb(3)=values(0)\r\n                            \r\ndim v as single=BitConverter.ToSingle(b, 0)\r\n<\/pre>\n<p style=\"padding-left: 40px;\">In questo caso il valore \u00e8 contenuto nei primi 4 bytes letti dal PLC (la variabile &#8220;values&#8221; \u00e8 l&#8217;array di byte restituito dal PLC a seguito di un&#8217;operazione di lettura). Essi vengono messi nell&#8217;ordine opportuno in un array di 4 bytes e passati alla primitiva BitConverter.ToSingle. In modo del tutto analogo \u00e8 possibile acquisire un valore double a partire da 8 bytes letti dal dispositivo e utilizzando la primitiva BitConverter.ToDouble.&nbsp;<br \/>\nE&#8217; necessario tenere presenti che in PLC non Siemens i bytes potrebbero essere in un ordine differente.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La piattaforma di sviluppo QWay consente di&nbsp;acquisire informazioni da PLC collegati a macchine di produzione, utilizzando il protocollo standard MODBUS TCP, uno standard de-facto nell&#8217;ambito dell&#8217;automazione industriale (per maggior informazioni vedere qui). Il protocollo prevede una configurazione del tipo master-slave, con il dispositivo di controllo (PLC) che funge da slave e ha un proprio indirizzo&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"ngg_post_thumbnail":0,"footnotes":""},"categories":[76],"tags":[],"acf":[],"_links":{"self":[{"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/posts\/24809"}],"collection":[{"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/comments?post=24809"}],"version-history":[{"count":0,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/posts\/24809\/revisions"}],"wp:attachment":[{"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/media?parent=24809"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/categories?post=24809"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/help.qualiware.it\/qw-help\/wp-json\/wp\/v2\/tags?post=24809"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}