Variablen werden nicht gesetzt/zurückgesetzt

MagCODESYSnicht

Level-1
Beiträge
38
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo an euch alle, ich hab noch ne Frage zum Thema Codesys.
Also: Ich programmiere einen Fahrstuhl für ein Projekt für die Uni, und soll in Codesys die Funktionalität per Ablaufsprache umsetzen, und das Projekt in einem PLC_Programm einbinden.
Hier habe ich nun folgendes Problem: Der Fahrstuhl soll seine Fahrtrichtung beibehalten wenn er einen Stop gemacht hat, weswegen ich speichern muss, in welche Richtung er zuletzt gefahren ist. Dazu hab ich anfangs im PROGRAM PLC_PRG zwei Variablen angelegt

VAR
UPRIDE:BOOL:=FALSE;
DOWNRIDE:BOOL:=FALSE;
END_VAR

Diese Variablen können aber weder ausgelesen noch geschrieben werden. Daraufhin hab ich eine neue Globale Variablenliste angelegt und diese hinzugefügt, aber auch hier, das Selbe Problem. Anschließend Habe ich versucht die Variablen als VAR_IN_OUT zu deklarieren, was aber auch nicht geklappt hat, da man, laut Dokumentation, einer IN_OUT Variable keine BOOL Werte zuordnen kann (Quelle:"https://infosys.beckhoff.com/index.php?content=../content/1031/tc3_plc_intro/2528771211.html&id=6217525956031785856").

Im Anhang ist auch eine Abbildung vom Aufbau, das sollte das Problem verdeutlichen

PS: Die Meldungen sind nur vom kompilieren.

Meine Fragen lauten daher: Warum können die Variablen selbst in der globalen Liste nicht gelesen und geschrieben werden? Wie schaffe ich es eine Variable von einem AS Block an einen anderen zu übergeben? :(

Ich verzweifle hier langsam, ich bin dankbar für jede Hilfe. :confused:
 

Anhänge

  • PLC_HILFE.jpg
    PLC_HILFE.jpg
    74,8 KB · Aufrufe: 24
Hallo,
ich denke du gehst bei deinem Projekt von falschen Voraussetzungen aus.
Wenn ich deinen anderen Beitrag dazu betrachte dann sollte das Ziel sicherlich sein, dass du für deinen Fahrstuhl einen FB erstellst. Dieser baustein erhält über die Schnittstelle IN seine Positionen und die Anforderungen und gibt über die Schnittstelle OUT die Ausgänge für die Fahrt und ggf. Leuchtmelder aus.
Alles andere passiert dann in dem Baustein. Dort legst du dann auch deine "lokalen" Variablen an - also die Variablen, die es nur in dem Baustein gibt und nicht global im ganzen Programm.
Vielleicht solltest du das mal so angehen ... und ich denke , so hat es dein Tutor auch gemeint ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sicherlich hat er das so gemeint, genau so wollte ich das aus erläutern, tut mir leid wenn das etwas kryptisch rüber kam. Ja, per IN und OUT werden die Variablen übergeben die für den Fahrstuhl verwendet werden sollen. Ich brauch aber trotzdem diese für die Fahrtrichtung wichtigen Variablen, und da meinte unser Professor dass wir uns, wenn nötig, zusätzliche Variablen anlegen sollen. Wenn ich mittels VAR diese deklariere, also VAR UPWARDS:BOOL:=FALSE; END_VAR, und im Ablaufsprache Block dann in den OUTPUTS eine Variable deklariere, welche ich mittels set (S) auf 1 setze, und dann im PLC Programm diesem Ausgang die Variable zuordne, dann tut sich rein gar nichts, und ich versteh nicht wieso. Hast du eine Idee wo da mein Denkfehler ist? Ich steck da schon ne ganze Woche dahinter, und bei mir ist echt die Luft raus :(
 
Nein ... du hast mich falsch verstanden...
Per IN gibst du die Eingänge deiner SPS an den Baustein (also die Stockwerks-Tasten und die Positions-Ini's) und per OUT steuerst du die SPS-Ausgänge an (also die Stockwerks-Leuchtmelder und den Motor).
Alles andere passiert und bleibt in dem Baustein - das PLC-Programm ruft dann nur den Baustein auf und beschaltet ihn mit den Ein- und Ausgängen.

Ich kann da aber jetzt nicht viel konkreter werden da man dafür zu wenig von deinem Programm sieht. Aber das Wenige, das man sieht, geht für mich vollkommen falsch ...

Gruß
Larry
 
Ich verstehe... Das würde ja bedeuten dass ich alles in einem Baustein machen müsste, damit ich mit lokalen Variablen arbeiten kann. Gibt es wirklich überhaupt keinen Weg um Informationen von einem AS Block an einen anderen weiter zu geben? Also, wenn ich im PLC_Prog eine Variable anlege, dann ist die nur im PLC_Prog verfügbar, und nicht in den AS Blöcken, obwohl sie Teil des PLC_Prog sind?
 
Eine Variable ist immer nur dort verfügbar wo du sie anlegst - es sei denn sie ist global. Genau das sollst du dir jetzt aber ja nun verkneifen - sollte man heute eigentlich generell.
Du kannst sie aber über die Schnittstelle des Bausteins weitergeben.
Also gibst du z.B. aus dem Baustein_1 etwas als OUT aus, dass du im Baustein_2 (beide werden in PLC_Prg aufgerufen) wieder verwenden willst. Jetzt könntest du in PLC_Prg eine Variable anlegen, die du an den OUT von Baustein_1 schaltest und an den IN von Baustein_2.
Das sehe ich aber in deinem Fall jetzt erstmal nicht. Wobei ich, wie ich schon geschrieben habe, von dem, was du da gemacht hast, so gut wie nichts erkennen kann ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich wurde mehr oder weniger dazu gezwungen CODESYS für das Projekt zu verwenden. Ich hab das Fach auch nicht gewählt, es war ein Pflichtfach, und tatsächlich haben wir hauptsächlich mit Simatic STEP7 SPS Schaltungen gemacht. Er hat in einer 10 Minuten Vorlesung nur mal kurz gezeigt wie man in CODESYS einen AS Block anlegt, und das wars, deswegen bin ich auch so aufgeschmissen.

@Frohnius magst du mir verraten wie? Ich wäre dir für immer dankbar.
 
Warte, ich hab das ganze anfangs so verschaltet wie im Bild zu sehen ist. Die Variablen wurden initialisiert wie zu sehen ist, und im Oberen Block wird UP und DOWN als IN übergeben, und im unteren Block als OUT geschrieben.IN_OUT.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe ich nicht, hat unser Professor. Wir bekamen eine Liste an IN und OUT Variablen welche uns zur Verfügung stehen. Aber ich zeige dir gerne die IN Liste von meinem Prof. Wie gesagt, wenn wir Variablen brauchen sollen wir selber welche anlegen.IN Liste.png
 
noch etwas Anderes :
du hast an beiden Bausteinen im Bild als OUT die Variablen EG, OG1 und OG2.
Du weißt schon, dass hier nur die im Programm letzte Zuweisung dann Gültigkeit hat ...?
Also egal was der Baustein vorher zugewiesen hat - es gilt nur das, was der sichtbare Baustein "sagt" ...
 
das wäre dann aber POS_EG und nicht IN.POS_EG ...
Also nochmal ... wo kommt IN.POS_EG her ?


Sorry ... allles zurück ... falsch geschaut ...

Dann anders gefragt : wo werden die beschaltet ?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Programm ist so konzeptioniert, dass eine Variable welche als INPUT gesetzt ist eine Aktion auslöst, und sich selbst zurücksetzt wenn der Vorgang abgeschlossen ist. Deswegen will ich ja von einem Baustein an einen anderen Informationen übergeben. Beispielsweise möchte ich, wenn im OG1 der Ruftaster betätigt wird, die Variable OG1 gesetzt wird, damit diese als anzusteuerndes Ziel hinterlegt ist. Sobald der Fahrstuhl dort stehen bleibt soll OG1 zurückgesetzt werden.

POS_EG steht in der globalen Variablenliste IN von unserem Professor. Hilft dir der Screenshot hier weiter? Projektstruktur.jpg
 
Ich habe meinen Beitrag #17 korrigiert (weil ich deinen Screenshot nicht richtig angeschaut hatte).
Ich wiederhole also die Frage - gerade wegen dem, was du zuletzt geschrieben hast : wo werden die beschaltet ?
Das Programm ist so konzeptioniert, dass eine Variable welche als INPUT gesetzt ist eine Aktion auslöst, und sich selbst zurücksetzt wenn der Vorgang abgeschlossen ist
 
Zurück
Oben