Sonstiges PCS7 Einzelwert aus DB durch Zeiger lesen

PCS7

Level-1
Beiträge
37
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Ich habe in PCS7 einen SCL-Baustein zur Zeigergenerierung geschrieben und funktioniert soweit, allerdings darf ich kein ANY als Ausgang deklarieren.
Ich möchte jeweils Daten aus einem DB auslesen, String, INT, REAL.
Meine Überlegung war einen Zeiger zu generieren, und dessen Ausgang auf den Blockmove zu legen um die Daten abzugreifen.

Oder kennt jemand einen besseren Weg, z.B. FB-Ausgänge STRING, INT, REAL?

Danke für Eure Hilfe
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Alle Werte einlesen und einen auszugeben sind zu viele Parameter bei PCS7. Fehlermeldung beim übersetzen.
Zumal diese Vorgehensweise an mehreren Stellen von Nöten ist.
 
Ich weiss nicht ob man PCS7 mit Step 7 vergleichen kann. Dort kann man einen ANY auch nicht als Out deklarieren, allerdings als IN-OUT
 
Alle Werte einlesen und einen auszugeben sind zu viele Parameter bei PCS7. Fehlermeldung beim übersetzen.
Das muss aber schon eine sehr große UDT sein, denn 2048 Elemente funktionieren in CFC auf jeden Fall noch. Die UDT muss aber in jedem Fall flach sein, d.h. keine Unterelemente von nicht-elementarem Datentyp wie Arrays oder weitere Structs/UDTs.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der DB ist bei 6700 Elementen. Selbst 2024 Elemente (In SCL mittels For-Schleife ausgewählt) konnte ich nur einmal im Projekt verwenden. Werde es mit IN-OUT probieren.
 
Kann einen Zeiger als IO deklarieren. Der SCL lässt mich einen Temp_Zeiger zuweisen, allerdings geht die CPU auf Stop.

Eine Struktur in IO darf nicht erstellt werden. "Fehler: Der Typ der Sicht ist nicht mit dem Typ der Variablen verträglich"
Hat jemand einen Rat?
 
Erkläre doch noch mal genau was du vorhast.
Du hast einen Global-DB mit 6700 Elementen die händisch angelegt wurden.
Jetzt soll ein von die erstellter Baustein auf Variablen in diesem DB zugreifen. Aber warum ist das nicht als Parameter möglich?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jeweils eine Variable aus dem Globalen DB (hauptsächlich Strings) sollen weitergereicht und zur Anzeige gebracht werden.

Ich erhalte folgende Warnung: Der Lokaldatenbedarf des Organisationsbausteins OB33 übersteigt den projektierten Lokaldatenstack der zugehörigen Prioritätsklasse in der angeschlossenen CPU
 
Bei einer S7-400 kannst du die Größe der Lokaldaten pro Prioritätsklasse einstellen und auch vergrößern.
Falls das nicht ausreichend sein sollte, könntest du versuchen Strings die du im Temp-Bereich angelegt hast in den Stat-Bereich zu verschieben, oder wo möglich nicht immer die gesamte Stringlänge von 254 Zeichen zu verwenden (wenn du nur einen STRING ohne Längenangabe anlegst), sondern einen String mit einer kleineren ausreichenden Länge.
 
Die Stringlänge ist bereits reduziert. Der Lösungsweg mit Zeigern ist scheinbar nicht möglich?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Stringlänge ist bereits reduziert. Der Lösungsweg mit Zeigern ist scheinbar nicht möglich?

Ich wüsste nicht was dir in diesem Fall mit Zeigern bringen sollte. In CFC kannst du auch keine Pointer/Anypointer am Bausteinaufruf wie P#DBX0.0 INT 0 angeben, das geht nur per Verschaltung auf ein Symbol, und dann kannst du auch direkt einen Parameter vom Typ INT, REAL etc. verwenden anstatt den Umweg über Pointer.
Du kannst dir auch einen Parameter wie "Adresse" als Integer anlegen, und dann DB1.DBW[adresse] lesen. Dann steht am Baustein einfach nur eine magische Zahl wie 42, und im Baustein wird dann DB1.DBW42 verarbeitet.

Warum kannst du denn die Werte nicht als Parameter übergeben? Ich habe immer noch nicht verstanden warum das nicht möglich sein soll.

Zu den Lokaldaten: Hast du dir die Einstellung in der HW-Konfig mal angesehen? Wenn du den Speicher passend aufteilst, dann kannst du dir bei einer 400er mehrere kByte für deine Lokaldaten und Prioritätsklasse anlegen. Da musst du schon sehr ungünstig programmieren, wenn das mit einer 400er nicht mehr möglich ist. Oder wie gesagt auf Stat-Variablen umschwenken, dann hast du diese Grenze nicht, brauchst aber mehr Speicher. Bei den für PCS7 notwendigen CPUs ist das aber nur selten ein Problem.
 
Zurück
Oben