Step 7 Einlesen von Adressbereichen über 3500

Daniel412

Level-1
Beiträge
31
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe folgendes Problem.
Ich habe eine Anlage mit einer CPU416-2 DP und einer CP 443-1 Advance.
Jetzt habe ich 4 ABB Leistungsschalter bekommen die mithilfe von einem EKIP Connect Profinet Modul mit meiner CPU verbunden sind.
Die ABB Leistungsschalter habe ich in meinem Step 7 Projekt angelegt und die Module "Status and Measures" in der Hardwarekonfig eingefügt.
Der Adressbereich ist hierbei von 3590...3789 für den ersten Leistungsschalter angelegt. Die anderen 3 haben noch höhere Adressbereiche.
Ich benötige nur die ersten zwei Bytes für die Rückmeldungen von den Leistungsschaltern.
Da man bei einer CPU416 irgendwann keine einzelnen Bits mehr einlesen kann, habe ich das gesamte Byte eingelesen und dies dann in Bits aufgesplittet.
Das Problem ist das ich leider keine Signale empfange.
Auch das einlesen eines DWords führte zu keinen Erfolg.

Die Kommunikation des Leistungsschalters sind aber korrekt, da ich mich mit den einzelnen Leistungsschaltern verbunden habe und mithilfe einer CPU 315 und einem kleinen Programm in Tia Rückmeldungen bekomme. Hier bekomm ich Rückmeldung wenn ich einen niedrigen Adressbereich habe und mir direkt die Bits anzeigen lasse aber auch wenn ich einen hohen Adressbereich nutze und mir diesen Byteweise auslese und den in Bits aufsplitte.

Kann dies an den zu hohen Adressbereich liegen? In der Hardwarekonfig von der CPU416 ist kein Bereich gesperrt und es können alle Bytes bis ca.16000 genutzt werden.
In der Anlage sind auch PACs verbaut die wir mithilfe von Profinet auslesen. Dort sind die Adressbereiche auch bis ca. 3000.

Vllt. hat ja jemand eine Idee oder schonmal ähnliche Probleme gehabt.
Vielen Dank im Voraus

Gruß Daniel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Auf E/A außerhalb des Prozessabbildes kann man mit Peripherie-Zugriffen zugreifen.
L EW3500 lädt aus dem Speicherbereich der Eingänge. Da ist nur ein aktueller Wert drin, wenn EW3500 im OB1-Prozessabbild der Eingänge (PAE) liegt, oder auf anderem Weg explizit ein Wert (z.B. aus der Peripherie) hinein kopiert wird, oder EW3500 einem Teilprozessabbild (TPAx) zugeordnet ist und das Teilprozessabbild explizit aktualisiert wird.
L PEW3500 lädt aus der Peripherie (egal ob EW3500 in einem Prozessabbild oder Teilprozessabbild liegt oder nicht)

Wenn EW3500 außerhalb des Prozessabbildes liegt, kann man auch selber den Wert aus der Periepherie in den Speicherbereich der Eingänge kopieren und danach auf die einzelnen Bits zugreifen:
Code:
L PEW3500
T EW3500

U E3500.3
U E3501.5
...

Achtung! Beim Ändern der Größe des OB1-Prozessabbildes (PAE oder PAA) ändert sich die Arbeitsspeicher-Aufteilung der CPU und beim Einspielen der HW Konfig werden alle E-/A-/M-Variablen initialisiert.
 
Ich tippe auch auf die Größe des Prozessabbildes.

Versuch einfach mal
L PEW 3590
T MW x
 
Hallo zusammen,

vielen Dank für die schnellen Rückmeldungen.
Die größe des Prozessabbildes ist bei 16384
Screenshot 2023-12-14 141529.png

Das einlesen der Bytes wurde genau so gemacht wie ihr beschreibt.
Screenshot 2023-12-14 141908.png
Von außen wurde dann PEB 3590 an die Funktion geschrieben.
 
Zuletzt bearbeitet:
In dem Code wird nur ein Byte verarbeitet, EW/PEW ist aber ein Word. Gibt es Fehler-Einträge im Diagnosepuffer der CPU?
Ist EW3590 einem Prozessabbild zugeordnet? Zu was für einem Gerät gehört PEW3590? Liegt die Adresse vielleicht in einem Adressbereich, der nur "gesamt" konsistent eingelesen werden kann (DWORD oder siehe SFC14)?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Von außen wurde dann PEB 3590 an die Funktion geschrieben.
Wenn EB3590 im Prozessabbild liegt, dann braucht man nicht auf die Peripherie zugreifen. Eventuell lässt die Baugruppe auch gar keinen Byte-Zugriff zu? Ändere das Programm so, dass EB3590 übergeben wird (nicht PEB3590).

Wenn EB3590 nicht im Prozessabbild liegt, dann nochmal meine Frage:
Zu was für einem Gerät gehört PEW3590? Liegt die Adresse vielleicht in einem Adressbereich, der nur "gesamt" konsistent eingelesen werden kann (DWORD oder siehe SFC14)?
 
Der Prozessabbild steht bei mir tatsächlich auch auf 512. Ich lese aber schon Daten von den Packs ein die auch im Adressbereich
2000-3000 liegen. Dort hab ich keine Probleme
 
Wenn EB3590 im Prozessabbild liegt, dann braucht man nicht auf die Peripherie zugreifen. Eventuell lässt die Baugruppe auch gar keinen Byte-Zugriff zu? Ändere das Programm so, dass EB3590 übergeben wird (nicht PEB3590).
Okay das mit dem EB3590 könnte ich noch einmal probieren. Das einlesen eines DWords habe ich schon versucht da ich die selbe Vermutung mit
dem Byte hatte. Aber auch das einlesen eines PED3590 hat nicht geholfen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Prozessabbild steht bei mir tatsächlich auch auf 512. Ich lese aber schon Daten von den Packs ein die auch im Adressbereich
2000-3000 liegen. Dort hab ich keine Probleme
Dann wirst du diese Daten mit Peripheriezugriff einlesen. Das brauchst du nicht, wenn die Daten im Prozessabbild liegen, dann kannst du direkt auf die E/A zugreifen.
bei Peripheriezugriff mit Word arbeiten
 
In dem Code wird nur ein Byte verarbeitet, EW/PEW ist aber ein Word. Gibt es Fehler-Einträge im Diagnosepuffer der CPU?
Ist EW3590 einem Prozessabbild zugeordnet? Zu was für einem Gerät gehört PEW3590? Liegt die Adresse vielleicht in einem Adressbereich, der nur "gesamt" konsistent eingelesen werden kann (DWORD oder siehe SFC14)?
Hatte mich vertan mit PEW, meinte natürlich einlesen eines PEB.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Prozessabbild steht bei mir tatsächlich auch auf 512. Ich lese aber schon Daten von den Packs ein die auch im Adressbereich
2000-3000 liegen. Dort hab ich keine Probleme
Also ist Zugriff auf PEB oder per SFC14 nötig. Noch ein drittes mal meine Frage:
Zu was für einem Gerät gehört PEW3590? Liegt die Adresse vielleicht in einem Adressbereich, der nur "gesamt" konsistent eingelesen werden kann (DWORD oder siehe SFC14)?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
am einfachsten wird es sein, dass Prozessabbild zu vergrößern, dann kannst du auch direkt auf die Eingangsbits zugreifen.
Aber beeinträchtigt das nicht die Leistung der CPU und das neuinitialisiert alle Variablen könnte bei so einem großen Projekt schon zu Problemen
führen
 
Aber beeinträchtigt das nicht die Leistung der CPU und das neuinitialisiert alle Variablen könnte bei so einem großen Projekt schon zu Problemen
führen
Die ABB Leistungsschalter habe ich in meinem Step 7 Projekt angelegt und die Module "Status and Measures" in der Hardwarekonfig eingefügt.
Der Adressbereich ist hierbei von 3590...3789 für den ersten Leistungsschalter angelegt. Die anderen 3 haben noch höhere Adressbereiche.
Du hast doch schon (oder musst noch?) die Hardware aktualisieren, dann müsste die Initialisierung egal sein.

Sinnvoll ist es die aktuellen DB Inhalte (vor der Hardwareübertragung) zu retten.

Und mit der Leistung, einer muss die Arbeit machen: entweder die SPS Firmware aktualisiert das Prozessabbild oder du liest im Programm die Peripherie (und schreibst auf DB-Bereiche).
 
Zurück
Oben