Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal

Für Themen rund um das Prozessabbild des RevPi Core
atstaeff
Posts: 50
Joined: 30 Jan 2018, 18:11
Answers: 0

Re: Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal

Post by atstaeff »

Ich hab folgende Ausgaben im Terminal (Siehe Anhang) und habe im Profinet-Netz mich auf die IP des Gateways eingelogt. Dort erscheinen ebenfalls keine Werte unter dem Reiter Input.
Das mit dem Dreher "Output Input" leuchtet aber ein. Probier ich morgen direkt als erstes.


Danke Volker und Team :)
Attachments
Ausgabe.png
Ausgabe.png (24.55 KiB) Viewed 7136 times
atstaeff
Posts: 50
Joined: 30 Jan 2018, 18:11
Answers: 0

Re: Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal

Post by atstaeff »

Hallo Volker
das mit Input <-> Output brachte leider auch nicht den gewünschten erfolg.
VG
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41
Answers: 1

Re: Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal

Post by volker »

Hallo Stefan,
ich denke, ich weiß nun ziemlich genau, was das Problem bei Deiner TIA Konfiguration ist. Du hast zumindest bei der verwendung der Inputs den slot 3 verwendet. Wenn Du das bei den Outputs ebenso gemacht hast (wäre dann slot 11, also der erste 32 Byte Block), dann bekommst Du die Daten natürlich nicht ab Adresse 0 + Modul-Offset, sondern ab Adresse 16+16+Modul-Offset. Vor dem Slot 11 liegen nämlich noch die slots 9 und 10 mit jeweils 16 Byte. Es schert das gateway nicht, ob diese Slot in TIA konfiguriert werden oder nicht. Im gateway liegen die Startadressen der Slots so wie in der Anleitung in der Tabelle auf Seite 20:
Slot Modul Id Offset
0 DAP 0x80050000 --
1 Input 16 0x00000005 Output Off 0
2 Input 16 0x00000005 Output Off 16
3 Input 32 0x00000006 Output Off 32
4 Input 32 0x00000006 Output Off 64
5 Input 32 0x00000006 Output Off 96
6 Input 64 0x00000007 Output Off 128
7 Input 64 0x00000007 Output Off 192
8 Input 64 0x00000007 Output Off 256
9 Output 16 0x00000050 Input Off 0
10 Output 16 0x00000050 Input Off 16
11 Output 32 0x00000060 Input Off 32
12 Output 32 0x00000060 Input Off 64
13 Output 32 0x00000060 Input Off 96
14 Output 64 0x00000070 Input Off 128
15 Output 64 0x00000070 Input Off 192
16 Output 64 0x00000070 Input Off 256

Versuch daher mal wirklich alle alle 512 input Bytes des moduls auszugeben. laut Deinem Bildschirmdump in der PM bekommst Du Dein Modul ab offset 11 konfiguriert. plus 32 macht also 43. In Deinem screen dump sehe ich dort auch genau Daten stehen.
[img
Unbenannt.PNG
Unbenannt.PNG (16.68 KiB) Viewed 7088 times
][/img]
Nämlich 3E8 = 1000 (das ist eine 3 im MSB plus eine 232 im LSB) und eine 3A98 = 15000 (das ist eine 58 im MSB und eine 152 im LSB)
Zusätzlich kommen dann aber noch weitere Bytes dahinter an.
Also: mach mal das lesen nicht ab offset 11, sonder ab Offset 43 und alles wird gut ;-)
Unser RevPi Motto: Don't just claim it - make it!
atstaeff
Posts: 50
Joined: 30 Jan 2018, 18:11
Answers: 0

Re: Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal

Post by atstaeff »

N'abend Volker,
super ... vielen Dank. Das bringt mich weiter.

Nächste Frage :) ... kann ich im Pictory oder in der config den Wert auf die Variable Input_1 legen???
Ich könnte dann doch über die revpimodio library einfach die Variablen auslesen oder geht das nur mit Analog und Digitalen IOs.
Ich hab mir extra schon die revpimodio2 Python library heruntergeladen und installiert. Überlege nämlich darüber die Werte einzulesen.

Alternativ hab ich mich an deinem Beispielcode aus "Zugriffe mit Python" zu schaffen gemacht. Der will aber net so richtig. Da hängts noch. Seh ich das richtig das ich die bytes einlesen muss und umkodieren muss?

Code: Select all

#!/usr/bin/python3
# -*- coding:utf-8 -*-
import time
import struct
import fcntl

f = open("/dev/piControl","wb+",0)

f.seek(43);
x = f.read(2)
s = struct.unpack('<H',x);
i=s[0]
print (x)
time.sleep(3)


:)
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41
Answers: 1

Re: Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal

Post by volker »

Nur schon mal grad die erste Antwort:

Ja klar geht es auch ab dem ersten Byte im Bereich für das Gateway. Aber dann muss im TIA eben auch ein 16-Byte output Modul in Slot 9 gezogen werden und die Ausgaben dann dort in das erste Byte geschrieben werden...
Unser RevPi Motto: Don't just claim it - make it!
atstaeff
Posts: 50
Joined: 30 Jan 2018, 18:11
Answers: 0

Re: Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal

Post by atstaeff »

N'abend Volker
Ich hätte auch nichts dagegen wenn ich den Wert aus Input_3 auslesen könnte. Allerdings bekomme ich mit "piTest" keinerlei Werte.
Siehe folgenden Kommandozeileneintrag(Siehe Anhang01).

Das würde mir schon sehr helfen. Ich will die Daten nämlich abgreifen und für meine eigene Applikation nutzen. Aber da hängts noch bei mir. Vlt hast du oder habt Ihr vlt eine Python Skript mit Beispielcode. Indem mittels Profinet Gateway die Daten abgegriffen und weiterverarbeitet werden.

Klar kann ich auch wie du es vorgeschlagen hast mit folgendem Befehl das ganze machen.(Siehe Anhang02)
Ich wollte aber für meine eigene APP mit der Bibliothek revpimodio2 arbeiten. Alternativ würde ich aber auch mit PiControl arbeiten. Allerdings hänge ich da noch im Code (Siehe vorherigen Eintrag).

Liebe Grüße
Attachments
image008.png
image008.png (16.46 KiB) Viewed 7063 times
Anhang02
Anhang02
Unbenannt.PNG (3.41 KiB) Viewed 7063 times
Anhang01
Anhang01
Unbenannt.PNG (5.04 KiB) Viewed 7063 times
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41
Answers: 1

Re: Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal

Post by volker »

Okay, nun kommen wir auf die Zielgerade. Dein letztes Problem ist eigentlich nur noch sehr klein:
In PiCtory kannst Du mit den Original-RAP Dateien der Gateways leider ausschließlich Bytes im Prozessabbild definieren. In TIA verwendest Du aber ein Word (also 2 Byte). Wenn Du "Input_33" liest, dann müsstest Du die 3 (also das MSB) bekommen. Wenn Du "Input_34" liest, solltest Du dann die 323 (LSB) bekommen. Du müsstest dann in Deiner Applikation die beiden Bytes wieder zu einem Word zusammenfügen. Z.B. ginge das so: W = 256 * Input_33 + Input_34.
Frag halt mal beim Sven nach, ob es in revpimodio2 eine Möglichkeit gibt, die beiden Werte automatisch zu einem Word umzudefinieren. (revpimodio2 greift übrigens auch über PiControl auf das Prozessabbild zu. Es ist eine bequeme Bibliothek, die sich als Shell über PiControl legt).
Theoretisch kann man sich auch seine eigene RAP-Datei zusammenstellen (JSON Format), um die Daten so zu gliedern, wie man sie unter TIA angelegt hat. Aber das ist nicht so ganz einfach mit einem Texteditor. Wir sind aber bereits dran, da einen RAP-Editor für zu bauen... dauert aber noch.
Vielleicht ist es auch eine Chance für Dich mal den Python Code von revpimodio2 anzuschauen, um von Sven zu lernen, wie man optimal auf das Prozessabbild über piControl zugreift. Viel Erfolg.
Unser RevPi Motto: Don't just claim it - make it!
atstaeff
Posts: 50
Joined: 30 Jan 2018, 18:11
Answers: 0

Re: Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal

Post by atstaeff »

Hallo Volker ... klingt gut.
Allerdings kann ich keine Variablen auslesen über Input_20 obwohl ich beim Profinet Gateway 512 Ein und Ausgänge angegeben habe.
Anbei mein Terminalausgang. Hab auch schon die Namen verglichen und die Pictory Config neu angelegt. Immer wieder gleiches Resultat.
:?: :?: :?:
LG
Attachments
Unbenannt100.PNG
Unbenannt100.PNG (10.95 KiB) Viewed 7054 times
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41
Answers: 1

Re: Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal

Post by volker »

Mach bitte mal einen screendump von PiCtory (werte-editor). Dort müsstest Du eigentlich sehen, welche Prozessvariablen angelegt sind. Möglicherweise ist die falsche Variante ausgewählt . aber ich denke eher es geht um die exakte Bezeichnung...
Unser RevPi Motto: Don't just claim it - make it!
User avatar
RevPiModIO
KUNBUS
Posts: 322
Joined: 20 Jan 2017, 08:44
Answers: 0
Contact:

Re: Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal

Post by RevPiModIO »

Hi atstaeff!

Zwei Bytes aus zwei IOs kannst du in RevPiModIO zu einem Wert (einem IO) zusammenfassen. Dazu gibt es bei den IOs die Funktion .replace_io(...)

In deinem Fall würdest du die Funktion von dem ersten IO "Input_33" aufrufen, einen neuen Namen und einen 2 Byte Wert (H/h) definieren. Die Byteorder kannst du auch bei Bedarf anpassen. RevPiModIO nimmt dann den angegebenen IO plus die Folge-IOs, die durch die Länge (2 Byte) hervorgehen und fasst sie zusammen.

Code: Select all

# 2 Byte Integer ohne Vorzeichen
rpi.io.Input_33.replace_io("neuer_name", "H")

# 2 Byte Integer mit Vorzeichen
rpi.io.Input_33.replace_io("neuer_name", "h")
https://revpimodio.org/doku2/io/#replace_io

Die Buchstaben für die Länge und das Format kommen direkt von Python https://docs.python.org/3/library/struc ... characters

Die Standard-Byteorder ist "little", optional kannst du sie auch gleich bei replace_io mit byteorder="big" ändern.

Code: Select all

# 2 Byte Integer mit Vorzeichen und 'big' Byteorder
rpi.io.Input_33.replace_io("neuer_name", "h", byteorder="big")
Gruß, Sven
python3-RevPiModIO - https://revpimodio.org/ || Der RevPi ist das Beste, was passieren konnte!
Post Reply