# Raspberry + LOGO8 = zeitgesteuert Rollos steuern



## Tajlor (17 Mai 2019)

Hallo zusammen

ich habe hier gelesen das einige wie z.B. @Transistorfips es geschafft haben eine *Modbus*-Verbindung *TCP *zwischen einem *Raspberry *und einer *LOGO8 *herzustellen.

Ich spreche NICHT über codesys!
Mein Interesse bezieht sich ausschließlich auf den pi -> libmodbus, mbpoll  oder andere Consolengestützte Programme.
Cron, so meine Vorstellung, wird die zeitliche Komponente sein, um die entsprechenden befehle zu bestimmten Zeiten absetzt.

Mit dem Raspberry pi soll also _zusätzlich _eine zeitliche Komponente in die Steuerung kommen.

Zusätzlich aus mehreren gründen.
Ich spreche über eine Rollo-Steuerung.

LOG8 Schaltpunkte sind bereits definiert.MO bis FR 8 Uhr hoch fahren​MO bis FR 19 Uhr runter fahren​

Mit einer APP kann ich bereits die Rollos fahren allerdings nicht zu festgelegten Zeiten.
Ich muss also in die App rein um die Rollos zu fahren.
Aus der APP heraus kann ich Verzögerungen für das Fahren der Rollos einstellen. 
Dies ist aber nicht was ich möchte.

Ich würde gerne beispielsweise um 12:00 Uhr in einem Zimmer Rollos runter fahren und um 16:30 Uhr wieder hoch.
Die LOGO8 Programierung 8_ Uhr hoch fahren und 19 Uhr runter fahren_ soll davon unberührt bleiben.

Wie lauten die Modbus TCP befehle, dich ich absetzen muss?
IP Adresse der LOGO habe ich
Port 502 kenne ich auch
Pi = Client
LOGO8 = Server

vielen Dank


----------



## Transistorfips (17 Mai 2019)

Hallo Thread-Eröffner,
wie weit kennste dich denn mit libmodbus aus?
Haste schon mal unter Linux ein Programm in C compiliert und installiert (./configure, make, make install)? Auch auf dem Raspi? Hast schon mal (wenigstens ein bisschen C- Code) selbst geschrieben? Das Ganze ist nix für Anfänger. Selbst wenn ich dir meinen Code schicke, dann wird das nicht plug&play laufen.


Haste mit Mb-Poll bzw. alternativ qmodMaster schon eine Verbindung zur Logo8 aufbauen und ein paar Daten schieben können?

Thread-Eröffner schrieb:
>Wie lauten die Modbus TCP befehle, dich ich absetzen muss?
Im Grunde genommen gibt's keine Befehle im klassischen Sinn, du setzt auf der einen Seite in einem Register lediglich Bits die auf der anderen Seite abgefragt werden um entsprechend irgendetwas auszuführen, d.h. die Logo lauert 24h auf die Modbus-Register und wertet z.B. alle paar Sekunden (Netzwerklast...!) die Bits aus. Wenn ich das richtig sehe, dann benutzt du den Raspi mittels cron als Schaltuhr. Man könnte dann mit nem kleinen Shell-Script libmodbus aufrufen und gesetzte Bits übertragen, oder man macht das eleganter und flechtet Zeitfunktionen in den Code von libmodbus mit ein* (**#include <sys/time.h> ...).*


----------



## Transistorfips (17 Mai 2019)

Sorry, UTF-8 Umlaute hats durch nen Forums-Timeout zerschossen...


----------



## Tajlor (18 Mai 2019)

Hallo

Vielen Dank für die schnelle Antwort.

Zu deinen Fragen:

- JA ich will mittels Raspi eine zeitliche Komponente in die LOGO 8 Steuerung bringen! Im Sommer zum Beispiel auf der Südseite alle Rollos um 13:00 Uhr runter fahren
Im Kinderzimmer die Rollos um 12 Uhr runter fahren und um 16:30 Uhr wieder hoch
-> und dies alles unabhängig von der LOGO Steuerung welche die Rollos um 19 Uhr runter fährt und um 8 Uhr wieder hoch​
- Ja ich kann ein ein Programm unter linux compilieren und mich auf der console bewegen
- Ja ich bin gewillt auch C code zu implementieren wenn es bei Modbus keine "einfachen" befehle abzusetzen sind
=> dafür benötige ich aber deine Hilfe!

Mit Sicherheit werden auch andere davon profitieren, ich bin nicht der einzige mit einer LOGO8 Steuerung.
Und schließlich und endlich sind solche Foren doch dazu da...

Ich habe über mbpoll folgenden Befehl abgesetzt.
mbpoll -m tcp -t4:float -r 100 -c 5 -1 192.168.100.222

LOGO8 Antwort:
[FONT=&quot]Protocol configuration: Modbus TCP[/FONT]
[FONT=&quot]Slave configuration...: address = [1][/FONT]
[FONT=&quot]                        start reference = 100, count = 5[/FONT]
[FONT=&quot]Communication.........: 192.168.100.222, port 502, t/o 1.00 s, poll rate 1000 ms[/FONT]
[FONT=&quot]Data type.............: 32-bit float (little endian), output (holding) register table[/FONT]
[FONT=&quot]
[/FONT]
[FONT=&quot]-- Polling slave 1...[/FONT]
[FONT=&quot][100]: 	0[/FONT]
[FONT=&quot][102]: 	6.06114e-39[/FONT]
[FONT=&quot][104]: 	0[/FONT]
[FONT=&quot][106]: 	0[/FONT]
[FONT=&quot][108]: 	0

Was ich damit sagen will ist, der Raspi befindet sich im gleichen Netzwerk wie die LOGO8, und kann sich mit dieser auch scheinbar verbinden.[/FONT]


Ich habe 3 LOGOS mit 3 unterschiedlichen IP Adressen im /24 Netz
Ich habe eine funktionierende APP mit der ich die Rollos steuern kann.
[FONT=&quot]
Ich habe auch den HEX wert für den ersten Rollo mit dem ich diesen theoretisch steuern könnte (runter/rauf)[/FONT]

[FONT=&quot]#Hex-Werte senden:
[FONT=&quot]00 00 00 00 00 06 ff 06 00 01 00 01[/FONT]

01 = 10te Stelle = Adresse des zu steuernden Rollos

01 = letzte stelle = hoch fahren   // 02 runter fahren

Wie ich diese ganzen Infos allerdings über Modbus an die LOGO übertragen kann um den Rollo zu fahren, weiss ich _noch _nicht.





[/FONT]


----------



## GUNSAMS (18 Mai 2019)

Warum nutzt du denn den integrierten Webserver der LOGO! nicht? Dann brauch t du das Gehampel mit dem PI und Modbus nicht.


----------



## Tajlor (18 Mai 2019)

Was meinst du genau?
Was bringt mir der Webserver, wenn ich "zeitlich" Rollos fahren will?
Ich will mich nicht jedes mal verbinden müssen um Rollos zu fahren.
So könnte ich es ja über die APP machen.
Im übrigen ist der Webserver auf den LOGOS abgeschaltet und ich habe die SW nicht um ihn freizuschalten.


----------



## Transistorfips (18 Mai 2019)

Hallo Tajlor,
grundsätzlich Eines: Wenn die Logo8 so hochentwickelt ist, daß sie sogar Modbus TCP kann, dann sollte sie auch das viel einfachere Vergleichen von Uhrzeiten können, um damit zum Zeitpunkt t1 das Bit b1 zu setzen - zumal das Problem des Anstoßens eines zeitbezogenen Vorganges sicherlich schon viele andere Leute vor dir hatten und die Logo für dieses Problem (Rollo-Steuerung, Teichfütterung, zeitabhängige Beleuchtung oder Gartenbewässerung, Home-Automation allg.) ja eigentlich genau dazu erdacht wurde. Wenn ich du wäre, würde ich mich tief in die Funktionalitäten der Logo einlesen, ein paar Youtube-Videos gucken und dann mit dem Programmieren der Logo (was ja eigentlich eher eine Art Verdrahten ist) loslegen. 
Kernaussage: Die Steuerung ist nur so ausgeklügelt und raffiniert wie DU es in sie hinein verdrahtest. Ich vermute mal, daß du deine Logo einfach nicht genug kennst, sie deshalb etwas unterschätzt, denn mit dem Projekt Raspi + cron + Modbus TCP schießt du eigentlich mit dicken Kanonen auf Spatzen (wenn man den Spatz nicht getroffen hat, dann war das Kaliber zu klein...). Grundsätzlich kann man das aber schon machen, man lernt ja auch etwas dabei.


Jetzt zum Eigentlichen:
Langsam verstehe ich, was du mit "Befehl" meinst. Ich vermute, du hast im DOS-Fenster Modbus-Poll mit Parametern gefüttert um eine Verbindung mit der Logo aufzubauen und vielleicht auch ein oder mehrere Register verschickt. Problem Nummer eins: Ich habe das in der Form noch nie so ausprobiert. Problem Nr. zwei: Modbus-Poll ist Löhnware und meine 30-Tage Trial-Version ist längst unbrauchbar.

Probiere mal QModMaster, das ist Freeware und funktioniert an dieser Stelle genauso gut wie Modbus Poll.


Du schreibst:
#Hex-Werte senden:
00 00 00 00 00 06 ff 06 00 01 00 01
Das wären zwölf Byte bzw sechs Modbus-Register. Du müßtest also z.B. sechs Register wegschicken und auf der Zielseite mit der Logo entsprechend diese auswerten. Oder nur ein Register wegschicken und mit Wenn-Dann-Entscheidungen einen Relais-Ausgang setzen. 


Ich würde folgende Schritte vorschlagen:
1) Baue eine Verbindung mit deinem PC + QModMaster an die entsprechend richtig konfigurierte Logo auf, damit sich beide Geräte "Hallo" sagen. Mit qModMaster kenne ich mich aus, da kann ich dir helfen.

2) Ein oder mehrere Modbus-Register senden. Die Werte, also die Inhalte der Modbus-Register auf dem LCD der Logo zu Testzwecken anzeigen lassen. Da kann ich dir im Moment nur rudimentär helfen, da ich mich mit der Logo8 nicht auskenne. Ich bin aber bereit mich einzulesen, da ich mich schon immer mal mit ner Logo beschäftigen wollte.  

3) Wenn das funktioniert, dann zum großen Rundumschlag ausholen: Libmodbus auf dem Raspi fehlerfrei installieren und dann die Software anpassen. Hier sind C-Kenntnisse notwendig, ich kann dir dabei aber unter die Arme greifen.

4) Mittels Cron ein Shell-Script aufrufen das Kommandozeilen-Parameter an libmodbus übergibt und zur Logo schickt.


----------



## Transistorfips (18 Mai 2019)

Noch ein Nachtrag: Auf der Seite https://w3.siemens.com/mcms/program...-logo/anwendungsbeispiele/seiten/default.aspx habe ich ein Beispielprogramm zur zeitlichen Steuerung von Rolläden gefunden (control_of_roll-down_shutters), das dir erstmal weiterhelfen sollte...


----------



## Tajlor (18 Mai 2019)

Hallo Transistorfips

Dein Ansatz ist natürlich richtig.
Warum Umwege gehen, wenn man direkt an der LOGO programmieren kann.

Dafür gibt es natürlich Gründe
1. Die Logos laufen mit einer Programmierung, die funktioniert.
2. Die Logos sind nicht von mir Programmiert worden 
3. Die Logos sind so eingestellt, dass man sie mit einer app ebenfalls bedienen kann.
4. Alle Eingänge/Ausgänge der 3 Logos sind belegt (Rollos), es ist also kein "Spielraum"/Speicher mehr übrig 

Ich will also den Weg mit dem Raspi gehen und dabei NICHTS an den LOGOs verändern, da sie stabil laufen.
Ich will flexibel sein und nicht jedes mal die LOGOS neu programmieren müssen wenn ich Zeiten ändere.
Mein Gedanke war es, wenn ich die LOGOs mit einer APP (iPhone) im Netzwerk steuern kann, warum dann nicht von einem Raspi aus?
_Die Programmierung der Rollos funktioniert einwandfrei, das muss ich nicht mehr sicherstellen_

Merkwürdigerweise finde ich wenig bis gar nichts im Netz basieren auf diesem Ansatz. 

Ich will/würde mich gerne lediglich auf der console (Linux) bewegen. => kein Windows! 
Keine Fenster keine Maus
-> Linux console, scripting, bash 


Libmodbus5 ist bereits auf dem Raspi installiert, genau so wie mbpoll. 
mbpoll muss ich nicht nutzen! Ich wollte dir damit nur sagen ich habe Verbindung zu den LOGOs

lass und das ganze mit *libmodbus* angehen & lösen

wenn ich das richtig lese basiert QModMaster auch auf libmodubs
     "QModMAster is based on libmodbus"
Außerdem ist das ein Windows Programm ;(

Die Frage ist also wie schicke ich auf der Console Modbus-Register an die LOGOs?
Dass es funktioniert zeigt die APP allerdings weiss ich nicht wie es dort implementiert wurde.


----------



## technik-fan-ol (19 Mai 2019)

Schau mal hier 

http://www.frickelzeugs.de/logocontrol/


----------



## Transistorfips (19 Mai 2019)

Jetzt komm' ich langsam mit... "mbpoll" ist nicht "Modbus Poll", auch wenn man das denken könnte.

Wenn ich das richtig sehe, willst du die Daten mit der Logo vom Raspi abholen, d.h. du mußt alle paar Sekunden den Raspi abfragen (pollen). D.h. der Raspi ist als Server und die Logo ist als Client configuriert. Bei mir ist das ein bisschen anders, meine beiden SPSen laufen als Server und der Raspi zieht die Daten runter. Grundsätzlich ist das aber egal.

Zu mbpoll:
Meine Server-SPS hat die IP 192.168.1.20.


Ich habe das Ganze der Einfachheit halber auf meiner Windows Büchse im DOS-Fenster getestet. Die Anwendung heißt modpoll, die Kommandozeilen-Parameter sind aber identisch.
In meiner SPS habe ich ganz zu Beginn zum Testen in die Holding-Register (die ab 40001 zu zählen anfangen) nacheinander die Werte 1, 2, 4, 8, 16 usw. eingetragen.

Wenn ich modpoll folgendermaßen aufrufe: 
C:\Test\Modbus>modpoll -c 6 -t4 -m tcp 192.168.1.20
bekomme ich:
modpoll 3.6 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2018 proconX Pty Ltd
Visit https://www.modbusdriver.com for Modbus libraries and tools.

Protocol configuration: MODBUS/TCP
Slave configuration...: address = 1, start reference = 1, count = 6
Communication.........: 192.168.1.20, port 502, t/o 1.00 s, poll rate 1000 ms
Data type.............: 16-bit register, output (holding) register table

-- Polling slave... (Ctrl-C to stop)
[1]: 1
[2]: 2
[3]: 4
[4]: 8
[5]: 16
[6]: 32

Jetzt die Gegenprobe - der Part, der für dich besonders interessant sein dürfte: ich schreibe die dezimalen Werte 10, 20, 30 und 40 in die SPS:

C:\Test\Modbus>modpoll -t4 -m tcp 192.168.1.20 10 20 30 40
modpoll 3.6 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2018 proconX Pty Ltd
Visit https://www.modbusdriver.com for Modbus libraries and tools.

Protocol configuration: MODBUS/TCP
Slave configuration...: address = 1, start reference = 1, count = 1
Communication.........: 192.168.1.20, port 502, t/o 1.00 s, poll rate 1000 ms
Data type.............: 16-bit register, output (holding) register table

Written 4 references.

Tatsächlich erscheinen sie auch in den ersten vier Holding-Registern der SPS.


Der nächste Schritt für dich wäre, daß du herausfinden mußt, wie du z.B. deinen Hex-Wert 00 00 00 00 00 06 ff 06 00 01 00 01 der in den Modbus-Registern steht, in der Logo dort hinkopierst wo er hingehört, damit deine ollen Rollos final auf und zu gehen...


----------



## Tajlor (19 Mai 2019)

Nein, die LOGO soll weiterhin als Server fungieren. => Raspi ist der Client.
So wie die App der client ist und die LOGOs = Server

mbpoll ist glaube ich ein falsches Beispiel. <- es sollte nur veranschaulichen ich habe Verbindung zu den LOGOs

ich will nichts von den LOGOs holen. Ich will mit der Raspi auf die LOGOs zugreifen und Rollos fahren.
Das, was du mit deinem letzten Satz beschreibst, will ich tun.

-> wie schicke ich via *libmodbus vom Raspi ein Hex wert an die LOGOs um Rollos zu fahren.*


----------



## Transistorfips (19 Mai 2019)

libmodbus + cron so zu konfigurieren damit das Ganze schön schnurrt wäre der nächste Schritt. Im grunde genommen ist aber erstmal wichtig, daß du die Modbus-Register an die eigentliche Logo-Verdrahtung anbinden kannst. Wie das geht habe ich dir prinzipiell gezeigt. Libmodbus auf dem Raspi ist dann nur noch ein Anhängsel.

Was die ganze Zeit schon in der Luft liegt: Kann es sein, daß du Bedenken hast, daß die Logos nicht mehr richtig funktionieren wenn du entsprechend in den Programmiercode eingreifst? Hast du mit den Dingern Programmiererfahrung oder hast du die bereits fertig programmiert gekauft? Kannste die Daten nicht einfach auf eine SD-Karte sichern?


----------



## Tajlor (20 Mai 2019)

Genau das ist mein Anliegen:
*libmodbus + cron* so zu konfigurieren das ich von Raspi die *LOGOs*/Rollos *flexibel steuern* kann.

Der Hinweis mit dem Backup ist sehr gut! Werde ich umgehend machen.
Und natürlich möchte ich ein funktionierendes System nicht "zerstören"
Ich möchte es lediglich sinnvoll erweitern.

Ich denke nicht, dass die modpoll befehle unter Windows 1:1 auf die Console mit libmodbus übertragbar sind.


----------



## Transistorfips (24 Mai 2019)

Und...? Was is'n nu? Haste weiter getestet?
Kann ja jetzt wirklich nicht so schwierig sein...


----------



## Tajlor (24 Mai 2019)

Hallo

vielen Dank fürs Nachfragen.

Ich habe mich dran gesetzt über 
https://github.com/riptideio/pymodbus 
https://github.com/dhruvvyas90/libmodbus
rauszubekommen wie es geht.

Ein paar Beispiele werden auf dieser Seite genannt.

Leider bekomme ich die Puzzle-Teile nicht zusammen.
Mit "das ist doch einfach" ; "das müsste doch gehen" ; " da steht es doch anhand von diversen Beispielen wie es geht" -> komme ich scheinbar nicht weiter

Es ist sehr frustrierend für mich, das kann ich dir sagen. 
Der Strohalm ist zum greifen nah, aber ich sehe ihn einfach nicht.


----------



## Transistorfips (25 Mai 2019)

Hi,

ich glaube dir mangelt's an einer analytischen Vorgehensweise...

Du mußt herausfinden, wie die Software in der Logo funktioniert um Modbus-TCP Daten an der Stelle abzulegen wo die Software auf diese Daten zugreift (intern verwaltet). Alles andere zielt am Problem vorbei. Du brauchst neben dem Detailwissen über die Software dazu zwingend eine Testverbindung mit mbpoll, modpoll o.ä. Und daß das funktioniert, haben wir rausgefunden.

https://github.com/dhruvvyas90/libmodbus zielt auf die Nutzung von  Modbus RTU mit einer RS-485 Hardware über die beiden RX/TX-Pins auf der  Steckerleiste des Raspi ab. Ich habe den dhruvvyas90-Fork vor längerer  Zeit ausprobiert und Daten aus einem Stromzähler via serieller  Schnittstelle ausgelesen. Vergiss das, es hilft dir kein bisschen  weiter. Ebenso der andere Link, das ist lediglich Modbus in Python.




Hast du Zugriff auf die Software der Logo und kannst sie mit der Programmieroberfläche, ich glaube sie heißt Logo Soft Comfort, auslesen? Oder ist die Logo fix und fertig programmiert, hat Know-How/Bausteinschutz und der Hersteller der Software behält sich das Recht vor, den Code für sich zu behalten...? Das wäre natürlich eine böse Sackgasse.
Weiterhin: Daß Siemens der Generation Logo8 der Logo-Familie die Schnittstelle "Modbus-TCP" spendiert hat bedeutet nicht automatisch, daß die Software in der Logo (die Rollo-Steuerung) für Modbus TCP in irgendeiner Weise einbindet um darüber zu kommunizieren. Das mußt im Zweifelsfall DU "reinverdrahten", ist aber jetzt nicht soo schwierig. Auf Youtube finden sich Prinzipanleitungen.


Wie ich das machen würde (wenn man an die Daten rankommt):
Sichere die Daten zuverlässig und vollständig und experimentiere mit der Logo ein bisschen herum. Dann nächster Schritt: Modbus TCP in der Logo zum Leben erwecken und ein kleines Programm machen, das abhängig mit den Modbus-Registerinhalten Relais schaltet. Dann kann man langsam über die Anbindung mittels Raspi nachdenken (wie bereits geschrieben, das ist nix für Anfänger, aber das kannst du mit meiner Hilfe hinbekommen). 


Findet man im Netz Doku über deine Rollo-Steuerung?


----------



## Lars Weiß (27 Mai 2019)

Hm, wenn ich mir deine Posts so durchlese denke ich das du vielleicht gut mit NodeRed klar kommen würdest. Da findest du auch Beispiele wie NodeRed mit einer Logo Daten tauschen kann und Zeitfunktionen gibt es da auch:

https://flows.nodered.org/flow/f36b5e6ef46f3a2c3d9c26eb45cbad0d
https://flows.nodered.org/node/node-red-contrib-light-scheduler


----------



## Tajlor (5 Juni 2019)

Vielen Dank für die Antworten

Meine Antworten zu den bisher gestellten Fragen:


Hast du Zugriff auf die Software der Logo prinzipiell ja habe aber die Software LOGO! Soft Comfort nichtIst die Logo fertig programmiertJa und funktioniert einwandfrei
BausteinschutzNeinModbus-TCP aktivJa! ich steuere -wie bereits erwähnt- die LOGO! mit (m)einem iPhone  -> Modbus TCP ist aktiv und funktioniert 

Allerdings weiss ich (noch) nicht was die APP an die LOGO! sendet bis auf den genannten HEX code.

#Hex-Werte senden:
00 00 00 00 00 06 ff 06 00 01 00 01

01 = 10te Stelle = Adresse des zu steuernden Rollos

01 = letzte stelle = hoch fahren // 02 runter fahren

Zusammenfassend: 
Ich muss nicht mehr sicherstellen das ich die LOGO! per Modbus TCP ansprechen kann. Es funktioniert.
Ich bin auf der Suche nach libmodubs Befehlen/Strings/Skripte die mich befähigen auf der Raspberry Konsole die LOGO zu steuern/schalten.
Anschließend - und da will ich hin - kann man diese Befehle zu einer gewissen Uhrzeit an die LOGO! senden um die Rollos zu fahren.
(Die APP bietet diese zeitliche Komponente nicht an)

Sobald ich neue Infos habe -oder weiter bin- werde ich es hier veröffentlichen


----------



## Lars Weiß (5 Juni 2019)

Tajlor schrieb:


> Allerdings weiss ich (noch) nicht was die APP an die LOGO! sendet bis auf den genannten HEX code.
> 
> #Hex-Werte senden:
> 00 00 00 00 00 06 ff 06 00 01 00 01
> ...



Das ist ein Modbus Telegramm, in dem steht das Funktionscode 6 (1 Register schreiben) verwendet wird, auf Registeradresse 1 mit dem Wert 1 bzw. 2


----------

