Rezeptverwaltung in Codesys

Bensen83

Level-1
Beiträge
777
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Leute bin ein Umsteiger von Siemens. Dort habe ich ja alle Daten, welche in einem dB stehen nach einem power On wieder zur Verfügung. Da ich nun in codesys nicht alles retain deklarieren möchte, habe ich folgende frage: gibt es bei codesys eine tezepturverwaltung, wo man Variablen hinterlegen kann, wel je nach einem power in noch ihren alten Wert haben?
 
Ich denke, die Antwort steckt schon in deiner Frage ....

Die Variablen, die nach Power On noch erhalten bleiben sollen müssen RETAIN gelabelt sein.

Eine Rezepturverwaltung mit STEP7 ist typischerweise mittels der HMI gelöst, d.h. die Werte werden auf der HMI ausfallsicher gehalten.
Da der SIEMENS-typische Rezepturverwaltungsmechanismus magels sinnvoll adaptierbarer HMI mit CoDeSys nicht verfügbar ist, bleibt nur der manuelle Weg.

Grüße

Frank
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also Baustein schreiben

Also in der s7 hatte ich mir auch mal nen Baustein dafür geschrieben, weil es nicht in der Visu realisiert werden sollte. (Powertags sparen) ;-)
Dort hatte ich für jedes Rezept einen dB und habe je nach Anwahl den entsprechenden dB und den dB "aktuelles Rezept" kopiert.
Also hier im fall codesys einfach ne Struktur machen und dann für x Rezepze ein Array dieser Struktur?
Kann man irgendwie erkennen wie lange eine Struktur ist? So könnte ich einen allgemein gültigen Baustein schreiben? Muss dann mit Pointern gearbeitet werden?
 
Also wenn du eine "Instanz" einer Struktur in eine andere kopieren willst geht es wie bei Siemens in SCL mit

STRUCT_A := STRUCT_B;

Grüße

Marcel
 
Länge des Arrays

Danke das ist mir ja klar, meinte es auch nicht so.,
Sondern wie kann ich an einem Baustein einen Eingang erstellen, wo ich nicht genau weis was es für ein Datentypen ist.
Also bspw. Ob es Ein Array mit 10 Elementen vom Typ xy ist, oder ob es 20 Elemente sind.
Bzw. Wenn ich den Namen des Datentypist nicht weis. Kann ich irgendwie einen flexiblen Eingang anlegen und rausfinden welcher datentyp es ist?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke das ist mir ja klar, meinte es auch nicht so.,
Sondern wie kann ich an einem Baustein einen Eingang erstellen, wo ich nicht genau weis was es für ein Datentypen ist.
Also bspw. Ob es Ein Array mit 10 Elementen vom Typ xy ist, oder ob es 20 Elemente sind.
Bzw. Wenn ich den Namen des Datentypist nicht weis. Kann ich irgendwie einen flexiblen Eingang anlegen und rausfinden welcher datentyp es ist?

Wozu brauchst du denn das alles?

Selbst bei einer Rezepturverwaltung in einer HMI müssen Datentypen und die Variablenstruktur am Anfang festgelegt werden.
Wenn sich diese ändert, muss das HMI Projekneu erstellt und überspielt werden.

Genausso in der SPS, da muss man sich am Anfang eine sinnvolle passende Struktur erstellen.
Da kann man nicht alles Variabel gestalten.

Weder macht das Sinn noch passen da die Zugriffe im (Rest)-Projekt und der Visu.
Ich denke du bist da mit deinen Gedanken noch nicht ganz sortiert.

Frank
 
Für mehrfachberwwndung

Für instanzierung und mehrfachberwwndung.
Also wenn ich Bsp einen Baustein schreiben möchte, welche 2 mal aufgerufen werden soll. Das erste mal für tezepturverwaltung vom datentyp a und ein 2. mal für eine vom Typ b.
Bei step7 habe ich da einfach geprüft wie lange der dB ist (sprich die Struktur) und dann immer die entsprechende Anzahl an Bytes kopiert. So war der Baustein rezeptlängen unabhängig. Bzw. Datentypen unabhängig. Das macht meiner Meinung nach schon Sinn, wenn man mehrere verschiedene Rezepturen zu verwalten hat. Zumindest hat es sich als hilfreich erwiesen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Weis jemand wie ich es machen könnte? Oder bekomme ich das als Baustein nicht allgemein gelöst?

Allgemein gelöst ist es dann, wenn du die betreffenden Strukturtypen an die Bausteine anbindest.
Ändert sich die globale Strukturdefinition muss man nur alles neu übersetzen in in die SPS spielen.
Noch universellere Methoden sind nicht zu machen.

Frank
 
Zuletzt bearbeitet:
Habe jetzt nen tip bekommen, die Rezepte in ne Datei zu speichern. Was haltet ihr davon?

Ich halte besonders von dem Umstand nicht viel, das man bei deinem Projekt die Hardware nicht kennt.
Für Codesys gibt es mind. 150 Hersteller d.h. am Ende vlt. 500 SPS-Typen. Wie sollen wir da zur deinem
Statement "die Rezepte in ne Datei zu speichern" eine sinnvolle Antwort schreiben.

Ich wiederhole mein Gefühl, das du zur Zeit etwas zu kompliziert denkst.

Es muss doch möglich sein für eine

- konkrete Aufgabenstellung-

eine

-sinnvolle Struktur-

und damit einen

-passenden Baustein-

zu schreiben, der die Aufgabe

-Daten umschaufeln-

realisiert.

Mehr ist eine Rezeptur-"verwaltung" eigentlich nicht.

Frank
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schon klar

Das ist mir schon klar das es nicht mehr ist. Es geht auch pberhauptnicht um eine Aufgabenstellung, sondern darum eine tezepturverwaltung als Baustein zu erstellen und dies so flexibel, dass dieser Datentypen unabhängig ist. Das wird ja wohl gehen, werde es mal über Adresse und datenkänge versuchen. Es geht einfach darum bspw. Mehrere rezepturverwaltungen mit verschiedenen Datentypen mit einem Baustein bedienen zu können, das halte ich jetzt persönlich nicht für kompliziert gedacht, sondern für zukünftige Fehlerquellen Verkleinerung.
 
Dann verstehe ich aber dein Post zur Ablage in einer Datei erst recht nicht.
Mit jeder Hardware sind die Methoden verschieden oder ggf. auch garnicht
vorhanden.

Unabhängig vom Dateithema ist es dann, wenn die Datenstruktur klar ist,
ein leichtes sich aus einem Array of Struct mittels Zeigerwert (Datensatz) die
passenden Werte zu lesen oder zu schreiben.
Das ganze dauert, wenn es dann soweit ist 1 bis 2 Stunden.

Jedenfalls kann man erst dann, wenn die benötigten Daten klar sind die
passenden Strukturen im CoDeSys erstellen.

GGf. erstellt man ein Initialstruktur mit der man übt.

Wenn es dann soweit ist (das schrieb ich bereits) wird dann die Struktur
zu gewünschten Struktur verändert und alles neu kompiliert.

Mehr gibt es dazu nicht zu sagen.

Frank
 
Ok

Also ich glaube wir reden aneinander vorbei. Ich will ja was ohne datentyp haben. Aber egal. Habe gesehen es gibt ja bei codesys 3 auch einen recipemanager. Ist der nicht gut, oder benutzt den jemand?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mensch Bensen,

vergiss die umständliche Handhabung wie beim Blockmove!
Du kannst hier ganz einfach Strukturen hin und her kopieren ohne Schnick- Schnack.

Wenn dir der Vorschlag von Frank nicht gefällt, erstelle halt eine Stuktur „Rezeptur_Bensen_Egal“.
Diese legst du einmal direkt in deinem Programm-Baustein an und einmal als Array im persistenten Bereich.

Bensen_STRUCT.jpg

Rezept laden
FB_Rezeptur_Bensen_Egal := Pers_Rezeptur_Bensen_Egal[123];

Rezept zurückschreiben
Pers_Rezeptur_Bensen_Egal[123] := FB_Rezeptur_Bensen_Egal;

Gruß
Chräshe
 
Ich versuche es nochmal. 1. kann ich doch auch in codesys über ADR auf die Adresse schauen.
2. kann man bei Siemens auch Strukturen im strukturierten Text direkt kopieren.
3. geht es nicht drauf dass die Struktur "Egal" heißen soll, sondern egal sein soll. Das heist es soll mir ermöglichen einmal eine Struktur xy zu verwalten und einmal eine Struktur ab. Und dies eben mit ein und dem selben Baustein, eben nur einer anderen Instanz. ;-) aber ich Gleise ihr versteht mich nicht. :-(
 
Ich versuche es nochmal. 1. kann ich doch auch in codesys über ADR auf die Adresse schauen.

ja und genau diese Grundidee ist der Quark, von dem du dich nicht lösen willst.

Du willst genau denn hartkodierten Programmierstil in die CoDeSys-Welt mitnehmen. Löse dich endlich davon ... vom dem ADRESSE - LÄNGE - KÄSE und mache es richtig, nämlich symbolisch.

3. geht es nicht drauf dass die Struktur "Egal" heißen soll, sondern egal sein soll. Das heist es soll mir ermöglichen einmal eine Struktur xy zu verwalten und einmal eine Struktur ab. Und dies eben mit ein und dem selben Baustein, eben nur einer anderen Instanz.

Spätestens beim Übersetzen muss eine Struktur "irgendwas" sein und nicht "egal". Es macht mich echt fertig, dass du diese Tatsache nicht einsehen willst.

Frank
 
Zurück
Oben