Woher Modbus Kommandozeilen Software ?

OP #8048708
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.

#8048722
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"
OP #8048731
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.

OP #8048737
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
#8048740
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.

OP #8048741
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren