ubuntuusers.de

Zahlen auslesen und in Variable speichern

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

fireworker72

Anmeldungsdatum:
11. März 2017

Beiträge: 64

Hallo Freunde

folgendes Problem:

Ich lese mit

1
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

Avatar von 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

Avatar von 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

1
2
3
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

Avatar von 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.

Antworten |