Generic serial and TCP
Geräte mit einem eigenen Text- oder Byteprotokoll, etwa Wägeterminals und Barcodeleser, über eine serielle Leitung, TCP oder UDP: wie ihre Nachrichten enden und geprüft werden, und wie jedes Tag seinen Wert daraus gewinnt.
Der Treiber Generic serial and TCP liest und schreibt Anlagen, die ein eigenes Protokoll aus Text oder einfachen Bytes sprechen, wo kein Standardprotokoll greift: ein Wägeterminal, ein Barcode- oder RFID-Leser, ein älteres Messgerät, ein Etikettendrucker. Eine solche Anlage lässt sich nicht fragen, was sie ist, also wird nichts gesucht. Sie sagen dem Gerät, wie eine Nachricht endet, die es sendet, und wie ihre Prüfsumme geprüft wird, und Sie sagen jedem Tag, wie es zu seinem Wert kommt, welche Nachrichten seine sind und welche Zeichen einer Nachricht der Wert sind.
Ein Gerät erreicht seine Anlage auf einem von drei Wegen, der beim Anlegen gewählt wird:
| Übertragungsweg | Wie das Gerät erreicht wird | Was seine Tags tun können |
|---|---|---|
| Auf einer seriellen Leitung | Eine serielle Leitung dieses Treibers, geteilt mit den anderen Geräten darauf, eine Anfrage nach der anderen. | Anfrage und Antwort, Mithören, Schreiben. |
| TCP-Client | Eine eigene Verbindung zu Host und Port der Anlage. | Anfrage und Antwort, Mithören, Schreiben. |
| UDP-Empfang | Ein Port dieser Station, an den die Anlage Datagramme sendet. Die Station sendet nichts. | Nur Mithören, nur Lesen. |
Ein Gerät auf einer seriellen Leitung hängt unter seiner Leitung, dieser Teil des Baums liest sich also Treiber → Leitung → Gerät → Tag, wie unter Modbus RTU. Ein Netzwerkgerät liegt unter dem Treiber und kann wie das Gerät jedes anderen Treibers in Ordnern abgelegt werden, Treiber → Ordner → Gerät → Tag. Ein Gerät bleibt auf der Seite, auf der es angelegt wurde: TCP und UDP lassen sich wechseln, aber ein Gerät wechselt nie zwischen einer Leitung und dem Netzwerk.
Die Seite des Treibers
Die Zeile unter der Kopfzeile lautet "Serielle Leitungen tragen die Instrumente, die sich einen Bus teilen, und Netzwerkgeräte liegen direkt unter dem Treiber. Legen Sie eine Leitung oder ein Gerät an und öffnen Sie es dann, um seine Nachrichten zu beschreiben." und die Seite trägt zwei Tabellen untereinander:
| Tabelle | Was sie wachsen lässt | Was sie auflistet |
|---|---|---|
| Serielle Leitungen | Leitung hinzufügen, rechts neben ihrem Titel. | Die Leitungen des Treibers: Leitung, Schnittstellenparameter (Port · Baudrate · Format, ohne Zeitlimit, da eine Leitung dieses Treibers keines hat), Geräte, Zustand und die Aktionen Öffnen, Aktivieren, Deaktivieren und Löschen. Leer zeigt sie "Noch keine seriellen Leitungen." |
| Geräte | Gerät hinzufügen, rechts neben ihrem Titel. Es legt ein Netzwerkgerät an, einen TCP-Client. | Jedes Gerät des Treibers, die auf einer Leitung eingeschlossen, mit den Spalten der Gerätetabelle jedes Treibers. Leer zeigt sie "Noch keine Geräte." |
Die Kopfzeile zählt die Geräte in Klammern, und die Zeile des Treibers im Baum zählt beide Ebenen, sobald eine Leitung existiert ("1 Leitung · 2 Geräte"). Die Leiste des Treibers hat kein Suchen. Der Rechtsklick auf die Zeile des Treibers bietet Gerät hinzufügen, Leitung hinzufügen, Neuer Ordner und Aktualisieren, dann, nach einem Trenner, Treiber entfernen; im Menü Neu… der Spalte bietet der Eintrag des Treibers Neues Gerät, Neue serielle Leitung und Neuer Ordner, dann seine Leitungen, Ordner und Geräte. Einmal hinzugefügt, steht der Treiber im Baum unter dem Ordner Treiber, mit oder ohne Leitung oder Gerät.
Serielle Leitung
Eine Leitung dieses Treibers ist die unter Serielle Leitungen beschriebene Leitung, mit weniger Feldern. Ihre Seite sagt "Ein physischer serieller Bus: die Porteinstellungen, die seine Instrumente teilen, eine Anfrage nach der anderen." und ihre Karte Physische Leitung trägt:
| Feld | Bedeutung | Vorgabe |
|---|---|---|
| Bezeichnung | Der Anzeigename des Busses, im Baum und auf jedem Gerät darauf gezeigt. | "Neue Leitung" |
| Serieller Port | Der COM-Anschluss von Windows, physisch, virtuell oder umgeleitet, eingetippt oder aus den Anschlüssen gewählt, die Windows meldet (Aktualisieren liest sie neu). Ein Anschluss gehört zu einer Leitung, gleich welchem Treiber die Leitung gehört. | der erste freie Anschluss |
| Baudrate | Die Geschwindigkeit des Busses, geteilt von jedem Gerät der Leitung. | 9600 |
| Serielles Format | Datenbits, Parität und Stoppbits: 8N1, 8N2, 8E1, 8E2, 8O1, 8O2, 7N2, 7E1, 7E2 oder 7O1. Alle zehn werden angeboten, weil dieser Treiber keine 8 Datenbits braucht. |
8E1 |
Eine hier angelegte Leitung beginnt deaktiviert, damit die Porteinstellungen eingetragen sind, bevor der Anschluss geöffnet wird. Anschluss, Baudrate und Format ändern sich nur bei deaktivierter Leitung; die Bezeichnung ändert sich jederzeit. Eine Leitung dieses Treibers hat weder Übertragungsmodus noch Antwort-Zeitlimit, Mindestintervall zwischen Transaktionen oder automatische Pause: Jedes Gerät darauf legt in seinem eigenen Bereich fest, wie seine Nachrichten enden und wie lange es auf eine Antwort wartet, wie die Karte Geräte unter der Leitung sagt: "Alle Geräte auf dieser Leitung teilen ihre Port-Einstellungen. Jedes Gerät legt selbst fest, wie seine Nachrichten enden und wie lange es auf eine Antwort wartet." Sie hat keine Karte Einheiten suchen, und ihre Tabelle Geräte hat keine Spalte Unit-ID, weil ein Instrument an dem erkannt wird, was seine Anfragen sagen, nicht an einer Adresse.
Gerät hinzufügen auf der Leitung oder in ihrem Rechtsklickmenü legt ein Gerät dieses Treibers auf dieser Leitung an. Eine Leitung gehört für immer zu dem Treiber, unter dem sie angelegt wurde: Ein Modbus RTU-Gerät und ein Gerät dieses Treibers teilen nie eine Leitung, und ein Agent, der ein Gerät auf eine Leitung des anderen Treibers setzt, wird abgewiesen. Die Zustände der Leitung (Aus, Leerlauf, Verbindung wird aufgebaut…, Verbunden, Portfehler) sind die jeder seriellen Leitung, unter Aktivierung und Zustand.
Auf der Leitung öffnet der Treiber den Anschluss einmal für alle Geräte darauf und sendet eine Anfrage nach der anderen, wobei er auf ihre Antwort wartet, bevor er die nächste sendet. Zwischen den Anfragen wird, was ankommt, jedem Gerät der Leitung angeboten, und jedes zerlegt es nach seinen eigenen Regeln in Nachrichten. Ein Anschluss, der ausfällt, wird von der Leitung für alle ihre Geräte neu geöffnet, mit immer längeren Pausen zwischen den Versuchen, solange er weiter ausfällt.
Gerät
Verbindung
| Feld | Bedeutung | Vorgabe |
|---|---|---|
| Übertragungsweg | Nur bei einem Netzwerkgerät. TCP-Client: "Die Station verbindet sich mit Host und Port des Geräts." UDP-Empfang: "Die Station empfängt auf einem lokalen Port, was das Gerät sendet, und sendet selbst nichts." Beide lassen sich wechseln; ein Gerät auf einer Leitung zeigt stattdessen seine Leitung. | TCP-Client |
| Hostadresse | TCP: der Hostname oder die IP-Adresse der Anlage. Eine ganze Adresse kann eingefügt werden, mit tcp:// davor und dem Port nach dem Host. |
leer |
| Port | TCP: der Port, auf dem die Anlage antwortet, 1 bis 65535. Für solche Anlagen ist kein Port üblich, also hat ein neues Gerät keinen. | leer |
| Annehmen von | UDP, anstelle des Hosts: "Nur Datagramme von dieser Adresse werden gelesen. Leer: jeder Absender." | leer |
| Lokaler Port | UDP, anstelle des Ports: "Der Port dieser Station, an den das Gerät sendet. Die Windows-Firewall muss ihn durchlassen." | leer |
| Serielle Leitung · fest | Ein Gerät auf einer Leitung: der Name der Leitung über ihrem Anschluss, ihrer Baudrate und ihrem Format, schreibgeschützt. | die Leitung, unter der es hinzugefügt wird |
Ein neues TCP-Gerät zeigt "Hostadresse noch nicht eingetragen" und wird nicht verbunden, solange es keinen Host und keinen Port hat. Ein Gerät mit Host und ohne Port sowie ein UDP-Gerät ohne seinen lokalen Port lassen sich nicht speichern: "Geben Sie den Port an: über TCP den Port des Geräts, über UDP den lokalen Port, auf dem empfangen wird." Ein Gerät auf einer Leitung hat weder Host noch Port noch Ordner, und keine Unit-ID.
Die Base URI in der Kopfzeile ist die Laufzeitadresse: generic://tcp/<host>:<port>,
generic://udp/<local port> (mit from=<sender>, wenn Annehmen von ausgefüllt ist) oder
generic://serial/<line id>/<port>/<baud>/<format>, gefolgt davon, wie Nachrichten enden und geprüft
werden (end, start, terminator, length, gap, timeout, checksum und der Rest). Die
Bytes darin sind Bytes, nie die Schreibweise, in der das Gerät eingegeben wird. Die Kopie eines
Geräts auf einer Leitung bleibt auf dieser Leitung; die Kopie eines Netzwerkgeräts landet auf der
Ebene des Treibers selbst.
Die Karte Nachrichten
Unter der Karte Verbindung sagt die Karte Nachrichten, wie die Bytes eingegeben werden und wie eine Nachricht endet.
| Feld | Bedeutung | Vorgabe |
|---|---|---|
| Eingegeben als | Wie Startmarke, Endezeichen und bei jedem Tag Anfrage, Filter, Trennzeichen, Schreibnachricht und erwartete Rückmeldung geschrieben werden. Text mit Escape-Folgen: druckbare Zeichen wie sie sind, \r, \n, \t, \\ und \xNN für jedes andere Byte. Bytes in Hexadezimal: zwei Ziffern pro Byte, etwa 02 30 31 0D. Ein Wechsel schreibt jedes Bytefeld des Geräts und seiner Tags um, damit jedes weiter dieselben Bytes sendet; solange eines davon keine gültigen Bytes enthält, wird der Wechsel abgewiesen: "Die Schreibweise wurde nicht geändert: Ein Bytefeld dieses Geräts oder seiner Tags ist in der aktuellen Schreibweise ungültig. Korrigieren Sie es zuerst." |
Text mit Escape-Folgen |
| Nachricht endet mit | Endezeichen, Feste Länge oder Sendepause. Über UDP ist jedes Datagramm eine Nachricht, was immer hier steht. | Endezeichen |
| Endezeichen | Mit Endezeichen: die Bytes, die jede Nachricht schließen. Sie gehören nicht zu dem, was die Tags lesen. | \r\n |
| Nachrichtenlänge (Bytes) | Mit Feste Länge, 1 bis 1024: "Jede Nachricht hat so viele Bytes, Startmarke und Prüfsumme eingeschlossen." | |
| Sendepause (ms) | Mit Sendepause, 5 bis 10000: "Eine Nachricht endet, wenn so lange nichts ankommt." | 50 |
| Startmarke | Optional. Die Bytes, mit denen jede Nachricht beginnt, etwa \x02. Bytes davor werden verworfen, was auch einen mitten in einer Nachricht aufgenommenen Datenstrom wieder in Takt bringt, und sie zählt als erste Zeichen der Nachricht. |
leer |
| Zeitlimit für die Antwort (ms) | 50 bis 60000: "Wie lange eine Anfrage auf ihre Antwort wartet und ein Schreibvorgang auf die erwartete Rückmeldung." | 1000 |
| Höchste Zeit ohne Nachricht (s) | 0 bis 86400, 0 heißt nie: "Mithörende Tags gelten nicht mehr als Messwert, wenn so lange nichts ankommt. 0: nie, für ein Gerät, das nur ab und zu sendet, etwa ein Barcodeleser. Für ein Gerät, das ständig sendet, etwa eine Waage, einen Wert eintragen." | 0 |
Ein Feld, das das gewählte Ende nicht liest, wird nicht gezeigt und behält seinen Wert für den Fall, dass dieses Ende zurückkommt. Ein Wert, mit dem das Gerät nicht arbeiten kann, wird nicht gespeichert, und das Aktionsprotokoll sagt, warum, etwa "Geben Sie das Endezeichen an, mit dem die Nachrichten enden, etwa \r\n." oder "Die Nachrichtenlänge muss zwischen 1 und 1024 Bytes liegen."
Die Karte Prüfsumme
| Feld | Bedeutung | Vorgabe |
|---|---|---|
| Verfahren | Die Prüfsumme, die jede Nachricht trägt: Keines, Summe (8 Bit), Zweierkomplement der Summe (LRC), Zweierkomplement der 7-Bit-Summe (Toledo), XOR (8 Bit), CRC-16/MODBUS oder CRC-16/CCITT. "Eine Nachricht, deren Prüfsumme nicht stimmt, wird verworfen und im Journal gezählt, nie als Wert gelesen." | Keines |
| Geschrieben als | Hexadezimaler Text, die Prüfsumme in Hexadezimalziffern geschrieben, oder Rohe Bytes, die Bytes der Prüfsumme selbst. | Hexadezimaler Text |
| Lage | Vor dem Ende: die letzten Bytes vor dem Endezeichen oder die letzten Bytes der Nachricht. Nach dem Endezeichen: direkt danach, das sie dann mit abdeckt; nur angeboten, wenn Nachrichten mit einem Endezeichen enden. | Vor dem Ende |
| Ausgelassene Bytes am Anfang | 0 bis 255: "Bytes am Anfang der Nachricht, die die Prüfsumme nicht abdeckt, etwa ein STX oder ein $." | 0 |
| Ausgelassene Bytes davor | 0 bis 255: "Bytes direkt vor der Prüfsumme, die sie nicht abdeckt, etwa das * eines NMEA-Satzes. Auch die Tags lesen sie nicht." | 0 |
Alle Felder außer dem Verfahren erscheinen erst, wenn eine Prüfsumme gewählt ist. Die Prüfsumme deckt die Nachricht vom ersten Byte bis zum Byte vor der Prüfsumme ab, ohne die ausgelassenen Bytes. Eine Nachricht, deren Prüfsumme nicht stimmt, wird nie als Wert gelesen: Sie wird verworfen, und das Journal vermerkt es unter dem Gerät höchstens einmal pro Minute. Die Prüfsumme wird nur geprüft: Anfragen und Schreibvorgänge gehen genau so hinaus, wie sie eingegeben sind, eine Anfrage, die eine Prüfsumme braucht, trägt sie also in ihren eigenen Bytes.
| Verfahren | Übliche Verwendung |
|---|---|
| Summe (8 Bit) | Wägeterminals und Anzeigegeräte. |
| Zweierkomplement der Summe (LRC) | Anzeigegeräte, Rahmen im Stil von Modbus ASCII. |
| Zweierkomplement der 7-Bit-Summe (Toledo) | Die Dauerausgabe eines Toledo-Wägeterminals, als rohes Byte nach dem CR. |
| XOR (8 Bit) | NMEA-0183-Sätze ($…*hh), Anzeigegeräte, RFID-Leser. |
| CRC-16/MODBUS | Binäre Rahmen; das niederwertige Byte zuerst als rohe Bytes. |
| CRC-16/CCITT | Binäre Rahmen (die Variante CCITT-FALSE); das höherwertige Byte zuerst als rohe Bytes. |
Adressierung des Tags
Ein Tag dieses Treibers hat keine Adresse zum Eintippen: Seine Karte Quelle fragt in den Feldern unten, wie es zu seinem Wert kommt. Bytes werden in der Schreibweise des Geräts eingegeben.
| Feld | Bedeutung | Vorgabe |
|---|---|---|
| Lesemodus | Anfrage und Antwort: "Die Station sendet die Anfrage im Abfrageintervall des Tags und liest den Wert aus der Antwort." Mithören: "Das Gerät sendet von sich aus, und das Tag behält die letzte Nachricht, die sein Filter annimmt." Ein UDP-Gerät bietet nur Mithören: "Dieses Gerät empfängt über UDP und sendet nichts: Seine Tags hören nur mit und sind schreibgeschützt." | Anfrage und Antwort |
| Anfrage | Nur bei Anfrage und Antwort: "Was die Station im Abfrageintervall des Tags sendet, eingegeben wie am Gerät festgelegt. Die erste Nachricht, die der Filter innerhalb des Zeitlimits annimmt, ist die Antwort." | erforderlich |
| Nachrichtenfilter | Welche Nachrichten zum Tag gehören: Jede Nachricht, Beginnt mit (die Bytes, mit denen sie beginnen) oder Passt auf einen regulären Ausdruck (das Feld Regulärer Ausdruck nimmt den Ausdruck auf). Bei einer Anfrage: "Welche Nachricht die Anfrage beantwortet. Die anderen gehen an die mithörenden Tags." | Jede Nachricht |
| Der Wert ist | Wie der Wert aus der Nachricht geschnitten wird: Die ganze Nachricht, Feste Position (Erstes Zeichen und Länge), Feld zwischen Trennzeichen (Trennzeichen und Feldnummer) oder Erfassungsgruppe eines Musters (Muster). "Positionen und Felder werden ab 1 gezählt. Das Muster braucht genau eine Erfassungsgruppe, den Wert. Zahlen werden mit Dezimalpunkt gelesen." | Die ganze Nachricht |
| Das Gerät schreibt ein Komma als Dezimalzeichen | Nur bei Float- und Double-Tags. Das Komma ist beim Lesen und beim Schreiben das Dezimalzeichen. | aus |
| Schreibnachricht | Tags, die geschrieben werden, nicht über UDP: "Was ein Schreibvorgang sendet, mit an der Stelle des Werts, etwa SP \r, oder , um ihn zu formatieren. Bei einem Boolean-Tag ist eine Schreibnachricht ohne ein Befehl, der beim Schreiben von true gesendet wird." | leer |
| Erwartete Rückmeldung | "Optional. Womit die Rückmeldung des Geräts auf einen Schreibvorgang beginnt. Der Schreibvorgang gelingt nur, wenn diese Rückmeldung innerhalb des Zeitlimits ankommt." | leer |
Die Zeichen werden vom Anfang der Nachricht an gezählt, die Startmarke eingeschlossen; Endezeichen, Prüfsumme und die Bytes, die die Prüfsumme direkt davor auslässt, gehören nicht zu dem, was ein Tag liest. Ein Muster ist ein regulärer Ausdruck von .NET, und eine Nachricht, für die es länger als 250 ms braucht, wird nicht gelesen. Ein Tag, das nur geschrieben wird, hat keine Felder für Anfrage, Filter oder Wert; ein Tag ohne Schreibnachricht ist schreibgeschützt.
Die Datentypen sind Boolean, Int32, Int64, Float, Double und String. Der ausgeschnittene Text wird
als Typ des Tags gelesen, bevor die eigenen Stufen des Tags ihn umrechnen, wie bei jedem Treiber
(siehe Die Wertkette): Ein Boolean liest 1, true, on oder yes
und 0, false, off oder no; eine Ganzzahl liest eine ganze Zahl (12.0 wird als 12 gelesen,
12.5 abgewiesen); ein Float oder Double liest eine Dezimalzahl; ein String nimmt die Zeichen, wie
sie sind. Leerzeichen um eine Zahl und zwischen Vorzeichen und Ziffern werden ignoriert, weil
Anzeigegeräte ihre Zahlen mit Leerzeichen auffüllen. Ein Tag, dessen Felder nicht funktionieren
können, wird nicht gespeichert, und die Seite des Tags sagt, was ihm fehlt, etwa "Geben Sie die Anfrage an, die dieses Tag sendet." oder "Das Muster braucht genau eine Erfassungsgruppe, um den Wert herum."
Die schreibgeschützte Vorschau der Busadresse zeigt ask oder listen, gefolgt von dem, was
zutrifft, etwa listen?extract=position&start=5&length=6, oder ask?send=01RD%0D&extract=field&separator=,&field=3
für ein Tag, das 01RD und ein CR sendet und das dritte durch Kommas getrennte Feld der Antwort liest.
Lesen
| Situation | Tag mit Anfrage und Antwort | Mithörendes Tag |
|---|---|---|
| Der Wert | Aus der ersten geprüften Nachricht, die der Filter innerhalb des Zeitlimits nach der Anfrage annimmt. | Aus der letzten geprüften Nachricht, die der Filter annimmt, datiert mit ihrem Eingang. |
| Wann gelesen wird | Im Abfrageintervall des Tags. | Wann immer die Anlage sendet; das Tag zeigt die letzte Nachricht in seinem Abfrageintervall. |
| Vor der ersten Nachricht | Entfällt. | Das Tag wartet: kein Wert und kein Fehler, wie jedes Tag vor seiner ersten Antwort. |
| Keine Antwort oder eine stumme Anlage | Keine Antwort innerhalb des Zeitlimits ist ein fehlgeschlagener Lesevorgang, und die Regel des Tags für ein Gerät, das nicht geantwortet hat entscheidet, was es zeigt. | Ist die im Feld Höchste Zeit ohne Nachricht (s) des Geräts eingetragene Zeit abgelaufen, schlägt der Lesevorgang jedes mithörenden Tags fehl, und seine Regel entscheidet, was es zeigt. Eine abbrechende TCP-Verbindung lässt sie fehlschlagen, gleich was diese Zeit sagt. |
| Eine Nachricht, die das Tag nicht lesen kann | Ein fehlgeschlagener Lesevorgang mit dem Grund: ein fehlendes Feld, ein Wert, der über das Ende der Nachricht hinausreicht, oder ein Text, den der Typ nicht aufnehmen kann. | Dasselbe. |
Nachrichten, die keine Anfrage beantworten, gehen an die mithörenden Tags desselben Geräts, ein Gerät kann also beide Arten von Tags haben. Mithörende Tags mit demselben Filter teilen, was gehört wurde, und können verschiedene Felder aus derselben Nachricht nehmen.
Schreiben
Ein Schreibvorgang geht durch denselben Trichter wie bei jedem anderen Treiber: Das Schreibfeld nimmt den technischen Wert, und die Umrechnungsstufen werden umgekehrt, bevor der Rohwert gesendet wird (siehe Connector).
| Schreibnachricht | Was gesendet wird | Was der Schreibvorgang meldet |
|---|---|---|
Mit {value} |
Die eingegebenen Bytes, mit dem Wert an der Stelle von {value}: eine Zahl in invarianter Kultur (mit Komma als Dezimalzeichen, wenn das Tag es sagt), oder formatiert durch {value:FORMAT} mit einem numerischen Format von .NET (W{value:000.0}\r sendet 12,5 als W012.5 und ein CR); ein Boolean als 1 oder 0; ein Text, wie er ist. |
Erledigt, sobald gesendet. Ist Erwartete Rückmeldung ausgefüllt, erst erledigt, wenn innerhalb des Zeitlimits eine Rückmeldung ankommt, die damit beginnt; eine andere Rückmeldung weist den Schreibvorgang mit dieser Rückmeldung als Grund ab, und Stille ist keine Antwort. |
Ohne {value}, bei einem Boolean-Tag |
Ein Befehl, etwa Tarieren oder Drucken: true schreiben sendet ihn, false schreiben wird abgewiesen. | Dasselbe. |
| Keine | Nichts: Das Tag ist schreibgeschützt. |
Schreibvorgänge warten wie bei jedem Treiber in der Warteschlange des Geräts: Auf einer Leitung teilen sie die eine Anfrage nach der anderen der Leitung, über TCP die eigene Verbindung des Geräts. Ein UDP-Gerät sendet nichts, seine Tags lassen sich also nicht schreiben.
Beispiel: ein Wägeterminal an RS-232
Ein Wägeterminal im Stil der Dauerausgabe von Toledo sendet viele Male pro Sekunde ein STX, drei Statusbytes, sechs Ziffern Gewicht, sechs Ziffern Tara, ein CR und ein Prüfsummenbyte. Auf der Station:
- Leitung hinzufügen auf der Seite des Treibers; nennen Sie sie
Scale line, wählen SieCOM3, lassen Sie die Baudrate auf 9600 und wählen Sie7E1als Serielles Format, dann Aktivieren Sie die Leitung. - Gerät hinzufügen auf der Leitung; nennen Sie es
Scale. Auf der Karte Nachrichten lassen Sie Text mit Escape-Folgen und Endezeichen, setzen das Endezeichen auf\r, die Startmarke auf\x02und Höchste Zeit ohne Nachricht (s) auf 10, damit ein gezogenes Kabel als verlorene Verbindung erscheint. - Auf der Karte Prüfsumme wählen Sie Zweierkomplement der 7-Bit-Summe (Toledo), Rohe Bytes und Nach dem Endezeichen, mit beiden Zahlen ausgelassener Bytes auf 0.
- Tag hinzufügen; nennen Sie es
Weight, Double, nur lesen. Auf der Karte Quelle wählen Sie Mithören, Jede Nachricht und Feste Position, mit Erstes Zeichen 5 und Länge 6: Das STX ist Zeichen 1, die drei Statusbytes sind 2 bis 4, das Gewicht 5 bis 10. - Die Ziffern tragen keinen Dezimalpunkt, also setzt ihn die Stufe Skalierung des Tags, etwa mit einem Faktor 0,01 für ein Wägeterminal, das auf zwei Nachkommastellen eingestellt ist.
Ein Agent erledigt dasselbe mit drei Werkzeugaufrufen:
serial_line_upsert driver=GenericSerialTcp name="Scale line" serialPort=COM3 baudRate=9600 serialFormat=7E1
device_upsert driver=GenericSerialTcp name=Scale transport=SerialLine serialLineId=<id> messageEnd=Terminator terminator=\r startMarker=\x02 checksum=SumTwosComplement7Bit checksumFormat=Raw checksumPlacement=AfterEnd silenceTimeoutSeconds=10
tag_upsert device=Scale name=Weight opcUaType=Double tagMode=Listen valueExtraction=FixedPosition valueStart=5 valueLength=6
Beispiel: ein Barcodeleser über TCP
Ein Barcodeleser mit Ethernet-Anschluss sendet einen Code pro Zeile, und nur, wenn er einen liest:
- Gerät hinzufügen auf der Seite des Treibers; nennen Sie es
Reader, lassen Sie TCP-Client und tragen Sie Hostadresse 192.168.0.40 und Port 2001 ein. - Auf der Karte Nachrichten lassen Sie Text mit Escape-Folgen, Endezeichen
\r\nund Höchste Zeit ohne Nachricht (s) auf 0: Ein Leser, der eine Stunde lang nichts sendet, ist nicht gestört. Lassen Sie Keines auf der Karte Prüfsumme. - Tag hinzufügen; nennen Sie es
Code, String, nur lesen. Auf der Karte Quelle wählen Sie Mithören, Jede Nachricht und Die ganze Nachricht.
Dasselbe mit den Werkzeugen des Agenten:
device_upsert driver=GenericSerialTcp name=Reader transport=TcpClient host=192.168.0.40 port=2001 messageEnd=Terminator terminator=\r\n
tag_upsert device=Reader name=Code opcUaType=String tagMode=Listen valueExtraction=WholeMessage
driver_capabilities beschreibt diesen Treiber unter genericSerialTcp, mit diesen beiden
Beispielen, und serial_line_upsert legt eine Leitung dieses Treibers mit driver=GenericSerialTcp
an; die übrigen Werkzeuge stehen unter Die Werkzeuge, Bereich für Bereich.
Grenzen, die man kennen sollte
- Nichts wird gesucht: Es gibt kein Protokoll, mit dem man eine solche Anlage fragen könnte, was sie ist oder was sie enthält.
- Ein binärer Rahmen, der seine eigene Länge in einem Kopf ankündigt, wird nicht gelesen; eine Nachricht endet mit einem Endezeichen, einer festen Länge, einer Sendepause oder einem Datagramm.
- Die Prüfsumme wird nur geprüft: Dem, was die Station sendet, wird keine Prüfsumme angehängt.
- Ein Tag nimmt einen Wert aus einer Nachricht, als Text, der in seinem Typ gelesen wird; binär gepackte Ganzzahlen oder Gleitkommazahlen in der Nachricht werden nicht dekodiert.
- Ein UDP-Gerät hört nur zu: Es sendet keine Anfrage und nimmt keinen Schreibvorgang an.
- Ein Gerät lässt sich nicht zwischen einer seriellen Leitung und dem Netzwerk verschieben, auch nicht auf eine andere Leitung: Legen Sie es dort an, wo es hingehört, und löschen Sie das alte.