Forum: PC Hard- und Software Woher Modbus Kommandozeilen Software ?


von Veit D. (devil-elec)


Lesenswert?

Hallo,

woher bekommt man denn eine Kommandozeilen Software für die Windows 
Konsole? Ich finde nur limitierte Demoversionen oder Software mit 
grafischer Oberfläche. Ich würde jedoch ein Kommandozeilentool 
bevorzugen. Gibt es dafür keine freie Software? Ich möchte vom PC aus 
ein Gerät ansprechen (Register lesen und schreiben) was ein Modbus 
Protokoll verlangt.
von Εrnst B. (ernst)


Lesenswert?

Ein paar Zeilen Power-Shell?

Gehe davon aus, du hast so einen USB->RS485-Adapter, der sich als 
COM-Port meldet.
1
$port = New-Object System.IO.Ports.SerialPort("COM3", 9600); # ggfs. Parity /Stopbit-Parameter
2
$port.ReadTimeout = 1000
3
$port.Open()
4
5
# Gerät 1, function 03 (read), start-Register 0, Anzahl 1, Prüfsumme:
6
[byte[]]$request = 0x01, 0x03, 0x00, 0x00, 0x00, 0x01, 0x84, 0x0A
7
$port.Write($request, 0, $request.Length)
8
9
[byte[]]$buffer = New-Object byte[] 7
10
$bytesRead = $port.Read($buffer, 0, $buffer.Length)
11
12
$value = ($buffer[3] -shl 8) + $buffer[4]
13
14
WriteHost "Register-Inhalt $value"
von Dieter S. (ds1)


Lesenswert?

Suchmaschine kaputt?

Ein paar der Treffer:

"Access Modbus devices from the command line", Python

https://github.com/favalex/modbus-cli

"Modpoll Modbus Master Simulator", für Windows und Linux

https://www.modbusdriver.com/modpoll.html
: Bearbeitet durch User
von Veit D. (devil-elec)


Lesenswert?

Hallo,

@ Ernst:
Ich wusste nicht das es direkt mit Powershell möglich ist. Klingt gut.
Muss ich schauen ob Powershell auf dem Rechner wirklich zur Verfügung 
steht. Ist ein Arbeitsrechner. Das Gerät hat einen USB Anschluss, ich 
kann mich also direkt mit dem Rechner verbinden. Das mit Powershell 
sollte hoffentlich möglich sein. Ich denke schon einmal weiter. Den 
Powershell Code kann doch bestimmt wie mit Python mit Parametern 
anreichern, um es dann normal im Windows Terminal aufrufen zu können? 
Wenn das grundlegend klappt, werde ich mich dazu schlau machen. Danke 
für den Hinweis.

@ Dieter.
Simulator hilft mir nun wirklich nicht. Hatte ich auch schon gesehen.
Python werde ich nicht installieren dürfen. Müsste ich die IT fragen.
Aber guter Gedanke mit dem Python.
von Harald K. (kirnbichler)


Lesenswert?

Veit D. schrieb:
> Muss ich schauen ob Powershell auf dem Rechner wirklich zur Verfügung
> steht.

Wenn es das neumodisch-affig so genannte "Terminal" gibt (früher hieß 
das Konsolenfenster oder Eingabeaufforderung), dann gibt es auch 
Powershell.
von Veit D. (devil-elec)


Lesenswert?

Hallo,

okay, den Zusammenhang kannte ich nicht. Für mich war Powershell eine 
extra Software die man nachinstallieren muss? Irgendwie gibt es doch 2 
unterschiedliche Varianten?

Eine Frage noch vorab. Die Prüfsumme muss man immer mitgeben? Im Fall 
von Powershell muss man das dann autom. berechnen lassen, sonst wird man 
ja blöde. ;-)
: Bearbeitet durch User
von Dieter S. (ds1)


Lesenswert?

Veit D. schrieb:
>
> Simulator hilft mir nun wirklich nicht. Hatte ich auch schon gesehen.

Und auch genauer angeschaut? Mit "Modpoll" kann man z.B. Register lesen 
und schreiben, ich habe Dich so verstanden dass Du das machen möchtest.
: Bearbeitet durch User
von Εrnst B. (ernst)


Lesenswert?

Veit D. schrieb:
> Eine Frage noch vorab. Die Prüfsumme muss man immer mitgeben? Im Fall
> von Powershell muss man das dann autom. berechnen lassen, sonst wird man
> ja blöde. ;-)

Powershell kann auch rechnen... in etwa:
1
# Verwendung in etwa: "MeinModbusTool.ps1 -RegisterAdress 42 -ComPort COM2 -SlaveID 23"
2
 
3
# Defaults:
4
param(
5
    [int]$RegisterAddress = 0,
6
    [string]$ComPort = "COM3",
7
    [byte]$SlaveID = 1
8
)
9
# CRC-16, "-bxor, -band" ist bitwise xor/and, -shr ist shift right
10
function Get-ModbusCrc {
11
    param([byte[]]$Data)
12
    [int]$crc = 0xFFFF
13
    $polynom = 0xA001
14
15
    foreach ($byte in $Data) {
16
        $crc = $crc -bxor $byte
17
        for ($i = 0; $i -lt 8; $i++) {
18
            if ($crc -band 1) {
19
                $crc = ($crc -shr 1) -bxor $polynom
20
            } else {
21
                $crc = $crc -shr 1
22
            }
23
        }
24
    }
25
    return [byte]($crc -band 0xFF), [byte]($crc -shr 8)
26
}
27
$addrHi = [byte]($RegisterAddress -shr 8)
28
$addrLo = [byte]($RegisterAddress -band 0xFF)
29
[byte[]]$message = $SlaveID, 0x03, $addrHi, $addrLo, 0x00, 0x01
30
$crcBytes = Get-ModbusCrc -Data $message
31
[byte[]]$request = $message + $crcBytes

Um den Teil der dann tatsächlich den COM-Port benutzt, ein try-catch 
aussenherum, und eventuell im "finally":
 if ($port -and $port.IsOpen) { $port.Close() }
(Sicherheitshalber, bin mir nicht sicher, ob der Port automatisch 
geschlossen wird, wenn das script endet)

und für's schreiben/Register-Setzen eben den Function-Code austauschen, 
CRC ist dieselbe.

Komplett ausformulieren darfst du's selber, hab keine Hardware zum 
Testen griffbereit.
von Veit D. (devil-elec)


Lesenswert?

Hallo Dieter,

okay, ich hatte nicht richtig gelesen. Ich werde es ausprobieren. Mich 
hat immer gewundert das alles andere Demoversionen sind, warum sollte 
dann ausgerechnet das Tool frei sein, so mein Gedanke. Aber dort steht 
ja "based Modbus master simulator". Ich werde es ausprobieren. Danke.

@ Ernst:
Vielen Dank.
Das sollte mir alles weiterhelfen.
: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Veit D. schrieb:
> Hallo,
>
> woher bekommt man denn eine Kommandozeilen Software für die Windows
> Konsole?

https://libmodbus.org/
plus
https://github.com/gitaeuber/mbrtu

fchk
von Veit D. (devil-elec)


Lesenswert?

Hallo Frank,

da werde ich mich auch durchwühlen, mal sehen ob das klappt. Danke.
: Bearbeitet durch User
von Hans W. (hanswieland)


Lesenswert?

Harald K. schrieb:
> Wenn es das neumodisch-affig so genannte "Terminal" gibt

Der Begriff ist nicht neumodisch, sondern älter als Windows.

> früher hieß das Konsolenfenster oder Eingabeaufforderung

Nur bei Microsoft. Affig ist das Abweichen von bewährten Standards ohne 
Notwendigkeit.
: Bearbeitet durch User
von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Hans W. schrieb:

> Affig ist das Abweichen von bewährten Standards ohne
> Notwendigkeit.

Nein.

Wirklich affig ist, Jahrzehnte nach dem Zeitalter der Mainframes auf 
Mainframe-Standard-Nomenklatur zu beharren und dabei auch noch 
kulturelle (=sprachliche) Unterschiede komplett in den Skat zu drücken.
von Harald K. (kirnbichler)


Lesenswert?

Hans W. schrieb:
> Der Begriff ist nicht neumodisch, sondern älter als Windows.

Sicher ist er das, aber er meint was anderes als ein 
Kommandozeilenfenster. Ein Terminal ist ein Stück Hardware, wie ein 
VT100 oder ein TVI950.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.