# Driver

> Che cos'è un driver, dove sono elencati i driver e come uno viene aggiunto alla stazione, il driver fisso di un dispositivo, la tabella di ogni driver che questo prodotto conosce, che cosa documenta ciascuna pagina di driver, e la nota sui driver che un pacchetto non porta.

Un **driver** è il protocollo che la stazione usa per parlare con una famiglia di apparecchiature: registri Modbus su TCP, un server OPC UA, un PLC Siemens. Ogni dispositivo della pagina Connector appartiene esattamente a un driver, e il driver decide quali campi di connessione il dispositivo mostra, come vengono indirizzati i suoi tag, quali tipi di dato possono portare, se si possono scrivere, se il driver può cercare apparecchiature, e se è la stazione a interrogarli o l'apparecchiatura a spingere verso di lei. Questo gruppo tiene una pagina per driver; questa pagina è quello che hanno in comune.

## Il registro {#the-registry}

L'insieme dei driver è fisso: viene consegnato con l'applicazione e non si può estendere dalla pagina. La cartella **Driver** in cima all'albero della colonna Comunicazione apre il catalogo di quelli che questa installazione porta, ciascuno con la sua descrizione, il conteggio dei dispositivi, lo stato di salute e **Aggiungi driver**, oppure **Apri** e **Rimuovi driver** una volta aggiunto; il catalogo e le sue regole sono su [L'elenco dei driver e la pagina di un driver](connector-drivers).

Ogni driver che il pacchetto porta è pronto all'uso, senza alcun interruttore per accenderlo o spegnerlo: la stazione aggiunge quelli che usa. Sotto la cartella Driver l'albero elenca i driver aggiunti, con o senza qualcosa sotto, così la colonna contiene ciò che la stazione è pronta a leggere. Un driver si aggiunge con **Aggiungi driver** sulla sua riga del catalogo o nel menu Nuovo… della colonna, e si rimuove con **Rimuovi driver** sulla sua riga del catalogo, sulla sua barra o nel suo menu del clic destro. Rimuovere non elimina nulla: viene rifiutato finché il driver contiene un dispositivo, una linea seriale, un broker o una cartella, e un driver che ne contiene uno è sempre aggiunto. Una stazione nuova non ha driver aggiunti; una stazione aggiornata da una versione precedente comincia con aggiunti i driver che usa già.

## Il driver di un dispositivo è fisso {#the-driver-of-a-device-is-fixed}

Il driver si sceglie quando si crea il dispositivo: nel menu Nuovo… della colonna il dispositivo si crea dalla voce del driver stesso, e Aggiungi dispositivo sulla pagina di un driver crea sotto quel driver. Da quel momento la scheda Dispositivo mostra il driver come testo in sola lettura. Per portare un dispositivo su un altro protocollo, crea un dispositivo nuovo sotto l'altro driver ed elimina il vecchio; l'indirizzo cambia, quindi i riferimenti vanno puntati sui nuovi tag attraverso la scheda Usato da di ciascun tag.

## Ogni driver {#every-driver}

I driver sono raggruppati per famiglia di apparecchiature che raggiungono: gli stessi gruppi, nello stesso ordine, in cui li elencano il catalogo **Driver** e la voce **Aggiungi driver** del menu Nuovo… della colonna.

### PLC {#plcs}

| Driver | Parla con |
| --- | --- |
| [Beckhoff ADS](driver-beckhoff-ads) | PLC Beckhoff TwinCAT su ADS/AMS. |
| [Mitsubishi MC](driver-mitsubishi) | PLC Mitsubishi attraverso il driver MELSEC MC. |
| [Omron](driver-omron) | PLC Omron: i controllori CJ, CS e CP per indirizzo di memoria su FINS (UDP, TCP o Host Link su una linea seriale), e i controllori NJ, NX e NY per nome di variabile su EtherNet/IP. |
| [Rockwell EtherNet/IP](driver-rockwell) | PLC Allen-Bradley / Rockwell su EtherNet/IP (CIP). |
| [Siemens S7](driver-siemens-s7) | PLC Siemens S7 attraverso il driver S7comm. |

### Protocolli industriali {#industrial-protocols}

| Driver | Parla con |
| --- | --- |
| [BACnet](driver-bacnet) | Dispositivi di automazione degli edifici BACnet/IP. |
| [Generic serial and TCP](driver-generic-serial-tcp) | Apparecchiature con un protocollo proprio di testo o di byte, come bilance e lettori di codici a barre, su una linea seriale, in TCP o in UDP. |
| [Modbus RTU](driver-modbus-rtu) | Registri Modbus su una linea seriale (RS-485/232), in modalità di trasmissione RTU o ASCII. |
| [Modbus TCP](driver-modbus-tcp) | Registri Modbus su TCP/IP, in trama MBAP o come trame RTU per un convertitore seriale-Ethernet. Porta predefinita 502. |
| [MQTT](driver-mqtt) | Dispositivi che pubblicano attraverso un broker MQTT esterno, in MQTT semplice o Sparkplug B. |
| [OCPP](driver-ocpp) | Punti di ricarica per veicoli elettrici su OCPP (sono i punti di ricarica a collegarsi a questa stazione). |
| [OPC DA](driver-opc-da) | Server OPC Data Access classici tramite COM/DCOM, attraverso un processo ausiliario a 32 bit tutto loro. |
| [OPC UA](driver-opc-ua) | Client OPC Unified Architecture su opc.tcp. |
| [SNMP](driver-snmp) | Apparati di rete che rispondono in SNMP v1, v2c o v3, come gruppi di continuità (unità UPS), PDU, switch e sensori di sala tecnica; con Redfish per i server, copre la sala tecnica. |

### Strumenti e acquisizione dati {#instruments-and-acquisition}

| Driver | Parla con |
| --- | --- |
| [Fluke NetDAQ](driver-fluke-netdaq) | Unità di acquisizione dati Fluke NetDAQ (2640A, 2645A) e 2680 Series (2680A, 2686A), configurate a partire dai tag e lette tramite la libreria di Fluke in un processo ausiliario a 32 bit. |
| [NI-DAQmx](driver-ni-daqmx) | Hardware di acquisizione dati di National Instruments (telai cDAQ e i loro moduli, dispositivi USB e PCI Express) tramite il NI-DAQmx installato su questo computer, un campione per lettura. |
| [SCPI instruments](driver-scpi) | Strumenti da banco che parlano SCPI, come multimetri, alimentatori e carichi elettronici, via TCP, su linea seriale, o via USB e GPIB tramite VISA. |

### Senza fili {#wireless}

| Driver | Parla con |
| --- | --- |
| [LoRaWAN](driver-lorawan) | Sensori LoRaWAN e concentratori radio attraverso il server di rete Basics Station integrato. |
| [Matter](driver-matter) | Dispositivi domotici Matter (messa in servizio via Bluetooth). |

### Web e API {#web-and-apis}

| Driver | Parla con |
| --- | --- |
| [AVEVA PI](driver-aveva-pi) | Punti di un AVEVA PI System attraverso la PI Web API, in HTTPS per impostazione predefinita. |
| [HTTP](driver-http) | Endpoint HTTP e HTTPS generici interrogati come tag, con una credenziale facoltativa. |
| [Redfish](driver-redfish) | API REST Redfish per hardware di server e di centro dati. |

### File e database {#files-and-databases}

| Driver | Parla con |
| --- | --- |
| [Database](driver-database) | Le tabelle del database di un sistema della fabbrica (SQL Server, PostgreSQL, MySQL e MariaDB, SQLite, o qualsiasi database tramite il suo driver ODBC), ogni tag che legge una cella per tabella, colonna e riga oppure esegue una query propria; la cella o un comando proprio del tag scritti dove un tag lo chiede. |
| [File](driver-file) | File che un altro programma scrive in una cartella locale o di rete (CSV e testo a colonne, testo libero, JSON, XML), letti un file alla volta o da una cartella di arrivo; righe o file interi scritti per quel programma dove il dispositivo lo consente. |

### Prove {#test}

| Driver | Parla con |
| --- | --- |
| [Simulated](driver-simulated) | Segnali sintetici interni all'applicazione, per provare senza hardware. |

Il [server Modbus](connector-modbus-server) non è in questa tabella: non è un driver, ma la stazione stessa che serve i suoi tag e le sue variabili di Logic a PLC, HMI e sistemi di building automation in Modbus TCP, dalla sua riga sotto la cartella Server.

## Che cosa hanno in comune i driver, e dove differiscono {#what-the-drivers-have-in-common-and-where-they-differ}

Il Connector disegna un solo editor per ogni driver e lascia decidere al driver quali parti compaiono. Questa tabella dice che cosa aspettarsi prima di aprire la pagina di un driver:

| Driver | Campi di connessione sulla pagina Dispositivo | Indirizzamento dei tag | Intervallo di interrogazione | Scritture sui tag | Rilevamento |
| --- | --- | --- | --- | --- | --- |
| Simulated | nessuno | il nome del tag, più la forma del segnale | sì | sì | sì (il suo catalogo) |
| Modbus TCP | Indirizzo host, Porta, ID unità, Formato della trama (MBAP o RTU), Intervallo minimo tra transazioni | tipizzato: classe e numero di registro | sì | sì | sì (scansione di un host o di un CIDR) |
| Modbus RTU | Linea seriale · fissa (la linea fissa la modalità di trasmissione, RTU o ASCII), ID unità | tipizzato: classe e numero di registro | sì | sì | sì (sondaggio degli ID unità su una linea) |
| OPC UA | Indirizzo host, Porta, Percorso della risorsa, Nome utente, Password di accesso | testo libero: id di nodo | sì | sì | sì (indirizzo del server) |
| OPC DA | Indirizzo host, Server / Chiave | testo libero: ID elemento | sì | sì | sì (i server di un computer) |
| Siemens S7 | Indirizzo host, Telaio / Slot | tipizzato: area di memoria, DB, byte, bit | sì | sì | no |
| Rockwell EtherNet/IP | Indirizzo host, Slot del telaio | testo libero: tag del controllore, più uno scostamento | sì | sì | sì (diffusione) |
| Beckhoff ADS | Indirizzo host, Porta, IP locale (AMS) | testo libero: simbolo | sì | sì | no |
| Mitsubishi MC | Indirizzo host, Porta | testo libero: indirizzo di dispositivo | fisso a 1 s | sì | no |
| BACnet | Indirizzo host, Porta, Identificativo del dispositivo | tipizzato: tipo di oggetto e numero di istanza | fisso a 1 s | sì | sì (Who-Is) |
| OCPP | Identificativo | tipizzato: numero del connettore di ricarica; il nome del tag finisce in Meter, Status o Transaction | spinto dal punto di ricarica | no (sola lettura) | sì (punti di ricarica collegati) |
| Redfish | Indirizzo host, Porta, Nome utente, Password di accesso | testo libero: percorso della risorsa, più un puntatore JSON | sì | sì | sì (indirizzo del servizio) |
| Matter | ID nodo · sola lettura | tipizzato: uscita, cluster e attributo; i tag vengono dal dispositivo | sì | sì (i valori che il driver sa cambiare) | sì (nodi messi in servizio, con i valori che ciascuno pubblica) |
| LoRaWAN | Identificativo (DevEUI del sensore), Server / Chiave (chiave applicativa) | tipizzato: canale o scostamento, tipo LPP | spinto dal sensore | no (sola lettura) | no |
| AVEVA PI | Indirizzo host, Porta, Percorso della risorsa, Trasporto di rete, Nome utente, Password di accesso, Token di autorizzazione | testo libero: percorso PI | sì | sì | sì (elemento AF dopo l'indirizzo del servizio) |
| HTTP | Indirizzo host, Porta, Percorso della risorsa | testo libero: percorso | sì | sì | no |
| MQTT | Broker · fisso (il broker tiene host, porta, trasporto e accesso), Protocollo e, in Sparkplug B, gli ID di gruppo, nodo edge e dispositivo | testo libero: Topic MQTT, più un percorso del valore dentro un payload JSON, oppure Metrica Sparkplug B | consegnato dal broker | sì (su un topic di comando, o con un comando Sparkplug B) | sì (ascolto su un broker) |
| Generic serial and TCP | Trasporto di rete (Client TCP o Ascolto UDP), Indirizzo host, Porta, oppure la Linea seriale · fissa per un dispositivo su una linea; poi le schede Messaggi e Somma di controllo | tipizzato: modalità di lettura, richiesta, filtro dei messaggi e dove sta il valore nel messaggio | sì; un tag in ascolto conserva ciò che l'apparecchiatura invia | sì (un messaggio di scrittura; non in UDP) | no |
| Omron | Indirizzo host, Protocollo (FINS o Tag NJ/NX per nome); su FINS la Porta e la scheda FINS (trasporto, rete, nodi, unità, timeout di risposta); su una linea seriale, la Linea seriale (fissa), l'ID unità (il numero di unità Host Link) e il timeout di risposta | testo libero: Indirizzo di memoria (FINS) o Nome della variabile (NJ/NX) | sì | sì | sì (un sondaggio FINS di un PLC, e un broadcast per i controllori NJ/NX) |
| SCPI instruments | Trasporto di rete (TCP (socket LXI) o VISA), Indirizzo host e Porta o la Risorsa VISA, oppure la Linea seriale · fissa per un dispositivo su una linea; poi la scheda Strumento (terminatore, timeout di risposta, conferma di scrittura, comandi di preparazione) | testo libero: Interrogazione, più quale valore di una risposta separata da virgole, e un comando di scrittura | sì | sì (un comando di scrittura, confermato tramite la coda degli errori dello strumento) | sì (gli strumenti che VISA elenca, e un sondaggio TCP di un host) |
| NI-DAQmx | nessuno: al suo posto la scheda Dispositivo NI-DAQmx (Nome del dispositivo, e il Prodotto che NI-DAQmx legge) | tipizzato: Canale fisico e Misura, con il campo, il cablaggio, la termocoppia o le impostazioni del contatore della misura | sì | sì (linee di uscita digitale e uscite in tensione) | sì (ogni dispositivo che NI MAX conosce, con i suoi canali) |
| Fluke NetDAQ | Indirizzo host; poi la scheda Strumento (Canale base, Velocità di scansione) | tipizzato: Punto (un canale analogico e la sua Funzione, una linea digitale, un relè o il totalizzatore) | sì; lo strumento scansiona all'intervallo più breve tra i tag del dispositivo | sì (linee digitali e relè, e il totalizzatore riportato a zero) | no |
| SNMP | Indirizzo host, Porta; poi la scheda Agente SNMP (versione, community o utente SNMPv3 e sicurezza, timeout di risposta, tentativi aggiuntivi) | testo libero: OID, in numeri o con il nome standard | sì | sì (un SET che l'agente accetta; un oggetto standard che la sua MIB dichiara di sola lettura resta di sola lettura) | sì (un percorso dei sottoalberi standard di un agente) |
| File | nessuno: al suo posto la scheda Cartella e file (Percorso della cartella, Nome del file o il pattern della cartella di arrivo, Leggere da, Formato del file), poi le schede Testo del file e Scrittura | tipizzato: cosa legge il tag (un valore, il file intero o un dato del file) e, per un valore, una colonna e una riga (CSV), una riga e i suoi caratteri (testo libero) o un percorso (JSON, XML) | sì | sì (su un dispositivo che consente la scrittura: una riga aggiunta, il file intero sostituito o un altro file indicato) | sì (un file, quello di un dispositivo o uno scritto) |
| Database | nessuno: al suo posto la scheda Connessione al database (Tipo di database, poi Server del database, Porta, Nome dell'istanza e Nome del database, il File del database, oppure l'Origine dati o testo di connessione), poi la scheda Accesso (Nome utente e Password di accesso, e su SQL Server l'accesso Windows e la Crittografia) | tipizzato: come legge il tag (una cella per Tabella, Colonna del valore e Riga da leggere, oppure il Testo della sua query propria) | sì | sì (la cella che legge, oppure il suo comando di scrittura) | sì (le tabelle del database di un dispositivo) |

Ogni driver restringe inoltre l'elenco del campo **Tipo di dato** di un tag a quello che sa davvero trasportare; l'elenco esatto sta nella pagina del driver. Dove la tabella dice « fisso a 1 s » il driver ignora l'intervallo configurato, quindi le pagine Dispositivo e Tag nascondono per lui il campo Intervallo di interrogazione. Dove dice « sola lettura », il campo Accesso offre soltanto Sola lettura e il campo di scrittura non compare mai.

## Che cosa documenta ogni pagina di driver {#what-every-driver-page-documents}

Ogni pagina di driver percorre le stesse sezioni nello stesso ordine: i campi di connessione che la scheda Dispositivo mostra e come compongono l'URI di base; come si indirizza un tag (i campi tipizzati oppure il testo libero, e l'indirizzo di bus in sola lettura che il pannello anticipa); i tipi di dato offerti; il rilevamento, quando il driver ce l'ha; le scritture, quando il driver le accetta; e le particolarità del driver (credenziali, certificati, tempi, un server di rete che la stazione fa girare, l'associazione).

## Un driver che il pacchetto non porta {#a-driver-the-package-does-not-carry}

Il Connector non elenca né offre mai un driver che il pacchetto in esecuzione non porta. Una configurazione che arriva comunque con quei dispositivi (un backup ripristinato, una configurazione da un'altra macchina) li conserva: il driver resta elencato, nel catalogo e sotto la cartella Driver, finché quei dispositivi esistono, la sua descrizione legge « Driver non incluso in questo pacchetto. », e la pagina del driver e ogni dispositivo sotto di lui portano un avviso che dice lo stesso. Quei dispositivi restano non connessi e conservano le loro impostazioni; si possono eliminare, ma non copiare, e sotto quel driver non si può avviare alcun nuovo dispositivo né alcuna scansione di rilevamento.

Quali driver un pacchetto porta si legge dal registro dei driver del Connector, che esiste solo dopo che il Connector è partito. Fino ad allora ogni driver conta come presente, quindi il catalogo si assesta qualche secondo dopo l'avvio e poi resta fermo per tutta la sessione, anche mentre il Connector viene fermato e riavviato.

Il codice di un driver viene caricato una volta sola per tutto il tempo in cui l'applicazione gira. Fermare e riavviare la comunicazione ricostruisce i dispositivi in esecuzione e l'elenco dei driver a partire da quello stesso caricamento, ed è questo che tiene piatta la memoria della stazione lungo una giornata di riavvii. La conseguenza è che sostituire su disco i file di un driver ha effetto solo dopo il riavvio dell'applicazione stessa.
