# Drivers

> What a driver is, where the drivers are listed and how one is added to the station, the fixed driver of a device, the table of every driver this product knows, what each driver page documents, and the note on drivers a package does not carry.

A **driver** is the protocol the station uses to talk to a family of equipment: Modbus registers over TCP, an OPC UA server, a Siemens PLC. Every device on the Connector page belongs to exactly one driver, and the driver decides which connection fields the device shows, how its tags are addressed, which data types they may carry, whether they can be written, whether the driver can scan for equipment, and whether the station polls them or the equipment pushes to it. This group holds one page per driver; this page is what they have in common.

## The registry {#the-registry}

The set of drivers is fixed: it ships with the application and cannot be extended from the page. The **Drivers** folder at the top of the Communication tree opens the catalog of the ones this installation carries, each with its description, its device count, its health and **Add driver**, or **Open** and **Remove driver** once it is added; the catalog and its rules are on [The drivers list and a driver's page](connector-drivers).

Every driver the package carries is ready to use, with no switch to turn it on or off: the station adds the ones it uses. Under the Drivers folder the tree lists the added drivers, with or without anything under them, so the column holds what the station is set up to read. A driver is added with **Add driver** on its catalog row or in the column's New… menu, and removed with **Remove driver** on its catalog row, on its own bar or on its right-click menu. Removing deletes nothing: it is refused while the driver holds a device, a serial line, a broker or a folder, and a driver that holds one is always added. A new station has no driver added; a station updated from an earlier version starts with the drivers it already uses added.

## The driver of a device is fixed {#the-driver-of-a-device-is-fixed}

You choose the driver when you create the device: in the column's New… menu the device is created from the driver's own entry, and Add device on a driver's page creates under that driver. From then on the Device card shows the driver as read-only text. To move a device to another protocol, create a new device under the other driver and delete the old one; the address changes, so the references have to be pointed at the new tags through each tag's Used by card.

## Every driver {#every-driver}

The drivers are grouped by the family of equipment they reach: the same groups, in the same order, as the **Drivers** catalog and the New… menu's **Add driver** list them.

### PLCs {#plcs}

| Driver | Talks to |
| --- | --- |
| [Beckhoff ADS](driver-beckhoff-ads) | Beckhoff TwinCAT PLCs over ADS/AMS. |
| [Mitsubishi MC](driver-mitsubishi) | Mitsubishi PLCs over the MELSEC MC driver. |
| [Omron](driver-omron) | Omron PLCs: CJ, CS and CP controllers by memory address over FINS (UDP, TCP, or Host Link on a serial line), and NJ, NX and NY controllers by variable name over EtherNet/IP. |
| [Rockwell EtherNet/IP](driver-rockwell) | Allen-Bradley / Rockwell PLCs over EtherNet/IP (CIP). |
| [Siemens S7](driver-siemens-s7) | Siemens S7 PLCs over the S7comm driver. |

### Industrial protocols {#industrial-protocols}

| Driver | Talks to |
| --- | --- |
| [BACnet](driver-bacnet) | BACnet/IP building-automation devices. |
| [Generic serial and TCP](driver-generic-serial-tcp) | Equipment with a text or byte protocol of its own, such as weighing indicators and barcode readers, over a serial line, TCP or UDP. |
| [Modbus RTU](driver-modbus-rtu) | Modbus registers over a serial line (RS-485/232), in RTU or ASCII transmission. |
| [Modbus TCP](driver-modbus-tcp) | Modbus registers over TCP/IP, in MBAP framing or as RTU frames for a serial-to-Ethernet converter. Default port 502. |
| [MQTT](driver-mqtt) | Devices that publish through an external MQTT broker, in plain MQTT or Sparkplug B. |
| [OCPP](driver-ocpp) | EV charge points over OCPP (charge points connect to this station). |
| [OPC DA](driver-opc-da) | Classic OPC Data Access servers over COM/DCOM, through a 32-bit helper process of their own. |
| [OPC UA](driver-opc-ua) | OPC Unified Architecture client over opc.tcp. |
| [SNMP](driver-snmp) | Network equipment that answers SNMP v1, v2c or v3, such as UPS units, PDUs, switches and technical room sensors; with Redfish for the servers, it covers the technical room. |

### Instruments and acquisition {#instruments-and-acquisition}

| Driver | Talks to |
| --- | --- |
| [Fluke NetDAQ](driver-fluke-netdaq) | Fluke NetDAQ (2640A, 2645A) and 2680 Series (2680A, 2686A) data acquisition units, configured from the tags and read through Fluke's own library in a 32-bit helper process. |
| [NI-DAQmx](driver-ni-daqmx) | National Instruments data acquisition hardware (cDAQ chassis and modules, USB and PCI Express devices) through the NI-DAQmx installed on this computer, one sample per poll. |
| [SCPI instruments](driver-scpi) | Bench instruments that speak SCPI, such as multimeters, power supplies and electronic loads, over TCP, a serial line, or USB and GPIB through VISA. |

### Wireless {#wireless}

| Driver | Talks to |
| --- | --- |
| [LoRaWAN](driver-lorawan) | LoRaWAN sensors and radio concentrators via the embedded Basics Station network server. |
| [Matter](driver-matter) | Matter smart-home devices (Bluetooth commissioning). |

### Web and APIs {#web-and-apis}

| Driver | Talks to |
| --- | --- |
| [AVEVA PI](driver-aveva-pi) | AVEVA PI System points via PI Web API, over HTTPS by default. |
| [HTTP](driver-http) | Generic HTTP and HTTPS endpoints polled as tags, with an optional credential. |
| [Redfish](driver-redfish) | Redfish REST API for server/datacenter hardware. |

### Files and databases {#files-and-databases}

| Driver | Talks to |
| --- | --- |
| [Database](driver-database) | Tables of a factory system's database (SQL Server, PostgreSQL, MySQL and MariaDB, SQLite, or any database through its ODBC driver), each tag reading a cell by its table, column and row or running a query of its own; the cell or a command of the tag's own written where a tag is told to. |
| [File](driver-file) | Files another program writes in a local or network folder (CSV and column text, free text, JSON, XML), read one file or an inbox folder of them at a time; lines or whole files written for that program where the device allows it. |

### Test {#test}

| Driver | Talks to |
| --- | --- |
| [Simulated](driver-simulated) | Synthetic in-app signals for testing without hardware. |

The [Modbus server](connector-modbus-server) is not in this table: it is not a driver but the station serving its own tags and Logic variables to PLCs, HMIs and building systems over Modbus TCP, from its own row under the Servers folder.

## What the drivers have in common, and where they differ {#what-the-drivers-have-in-common-and-where-they-differ}

The Connector renders one editor for every driver and lets the driver decide which parts appear. This table says what to expect before opening a driver's page:

| Driver | Connection fields on the Device page | Tag addressing | Poll interval | Tag writes | Discover |
| --- | --- | --- | --- | --- | --- |
| Simulated | none | the tag name, plus the signal shape | yes | yes | yes (its catalog) |
| Modbus TCP | Host, Port, Unit ID, Framing (MBAP or RTU), Minimum transaction interval | typed: register class and number | yes | yes | yes (host or CIDR scan) |
| Modbus RTU | Serial line (fixed; the line sets the transmission mode, RTU or ASCII), Unit ID | typed: register class and number | yes | yes | yes (unit-id probe on a line) |
| OPC UA | Host, Port, Resource path, Username, Password | free text: Node id | yes | yes | yes (server address) |
| OPC DA | Host, Server / Key | free text: Item id | yes | yes | yes (the servers of a computer) |
| Siemens S7 | Host, Rack / Slot | typed: area, DB, byte, bit | yes | yes | no |
| Rockwell EtherNet/IP | Host, Slot | free text: Controller tag, plus an offset | yes | yes | yes (broadcast) |
| Beckhoff ADS | Host, Port, Local IP (AMS) | free text: Symbol | yes | yes | no |
| Mitsubishi MC | Host, Port | free text: Device address | fixed 1 s | yes | no |
| BACnet | Host, Port, Device Id | typed: object type and instance | fixed 1 s | yes | yes (Who-Is) |
| OCPP | Identifier | typed: connector number; the tag name ends in Meter, Status or Transaction | pushed by the charge point | no (read-only) | yes (connected charge points) |
| Redfish | Host, Port, Username, Password | free text: Resource path, plus a JSON pointer | yes | yes | yes (service address) |
| Matter | Node ID (read-only) | typed: output, cluster and attribute; the tags come from the device | yes | yes (the values the driver knows how to change) | yes (commissioned nodes, with the values each publishes) |
| LoRaWAN | Identifier (DevEUI), Server / Key (app key) | typed: channel or offset, LPP type | pushed by the sensor | no (read-only) | no |
| AVEVA PI | Host, Port, Resource path, Transport, Username, Password, Bearer token | free text: PI path | yes | yes | yes (AF element after the service address) |
| HTTP | Host, Port, Resource path | free text: Path | yes | yes | no |
| MQTT | Broker (fixed; the broker holds the host, port, transport and sign-in), Protocol, and for Sparkplug B the group, edge node and device IDs | free text: Topic, plus a value path inside a JSON payload, or Sparkplug B Metric | pushed through the broker | yes (on a command topic, or a Sparkplug B command) | yes (listening on a broker) |
| Generic serial and TCP | Transport (TCP client or UDP listener), Host, Port, or the Serial line (fixed) for a device on a line; then the Messages and Checksum cards | typed: read mode, request, message filter and where the value sits in the message | yes; a listening tag keeps what the equipment sends | yes (a write message; not over UDP) | no |
| Omron | Host, Protocol (FINS or NJ/NX tags by name); over FINS the Port and the FINS card (transport, network, nodes, unit, response timeout); on a serial line, the Serial line (fixed), the Unit ID (the Host Link unit number) and the response timeout | free text: Memory address (FINS) or Variable name (NJ/NX) | yes | yes | yes (a FINS probe of one PLC, and a broadcast for NJ/NX controllers) |
| SCPI instruments | Transport (TCP (LXI socket) or VISA), Host and Port or the VISA resource, or the Serial line (fixed) for a device on a line; then the Instrument card (terminator, response timeout, write confirmation, setup commands) | free text: Query, plus which value of a comma-separated answer, and a write command | yes | yes (a write command, confirmed through the instrument's error queue) | yes (the instruments VISA lists, and a TCP probe of one host) |
| NI-DAQmx | none: the NI-DAQmx device card in its place (Device name, and the Product NI-DAQmx reads) | typed: Physical channel and Measurement, with the measurement's range, wiring, thermocouple or counter settings | yes | yes (digital output lines and voltage outputs) | yes (every device NI MAX knows, with its channels) |
| Fluke NetDAQ | Host; then the Instrument card (Base channel, Scan speed) | typed: Point (an analog channel and its Function, a digital line, a relay or the totalizer) | yes; the instrument scans at the shortest interval among the device's tags | yes (digital lines and relays, and the totalizer set back to zero) | no |
| SNMP | Host, Port; then the SNMP agent card (version, community or SNMPv3 user and security, response timeout, retries) | free text: OID, in numbers or by a standard name | yes | yes (a SET the agent accepts; a standard object its MIB declares read only stays read only) | yes (a walk of one agent's standard subtrees) |
| File | none: the Folder and file card in its place (Folder path, File name or the inbox's pattern, Read from, File format), then the Text of the file and Writing cards | typed: what the tag reads (a value, the whole file or a fact of the file) and, for a value, a column and a row (CSV), a line and its characters (free text) or a path (JSON, XML) | yes | yes (on a device that allows writing: a line appended, the whole file replaced, or another file named) | yes (one file, a device's or one typed) |
| Database | none: the Database card in its place (Database type, then the Server, Port, Instance name and Database name, the Database file, or the Data source or connection text), then the Sign-in card (Username and Password, and on SQL Server the Windows sign-in and the Encryption) | typed: how the tag reads (a cell by Table, Value column and Row to read, or its own Query text) | yes | yes (the cell it reads, or its own write command) | yes (the tables of a device's database) |

Each driver also narrows the **Data type** list a tag offers to what it can actually marshal; the exact list is on the driver's page. Where the table says "fixed 1 s" the driver ignores the configured interval, so the Device and Tag pages hide the Poll interval field for it. Where it says "read-only", the Access field offers Read only alone and the write field never appears.

## What every driver page documents {#what-every-driver-page-documents}

Each driver page walks the same sections in the same order: the connection fields the Device card shows and how they assemble the Base URI; how a tag is addressed (the typed fields or the free-text token, and the read-only wire address the panel previews); the data types offered; discovery, when the driver has it; writes, when the driver accepts them; and the driver's particularities (credentials, certificates, timing, a network server the station runs, pairing).

## A driver the package does not carry {#a-driver-the-package-does-not-carry}

The Connector never lists or offers a driver the running package does not carry. A configuration that arrives with such devices anyway (a restored backup, a configuration from another machine) keeps them: the driver stays listed, in the catalog and under the Drivers folder, as long as those devices exist, its description reads "Driver not included in this package.", and the driver's page and every device under it carry a banner saying the same. Those devices stay offline and keep their settings; they can be deleted, but not copied, and no new device or discovery scan can be started under that driver.

Which drivers a package carries is read from the Connector's driver registry, which exists only once the Connector has started. Until then every driver counts as present, so the catalog settles a few seconds after launch and then stays put for the session, even while the Connector is stopped and started again.

A driver's code is loaded once for as long as the application runs. Stopping and starting the communication rebuilds the running devices and the driver list from that same load, which is what keeps the station's memory flat across a day of restarts. The consequence is that replacing a driver's own files on disk takes effect only after the application itself is restarted.
