Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal
Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal
Ich möchte über ein Python- oder C-Programm Ventile steuern, die über Profinet an einer S7 angebunden sind.
Die Teilnehmer des Netzes scheinen richtig konfiguriert zu sein, es leuchtet keine rote LED.
Netzwerkteilnehmer sind die Siemens Simatic S7-300, der RevPi IRT Gateway und ein Profinet-Feldbusknoten (CPX-FB33) von der Firma Festo.
Um eine erste Kommunikation zwischen den Teilnehmern herzustellen, habe ich versucht, im TIA-Portal Ausgänge zu forcen und mit Hilfe von PiTest im Prozessabbild nachgeschaut, ob sich etwas verändert hat.
Umgekehrt habe ich versucht mit Hilfe von PiTest auf dem RevPi-Core Werte in verschiedenen Offsets zu schreiben und mit Hilfe der Beobachtungstabellen im TIA-Portal die Veränderungen nachzuvollziehen.
Leider konnte ich keine Veränderungen feststellen.
Dies liegt vermutlich auch daran, dass ich nicht weiß auf welchen E/A-Adressen ich überhaupt schreiben/lesen soll.
Aber vielleicht gibt es auch eine bessere Methode, um eine Kommunikation zwischen den Netzwerkteilnehmern herzustellen?
Im PiCtory wurde der Profinet IRT Gateway links vom RevPi-Core konfiguriert. Er hat die Adresse 31.
Im TIA-Portal unter Gerätesicht findet sich Folgendes: Die Netzsicht sieht so aus:
Re: Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal
bitte stelle mal einen Screenshot vom PiCtory (mit gateway angeklickt) online, damit wir sehen, wie dort die E/As eingebunden wurden. Außerdem rufe im PiCtory mal "Export" und dann einen der beiden Exports und stelle die generierte Textdatei mal online. Dann kann man mehr dazu sagen.
Re: Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal
Hier der gewünschte Screenshot:
Und hier der Inhalt der exportierten Dateien:
GLOBALS hardwareConfig
VAR_GLOBAL
RevPiStatus AT %IB1.1024: BYTE := ; //
RevPiLED AT %QB1.1025: BYTE := ; //
END_VAR
END_GLOBALS
Die zweite Datei sieht so aus:
RevPiStatus 1024 //BYTE
RevPiLED 1025 //BYTE
Re: Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal
ausschalten:
./piTest -w 1025,1,0
einschalten:
./piTest -w 1025,1,1
Leider veränderten sich die Werte im TIA-Portal an der enstsprechenden Adresse dabei nicht.
Jetzt habe ich bei PiCtory bei allen Ein- und Ausgängen das Kästchen "Export" angeklickt.
Nach dem Exportieren sah die Datei so aus:
GLOBALS hardwareConfig
VAR_GLOBAL
Input_1 AT %IB1.0: BYTE := ; //
Input_2 AT %IB1.1: BYTE := ; //
Input_3 AT %IB1.2: BYTE := ; //
Input_4 AT %IB1.3: BYTE := ; //
Input_5 AT %IB1.4: BYTE := ; //
Input_6 AT %IB1.5: BYTE := ; //
Input_7 AT %IB1.6: BYTE := ; //
Input_8 AT %IB1.7: BYTE := ; //
Input_9 AT %IB1.8: BYTE := ; //
Input_10 AT %IB1.9: BYTE := ; //
Input_11 AT %IB1.10: BYTE := ; //
Input_12 AT %IB1.11: BYTE := ; //
Input_13 AT %IB1.12: BYTE := ; //
Input_14 AT %IB1.13: BYTE := ; //
Input_15 AT %IB1.14: BYTE := ; //
Input_16 AT %IB1.15: BYTE := ; //
Input_17 AT %IB1.16: BYTE := ; //
Input_18 AT %IB1.17: BYTE := ; //
Input_19 AT %IB1.18: BYTE := ; //
Input_20 AT %IB1.19: BYTE := ; //
Output_1 AT %QB1.20: BYTE := ; //
Output_2 AT %QB1.513: BYTE := ; //
Output_3 AT %QB1.514: BYTE := ; //
Output_4 AT %QB1.515: BYTE := ; //
Output_5 AT %QB1.516: BYTE := ; //
Output_6 AT %QB1.517: BYTE := ; //
Output_7 AT %QB1.518: BYTE := ; //
Output_8 AT %QB1.519: BYTE := ; //
Output_9 AT %QB1.520: BYTE := ; //
Output_10 AT %QB1.521: BYTE := ; //
Output_11 AT %QB1.522: BYTE := ; //
Output_12 AT %QB1.523: BYTE := ; //
Output_13 AT %QB1.524: BYTE := ; //
Output_14 AT %QB1.525: BYTE := ; //
Output_15 AT %QB1.526: BYTE := ; //
Output_16 AT %QB1.527: BYTE := ; //
Output_17 AT %QB1.528: BYTE := ; //
Output_18 AT %QB1.529: BYTE := ; //
Output_19 AT %QB1.530: BYTE := ; //
Output_20 AT %QB1.531: BYTE := ; //
RevPiStatus AT %IB1.1024: BYTE := ; //
RevPiLED AT %QB1.1025: BYTE := ; //
END_VAR
END_GLOBALS
Ich vermute ich muss diesen Text im TIA-Portal irgendwo eintragen, richtig? Aber wo?
- RevPiModIO
- KUNBUS
- Posts: 335
- Joined: 20 Jan 2017, 08:44
- Contact:
Re: Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal
Wir haben das Profinet Gateway mit 512 Bytes für Inputs und Outputs konfiguriert. Und ich würde dir empfehlen piCtory auf die neuste Version zu aktualisieren, da hat sich auch einiges getan!
Ich hab mal unseren TIA Entwickler nach dem Projekt gefragt, mit dem wir das Gateway mal getestet haben. Er hat bei der Baugruppe noch Input und Output Module gesetzt: Das Python-Programm auf dem RevPi sah dann so aus:
Code: Select all
import revpimodio
import time
revpi = revpimodio.RevPiModIO()
# 8 Bytes ab "Input'1" zu einem int() Wert registrieren
revpi.devices[34].reg_inp("timestamp","Input'1","Q")
while True:
# Inputs lesen
revpi.devices.readprocimg()
# Inputbyte "Input'33" auf Outputbyte "Output'33" spiegeln
revpi.devices[34]["Output'33"].value = revpi.devices[34]["Input'33"].value
# Timestamp, der von der SPS in den Output "Output32 Byte_1" geschrieben wird ausgeben
print(revpi.devices[34]["timestamp"].value)
# Outputs schreiben
revpi.devices.writeprocimg()
time.sleep(0.5)
Bei den Gateway-Modulen war es besonders praktisch mit reg_inp oder reg_out die einzelnen Bytes zu bestimmten Werte zusammenzufassen, um sie dann bequem im Python-Programm zu verwenden!
Gruß, Sven
PS: Das Tia-Projekt darf ich dir auch geben, solltest du da mal reinschauen wollen: http://files.miprotek.de/s/nqDQzfghEVSsx5t
- RevPiModIO
- KUNBUS
- Posts: 335
- Joined: 20 Jan 2017, 08:44
- Contact:
Re: Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal
Wenn du über TIA z.B. auf dem ersten Byte das erste BIT setzt, kann ein Python-Programm das dann auf die LED "umwandeln"
Code: Select all
import revpimodio
import time
revpi = revpimodio.RevPiModIO()
# Nulltes BIT vom nullten Byte ("Input'1") zu einem bool() Wert machen
revpi.devices[31].reg_inp("ledan","Input'1", "?", bit=0)
while True:
# Inputs lesen
revpi.devices.readprocimg()
if revpi.devices[31]["ledan"].value:
print("led grün")
revpi.devices.core.A1 = revpimodio.GREEN
else:
print("led aus")
revpi.devices.core.A1 = revpimodio.OFF
# Outputs schreiben
revpi.devices.writeprocimg()
time.sleep(0.5)
Gruß, Sven
Re: Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal
lass uns nicht zu viel auf einmal hier besprechen. Darum komme ich zu Deiner ersten Frage zurück. Du willst in TIA Signale setzen und dann mit piTest im PA vom RevPi Core die Änderungen sehen. Dazu musst Du in TIA erst einmal dein Gateway komplett konfigurieren. Die Screendumps zeigen, dass Du zwar das gerät reingeholt hast, aber noch keine E/A Module. Ähnlich wie bei Sven auf dem Bild zu sehen, sollten im Baum rechts bei den möglichen Geräten eine Ebene tiefer auch die möglichen E/A Module sein, die das gateway simuliert. Hier kannst Du N x Ein- oder Augabemodule in die Slots auf TIA ziehen. Die Größe ist dabei Dir überlassen. Auf dem Gateway wird das ja eh nicht interpretiert, sondern die Bytes liegen hintereinander im Speicherbereich. Dieser Speicherbereich wird 1:1 ins PA kopiert. Dort erfolgt der Zugriff mit piTest zum Beispiel über den offset, den Du in der Export-Offsetliste siehst.
Wenn Du also das erste Ausgangsbyte in TIA veränderst, sollte sich im ersten Input-Byte im PA diese Änderung zeigen und piTest sollte unter dem symbolischen namen, den Du im PiCtory dem ersten byte gegeben hast, diese Änderung auch zeigen.
Das ganze ist absolut unabhängig von der PiCtory Version und auch von den Export-Häkchen. Die sind nur für logi.CAD relevant (oder bei bstimmten Zugriffsfunktionen über PiControl per C / Python).
Du brauchst auch kein Python oder irgend etwas anderes außer PiCtory und piTest, um dieses Experiment zu machen.
Zu den LEDs am Core: Wenn Du die über die S7 und den Gateway setzen willst, dann brauchst du eine Applikationssoftware auf dem RevPi Core (selber schreiben oder logi.CAD). Diese Software muss die Eingänge des Gateway lesen und bei entsprechenden Werten mit PiControl die LED-Ausgänge im PA (das ist ein Byte, in welchem die 4 LEDs 2 x grün und 2 x rot bitcodiert stecken) wie gewünscht setzen. Das ist für einen ersten Test daher weniger sinnvoll. Du solltest pitest verwenden, so wie Du es geschrieben hast. Wenn Du das Gateway in TIA korrekt eingebunden und konfiguriert hast, dann sollte das auch gehen.
Re: Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal
Auch allerherzlichsten Dank an Volker für den Tip. Ich habe mir schon gedacht, dass ich noch etwas vergessen habe.
Ich habe die Module jetzt reingezogen. Es sieht jetzt so aus: Bislang bleiben die Tests allerdings noch ohne Erfolg. Soll ich im PiCtory Inputs / Outputs auf 21 oder auf 512 stellen?
Ich könnte auch versuchen die Ausgänge im logi.CAD 3 zu schalten und vom TIA aus beobachten.
Re: Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal
Alternativ bekommst Du eine Dauerausgabe von der Commandline mit "piTest -r xx 1", wobei Du xx mit der Adresse im PA ersetztne musst, an der Input_1 liegt. Diese kann ich aus Deiner Exportliste entnehmen, da dort "Input_1 AT %IB1.0: BYTE " die Adresse 0 angibt. Also: mit piTest -r 0,1 bekommst Du eine kontinuierliche Anzeige des ersten bytes im Gateway Input, welches gemäß Deiner TIA-Konfiguration der A 256 ist.
versuch das bitte mal...
Re: Kommunikation zwischen RevPi und Siemens S7 mit dem Profinet IRT Gateway im TIA-Portal
So sieht meine Beobachtungstabelle aus: Auf dem RevPi-Core passiert hingegen leider nichts: