fireworker72
Anmeldungsdatum: 11. März 2017
Beiträge: 64
|
Hallo Freunde folgendes Problem: Ich lese mit
| mbpoll -1 -a 11 -t 3:float -r 8204 -c 1 10.1.5.13 -p 502 -o 10 -m TCP -0 -B
|
Einen Wert vom Modbus aus Die Ausgabe ist dann folgende:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | mbpoll 1.5-2 - ModBus(R) Master Simulator
Copyright (c) 2015-2023 Pascal JEAN, https://github.com/epsilonrt/mbpoll
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions; type 'mbpoll -w' for details.
Protocol configuration: ModBus TCP
Slave configuration...: address = [11]
start reference = 8260, count = 1
Communication.........: 10.1.5.13, port 502, t/o 10.00 s, poll rate 1000 ms
Data type.............: 32-bit float (big endian), input register table
-- Polling slave 11...
[8260]: 49.97
|
Wie kann Ich in einem Befehl auslesen und und nur die letzte Zahl in eine Variable speichern also 49,97 ? Die Zahl ist unterschiedlich kann einmal 120000 sein oder 230,14 also vor und nach dem Komma variabel Danke für eure Hilfe
|
Doc_Symbiosis
Anmeldungsdatum: 11. Oktober 2006
Beiträge: 4453
Wohnort: Göttingen
|
Hi!
das geht z.B. so: Number=$(mbpoll -1 -a 11 -t 3:float -r 8204 -c 1 10.1.5.13 -p 502 -o 10 -m TCP -0 -B | awk 'END {print $2}');
echo "Der Wert ist: $Number";
|
fireworker72
(Themenstarter)
Anmeldungsdatum: 11. März 2017
Beiträge: 64
|
Da bekomme Ich leider keinen Wert bei der Ausgabe Die Variable bleibt leer ☹
|
Doc_Symbiosis
Anmeldungsdatum: 11. Oktober 2006
Beiträge: 4453
Wohnort: Göttingen
|
Kommt denn hier eine Ausgabe?
mbpoll -1 -a 11 -t 3:float -r 8204 -c 1 10.1.5.13 -p 502 -o 10 -m TCP -0 -B | awk 'END {print $2}' Was Du gepostet hattest, war das wirklich die vollständige Ausgabe? Oder kommen da noch Leerzeilen?
|
fireworker72
(Themenstarter)
Anmeldungsdatum: 11. März 2017
Beiträge: 64
|
Uhhh Sorry, ja schaut so aus als ob da noch eine Leerzeile ist 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | mbpoll 1.5-2 - ModBus(R) Master Simulator
Copyright (c) 2015-2023 Pascal JEAN, https://github.com/epsilonrt/mbpoll
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions; type 'mbpoll -w' for details.
Protocol configuration: ModBus TCP
Slave configuration...: address = [11]
start reference = 8210, count = 1
Communication.........: 10.1.5.13, port 502, t/o 10.00 s, poll rate 1000 ms
Data type.............: 32-bit float (big endian), input register table
-- Polling slave 11...
[8210]: -3275.5
|
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11266
Wohnort: München
|
| variable=$(mbpoll -1 -a 11 -t 3:float -r 8204 -c 1 10.1.5.13 -p 502 -o 10 -m TCP -0 -B | tac | grep -m1 -Po -- '-?\d+\.\d+$')
# oder
variable=$(mbpoll -1 -a 11 -t 3:float -r 8204 -c 1 10.1.5.13 -p 502 -o 10 -m TCP -0 -B | tac | awk 'NR==2 { print $2; exit}')
|
|
fireworker72
(Themenstarter)
Anmeldungsdatum: 11. März 2017
Beiträge: 64
|
Danke das erste funktioniert beim zweite wird immer nur Polling angezeigt LG
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11266
Wohnort: München
|
Dann geht irgendwo die Leerzeile (eventuell beim Umdrehen der Zeilen mit tac) verloren - dann müsste es NR==1 statt NR==2 sein.
|
fireworker72
(Themenstarter)
Anmeldungsdatum: 11. März 2017
Beiträge: 64
|
Danke, Ja so funktioniert das dann auch LG Peter
|
Doc_Symbiosis
Anmeldungsdatum: 11. Oktober 2006
Beiträge: 4453
Wohnort: Göttingen
|
Falls das jetzt funktioniert wie gewünscht, setze das Thema bitte noch auf gelöst.
|