File
Werte, die ein anderes Programm in eine Datei eines lokalen oder Netzwerkordners schreibt (die CSV einer Prüfmaschine, das Protokoll eines Datenloggers, ein Ergebnis in JSON oder XML), als Tags gelesen, und Zeilen oder ganze Dateien, die für ein anderes Programm geschrieben werden: die Karten Ordner und Datei, Text der Datei und Schreiben, was ein Tag in jedem Format liest, der Eingangsordner, der Suchlauf, der ein Tag je Spalte oder Feld anbietet, drei vollständige Beispiele und was der Treiber nicht tut.
Der Treiber File liest die Werte, die ein anderes Programm in eine Datei schreibt: die CSV, an die eine Prüfmaschine nach jeder Probe eine Zeile anhängt, das Protokoll eines Datenloggers, eine Ergebnisdatei in JSON oder XML, eine Textdatei, die nur eine Chargennummer enthält. Jedes Tag liest einen Wert der Datei, und seine Werte landen dort, wo die jedes anderen Tags landen: in Logic, auf Dashboards, in den Läufen eines Prüfstands von Process. Wo das Gerät es erlaubt, schreibt der Treiber auch für ein anderes Programm: eine an eine Datei angehängte Zeile oder eine ganz ersetzte Datei.
Lesen ist der Hauptzweck, und es braucht drei Antworten: den Ordner, die Datei und ihr Format. Wie sich der Text der Datei liest (ihre Zeichenkodierung, ihr Spaltentrennzeichen, ihr Dezimaltrennzeichen), wird aus der Datei selbst gelesen, solange es auf Erkennen steht, der Suchlauf bietet ein Tag je Spalte oder Feld an, und jedes Tag entsteht mit Nur lesen. Was zum Schreiben gehört, erscheint erst, wenn das Schreiben für das Gerät eingeschaltet ist.
Ein Gerät dieses Treibers ist ein Ordner und die Datei, die es dort liest: Zwei Dateien desselben
Ordners sind zwei Geräte. Der Ordner ist ein Laufwerk und ein Ordner (C:\TestMachine\Logs) oder eine
Netzwerkfreigabe und ein Ordner darin (\\lab-pc\results), und die Station erreicht ihn mit den
Windows-Rechten des Kontos, unter dem sie läuft. Die Geräte stehen unter dem Treiber und können in
Ordnern abgelegt werden, Treiber → Ordner → Gerät → Tag, wie unter jedem Treiber ohne serielle
Leitung und ohne Broker.
Die Seite des Treibers
Die Zeile unter der Kopfzeile lautet "Jedes Gerät liest eine Datei oder die Dateien, die in einem Ordner eintreffen. Legen Sie ein Gerät an, tragen Sie Ordner, Datei und Format ein und durchsuchen Sie es dann, um seine Werte als Tags hinzuzufügen." Mit Connector konfigurieren trägt die Seite den eigenen Suchbereich des Treibers, mit der Datei, die der Suchlauf liest (siehe Gerätesuche). Darunter steht die Tabelle Geräte jedes Treibers (siehe Die Gerätetabelle), die mit Gerät hinzufügen rechts neben ihrem Titel wächst; leer zeigt sie "Noch keine Geräte." Die Leiste des Treibers trägt Geräte suchen, ausgegraut, bis die Karte Suchbereich vollständig ist. Der Treiber steht unter Dateien und Datenbanken, der Kategorie, die in jeder Liste von Treibern zwischen Web und APIs und Tests steht.
Gerät
Ein Gerät dieses Treibers hat keine Karte Verbindung: An ihrer Stelle steht die Karte Ordner und Datei, gefolgt von der Karte Text der Datei und, bei einem Gerät, das eine Datei liest, der Karte Schreiben. Das Abfrageintervall (ms) der Karte Gerät, Standard 1000, gibt an, wie oft die Tags die Datei lesen, wobei jedes Tag es wie bei jedem Treiber überschreiben kann.
Ein neues Gerät hat keinen Ordner: Es zeigt "Ordner noch nicht eingetragen", seine Seite sagt "Die Station liest dieses Gerät nicht, solange es keinen Ordner hat. Deshalb wird noch nichts aus ihm gelesen, und es gibt keinen Fehler anzuzeigen. Tragen Sie den Ordner unten in der Karte Ordner und Datei ein, dann beginnt die Station, es zu lesen."
und nichts wird gelesen, bis der Ordner eingetragen ist. Die Basis-URI, die die Kopfzeile zeigt, ist
die Laufzeitadresse, mit Ordner und Namen in URI-Form und danach dem, was nicht auf Erkennen steht:
file://single?folder=C%3A%5CTestMachine%5CLogs&name=Log_%7Byyyy-MM-dd%7D.csv&format=delimited, oder
file://inbox?... für einen Eingangsordner.
Die Karte Ordner und Datei
| Feld | Bedeutung | Standard |
|---|---|---|
| Ordnerpfad | "Ein Laufwerk und ein Ordner oder eine Netzwerkfreigabe. Der Ordner wird mit den Windows-Rechten des Kontos erreicht, unter dem die Station läuft." Das Feld zeigt C:\TestMachine\Logs als Hinweis. |
leer |
| Dateiname | Bei einem Gerät, das eine Datei liest: "Ein Name innerhalb des Ordners. Teile in geschweiften Klammern sind Datum und Uhrzeit der Station: Log_.csv ist jeden Tag eine neue Datei." Ein Unterordner des Ordners darf Teil des Namens sein (results\last.csv). |
leer |
| Zu lesende Dateien | Dasselbe Feld bei einem Eingangsordner: "Die zu lesenden Dateien direkt im Ordner: * steht für beliebige Zeichen und ? für ein Zeichen, etwa Test_*.csv." | leer |
| Lesen aus | Eine Datei: "Die Datei wird bei jeder Änderung erneut gelesen. Eine wachsende Datei wird ab der Stelle gelesen, an der das letzte Lesen endete." Eingangsordner: "Jede neue Datei wird einmal gelesen, in der Reihenfolge ihres Eintreffens, und in den Unterordner Processed verschoben. Es wird nichts gelöscht." | Eine Datei |
| Dateiformat | CSV und Text in Spalten, Freier Text, JSON oder XML: wie ein Tag seinen Wert in der Datei findet (siehe Adressierung des Tags). | CSV und Text in Spalten |
Ein Name mit einem Datumsteil wird in geschweiften Klammern mit einem .NET-Format für Datum und
Uhrzeit geschrieben, nach der Uhr der Station: Log_{yyyy-MM-dd}.csv ist heute Log_2026-10-03.csv
und nach Mitternacht die Datei des nächsten Tages, und Data_{yyyy-MM}.txt wechselt jeden Monat. Unter
dem Feld zeigt die Karte, welche Datei das jetzt ist: "Heute: Log_2026-10-03.csv". Verdoppelte Klammern
{{ und }} sind Klammern des Namens. Ein Datumsteil schreibt nie einen Doppelpunkt, den kein
Dateiname enthalten darf: {HH-mm}, nicht {HH:mm}.
Sobald das Gerät läuft, sagt die Karte, welche Datei es liest:
| Die Karte zeigt | Wann |
|---|---|
| "Liest gerade: Log_2026-10-03.csv" | Die Datei in Gebrauch, wie das Gerät sie jetzt liest. |
| "Liest gerade: Log_2026-10-03.csv (noch nicht vorhanden)" | Die Datei existiert noch nicht: Ihre Tags warten, und das Gerät bleibt online. |
| "Ein Tag hat diesen Namen geschrieben. Nach einem Neustart liest das Gerät wieder seine konfigurierte Datei." | Ein Tag, das den Dateinamen liest, wurde geschrieben und richtet das Gerät auf eine andere Datei (siehe Schreiben). |
| "3 Dateien warten im Eingangsordner" | Ein Eingangsordner, mit den Dateien, die zu seinem Muster passen und noch zu lesen sind ("1 Datei wartet im Eingangsordner" für eine). |
Eine Einstellung, die die Karte nicht annehmen kann, wird unter den Karten genannt, und das Gerät wird nicht gespeichert, bis sie korrigiert ist:
| Sie geben ein | Die Karte sagt |
|---|---|
Einen Ordner, der kein vollständiger Pfad ist, etwa Logs |
"Der Ordner ist ein vollständiger Pfad: ein Laufwerk und ein Ordner (C:\Test) oder eine Netzwerkfreigabe und ein Ordner darin (\server\tests)." |
Einen Ordner mit einem Zeichen, das in keinem Ordnernamen stehen darf, oder eine Freigabe ohne Ordner darin (\\server) |
"Der Ordner enthält ein Zeichen, das in keinem Ordnernamen stehen darf, oder ist eine Netzwerkfreigabe ohne Ordner darin." |
| Keinen Dateinamen | Nicht abgelehnt: Das Gerät wird gespeichert und wartet, "Dateiname noch nicht eingetragen" ("Zu lesende Dateien noch nicht eingetragen" bei einem Eingangsordner), bis ein Name eingetragen ist. |
Einen vollständigen Pfad als Namen, etwa C:\Logs\last.csv |
"Der Dateiname ist ein Name innerhalb des Ordners, kein vollständiger Pfad: Der Ordner gehört in das Feld Ordnerpfad." |
Einen Namen mit .., etwa ..\other\last.csv |
"Der Dateiname führt mit ".." aus dem Ordner heraus. Der Treiber verlässt seinen Ordner nie." |
Einen Namen mit : oder einem anderen Zeichen, das in keinem Dateinamen stehen darf, oder einen Teil, der mit einem Punkt oder einem Leerzeichen endet |
"Der Dateiname enthält ein Zeichen, das in keinem Dateinamen stehen darf (etwa : oder |), oder ein Teil davon endet mit einem Punkt oder einem Leerzeichen. Ein Datumsteil darf keinen Doppelpunkt schreiben: Verwenden Sie , nicht ." |
Einen Namen, den Windows für ein Gerät reserviert, etwa CON oder COM1 |
"Windows reserviert diesen Namen für ein Gerät (CON, NUL, COM1 und ähnliche). Wählen Sie einen anderen." |
* oder ? bei einem Gerät, das eine Datei liest |
"Nur das Muster eines Eingangsordners nimmt * oder ? an. Geben Sie den Namen einer einzelnen Datei an oder lesen Sie aus einem Eingangsordner." |
| Einen Unterordner im Muster eines Eingangsordners | "Ein Eingangsordner ist der Ordner selbst: Tragen Sie den Unterordner in das Feld Ordnerpfad ein und lassen Sie hier nur das Muster stehen." |
| Einen Datumsteil, der nicht geschlossen oder kein Datumsformat ist | "Ein Datumsteil des Namens ist nicht geschlossen oder ist kein Datumsformat. Schreiben Sie ihn in geschweifte Klammern, etwa Log_.csv." |
Das Speichern hält dieselben Regeln ein, und der Feed sagt es, wenn es eine ablehnt: "Das Gerät 'Tensile tester' hat eine Dateieinstellung, die sein Treiber nicht verwenden kann. Öffnen Sie es und korrigieren Sie das Feld, das sein Panel markiert."
Die Karte Text der Datei
Wie sich die Zeichen, Spalten und Zahlen der Datei lesen. Jede Einstellung beginnt auf Aus der Datei erkennen, und der Treiber liest sie aus der Datei in Gebrauch. Unter einer so belassenen Einstellung sagt eine Zeile, sobald das Gerät die Datei gelesen hat, was er gefunden hat, etwa "In der Datei gefunden: UTF-8". Jede Einstellung lässt sich festlegen, indem man sie wählt, für eine Datei, deren erste Zeilen es nicht verraten.
| Feld | Angezeigt | Auswahl | Standard |
|---|---|---|---|
| Zeichenkodierung | immer | Aus der Datei erkennen, UTF-8, Windows-1252 (ANSI) (die Kodierung älterer Windows-Programme) |
Aus der Datei erkennen |
| Spaltentrennzeichen | CSV | Aus der Datei erkennen, Semikolon (;), Komma (,), Tabulator | Aus der Datei erkennen |
| Dezimaltrennzeichen | immer | Aus der Datei erkennen, Dezimalpunkt (12.5), Dezimalkomma (12,5) | Aus der Datei erkennen |
| Kopfzeile | CSV | 0 bis 1000: "Die Zeile mit den Spaltennamen, von 1 an gezählt. 0, wenn die Datei keine hat." Die Zeilen davor werden übersprungen. | 1 |
| Einstellung | Was das Erkennen liest |
|---|---|
| Zeichenkodierung | Eine Bytereihenfolgemarke am Anfang der Datei, die jede Wahl übertrifft; sonst UTF-8, wenn die Bytes gültiges UTF-8 sind; sonst Windows-1252. |
| Spaltentrennzeichen | Das erste von Tabulator, Semikolon und Komma, das die ersten Zeilen in dieselbe Anzahl Spalten teilt; eine erste Zeile ohne eines davon ist eine Datei mit einer Spalte. |
| Dezimaltrennzeichen | Das Komma, wenn mehr Zahlen der Datei ein Komma als einen Punkt zwischen ihren Ziffern tragen; sonst der Punkt. JSON-Zahlen tragen immer den Punkt; die Einstellung gilt für Zahlen, die als Text geschrieben sind. |
Die Karte Schreiben
Ein Gerät, das eine Datei liest, trägt die Karte Schreiben; ein Eingangsordner wird nur gelesen und hat keine.
| Feld | Angezeigt | Bedeutung | Standard |
|---|---|---|---|
| Schreiben erlauben | immer | Aus: "Das Gerät liest nur. Schalten Sie das Schreiben ein, um Zeilen anzuhängen, die Datei zu ersetzen oder im laufenden Betrieb der Station zu einer anderen Datei zu wechseln." Ein: "Tags dieses Geräts dürfen in die Datei schreiben. Jedes Tag liest weiterhin nur, bis sein Zugriff etwas anderes sagt." | aus |
| Kopfzeilentext | Schreiben ein, CSV oder freier Text | "Wird zuerst in eine Datei geschrieben, die ein Schreibvorgang anlegt, etwa Time;Pressure." Eine Zeile, ohne Zeilenumbruch. | leer |
| Zeilenende | Schreiben ein | Aus der Datei erkennen (das der Datei selbst, CR LF in einer neuen Datei), CR LF, wie unter Windows oder LF. | Aus der Datei erkennen |
Das Schreiben wird erst ausgeschaltet, wenn kein Tag des Geräts mehr schreibt. Solange noch Tags schreiben, bleibt der Schalter gezeichnet und ausgegraut und sagt, warum: "2 Tags dieses Geräts schreiben in die Datei. Stellen Sie sie auf Nur lesen, bevor Sie das Schreiben ausschalten." ("Ein Tag dieses Geräts schreibt in die Datei. Stellen Sie es auf Nur lesen, bevor Sie das Schreiben ausschalten." für eines).
Online, wartend und offline
| Situation | Was das Gerät und seine Tags tun |
|---|---|
| Kein Ordner eingetragen | Das Gerät wartet: "Ordner noch nicht eingetragen", grauer Punkt, nichts gelesen und kein Fehler. |
| Ordner eingetragen, kein Dateiname | Das Gerät wartet: "Dateiname noch nicht eingetragen", grauer Punkt, nichts gelesen und kein Fehler; seine Seite sagt "Die Station liest dieses Gerät nicht, solange es keinen Dateinamen hat. Deshalb wird noch nichts aus ihm gelesen, und es gibt keinen Fehler anzuzeigen. Tragen Sie den Dateinamen unten in der Karte Ordner und Datei ein, dann beginnt die Station, es zu lesen." |
| Eingangsordner, Ordner eingetragen, keine zu lesenden Dateien | Das Gerät wartet: "Zu lesende Dateien noch nicht eingetragen", grauer Punkt, nichts gelesen und kein Fehler; seine Seite sagt "Die Station liest dieses Gerät nicht, solange sie nicht weiß, welche Dateien sie lesen soll. Deshalb wird noch nichts aus ihm gelesen, und es gibt keinen Fehler anzuzeigen. Tragen Sie die Dateien unten in der Karte Ordner und Datei unter Zu lesende Dateien ein (etwa Test_*.csv), dann beginnt die Station, sie zu lesen." |
| Der Ordner ist nicht erreichbar (eine ausgefallene Freigabe, ein verschwundenes Laufwerk, ein Konto ohne Zugriff) | Das Gerät ist offline, und seine Tags schlagen beim Lesen fehl; der Ordner wird höchstens jede Sekunde erneut geprüft, und das Gerät verbindet sich, sobald er wieder da ist. |
| Der Ordner ist erreichbar, die Datei existiert noch nicht | Das Gerät bleibt online. Die Tags, die Werte lesen, haben keinen Messwert und warten; Datei vorhanden liest falsch. |
| Ein anderes Programm hält die Datei, ohne sie freizugeben | Diesmal kein Lesen; das nächste Lesen versucht es erneut. Das Tag behält seinen letzten Messwert, und einer, der älter ist als sein Abfrageintervall plus 10 s, zählt als fehlgeschlagenes Lesen, wie bei jedem Treiber. |
| Ein Wert ist nicht da oder passt nicht in den Typ des Tags | Fehlgeschlagenes Lesen dieses Tags, mit dem Grund; das Gerät liest seine anderen Tags weiter. |
Adressierung des Tags
Was ein Tag liest
Ein Tag dieses Treibers hat kein eigenes Adressfeld: Seine Karte Quelle fragt, was es liest, und bei einem Wert, wo der Wert im Format des Geräts steht.
| Liest | Was das Tag zeigt | Datentyp |
|---|---|---|
| Wert | Ein Wert in der Datei, gefunden über die Felder des Formats des Geräts weiter unten. | Boolean, Int32, Int64, Float, Double oder String; Double bei einem neuen Tag |
| Ganze Datei | Der ganze Inhalt, ohne die Zeilenenden am Schluss: eine Datei, die nur eine Chargennummer oder einen Status enthält. Höchstens 4 MiB. | dieselben; String bei einem neuen Tag |
| Datei vorhanden | Ob die Datei in Gebrauch jetzt existiert. | Boolean |
| Dateigröße | Die Größe der Datei in Bytes. | Int64 |
| Letzte Änderung | Wann die Datei zuletzt geschrieben wurde: An ihrer Änderung erkennt die Logic, dass neue Daten angekommen sind. | DateTime |
| Dateiname | Der Name der Datei in Gebrauch, innerhalb des Ordners. Geschrieben benennt er eine andere Datei (siehe Schreiben). | String |
| Anzahl der Zeilen | "Zählt jede Zeile der Datei, einschließlich Kopfzeile und Leerzeilen." | Int64 |
Ein Typ, als den die Quelle nicht gelesen wird, wird mit denen abgelehnt, als die sie gelesen wird: "Wählen Sie einen der Datentypen, als die dies gelesen wird: Int64."
Eine andere Quelle zu wählen bringt ihren eigenen Typ mit. Der aus einer Datei genommene Text wird als
Typ des Tags gelesen, so wie der Treiber Generic serial and TCP
eine Nachricht liest, mit dem Dezimaltrennzeichen der Datei: Ein Boolean liest 1, true, on oder
yes und 0, false, off oder no, eine Ganzzahl liest eine ganze Zahl, und ein String nimmt die
Zeichen, wie sie sind, sodass ein Code wie 0412 seine führende Null nur als String behält.
Jedes Tag entsteht mit Nur lesen, und bei einem Gerät, das kein Schreiben erlaubt, bietet das Feld Zugriff nichts anderes an. Sobald das Gerät Schreiben erlaubt, darf ein Tag, das Wert oder Ganze Datei liest, Lesen und schreiben oder Nur schreiben sein, und ein Tag, das Dateiname liest, Lesen und schreiben; die Angaben zur Datei (vorhanden, Größe, letzte Änderung, Anzahl der Zeilen) werden nie geschrieben: "Eine Angabe zur Datei lässt sich nicht schreiben. Lassen Sie das Tag auf Nur lesen."
CSV und Text in Spalten
| Feld | Angezeigt | Bedeutung | Standard |
|---|---|---|---|
| Spalte | Liest Wert | "Der Name der Spalte in der Kopfzeile oder ihre Nummer, von 1 an gezählt." Ein Text nur aus Ziffern ist eine Nummer; ein Name ignoriert Groß- und Kleinschreibung und die Leerzeichen um ihn. Bei einer Datei ohne Kopfzeile: "Die Nummer der Spalte, von 1 an gezählt. Die Datei hat keine Kopfzeile, ihre Spalten haben also keine Namen." | leer |
| Zu lesende Zeile | Liest Wert | Letzte, Nach Nummer oder Nach Inhalt. "Zeilen werden nach der Kopfzeile gezählt. Nach Inhalt liest die letzte Zeile, deren Schlüsselspalte den Schlüsselwert enthält." | Letzte |
| Zeilennummer | Nach Nummer | Die Datenzeile, von 1 an nach der Kopfzeile gezählt. | leer |
| Schlüsselspalte | Nach Inhalt | Die Spalte, deren Wert die Zeile auswählt, mit Namen oder Nummer. | leer |
| Schlüsselwert | Nach Inhalt | Der Wert, den die Schlüsselspalte in der zu lesenden Zeile enthält, etwa 0412. |
leer |
Ein Feld in doppelten Anführungszeichen darf das Trennzeichen enthalten; ein Feld mit einem Zeilenumbruch wird nicht gelesen. Ein Tag, dessen Felder nicht funktionieren können, wird nicht gespeichert, und seine Seite sagt, was fehlt:
| Sie lassen leer oder geben ein | Die Seite des Tags sagt |
|---|---|
| Keine Spalte | "Geben Sie die Spalte an, mit ihrem Namen in der Kopfzeile oder ihrer Nummer." |
| Spalte 0 | "Spalten werden von 1 an gezählt." |
| Eine Spalte mit Namen bei einer Datei ohne Kopfzeile | "Die Datei hat keine Kopfzeile, eine Spalte wird also mit ihrer Nummer angegeben." |
| Nach Nummer, ohne Zeilennummer | "Geben Sie die Nummer an, von 1 an gezählt." |
| Nach Inhalt, ohne Schlüsselspalte | "Geben Sie die Schlüsselspalte an: die Spalte, deren Wert die Zeile auswählt." |
| Nach Inhalt, ohne Schlüsselwert | "Geben Sie an, was die Zeile enthält." |
Die schreibgeschützte Zeile Quelladresse (Bus) zeigt, was der Treiber erhält: column?name=Force
für Force der letzten Zeile, column?number=3&row=number&rowNumber=5 für die dritte Spalte der
fünften Zeile, column?name=Force&row=match&key=Sample&equals=0412 für die Zeile der Probe 0412.
Freier Text
| Feld | Angezeigt | Bedeutung | Standard |
|---|---|---|---|
| Zu lesende Zeile | Liest Wert | Letzte (die letzte nicht leere Zeile), Nach Nummer oder Nach Inhalt. "Zeilen werden ab dem Anfang der Datei gezählt. Nach Inhalt liest die letzte Zeile, die den Text enthält." | Letzte |
| Zeilennummer | Nach Nummer | Die Zeile, von 1 an ab dem Anfang der Datei gezählt. | leer |
| Zeile enthält | Nach Inhalt | Ein Text, den die zu lesende Zeile enthält, etwa Result. |
leer |
| Der Wert ist | Liest Wert | "Dieselben Möglichkeiten wie beim Treiber Generic serial and TCP: die ganze Zeile, eine feste Position, ein Feld zwischen Trennzeichen oder ein regulärer Ausdruck." Die Auswahl ist die jenes Treibers, die erste nach der Zeile benannt: Die ganze Zeile, Feste Position (Erstes Zeichen und Länge), Feld zwischen Trennzeichen (Trennzeichen und Feldnummer) und Erfassungsgruppe eines Musters (Muster). | Die ganze Zeile |
Positionen und Felder zählen ab 1, ein Muster ist ein regulärer .NET-Ausdruck mit genau einer
Erfassungsgruppe um den Wert, und eine Zeile, für die es länger als 250 ms braucht, wird nicht gelesen.
Die Ablehnungen sind die des generischen Treibers selbst, etwa "Geben Sie das erste Zeichen des Werts an, ab 1 gezählt." oder "Das Muster braucht genau eine Erfassungsgruppe, um den Wert herum."
Die Busadresse lautet line, gefolgt von dem, was zutrifft, zum Beispiel
line?row=match&contains=Result&extract=regex&pattern=....
JSON und XML
| Feld | Format | Bedeutung |
|---|---|---|
| JSON-Pfad | JSON | "Mitglieder durch Punkte getrennt und Positionen in eckigen Klammern ab 0, etwa result.force oder items[0].value." Ein Mitglied, dessen Name einen Punkt enthält, wird ['flow.rate'] geschrieben. |
| XML-Pfad | XML | "Elemente ab der Wurzel durch Schrägstriche getrennt, eine Position ab 1, wo sich ein Element wiederholt, und ein Attribut am Ende, etwa Result/Force oder Result/@unit." Namen werden über ihren lokalen Namen verglichen, das Namensraumpräfix wird ignoriert. |
Eine JSON-Zahl, true oder false wird genommen, wie sie ist, und eine Zeichenkette wird als Typ des
Tags gelesen; ein Objekt oder eine Liste liest sich nur als String, sein JSON. Ein JSON- oder
XML-Dokument wird ganz gelesen, wenn es sich geändert hat, höchstens 4 MiB, und keine DTD wird gelesen.
Die Busadresse ist json?path=result.force oder xml?path=Result%2FForce.
| Sie lassen leer oder geben ein | Die Seite des Tags sagt |
|---|---|
| Keinen Pfad | "Geben Sie den Pfad zum Wert an. Um die ganze Datei zu lesen, wählen Sie Ganze Datei." |
| Einen JSON-Pfad, der sich nicht lesen lässt | "Das ist kein JSON-Pfad: Mitglieder durch Punkte getrennt und Positionen in eckigen Klammern, etwa result.items[0].value." |
| Einen XML-Pfad, der sich nicht lesen lässt | "Das ist kein XML-Pfad: Elemente durch Schrägstriche getrennt, eine Position wie Item[2] und ein Attribut am Ende, etwa @unit." |
Lesen
Bei jedem Lesen fragt der Treiber Windows nach der Größe und den Zeiten der Datei, was auch auf einer Netzwerkfreigabe funktioniert, wo die Änderungsmeldungen von Windows versagen, und öffnet die Datei nur, wenn sich eines davon geändert hat. Er öffnet sie immer mit Freigabe für Lesen, Schreiben und Löschen, sodass das Programm, das die Datei schreibt, nie blockiert wird.
| Die Datei | Was das Lesen tut |
|---|---|
| Ist gewachsen und beginnt und endet noch dort, wo sie es tat | Nur das Hinzugekommene wird gelesen, nie wieder die ganze Datei: Ein Protokoll von vielen Megabyte kostet so viel wie seine neuen Zeilen. |
| Ist kürzer geworden, wurde neu geschrieben oder neu angelegt | Wird ab ihrem Anfang erneut gelesen. |
| Endet mit einer Zeile, die noch kein Zeilenende schließt | Diese Zeile wartet, damit ein Wert nie halb geschrieben gelesen wird; sobald die Datei 2 s unverändert geblieben ist, wird sie als letzte Zeile gelesen. |
| JSON, XML oder ein Tag, das die ganze Datei liest | Ganz gelesen, wenn sie sich geändert hat, höchstens 4 MiB; ein Dokument, das sich nicht lesen lässt und sich vor weniger als 2 s geändert hat, gilt als noch im Schreiben, und die Tags warten. |
| Hat eine Zeile länger als 1 MiB | Kein Text in Zeilen: Ihre Tags schlagen beim Lesen fehl. |
Jeder Messwert wird mit der letzten Änderung der Datei datiert, nicht mit dem Moment des Lesens, sodass der Laufbericht eine Probe dort einordnet, wo das andere Programm sie geschrieben hat.
Der Eingangsordner
Lesen aus Eingangsordner ist für die Maschine, die eine Datei je Probe schreibt
(Test_0412.json, Test_0413.json...): Jede neue Datei, die zum Muster passt, wird einmal gelesen,
in der Reihenfolge ihres Eintreffens.
| Schritt | Was geschieht |
|---|---|
| Eine Datei trifft ein | Sie wird genommen, sobald sie 1 s dieselbe Größe und Zeit behalten hat und kein Programm sie zum Schreiben offen hält. |
| Welche zuerst | Die zuerst angelegte, dann die zuerst geschriebene, dann nach Namen. Zwei Dateien, die zusammen eintreffen, werden in zwei Durchgängen gelesen: Keine wird übersprungen. |
| Ihr Messwert | Jedes Tag des Geräts liest diese Datei, und die Datei ist ein Messwert, datiert mit der Zeit der Datei: Der Laufbericht hält jeden fest. Dateiname sagt, aus welcher Datei die Werte kamen. |
| Sobald jedes Tag sie gelesen hat | Sie wird in den Unterordner Processed verschoben, den der Treiber anlegt und dessen Name in jeder Sprache derselbe ist, da andere Programme nach ihm suchen können; ein dort schon vergebener Name wird zu name (2).json. Ihre Werte bleiben der Messwert der Tags bis zur nächsten Datei. |
| Ein Verschieben, das fehlschlägt | Bei jedem Lesen erneut versucht; die Datei wird währenddessen nicht erneut gelesen. |
| Die Station startet vor dem Verschieben neu | Die Datei wird erneut gelesen: ein doppelt gezählter Messwert statt eines verlorenen. |
Nie wird etwas gelöscht: Der Unterordner Processed wächst, bis jemand ihn leert. In einen
Eingangsordner wird nie geschrieben.
Schreiben
Bei einem Gerät, das eine Datei liest und Schreiben erlaubt, sagt ein Tag, das Wert oder Ganze Datei liest und dessen Zugriff schreibt, was ein Schreibvorgang tut:
| Feld | Angezeigt | Bedeutung | Standard |
|---|---|---|---|
| Ein Schreibvorgang | das Tag schreibt | Zeile anhängen: "Hängt eine Zeile an das Ende der Datei an. Jeder Schreibvorgang zählt: Keiner wird für einen neueren verworfen." Datei ersetzen: "Ersetzt die ganze Datei durch den Wert, über eine temporäre Datei, sodass kein Programm sie halb geschrieben liest." | Zeile anhängen |
| Zeilenvorlage | Zeile anhängen | "Leer: Der geschriebene Wert ist die ganze Zeile. ist der Wert, der Zeitpunkt des Schreibens, bei Bedarf jeweils mit einem Format nach einem Doppelpunkt, etwa ." Das Feld zeigt {datetime};{value} als Hinweis. |
leer |
| Die Vorlage | 12.5 schreiben hängt an |
|---|---|
| leer | 12.5 |
{datetime};{value} |
2026-10-03 14:05:12;12.5 |
{datetime:dd/MM/yyyy HH:mm};{value:0.00} |
03/10/2026 14:05;12.50 |
{value:FORMAT} nimmt ein .NET-Zahlenformat, {datetime:FORMAT} ein .NET-Format für Datum und Uhrzeit,
nach der Uhr der Station, yyyy-MM-dd HH:mm:ss, wenn keines angegeben ist. Eine Zahl wird mit dem
Dezimaltrennzeichen der Datei geschrieben, sodass dieselbe Vorlage in einer Datei mit Komma 12,50
schreibt. Die Vorlage eines Boolean-Tags darf {value} weglassen: Auf wahr geschrieben, hängt es die
Zeile an, wie ein Befehl. Eine Vorlage, die der Treiber nicht füllen kann, wird auf der Seite des Tags
abgelehnt:
| Sie geben ein | Die Seite des Tags sagt |
|---|---|
Einen Teil, der weder {value} noch {datetime} ist, oder eine nicht geschlossene Klammer |
"Die Vorlage kennt und , bei Bedarf jeweils mit einem Format nach einem Doppelpunkt. {{ und }} sind Klammern der Zeile." |
Kein {value} bei einem Tag, das kein Boolean ist |
"Die Vorlage enthält kein , der geschriebene Wert käme also nie in die Datei. Nur ein Tag mit Wahrheitswert darf es weglassen: Wird es auf wahr geschrieben, hängt es die Zeile an." |
| Einen Zeilenumbruch | "Die Vorlage ist eine einzige Zeile ohne Zeilenumbruch." |
| Ein Tag, das schreibt, an einem Gerät, das kein Schreiben erlaubt | "Das Gerät erlaubt kein Schreiben. Schalten Sie das Schreiben im Gerät ein oder lassen Sie das Tag auf Nur lesen." |
| Ein Schreibvorgang | Wie er abläuft |
|---|---|
| Zeile anhängen | Die Zeile geht in einem einzigen Schreibvorgang und wird auf die Platte geschrieben, bevor der Schreibvorgang als erledigt zählt. Eine Datei, die der Schreibvorgang anlegt, bekommt zuerst den Kopfzeilentext, und eine Datei, deren letzte Zeile kein Zeilenende hat, bekommt vorher eines, damit die Zeile vollständig ist. Ein Wert mit einem Zeilenumbruch wird abgelehnt. Jeder Schreibvorgang zählt: Ein Schreibvorgang, der noch in der Warteschlange des Geräts wartet, wird nie für einen neueren an dasselbe Tag verworfen, wie ein Befehl nie verworfen wird. |
| Datei ersetzen | Der Wert geht in eine temporäre Datei neben der Datei, auf die Platte geschrieben, die in einem Schritt den Platz der Datei einnimmt. Ein neuerer Wert, der noch wartet, ersetzt einen älteren, wie bei jedem Sollwert. |
| Der Dateiname | Ein Tag, das Dateiname liest, Lesen und schreiben, mit einem anderen Namen geschrieben, richtet das Gerät ab dann auf diese Datei im selben Ordner: "Wird hier ein Name geschrieben, liest und schreibt das Gerät ab dann diese Datei im selben Ordner. Ein Name außerhalb des Ordners wird abgelehnt." Ein vollständiger Pfad, .., : oder ein Name, den Windows reserviert, wird abgelehnt. Wenn das Gerät sich neu verbindet, ein Neustart eingeschlossen, liest es wieder seine konfigurierte Datei. |
| Text | In der Kodierung, dem Zeilenende und dem Dezimaltrennzeichen der Datei selbst, aus ihr gelesen, wo das Gerät sie auf Erkennen lässt. Eine neue Datei ist UTF-8 ohne Bytereihenfolgemarke, mit CR LF und dem Dezimalpunkt, sofern das Gerät nichts anderes sagt. |
| Antwort | Erledigt, oder abgelehnt mit der Ursache: Das Gerät erlaubt kein Schreiben, das Konto hat keine Berechtigung, die Datei ist als schreibgeschützt markiert (wird dieses Attribut entfernt, gelingt das nächste Schreiben), die Platte ist voll, oder die Datei ist in einem anderen Programm geöffnet. Ersetzen wird abgelehnt, solange irgendein Programm die Datei geöffnet hat, Anhängen nur, solange ein Programm sie hält, ohne sie freizugeben; sobald dieses Programm die Datei schließt, gelingt das nächste Schreiben. |
Der Ordner und die Unterordner, auf die ein Name zeigt, werden angelegt, wenn ein Schreibvorgang sie braucht, immer innerhalb des Ordners des Geräts.
Gerätesuche
Die Karte Suchbereich
Mit Connector konfigurieren trägt die Seite des Treibers ihre Karte Suchbereich, unter der Zeile "Liest eine Datei und bietet ein Tag für jede gefundene Spalte oder jedes gefundene Feld sowie für die Angaben zur Datei an. Wählen Sie ein Gerät, um seine Datei zu lesen, oder geben Sie einen Ordner, eine Datei und ein Format ein."
| Feld | Bedeutung | Standard |
|---|---|---|
| Zu durchsuchende Datei | Eine hier eingegebene Datei oder ein Gerät des Treibers mit seinem Namen. Die Datei eines Geräts wird mit den Einstellungen des Geräts gelesen, wie sie gespeichert sind, und eine noch nicht gespeicherte Änderung des Geräts wird vorher gespeichert. | Eine hier eingegebene Datei |
| Ordnerpfad | Eine eingegebene Datei: der Ordner, wie bei einem Gerät. | leer |
| Dateiname oder Zu lesende Dateien | Eine eingegebene Datei: der Name oder das Muster eines Eingangsordners. | leer |
| Lesen aus | Eine eingegebene Datei: Eine Datei oder Eingangsordner. | Eine Datei |
| Dateiformat | Eine eingegebene Datei: das Format. Jede Texteinstellung einer eingegebenen Datei wird erkannt, die Kopfzeile eingeschlossen: Die erste Zeile ist eine Kopfzeile, wenn keines ihrer Felder eine Zahl ist und die nächste Zeile eine hat. | CSV und Text in Spalten |
Was dem Bereich noch fehlt, wird rot unter der Karte genannt, und Geräte suchen bleibt ausgegraut, bis er vollständig ist:
| Der Bereich | Die Karte sagt |
|---|---|
| Eine eingegebene Datei ohne Ordner | "Geben Sie den Ordner ein, in dem die Datei liegt." |
| Ein eingegebener Ordner, der kein vollständiger Pfad ist | "'Logs' ist kein Ordner, den diese Station lesen kann. Schreiben Sie einen vollständigen Pfad, zum Beispiel C:\Test oder \server\tests." |
| Ein eingegebener Name, der keine Datei des Ordners ist | "'..\last.csv' ist nicht der Name einer Datei im Ordner." |
| Ein Gerät, das nicht mehr existiert | "Das zum Durchsuchen gewählte Gerät existiert nicht mehr. Wählen Sie eine andere Datei zum Durchsuchen." |
| Ein Gerät ohne seinen Ordner oder seine Datei | "Das Gerät 'Tensile tester' hat noch keinen Ordner oder keine Datei, oder es hat eine Einstellung, die sein Treiber nicht verwenden kann. Vervollständigen Sie zuerst seine Karte Ordner und Datei." |
Wenn das zu durchsuchende Gerät eine Änderung hat, die sich nicht speichern lässt, beginnt der Suchlauf nicht: "Die Gerätesuche wurde nicht gestartet, weil die Änderung am zu durchsuchenden Gerät nicht gespeichert werden konnte."
Was der Suchlauf anbietet
Der Suchlauf liest die Datei, die ein Gerät mit einer Datei jetzt liest, oder die neueste Datei eines Eingangsordners, die er nicht verschiebt; eine Datei, die nicht da ist, ein Ordner, der nicht erreichbar ist, und ein Dokument, das sich nicht lesen lässt, beenden den Suchlauf mit dem Grund. Er bietet einen Kandidaten an, mit den gefundenen Werten als Kandidaten-Tags, jedes Nur lesen:
| Format | Kandidaten-Tags |
|---|---|
| CSV | Eines je Spalte, das die letzte Zeile liest, benannt nach seiner Kopfzeile (nach seiner Nummer, wo die Kopfzeile keinen oder einen doppelten Namen gibt), typisiert nach den Werten seiner ersten Zeilen: Double, wenn jeder Wert eine Zahl ist, Boolean, wenn jeder true oder false ist, sonst String. Ein Code mit führender Null, etwa 0412, bleibt ein String. |
| Freier Text | Die letzte Zeile, ein String. |
| JSON, XML | Eines je Wert, benannt und adressiert nach seinem Pfad, höchstens 500; eine JSON-Liste bietet ihre ersten 20 Einträge an, und der Durchlauf geht 8 Ebenen tief. |
| Jedes Format | Die Angaben zur Datei: Datei vorhanden, Dateigröße, Letzte Änderung, Dateiname und Anzahl der Zeilen. |
Ein Suchlauf bietet höchstens 500 Werte an, die Spalten einer CSV-Datei eingeschlossen. Ein dort abgeschnittener Suchlauf sagt es in der Zeile, die ihn abschließt, und über seinen Ergebnissen: "Der Suchlauf von result.json hat früh angehalten. Ein Suchlauf bietet höchstens 500 Werte an: Fügen Sie die anderen als Tags über ihre Spalte, ihren JSON-Pfad oder ihren XML-Pfad hinzu."
Der Kandidat einer eingegebenen Datei wird nach der Datei benannt (run für run.csv) oder nach dem
Ordner bei einem Namen mit Datumsteil oder einem Eingangsordner. Ein Kandidat, dessen Ordner, Namen und
Lesen aus ein Gerät des Treibers schon liest (das durchsuchte Gerät oder ein gleiches anderes),
ist als Bereits konfiguriert markiert: Seine Karte listet nur die Werte, die noch kein Tag dieses
Geräts liest, angehakt, und Tags hinzufügen, vor Öffnen, fügt die angehakten diesem Gerät hinzu,
mit Nur lesen. Das übrige Verhalten des Suchlaufs steht unter Gerätesuche.
Die eigene Seite eines Geräts tut dasselbe ohne die Seite seines Treibers: Tags suchen im Kopf seiner Karte der Tags liest die Datei dieses Geräts, so wie es gespeichert ist, und bietet nur die Werte an, für die es noch kein Tag hat (siehe Die Tags eines Geräts suchen).
Beispiel: die tägliche CSV einer Prüfmaschine
Eine Zugprüfmaschine schreibt jeden Tag eine CSV in C:\TestMachine\Logs, namens
Log_2026-10-03.csv, mit einer Kopfzeile Sample;Force;Elongation und nach jeder Probe einer Zeile
wie 0412;12,5;3,1. Lesen Sie sie über den einfachen Weg:
- Auf der Seite des Treibers Gerät hinzufügen; nennen Sie es
Tensile tester. - Tragen Sie auf der Karte Ordner und Datei Ordnerpfad
C:\TestMachine\Logsund DateinameLog_{yyyy-MM-dd}.csvein; behalten Sie Eine Datei und CSV und Text in Spalten. Die Karte zeigt "Heute: Log_2026-10-03.csv", und sobald das Gerät sie liest, "Liest gerade: Log_2026-10-03.csv". Lassen Sie die Karte Text der Datei auf Aus der Datei erkennen: Sie findet das Semikolon und das Dezimalkomma. - Wählen Sie auf der Seite des Treibers
Tensile testerunter Zu durchsuchende Datei und Geräte suchen. Der Kandidat ist Bereits konfiguriert und listetSample(String, mit der Null von0412),ForceundElongation(Double) und die Angaben zur Datei. Tags hinzufügen.
Jedes Tag liest die letzte Zeile; Letzte Änderung bewegt sich mit jeder neuen Probe, und so erkennt eine Aktion der Logic, dass eine eingetroffen ist. Um Mitternacht wechselt das Gerät zur Datei des nächsten Tages, und bis die Maschine sie schreibt, haben die Werte keinen Messwert und Datei vorhanden liest falsch. Ein Agent tut dasselbe mit den Werkzeugen:
device_upsert name="Tensile tester" driver=File fileFolder="C:\TestMachine\Logs" fileName="Log_{yyyy-MM-dd}.csv" fileFormat=Delimited
device_discover driver=File fileDevice="Tensile tester"
tag_upsert device="Tensile tester" name=Force address=Force opcUaType=Double
tag_upsert device="Tensile tester" name=Sample address=Sample opcUaType=String
tag_upsert device="Tensile tester" name="Last change" fileSource=Modified
Beispiel: ein Eingangsordner mit JSON-Ergebnisdateien
Eine Prüfzelle legt je Probe eine Ergebnisdatei in C:\Results\Inbox ab, etwa Test_0413.json mit
{"sample":"0413","result":{"force":12.5,"ok":true}}:
- Gerät hinzufügen; nennen Sie es
Results, OrdnerpfadC:\Results\Inbox, Lesen aus Eingangsordner, Zu lesende DateienTest_*.json, Dateiformat JSON. - Tag hinzufügen
Force, JSON-Pfadresult.force, Double; Tag hinzufügenPass, JSON-Pfadresult.ok, Boolean; Tag hinzufügenSample, JSON-Pfadsample, String. - Tag hinzufügen
Source file, Liest Dateiname: Es zeigt, aus welcher Datei die Werte kamen.
Jede Datei wird einmal gelesen, nachdem sie 1 s still gestanden hat und kein Programm sie zum Schreiben
offen hält, in der Reihenfolge, in der die Dateien eingetroffen sind; jede ist ein eigener Messwert,
datiert mit der Zeit der Datei; sobald jedes Tag sie gelesen hat, wandert sie nach
C:\Results\Inbox\Processed. Nichts wird gelöscht. Mit den Werkzeugen:
device_upsert name=Results driver=File fileFolder="C:\Results\Inbox" fileName="Test_*.json" fileMode=Inbox fileFormat=Json
tag_upsert device=Results name=Force address=result.force opcUaType=Double
tag_upsert device=Results name=Pass address=result.ok opcUaType=Boolean
tag_upsert device=Results name=Sample address=sample opcUaType=String
tag_upsert device=Results name="Source file" fileSource=Name
Beispiel: eine Zeile für ein anderes Programm anhängen
Ein anderes Programm liest D:\Records\run.csv, eine Zeile pro Sekunde mit der Zeit und dem Druck:
- Gerät hinzufügen; nennen Sie es
Run log, OrdnerpfadD:\Records, Dateinamerun.csv. - Schalten Sie auf der Karte Schreiben Schreiben erlauben ein und tragen Sie
Kopfzeilentext
Time;Pressureein. - Tag hinzufügen
Line, Double, Zugriff Nur schreiben, Ein Schreibvorgang Zeile anhängen, Zeilenvorlage{datetime};{value:0.00}.
12.5 auf Line zu schreiben hängt 2026-10-03 14:05:12;12.50 an, mit dem Komma, wo die Datei schon
eines verwendet oder wo Dezimaltrennzeichen Dezimalkomma (12,5) sagt; eine Datei, die der
Schreibvorgang anlegt, bekommt zuerst Time;Pressure. Schnell aufeinanderfolgende Schreibvorgänge
werden alle behalten, in ihrer Reihenfolge. Um eine Datei je Lauf zu schreiben, fügen Sie ein Tag
File hinzu, Liest Dateiname, Lesen und schreiben: Die Logic schreibt die Seriennummer mit
.csv, wenn ein Lauf beginnt, und die Zeilen gehen in diese Datei. Mit den Werkzeugen:
device_upsert name="Run log" driver=File fileFolder="D:\Records" fileName=run.csv fileFormat=Delimited fileWrites=true fileHeaderText="Time;Pressure"
tag_upsert device="Run log" name=Line opcUaType=Double accessType=WriteOnly fileWriteMode=AppendLine fileLineTemplate="{datetime};{value:0.00}"
tag_upsert device="Run log" name=File fileSource=Name accessType=ReadAndWrite
Agent-Werkzeuge
driver_capabilities beschreibt diesen Treiber unter file: den einfachen Weg, jedes Feld des Geräts,
die Regel des Ordners und die Beschränkung auf ihn, die Formen des Dateinamens, die beiden Arten zu
lesen, die Formate mit ihrer Adressgrammatik, die Quellen und ihre Typen, die Texteinstellungen, wie
sich Lesen und Schreiben verhalten, die Gerätesuche und drei vollständige Beispiele.
device_upsert driver=File nimmt fileFolder, fileName, fileMode (SingleFile, der Standard,
oder Inbox), fileFormat (Delimited, der Standard, Text, Json oder Xml), fileEncoding
(Automatic, Utf8 oder Windows1252), fileSeparator (Automatic, Semicolon, Comma oder
Tab), fileDecimal (Automatic, Point oder Comma), fileHeaderRow (0 bis 1000), fileWrites
und bei eingeschaltetem Schreiben fileHeaderText und fileLineEnd (Automatic, CrLf oder Lf);
ein Gerät, das es zurückgibt, trägt file, mit fileStatus, dem, was der laufende Treiber gefunden
hat: die Datei in Gebrauch, ob sie existiert, die Kodierung, die Trennzeichen und das Zeilenende, die
er gelesen hat, und die Dateien, die in einem Eingangsordner warten. tag_upsert nimmt fileSource
(Value, WholeFile, Exists, Size, Modified, Name oder Lines), fileRow (Last, Number
oder Matching), fileRowNumber, fileKeyColumn, fileMatchText, fileWriteMode (AppendLine
oder ReplaceFile) und fileLineTemplate; die Spalte oder der Pfad ist die address, ein Wert aus
freiem Text nimmt valueExtraction, valueStart, valueLength, valueSeparator, valueField und
valuePattern des generischen Treibers, und ein neues Tag ist Nur lesen und bekommt den eigenen Typ der
Quelle, sofern opcUaType nichts anderes sagt. device_discover driver=File liest entweder
fileDevice, den Namen eines Geräts des Treibers, oder fileFolder, fileName, fileMode und
fileFormat, für den Suchlauf eingegeben; die Tags, die einem konfigurierten Gerät fehlen, werden mit
tag_upsert hinzugefügt. connector_browse gibt für jedes Gerät fileFolder, fileName, fileMode
und fileFormat zurück. Die übrigen Werkzeuge stehen unter Agent-Werkzeuge.
Grenzen, die man kennen sollte
- Excel-Arbeitsmappen werden nicht gelesen: Eine Arbeitsmappe wird gelesen, sobald ihr Programm sie als CSV speichert.
- Der Treiber löscht nie eine Datei. Ein Eingangsordner verschiebt, was er gelesen hat, nach
Processed, und nur die temporäre Datei eines fehlgeschlagenen Ersetzens wird je entfernt. - "Die neueste Datei des Ordners" ist keine Art zu lesen: Sie verliert Dateien, die zusammen eintreffen, und kann die Werte der vorigen Probe zeigen. Eine Maschine, die eine Datei je Probe schreibt, wird über einen Eingangsordner gelesen.
- Ein Wert wird nicht an Ort und Stelle in einer Datei geändert (eine Zelle einer CSV, ein Mitglied des JSON eines anderen Programms): Ein Schreibvorgang hängt eine Zeile an oder ersetzt die ganze Datei, denn zwei Programme, die dieselbe Datei schreiben, können gegenseitig ihre Änderung verlieren.
- Eine Netzwerkfreigabe wird mit den Windows-Rechten des Kontos erreicht, unter dem die Station läuft: Das Gerät speichert weder Benutzer noch Passwort, also muss die Freigabe dieses Konto hereinlassen (zum Lesen, und zum Schreiben und Verschieben bei einem Gerät, das schreibt, oder einem Eingangsordner).
- Der Treiber berührt nie etwas außerhalb seines Ordners: Ein Name, der woandershin zeigt, wird dort abgelehnt, wo er eingegeben, und dort, wo er geschrieben wird.
- Die Datei wird bei jedem Lesen geprüft: Eine Änderung wird beim nächsten Lesen gesehen, nie in dem Moment, in dem das andere Programm sie schreibt.
- Ein CSV-Feld mit einem Zeilenumbruch wird nicht gelesen, und ein JSON-, XML- oder Ganze-Datei-Tag liest höchstens 4 MiB.