Witte Software ® https://www.modbustools.com
2023-08-11
1. Modbus Slave
Modbus Slave ist für die Simulation von bis zu 100 Slave-Geräten in 100 Windows!. Beschleunigen Sie Ihre SPS-Programmierung mit diesen Simulationswerkzeugen. Beginnen Sie mit der Programmierung und dem Testen, bevor Sie Ihr Slave-Gerät vom Lieferanten erhalten. Die Daten, die in einem offenen Dokument enthalten sind, sind für die Master-Anwendung zugänglich.Ähnliche Benutzeroberfläche wie Modbus Poll.
Monitoring of serial traffic. OLE Automation for interfacing with Visual Basic, Excel etc. To interpret and show the Modbus data according to your specific requirements. E.g. edit your slave data in Excel. Try the Excel example.xls included with the program.
Each window opened within Modbus Slave may be configured to represent data from the same or different slave nodes.
1.1. Systemanforderungen für Modbus Slave
Hardware requirements
Prozessor: 1 GHz oder schneller empfohlen
1 GB RAM
5 MB freier Festplattenplatz
1024 x 768 Display ResolutionOS-Anforderungen
Alle Windows-Versionen von Windows 7 bis Windows 11 werden unterstützt.
Modbus Slave Version 8 läuft unter Windows XP.
1.1.1. Stille Installation
Stille Installation erfordert keine Benutzerintervention und hat keine Benutzeroberfläche. Der Benutzer sieht keinen Dialog und wird keine Fragen gestellt.
Use the command line /S switch.
1.2. Endbenutzer-Lizenzvereinbarung
You should carefully read the following terms and conditions before using Modbus Slave. Unless you have a different license agreement signed by Witte Software, your use of this software indicates your acceptance of this license agreement and warranty. If you do not accept these terms you must cease using this software immediately.
Copyright.
Modbus Slave ("Die Software") ist urheberrechtlich geschützt 2002 - 2023 von Witte Software, alle Rechte vorbehalten.
Evaluation and Registration.
Das ist keine freie Software. Sie sind hiermit lizenziert, die Software für einen Zeitraum von 30 Tagen kostenlos zu Evaluierungszwecken zu nutzen.
Wenn Sie die Software nach dem 30 - tägigen Testzeitraum nutzen, ist eine Registrierungsgebühr erforderlich.
Die nicht registrierte Nutzung der Software nach dem 30 - tägigen Testzeitraum verstößt gegen die US-amerikanischen und internationalen Urheberrechtsgesetze.
One registered copy of the Software may either be used by a single person who uses the software personally on one or more computers, or installed on a single computer used by multiple people, but not both.
Für Informationen zu Bestellung und Preisen, besuchen Sie bitte https://www.modbustools.com/order.html
Modbus Slave licenses are perpetual. Once you buy a license to a specific major version, and as long as you abide by the license agreement, you can use that version forever with no additional cost.
Distribution.
Sofern Sie Ihren Lizenzschlüssel nicht einfügen, sind Sie hiermit lizenziert, Kopien der Software zu erstellen, exakte Kopien des Originals an jedermann zu geben und die Software in ihrer unveränderten Form auf elektronischem Wege zu verteilen. Es ist Ihnen ausdrücklich verboten, für solche Kopien in Rechnung zu stellen.
LIMITED WARRANTY.
THE SOFTWARE IS PROVIDED AS IS AND WITTE SOFTWARE DISCLAIMS ALL WARRANTIES RELATING TO THIS SOFTWARE, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
LIMITATION ON DAMAGES.
WEDEN WITTE SOFTWARE NIE JEDEN, die an der Erstellung, Produktion oder Lieferung dieser SOFTWARE beteiligt sind, haften für indirekte, Folge - oder Zufallsschäden, die aus der Nutzung oder Unfähigkeit der Nutzung solcher SOFTWARE entstehen, selbst wenn WITTE SOFTWARE über die Möglichkeit solcher Schäden oder Ansprüche aufmerksam gemacht wurde. In keinem Fall übersteigt die Haftung der Software für Schäden den für die Lizenz zur Nutzung der Software gezahlten Preis, unabhängig von der Art des Anspruchs. Die Person, die die Software nutzt, trägt alle Risiken in Bezug auf die Qualität und Leistung der Software.
2. Modbus Slave Funktionen
2.1. Connections
Modbus Slave liest / schreibt Daten von Geräten mit:
- Modbus RTU oder ASCII in RS232 - oder RS485 - Netzwerken verwenden. (USB/ RS232 / 485 Konverter)
- Modbus TCP/IP
- Modbus Over TCP/IP. (Modbus RTU encapsulated in a TCP packet)
- Modbus UDP/IP
- Modbus Over UDP/IP. (Modbus RTU encapsulated in a UDP packet)
2.2. Unterstützte Modbus-Funktionen
- 01 (0x01) Lesen von Spulen
- 02 (0x02) Lesen von diskreten Eingängen
- 03 (0x03) Lesen von Holding-Registern
- 04 (0x04) Lesen von Eingabe-Registern
- 05 (0x05) Schreiben von Einzelspulen
- 06 (0x06) Single Register schreiben
- 08 (0x08) Diagnose (nur serielle Linie)
- 11 (0x0B) Komm-Ereignis - Zähler erhalten (Nur serielle Linie)
- 15 (0x0F) Schreiben mehrerer Spulen
- 16 (0x10) Schreiben mehrerer Registers
- 17 (0x11) Server-ID berichten
- 22 (0x16) Maske Schreibregister
- 23 (0x17) Mehrfachregister lesen / schreiben
- 43 / 14 (0x2B / 0x0E) Gerätekennzeichnung lesen
2.3. Anzeigeformate
Each cell can be individual formatted.
- Signiertes 16 - Bit-Register
- Unsigniertes 16 - Bit-Register
- Hex
- Binary
- 32 - Bit-signiertes Ganzzahgerät mit beliebiger Wort / Byte-Reihenfolge
- 32 - Bit-unsigniertes Ganzzahgerät mit beliebiger Wort / Byte-Reihenfolge
- 64 - Bit-unsigniertes Ganzzahgerät mit beliebiger Wort / Byte-Reihenfolge
- 64 - Bit-unsigniertes Ganzzahgerät mit beliebiger Wort / Byte-Reihenfolge
- 32 - Bit-Float mit beliebiger Wort / Byte-Reihenfolge
- 64 - Bit-Double - Float mit beliebiger Wort / Byte-Reihenfolge
2.4. Verschiedene Features
- OLE/Automation for interfacing with Excel VBA, Python etc.
- Monitoring of data traffic
- Print and print preview
- Font selection
- Conditional colors
- Scaling
- Real time charting
- Save/Open workspace
3.
Modbus Slave uses a multiple document interface. That means several windows can be opened. Each one with different data contents for simulation of different slave devices at the same time.

Das Bild zeigt zwei geöffnete Fenster. Einer simuliert 10 Holding-Register von der Adresse 0 (40001) Slave-ID 1 und ein anderer simuliert 10 Holding-Register von der Adresse 0 (40001) Slave-ID 2.
3.1. Hilfe von überall
Drücken Sie F1und erhalten kontextspezifische Hilfe zu einem Thema, das mit dem aktuell ausgewählten Element verknüpft ist.
Shift + F1 ruft einen speziellen "Hilfe-Modus" auf, in dem der Cursor in einen Hilfe-Cursor verwandelt wird (Pfeil + Fragezeichen). Der Benutzer kann dann ein sichtbares Objekt in der Benutzeroberfläche auswählen, wie z. B. ein Menüpunkt, eine Schaltfläche in der Symbolleiste oder ein Fenster. Dies öffnet die Hilfe zu einem Thema, das das ausgewählte Element beschreibt.
3.2. Name Zellen
Here you can type any text for designation of the value cells. You can also copy/paste text from Excel cells.
3.3. Wertzellen
Show the data values of the Modbus registers. If you double click a value cell a dialog box lets you enter a new value to the value cell. Typing a number in a value cell shows the input dialog as well.

3.4. Schriftart ändern
Um die Schriftart zu ändern, haben Sie 2 Optionen
- Select the cells to be changed and then right click.
- Wählen Sie die Zellen aus, die geändert werden sollen, und dann Menü → Anzeige → Schrift.

3.5. Bedingte Farben
Bedingte Farben helfen Ihnen, Werte in bestimmten Bereichen visuell anzuzeigen.3 Farboptionen
- Standardfarbe: Diese Farbe wird verwendet, wenn keine der bedingten Farben auf wahr ausgewertet wird.
- Regel 1: Diese Farbwahl wird verwendet, wenn der Ausdruck auf true ausgewertet wird. Regel 1 hat Vorrang gegenüber Regel 2.
- Regel 2: Diese Farbwahl wird verwendet, wenn der Ausdruck auf true ausgewertet wird.
7 Vergleichsbetreiber
- not used
- equal to
- greater than
- less than
- greater than or equal to
- less than or equal to
- and
Der Operator "und" kann nicht verwendet werden, wenn der Datentyp von float oder 32 bit langem Typ ist. Der Wert der Bedingung wird als Hex-Zahl eingegeben, wenn "und" ausgewählt wird. Es wird auf true ausgewertet, wenn irgendein der Bits in der Zelle und der Bedingung Wert 1 ist.
3.5.1. Farbe Beispiel
Grüne Farbe, wenn der Zellwert zwischen 398 und 402 liegt

3.6. Scaling
Die Skalierung hilft Ihnen, Rohwerte auf menschlich lesbare Werte zu skalieren. Skalierung funktioniert nur für signierte und unsignierte 16 / 32 - Bit-Ganzzahlen.

(X1,Y1) und (X2,Y2)
Eine Linie, die durch die beiden Punkte (X1,Y1) und (X2,Y2) führt
Neigung=m=Y2−Y1X2−X1 = = 2- 1 2- 1Line Gleichung
Y=m⋅(X−X1)+Y1 = ⋅(-1) + 1Precision
Number of digits after the decimal point.Enable
Es muss aktiviert sein, um den Wert vom Modbus-Server / Slave zu skalieren. Die Skalierung wird automatisch deaktiviert, wenn ein anderes als ein 16/32 - Bit-Ganzzahlformat ausgewählt wird.
3.7. Echtzeit-Charting
Das Diagramm kann 12 Serien in Echtzeit mit bis zu 100.000 Punkten in jeder Reihe zeichnen.
3.8.Öffnen eines neuen Fensters
Um ein anderes Fenster zu öffnen, haben Sie 3 Optionen:
- Drücken Sie STRG + N
- Select new in the file menu
- Drücken Sie
auf der Symbolleiste
4. Verbindung Dialog
Um den Verbindung Dialog zu öffnen, haben Sie 2 Optionen:
- Drücken Sie F3
- Select connect from the connection menu

Verbindung
Es gibt 5 verschiedene Verbindungstypen:
- Seriell:
Modbus über serielle Linie. RS232 oder RS485 Ein USB-Serieller - Konverter kann verwendet werden. - Modbus TCP / IP:
Select TCP/IP if you want to communicate with a MODBUS TCP/IP network. In this case, slave ID is the same as the Unit ID used in MODBUS TCP/IP.
Die Portnummer ist standardmäßig 502. - Modbus UDP / IP:
Select UDP/IP if you want to communicate with a MODBUS UDP/IP network. This is the same as Modbus TCP/IP but the connection less UDP protocol is used instead. - Modbus RTU über TCP / IP:
This is a RTU message sent over a TCP/IP network instead of serial lines. - Modbus RTU über UDP / IP:
This is a RTU message sent over a UDP/IP network instead of serial lines.
| Verbindungstyp 3 - 5 ist kein Standardmodbus wie inwww.modbus.org Sie werden jedoch für die Bequemlichkeit hinzugefügt. |
Depending on your selection some other settings will be grayed.
4.2. Serielle Einstellungen
Verwenden Sie diese Parameter, um die seriellen Port-Einstellungen festzulegen. Sie sind nur verfügbar, wenn der Verbindungstyp "Serial Port" ist.Modus
Verwenden Sie diese Option, um dieRTU oder ASCIIStandard-RTU.DSR
Gibt an, ob das DSR-Signal (Data-Set - Ready) für die Ausgangsflusssteuerung überwacht wird. Wenn dieses Mitglied TRUE ist und DSR ausgeschaltet ist, wird die Ausgabe ausgesetzt, bis DSR erneut gesendet wird. CTS
Gibt an, ob das CTS-Signal (clear-to - send) für die Ausgabeflusssteuerung überwacht wird. Wenn dieses Kontrollkästchen aktiviert ist und CTS ausgeschaltet ist, wird die Ausgabe ausgesetzt, bis CTS erneut gesendet wird.RTS Umschalten
Specifies that the RTS line will be high if bytes are available for transmission. After all buffered bytes have been sent, the RTS line will be low.
Sie können dies verwenden, um die Richtung zu wechseln, wenn Sie einen 232 / 485 - Wandler ohne automatischen Richtungsschalter haben.
| Die Verwendung von RTS-gesteuerten RS232 / RS485 - Wandlern sollte möglichst vermieden werden. Es ist schwierig, den genauen Zeitpunkt zu bestimmen, wann der Sender mit Nicht-Echtzeit - Betriebssystemen wie Windows und Linux ausgeschaltet werden muss. Wenn es zu früh ausgeschaltet wird, können Zeichen noch im FIFO oder im Übertragsregister des UART sitzen und diese Zeichen gehen verloren. Der Sklave erkennt die Botschaft nicht. Auf der anderen Seite, wenn es zu spät ausgeschaltet wird, dann ist die Nachricht des Slaves beschädigt und der Master wird die Nachricht nicht erkennen. |
4.3. TCP / IP-Server
TCP/IP server settings are only available when using an Ethernet connection.IP Address
Geben Sie an, welche IP-Adresse abgehört werden soll. Dies ist hilfreich, wenn Sie mehrere Netzwerkverbindungen auf Ihrem PC haben. Jede Instanz von Modbus Slave kann ein bestimmtes Netzwerk abhören. Default ist lokaler Host 127.0.0.1Any Adresse
Check this on if you want Modbus Slave to listen on all networks.IgnoreUnit ID
Many PLC devices will ignore this field, and most clients default value to zero. However gateways or specialized programs can use the unit number to indicate what type of processing is desired.Port
Server-Portnummer. Standardeinstellung 502
Slave-Definition
Use this command to define the data array to be defined for the active window.
Um den Slave-Definition - Dialog zu öffnen, haben Sie 3 Optionen:
- Drücken Sie F8
- Wählen Sie "Slave-Definition" aus dem Setup-Menü
- Drücken Sie
auf der Symbolleiste

5.1. Sklaven ID
Bereich 1 bis 255. (Die MODBUS-Protokollspezifikationen sagen 247). Der Wert 0 wird auch akzeptiert, um direkt mit einem MODBUS / TCP - oder MODBUS / UDP-Gerät zu kommunizieren.
5.2. Funktionscode
Sie können 1 von 4 Funktionscodes wählen.
- 01: Lesen Sie Spulen (0x). Akzeptiert Schreibfunktionen 05 und 15
- 02: Diskrete Eingaben lesen (1x)
- 03: Haltenregister lesen (4x). Akzeptiert Schreibfunktionen 06, 16, 22 und 23
- 04: Eingaberegister lesen (3x)
5.3. Adresse
Addresses in the Modbus protocol are confusing! Some protocol specifications use the protocol/message address and others use device addressing.
5.3.1. Protokoll / Nachricht Adresse
Einige Protokollspezifikationen verwenden die Zählung der Protokoll / Nachricht Adresse von 0 bis 65535 zusammen mit einem Funktionscode. Genau das verwenden auch die neuen Modbus-Spezifikationen. Dies ist die Adresse innerhalb der Nachricht, die auf dem Draht gesendet wird.
Modbus Slave verwendet Protokoll / Nachricht Adresse Zählen von 0 bis 65535.
5.3.2. Device Adresse
Einige Protokollspezifikationen verwenden Geräteadresse / Register. Die Registrierung zählt ab 1. Die erste Ziffer beschreibt die Funktion, die verwendet wird. Das bedeutet, dass die Geräteadresse 40101 durch die Adresse 100 identifiziert wird. Das „4" bedeutet Haltenregister und 4x Register zählen ab 1. Und noch verwirrender: 4x bedeutet Funktionscode 03 und 3x bedeutet Funktionscode 04!
5.3.3. 5 Ziffern vs. 6 Ziffern Adressieren
Das Adressformat 4x zählt von 40001 bis 49999. Die nächste Adresse istnot50000. Früher waren 9999 Adressen genug. Es gibt Fälle, in denen 9999 nicht ausreicht. Danach wird eine Null hinzugefügt. 40101 wird 400101 und so weiter. Dies wird als 6 - Ziffern-Adressierung oder erweiterte Adressierung bezeichnet.
Dies ist kein Problem mit Modbus Slave. 410001 wird 10000. Das "4" wird weggeworfen und der Rest 10001 wird um 1 verringert, da wir von 0 statt von 1 zählen.
5.3.4. Adresse Beispiele
These examples show how to set up Modbus Slave if a specification uses device addresses.
Define Holding Registers
Sie möchten 20 Register von der Gerätsadresse 40011 aus der Slave-ID 2 definieren. Aus dem "4" wissen wir, dass dies die Funktion 03 "Behälterregister lesen" ist.
- Slave-ID = 2
- Funktion = "03 Lesen Haltenregister (4x)"
- Adresse = 10 (11 minus 1)
- Quantität = 20
Define Discrete Inputs
Sie möchten 1000 Spulen von der Adresse 110201 von Slave-ID 5 definieren. Aus dem "1" wissen wir, dass dies die Funktion 02 "Lese diskrete Eingaben" ist
- Slave ID = 5
- Funktion = "02 Discrete Inputs lesen (1x)"
- Adresse = 10200 (10201 - 1)
- Quantität = 1000
5.4. Hide name columns
Hide all name columns. This is convenient to make more space if they are not used.
5.5. Adresse in Zelle
Wenn aktiviert, wird die Adresse auch in der Wertzelle angezeigt, wie: 2000 = 00000

5.6. PLC-Adressen (Base 1)
This option will show the addresses as device addresses.

5.7. Rows
Specify the number of rows in the grid you prefer.
6 Echtzeit-Diagramm
Verwenden Sie diesen Befehl, um bis zu 12 Datenreihen in einem Diagramm in Echtzeit zu erstellen.
The real time chart is high speed and capable of drawing a new line as fast as new data is received.
| Alle Diagrammeinstellungen werden in der Arbeitsbereichsdatei gespeichert.Save/Open Workspace |
Um das Echtzeit-Charting - Dialog zu öffnen, haben Sie 2 Optionen:
- Drücken Sie Alt + R
- Wählen Sie "Echtzeit-Charting" aus dem Menü Anzeige

Die X-Achse zeigt die Anzahl der Sekunden an, seit das Chart gestartet wurde.
Wenn die Punkte am Ende des Diagramms erreichen, gibt es 3 Optionen:
- Stoppen am Ende:Das Charting stoppt.
- Restart am Ende:Das Charting beginnt ganz von vorne.
- Continue: Es geht weiter, bis es die maximale Anzahl von Punkten erreicht oder Stopp gedrückt wird.
6.1. Settings
Standardmäßig sind alle 12 Serien an die linke Y-Achse gebunden. Aktivieren Sie das Kontrollkästchen "Rechte Y-Achse", wenn Sie eine Reihe mit der rechten Y-Achse verknüpfen möchten.
- Colors
- Rechte Y-Achse
- Title. If title is empty it is initialized with the name from the reading window
- Offset
Show
- File name
- Address
Der Offset ist nützlich, um Datenpunkte auf derselben Y-Achse auszurichten. Beispielsweise können Datenpunkte, die entweder 0 oder 1 sind, so verschoben werden, dass sie nicht aufeinander angezeichnet werden.

6.2. Zoom-Funktion
Das Zoomen auf dem Diagramm kann nützlich sein, wenn Sie mehr Details sehen möchten. Der Zoom wird mit der linken Maustaste gesteuert. Um einen bestimmten Teil des Diagramms zu zoomen, klicken Sie einfach mit der linken Maustaste auf das Diagramm (dies wird die linke obere Ecke des zoomten Rechtecks sein) und ziehen Sie nach unten rechts. Ein Rechteck erscheint. Sobald Sie die Maustaste loslassen, werden sich die Achsen automatisch an die von Ihnen ausgewählte Region anpassen.
Wenn Sie mit der Linken Maustaste auf das Diagramm klicken (wie zum Starten eines Zooms), aber stattdessen in die oberen linken Ecke bewegen, werden alle Änderungen, die mit den Funktionen Zoom und Pan durchgeführt wurden, storniert (das Diagramm wird in dem Zustand sein, in dem es vor den Manipulationen mit Pan und Zoom war).
6.3. Pan-Funktion
Um das Steuerelement zu schwenken, klicken Sie mit der rechten Maustaste irgendwo auf dem Steuerelement und bewegen Sie die Maus. Der Punkt unter der Maus folgt der Bewegung der Maus.
6.4. Verknüpfung von Daten mit der Chart-Serie
Das Diagramm weiß nicht, welche Daten verwendet werden sollen, es sei denn, Sie verknüpfen eine Modbus-Datenzelle mit einer der 12 - Serien. Hierzu wählen Sie eine Wertezelle aus und wählen Sie "Verknüpfen mit dem Diagramm" aus dem Menü → Anzeige.

6.5. Export-Serie
Save series data to disk or copy to clipboard. Paste the data direct in Excel for further processing.
Die Datei erhält trotz der Verwendung eines nicht-komma - Feldtrenners eine. csv-Erweiterung.
Delimiter: Wählen Sie das Zeichen aus, das die Werte in Ihrer Textdatei trennt. Verwenden Sie den Tab-Delimiter beim Kopieren / Einfügen in Excel.Further werden einige zusätzliche Informationen gegeben.
- Number of points
- Max point value
- Min point value
- Average point value

7. Display-Formate
Markiert die zu formatierenden Zellen. Wählen Sie eines der 28 Anzeigeformate aus dem Anzeigemenü.
7.1. Native Modbus-Register
Die 16 - Bit-Modbus - Register können in vier verschiedenen Modi angezeigt werden.
- Signed
- Unsigned
- Hex
- ASCII - Hex
- Binary
7.2. 32-bit signed integer
Dies kombiniert zwei 16 - Bit-Modbus - Register. Es kann in vier verschiedenen Wort / Byte-Reihenfolge angezeigt werden.
- Signatur Big-endian
- Signed integer Little-endian
- Signed integer Big-endian byte swap
- Signed integer Little-endian byte swapExampleByte Order:AB CD (Big-endian)
Die Dezimalzahl 123456789 oder in Hexadezimal07 5B CD 15
Order, wie sie über den Draht in einer Modbus-Nachricht kommen:07 5B CD 15
7.3. 32-bit unsigned integer
Diese kombiniert zwei 16 - Bit Modbus-Register. Es kann in vier verschiedenen Wort / Byte-Reihenfolge angezeigt werden.
- Unsignierte Ganzzahzahl Big-endian
- Unsignierte Ganzzahzahl Little-endian
- Unsignierte Ganzzahzahl Big-endian Byte-Swap
- Unsignierte Ganzzahzahl Little-endian Byte-SwapExampleByte Order:AB CD (Big-endian)
Die Dezimalzahl 123456789 oder in Hexadezimal07 5B CD 15
Reihenfolge, wie sie in einer Modbus-Nachricht über das Draht kommen:07 5b CD 15
7.4 64-bit signed integer
Dies kombiniert vier 16 - Bit Modbus-Register. Es kann in vier verschiedenen Wort / Byte-Reihenfolge angezeigt werden.
- Signatur Big-endian
- Signed integer Little-endian
- Signed integer Big-endian byte swap
- Signed integer Little-endian byte swapExampleByte Reihenfolge:AB CD EF GH (Big-endian)
Die Dezimalzahl -1,234,567,890,123,456,789 oder in Hexadezimalform EE DD EF 0B 82 16 7E EB
Reihenfolge, wie sie in einer Modbus-Nachricht über den Draht kommen:EE DD EF 0B 82 16 7E EB
7.5. 64-bit unsigned integer
Dies kombiniert vier 16 - Bit Modbus-Register. Es kann in vier verschiedenen Wort / Byte-Reihenfolge angezeigt werden.
- Unsignierte Ganzzahl Big-endian
- Unsignierte Ganzzahzahl Little-endian
- Unsignierte Ganzzahger Big-endian byte swap
- Unsignierte Ganzzahger Little-endian byte swapExampleByte Order:Ab CD EF GH (Big-endian)
Die Dezimalzahl 1.234.567.890.123.456, 789 oder in Hexadezimal11 22 10 F4 7D E9 81 15
Reihenfolge, wie sie in einer Modbus-Nachricht über den Draht kommen:11 22 10 F4 7D E9 81 15
7.6. 32-Ein bisschen schwimmen
Dies kombiniert zwei 16 - Bit-Modbus - Register. Es kann in vier verschiedenen Wort / Byte-Reihenfolge angezeigt werden.
- Float Big-endian
- Float Little-endian
- Float Big-endian byte swap
- Float Little-endian byte swapExampleByte Order:AB CD (Big-endian)
Die Gleitkomma-Nummer 123456.00 oder in Hexadezimal47 F1 20 00
Ordnen Sie, wenn Sie über das Draht kommen in einer Modbus-Nachricht:47 F1 20 00
7.7. 64-bit double
Dies kombiniert vier 16 - Bit Modbus-Register. Es kann in vier verschiedenen Wort / Byte-Reihenfolge angezeigt werden.
- Doppel Big-endian
- Doppel-Little - Endian
- Doppel-Big - Endian Byte-Swap
- Doppel-Little - Endian Byte-SwapExampleByte-Reihenfolge:AB CD EF GH (Big-endian)
Die Gleitkomma-Nummer 123456789.00 oder in Hexadezimal41 9D 6F 34 54 00 00 00
Reihenfolge, wie sie in einer Modbus-Nachricht über den Draht kommen:41 9D 6F 34 54 00 00 00
8. Speichern / Öffnen Arbeitsbereich
If you open many related Modbus windows it is convenient to save a snapshot of the current layout of all open and arranged Modbus Windows in one workspace.
Ein Arbeitsbereich (* msw) ist eine Datei, die Anzeigeinformationen und Dateinamen aller geöffneten Fenster enthält. Nicht der tatsächliche Inhalt. Um dies zu tun, gehen Sie zu File → Save Workspace.
The Connection and Chart settings are stored in the Workspace file.
When you open a workspace file, Modbus Slave opens all Modbus Windows and displays them in the layout that you saved.
9. Kommunikationsverkehr
Wählen Sie das Menü Anzeige → Kommunikation aus, um den Verkehr auf dem seriellen Kabel oder Ethernet-Kabel anzuzeigen. Verwenden Sie die Stopp-Schaltfläche, um das Update zur Inspektion vorübergehend zu stoppen.
Use the copy button to copy the selected line to the clipboard.
| Dieses Fenster zeigt nur Daten an, die von Modbus Slave gesendet und empfangen werden. Sie können es nicht als Datensniffer verwenden. |
| Leave this window open while doing other commands. |
10. OLE / Automatisierung
Automation (formerly known as OLE Automation) makes it possible for one application to manipulate objects implemented in another application.
An Automation client is an application that can manipulate exposed objects belonging to another application. This is also called an Automation controller.
Ein Automatisierungsserver ist eine Anwendung, die programmierbare Objekte anderen Anwendungen aussetzt.Modbus Slave Es ist ein Automatisierungsserver.
That means you can use any program that supports VBA (Visual Basic for Applications) such as Visual Basic, Excel etc. to interpret and show the modbus data according to your specific requirements.
10.1. Excel Beispiel
You should display the Developer tab or run in developer mode when you want to write macros.
10.1.1. Excel 2007

- Click the Microsoft office button and then click Excel options.
- Click popular and then select the show Developers tab in the ribbon check box.
Note the ribbon is part of the Microsoft fluent user interface.
10.1.2. Excel 2010, 2016
- Click on the file tab.
- Click options. Excel Options window will open.
- On the left pane click Customize Ribbon.
- On the right pane, under Main Tabs, check the Developer check box.
- Click OK. The Developer tab should now show in the ribbon (right most tab).
10.1.3. Excel Beispielcode
This example opens a window simulating Holding registers.
Modbus Slave ist versteckt, aber Sie können es zeigen, indem Sie die Zeile "ShowWindow" unkommentieren. Hier wird eines der Fenster angezeigt
An example is also included with the Modbus Slave installation.
Beispiel Start → Alle Programme → Modbus Slave → Excel
Excel VBA Example
Public doc As Object
Public app As Object
Dim status As Integer
Dim n As Integer
Private Sub StartSlave_Click()
' Create an application object. You can only create 1 application object
Set app = CreateObject("Mbslave.Application")
' Create a new Modbus Slave document (Data Window)
' This is the same as open a new data window in Modbus Slave
' You can create up to 50 Modbus Slave documents (Data Window)
Set doc = CreateObject("Mbslave.Document")
' Show Modbus Slave
' res = doc.ShowWindow()
' Create doc2 if needed.
' Set doc2 = CreateObject("Mbslave.Document")
' Set one of 5 connection types.
app.Connection = 1 ' Modbus TCP/IP
' TCP/IP settings.
' No need to set IP address. We listen to any address. (Default).
app.ServerPort = 502
app.IPVersion = 4
' Open the connection.
res = app.OpenConnection()
Range("D5").Value = res
res = doc.SetupHoldingRegisters(1, 100, 8)
doc.SRegisters(0) = 1 ' Modbus address 100
doc.SRegisters(1) = -10 ' Note that the Index used counts from 0
doc.URegisters(2) = 50000 ' no matter the Modbus address used.
doc.URegisters(3) = 60000
doc.Longs(4) = 10000 ' A long takes 2 registers
doc.Floats(6) = 123.45 ' A float takes 2 registers
' Now a master can read 8 Holding registers with a mix of 3 data types
End Sub10.2. Python Beispiel
This Python example opens a window and set all possible data formats.
Python Example
import win32com.client as win32
SIGNED = 0
UNSIGNED = 1
HEX = 2
BINARY = 3
FLOAT_LE_BS = 4
FLOAT_BE = 5
DOUBLE_LE_BS = 6
DOUBLE_BE = 7
S32_LE_BS = 8
S32_BE = 9
FLOAT_LE = 10
FLOAT_BE_BS = 11
DOUBLE_LE = 12
DOUBLE_BE_BS = 13
S32_LE = 14
S32_BE_BS = 15
U32_BE = 17
U32_LE_BS = 18
U32_BE_BS = 19
U32_LE = 20
S64_BE = 21
S64_LE_BS = 22
S64_BE_BS = 23
S64_LE = 24
U64_BE = 25
U64_LE_BS = 26
U64_BE_BS = 27
U64_LE = 28
#Endianness
BE = 0
LE = 3
BE_BS = 2
LE_BS = 1
App = win32.Dispatch('Mbslave.Application')
App.Connection = 1
App.IPAddress = "127.0.0.1"
App.ServerPort = 502
App.OpenConnection
#Create a Modbus display window called Win1
Win1 = win32.Dispatch("Mbslave.Document")
# Setup 100 holding registers with slave ID 1, address 0 (40001)
Win1.SetupHoldingRegisters(1, 0, 100)
# Show the Modbus window
Win1.ShowWindow()
# Show 20 rows
Win1.Rows(1)
# Disable refresh for speed
Win1.EnableRefresh = False
# Set all different formats
# This sets how the value is displayed
# Use ByteOrder to set the actual endianness
Win1.SetFormat(0, SIGNED)
Win1.SetFormat(1, UNSIGNED)
Win1.SetFormat(2, HEX)
Win1.SetFormat(3, BINARY)
Win1.SetFormat(4, S32_BE)
Win1.SetFormat(6, S32_LE)
Win1.SetFormat(8, S32_BE_BS)
Win1.SetFormat(10, S32_LE_BS)
Win1.SetFormat(12, U32_BE)
Win1.SetFormat(14, U32_LE)
Win1.SetFormat(16, U32_BE_BS)
Win1.SetFormat(18, U32_LE_BS)
Win1.SetFormat(20, S64_BE)
Win1.SetFormat(24, S64_LE)
Win1.SetFormat(28, S64_BE_BS)
Win1.SetFormat(32, S64_LE_BS)
Win1.SetFormat(40, U64_BE)
Win1.SetFormat(44, U64_LE)
Win1.SetFormat(48, U64_BE_BS)
Win1.SetFormat(52, U64_LE_BS)
Win1.SetFormat(60, FLOAT_BE)
Win1.SetFormat(62, FLOAT_LE)
Win1.SetFormat(64, FLOAT_BE_BS)
Win1.SetFormat(66, FLOAT_LE_BS)
Win1.SetFormat(80, DOUBLE_BE)
Win1.SetFormat(84, DOUBLE_LE)
Win1.SetFormat(88, DOUBLE_BE_BS)
Win1.SetFormat(92, DOUBLE_LE_BS)
# Set all Names to used format
Win1.SetName(0, "SIGNED")
Win1.SetName(1, "UNSIGNED")
Win1.SetName(2, "HEX")
Win1.SetName(3, "BINARY")
Win1.SetName(4, "S32_BE")
Win1.SetName(6, "S32_LE")
Win1.SetName(8, "S32_BE_BS")
Win1.SetName(10, "S32_LE_BS")
Win1.SetName(12, "U32_BE")
Win1.SetName(14, "U32_LE")
Win1.SetName(16, "U32_BE_BS")
Win1.SetName(18, "U32_LE_BS")
Win1.SetName(20, "S64_BE")
Win1.SetName(24, "S64_LE")
Win1.SetName(28, "S64_BE_BS")
Win1.SetName(32, "S64_LE_BS")
Win1.SetName(40, "U64_BE")
Win1.SetName(44, "U64_LE")
Win1.SetName(48, "U64_BE_BS")
Win1.SetName(52, "U64_LE_BS")
Win1.SetName(60, "FLOAT_BE")
Win1.SetName(62, "FLOAT_LE")
Win1.SetName(64, "FLOAT_BE_BS")
Win1.SetName(66, "FLOAT_LE_BS")
Win1.SetName(80, "DOUBLE_BE")
Win1.SetName(84, "DOUBLE_LE")
Win1.SetName(88, "DOUBLE_BE_BS")
Win1.SetName(92, "DOUBLE_LE_BS")
# Set different values
Win1.SRegisters(0, -100)
Win1.SRegisters(1, 100)
Win1.URegisters(2, 43690)
Win1.URegisters(3, 65535)
Win1.ByteOrder = BE
Win1.Ints_32(4, -123456)
Win1.ByteOrder = LE
Win1.Ints_32(6, -123456)
Win1.ByteOrder = BE_BS
Win1.Ints_32(8, -123456)
Win1.ByteOrder = LE_BS
Win1.Ints_32(10, -123456)
Win1.ByteOrder = BE
Win1.UInts_32(12, 123456)
Win1.ByteOrder = LE
Win1.UInts_32(14, 123456)
Win1.ByteOrder = BE_BS
Win1.UInts_32(16, 123456)
Win1.ByteOrder = LE_BS
Win1.UInts_32(18, 123456)
Win1.ByteOrder = BE
Win1.Ints_64(20, -123456)
Win1.ByteOrder = LE
Win1.Ints_64(24, -123456)
Win1.ByteOrder = BE_BS
Win1.Ints_64(28, -123456)
Win1.ByteOrder = LE_BS
Win1.Ints_64(32, -123456)
Win1.ByteOrder = BE
Win1.UInts_64(40, 123456)
Win1.ByteOrder = LE
Win1.UInts_64(44, 123456)
Win1.ByteOrder = BE_BS
Win1.UInts_64(48, 123456)
Win1.ByteOrder = LE_BS
Win1.UInts_64(52, 123456)
Win1.ByteOrder = BE
Win1.Floats (60, 123.456)
Win1.ByteOrder = LE
Win1.Floats (62, 123.456)
Win1.ByteOrder = BE_BS
Win1.Floats(64, 123.456)
Win1.ByteOrder = LE_BS
Win1.Floats(66, 123.456)
Win1.ByteOrder = BE
Win1.Doubles(80, 123.456)
Win1.ByteOrder = LE
Win1.Doubles(84, 123.456)
Win1.ByteOrder = BE_BS
Win1.Doubles(88, 123.456)
Win1.ByteOrder = LE_BS
Win1.Doubles(92, 123.456)
# Refresh
Win1.EnableRefresh = True
Win1.ResizeAllColumns ()
Win1.ResizeWindow()
print (Win1.GetName(1))
_ = input("Press ENTER to quit:")10.3. Verbindungsfunktionen / Eigenschaften
Die folgenden Eigenschaften und Funktionen tun das gleiche wie Sie im Verbindungsdialog (F3) einrichten.
10.3.1. Verbindung
Connection selects the desired connection. A serial port or one of the Ethernet connections can be selected.
EigenschaftConnection als IntegerValid-Werte
0 = Serieller Port
1 = Modbus TCP / IP
2 = Modbus UDP / IP
3 = Modbus RTU über TCP / IP
4 = Modbus RTU über UDP / IP
Example
Connection = 0
10.3.2. BaudRate
Gilt nur für Connection = 0
EigenschaftBaudRateals LongValid-Werte
300
600
1200
2400
4800
9600 (Default)
14400
19200
38400
56000
57600
115200
128000
153600
230400
256000
460800
921600
Example
BaudRate = 9600
10.3.3. DataBits
Gilt nur für Connection = 0
EigenschaftDataBitsals IntegerValid-Werte
7
8 (Standard)
Example
DataBits = 8
10.3.4. Parität
Gilt nur für Connection = 0
EigenschaftParityals IntegerValid-Werte
0 = None
1 = Odd
2 = Even (Standard)
Example
Parity = 2
10.3.5. Stoppbits
Gilt nur für Connection = 0
EigenschaftStopBitsals IntegerValid-Werte
1 (Default)
2
Example
StopBits = 1
10.3.6. SerialPort
Gilt nur für Connection = 0
EigenschaftSerialPortals IntegerValid-Werte
1...255
Defaultwert = 1
Example
SerialPort = 1
10.3.7. ServerPort
Gilt nur für Verbindung = 1...4
EigenschaftServerPortals LongValid Werte
0...65535
Standardwert = 502
Example
ServerPort = 502
10.3.8. IPVersion
Gilt nur für Connection = 1...4
EigenschaftIPVersionals IntegerValid-Werte
4 = IP Version 4 (Default)
6 = IP Version 6
Example
IPVersion = 4
10.3.9. AnyAddress
Nur für Verbindung = 1...4
EigenschaftAnyAddressals IntegerValid-Werte
0 = Jede Adresse = false
1 = Jede Adresse = true (Default)
Example
AnyAddress = 1
10.3.10. IgnoreUnitID
Gilt nur für Connection = 1...4
EigenschaftIgnoreUnitIDals IntegerValid-Werte
0 = Ignore Unit ID = false
1 = Ignore Unit ID = true (Default)
Example
IgnoreUnitID = 1
10.3.11. OpenConnection
Opens the connection selected with the Connection property.
FunktionOpenConnection() As Integer
Rückkehrwert:
Zero if success. Nonzero value if failed.
Example how to open a Modbus TCP/IP connection
Public app As Object
Dim res As Integer
' Create an object to Modbus Slave
Set app = CreateObject("Mbslave.Application")
app.Connection = 1 ' Select Modbus TCP/IP
app.IPVersion = 4
' app.IPAddress = "192.168.1.27" ' No need to setup if AnyAddress = 1. Modbus Slave listen on all.
app.ServerPort = 502
res = OpenConnection()Example how to setup a serial connection
Public app As Object
Dim status As Integer
' Create an object to Modbus Slave
Set app = CreateObject("Mbslave.Application")
app.Connection = 0 ' Mode is serial port
app.SerialPort = 1 ' Com port 1
app.BaudRate = 9600 ' 9600 baud
app.Parity = 0 ' None parity
app.Mode = 0 ' RTU mode
status = app.OpenConnection()10.3.12. CloseConnection
FunktionCloseConnection() As IntegerReturn Value
Zero if success. Nonzero value if failed.
10.3.13 ShowCommunicationTraffic
Funktion ShowCommunicationTraffic()
Shows the communication traffic window.
10.3.14. CloseCommunicationTraffic
FunktionCloseCommunicationTraffic()
Closes the communication traffic window if shown.
10.4 Automatisierungseinrichtung Funktionen
Die folgenden Funktionen tun das gleiche wie Sie im Dialogfeld Lesen / Schreiben Definition (F8) einrichten. Lesen-Funktionen sind mit einem Modbus Slave-Dokument verbunden. (The Fenster mit Daten)
.Example
Res = doc.SetupDiscreteInputs (1, 100, 5) Coils (0) = 1 ' Address 100 = 1 Coils (1) = 0 ' Note that the index used in Coils starts from 0 Coils (2) = 1 ' no matter the address used. Coils (3) = 0 Coils (4) = 1 ' Now the Master reads 1, 0, 1, 0, 1 when read 5 discrete inputs starting from address 100
10.4.1. SetupCoils
FunktionSetupCoils(SlaveID As Integer, Address As Long, Quantity As Integer) As IntegerReturn Value
True if success. False if not successParameters
SlaveIDDie Slave-Adresse 1 bis 255
Adresse:Die Datenadresse (Base 0)
Quantität:Die Anzahl der Daten. 1 bis 10000
10.4.2 SetupDiscreteInputs
Funktion SetupDiscreteInputs(SlaveID As Integer, Address As Long, Quantity As Integer) As IntegerReturn Value
True if success. False if not successParameters
SlaveID:Die Slave-Adresse 1 bis 255
Adresse:Die Datenadresse (Base 0)
Quantität:Die Anzahl der Daten. 1 bis 10000
10.4.3 SetupHoldingRegisters
FunktionSetupHoldingRegisters(SlaveID As Integer, Address As Long, Quantity As Integer) As IntegerReturn Value
True if success. False if not successParameters
SlaveID:Die Slave-Adresse 1 bis 255
Adresse:Die Datenadresse (Base 0)
Quantität:Die Anzahl der Daten. 1 bis 10000
10.4.4 SetupInputRegister
FunktionSetupInputRegisters(SlaveID As Integer, Address As Long, Quantity As Integer) As IntegerReturn Value
True if success. False if not successParameters
SlaveID:Die Slave-Adresse 1 bis 255
Adresse:Die Datenadresse (Base 0)
Quantität:Die Anzahl der Daten. 1 bis 10000
10.4.5 ShowWindow
FunktionShowWindow()
As default Modbus document windows are hidden. The ShowWindow function makes Modbus Poll visible and shows the document with data content.
10.4.6 getName
Funktion GetName(Index As Integer) As StringDescription
Gets the name of a value.
Der Index 0 entspricht der ersten Modbus-Adresse.
10.4.7. SetName
FunktionSetName(Index As Integer, Name As String)Description
Sets the name of a value.
Der Index 0 entspricht der ersten Modbus-Adresse.
10.4.8. Autoincrement
EigenschaftAutoIncrement(Index As Integer) As BooleanDescription
Sets automatic increment of a value.
Index 0 entspricht der ersten Modbus Adresse.
Syntax
AutoIncrement(Index) [= neu]
10.4.9. FormatAlle
FunktionFormatAll(Format As Integer)
Format all value cells with the selected format.Parameters
Format: Das Format der Wertzelle.
10.4.10. GetFormat
FunktionGetFormat(Index As Integer) As IntegerDescription
Gets the display format of the Modbus value.
| ID | Format |
|---|---|
| 0 | Signed |
| 1 | Unsigned |
| 2 | Hex |
| 3 | Binary |
| 4 | Float-Little - Endian-Byte - Austausch |
| 5 | Float Big-endian |
| 6 | Double little-endian byte swap |
| 7 | Double big-endian |
| 8 | 32 - bit Signed little-endian byte swap |
| 9 | 32 - bit Signed big-endian |
| 10 | Float little-endian |
| 11 | Float big-endian byte swap |
| 12 | Doppel-Little - Endian |
| 13 | Doppel Big-endian Byte Swap |
| 14 | 32 - Bit Signed Little-Endian |
| 15 | 32 - Bit Signed Big-Endian Byte Swap |
| 17 | 32 - Bit Unsigned Big-Endian |
| 18 | 32 - Bit Unsigned Little-Endian Byte Swap |
| 19 | 32 - Bit Unsigned Little-Endian Byte Swap |
| 20 | 32 - Bit Unsigned Little-Endian |
| 21 | Bit Signed Big-endian |
| 22 | 64-bit Signed little-endian byte swap (Little-endian - Bytes-Swap) |
| 23 | 64-Bit Signed Big-endian Byte Swap |
| 24 | 64-bit Signed Little-endian |
| 25 | 64-Unsigniertes Big-endian |
| 26 | 64-bit Unsigniert Little-endian Byte Swap |
| 27 | 64-bit Unsigniert Big-endian Byte Swap |
| 28 | 64-bit Unsignierte Little-endian |
| This setting is only for display. You still need to use byteOrder to get the correct endianness when using Get/Set value functions. |
10.4.11. SetFormat
Funktion SetFormat(Index As Integer, Format As Integer)Description
Sets the display format of the Modbus values. See Format values above.
10.4.12. ResizeWindow
Funktion ResizeWindow()
Resize an opened window to fit the grid.
10.4.13. Zeilen
FunktionRows(NumberRows)
Specify the number of rows in the grid.Parameters
NumberRows:Anzahl der Zeilen im Raster.
| ID | Description |
|---|---|
| 0 | 10 Zeilen (Default) |
| 1 | 20 Reihen |
| 2 | 50 Zeilen |
| 3 | Fit to quantity |
10,5. Automatisierungsdaten-Eigenschaften
Die folgenden Eigenschaften werden verwendet, um Werte in den internen Schreib - / Lese-Arrays in Modbus Slave zu setzen oder zu erhalten. Der verwendete Index ist keine Modbus-Adresse Der Index zählt immer von 0 ab, unabhängig davon, welche Adresse verwendet wird. Die Dateneigenschaften sind mit einem Modbus Slave-Dokument zugeordnet. (The Fenster mit Daten)
Beispiel 1:
' doc is assumed created first. See Excel example. doc.SRegisters(0) = 1 doc.SRegisters(1) = 10 doc.SRegisters(2) = 1234
Beispiel 2 mit Gleitkomma-Werten:
doc.Floats(0) = 1.3 doc.Floats(2) = 10.5 doc.Floats(4) = 1234.12
10.5.1. Spulen
EigenschaftCoils(Index As Integer) As IntegerDescription
Sets a coil in the write array structure or return a coil from the read array.Syntax
Coils(Index) [= neu]
10.5.2. SRRegisters
EigenschaftSRegisters(Index As Integer) As IntegerDescription
Sets a register in the write array structure or return a register from the read array.Syntax
SRegisters(Index) [= neu]
10.5.3. URegisters
EigenschaftURegisters(Index As Integer) As LongDescription
Sets a register in the write array structure or return a register from the read array.Syntax
URegisters(Index) [= neu]
10.5.4. Ints_32
EigenschaftInts_32(Index As Integer) As DoubleDescription
Legen Sie eine 32 - Bit-Gänzzahl in der Schreib-Array - Struktur fest oder geben Sie eine Ganzzahl aus dem Lese-Array zurück.Stax
Ints_32(Index) [= neu]
10.5.5. UInts_32
EigentumUInts_32(Index As Integer) As DoubleDescription
Setzt eine 32 - Bit unsignierte Ganzzahl in der Schreib-Array - Struktur oder gibt eine unsignierte Ganzzahl aus dem Lese-Array zurück.Stax
UInts_32(Index) [= neu]
10.5.6. Ints_64
EigenschaftInts_64(Index As Integer) As DoubleDescription
Legen Sie eine 64 - Bit-Gewinnzahl in der Schreibarray-Struktur fest oder geben Sie eine Ganzzahl aus dem Lesearray zurück.Stax
Ints_64(Index) [= neu]
10.5.7 UInts_64
EigenschaftUInts_64(Index As Integer) As DoubleDescription
Legen Sie eine 64 - Bit unsignierte Ganzzahl in der Schreibarray-Struktur fest oder geben Sie eine unsignierte Ganzzahl aus dem Lesearray zurück.Stax
UInts_64(Index) [= neu]
10.5.8. Float
EigenschaftFloats(Index As Integer) As SingleDescription
Sets a float in the write array structure or returns a float from the read array.Syntax
Floats(Index) [= neu]
10.5.9. Doppelte
EigenschaftDoubles(Index As Integer) As DoubleDescription
Sets a double in the write array structure or return a double from the read array.Syntax
Doubles(Index) [= neu]
10.5.10. ByteOrder
EigenschaftByteOrderals IntegerDescription
Legen Sie die Byteordnung fest, die von den Eigenschaften Ints_32, UInts_32, Ints_64, UInts_64, Floats und Doubles verwendet wird.
| ID | Endianness |
|---|---|
| 0 | Big-endian (Default) |
| 1 | Little-endian byte swap |
| 2 | Big-endian byte swap |
| 3 | Little-endian |
Beispiel für Ints_32:
Byte-Reihenfolge: Big-endian
Die Dezimalzahl 123456789 oder in Hexadezimal 07 5B CD 15
Reihenfolge, wie sie in einer Modbus-Nachricht über den Draht kommen: 07 5B CD 15Stax
ByteOrder [= neuwertig]
Antwort veröffentlichen