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.
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" |
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
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.
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.
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
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
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.
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
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
Hallo Frank, da werde ich mich auch durchwühlen, mal sehen ob das klappt. Danke.
:
Bearbeitet durch User
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.