Step 7 STL Programmierproblem: Wie man unterschiedliche DB Blöcke aufruft

slavko

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Liebe Experten,
Ich bin neu in der AWL-Programmierung und ich habe ein Problem, das ich nicht lösen kann.
Ich arbeite an einem Programm, das die Temperatur in den 10 Zimmern steuert. Jedes Zimmer verfügt über drei Eingänge: für Zimmer eins: EW10 Referenztemperaturwert, IW12 Messung, IW14 Arbeitsmodus (0 Heizung, 1 Kühlung sendet man an Bit 4) und zwei Ausgänge AW10-Heizung (auch bit 4), , QW12 Kühlung (auch bit 4), Für Zimmer zwei IW16 Referenztemperaturwert, IW18 Messung, EW20 Arbeitsmodus (0-Heizung, 1 Kühlung) und zwei Ausgänge QW14-Heizung, QW16 Kühlung und so weiter, bis Zimmer 10.
Ich arbeite auch an der Berechnung der Anzahl der Zimmer mit Personen im gegensatz zur dem Anzahl der Zimmer, die leer sind.
Ich habe mein Programm beigelegt und wäre dankbar, wenn jemand mir sagen kann, was ich falsch mache.
Vielen Dank im foraus
 

Anhänge

  • Slavko_Batinic_Project.zip
    483,9 KB · Aufrufe: 4
Gruß Gott im Forum!

Also ganz neu wirst Du wohl nicht sein.

Zu allererst:
was funktioniert denn nicht? Du kannst ja nicht erwarten, dass Dir wer den gesamten Code durchschaut.

Weiters:
Den OB1 - Code würde ich säuberlich in einen FC/FB einbetten... ist eigentlich nicht üblich im OB1 unzählige Tempvariablen anzulegen.
Die Symbolik hat keine Bezeichnungen/Klartext
Bei der Umrechung von Raum auf EW- Adresse schreibt man üblicherweise statt L8 *D besser SLD3.
Deine Beschreibung EW10 (wäre bei mir Eingangswort 10) gibt es in der Hardware nicht, da beginnt es bei EW288- im Programm ist es aber so programmiert, da beginnt der 1.Referenzwert bei EW10.
Ich habe auch keine Ahnung wie die HW-Konfig aussehen soll: EW10 + 12 ist Analogeingabe und dann kommt 14.0 bis 15.7 eine DE-Karte? Und für die 10 DE's brauchst Du dann 10 DE-Karten?
Uns selbst wenn das so irgendwie funktionieren sollte (was ich nicht annehme), was machst Du wenn ein Analogeingang defekt wird und Du einen anderen verwenden willst?


Also Nein- so programmiert man nicht!
Tipp:
Einen FB für die Regelung programmieren.
Den rufst Du dann 10 x auf mit den Adressen wo Deine Peripherie liegt, damit das auch wieder änderbar ist.

Gruß
Karl
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sehr geehrter Herr Karl

Erstmal Danke für Ihre Antwort. Was nich funktioniert ist das die CPU in STOP geht u SF Rot leuchtet (PLCSIM) und ich weiss nicht warum.
Diese Aufgabe gab mir ein Professor, um besser indirekte Adressierung zu lernen. Ihr Vorschlag einen FB für die Regelung programmieren und dann 10 aufrufen ist nicht akzeptabel denn ich hate diese Idee am amfang aber der Professor hat sie nicht akzeptiert.
Adressen für jedes Zimmer mit drei aufgelisteten Eingängen und zwei Ausgängen verstehe ich auch nicht .Die einzige logische Erklärung ist es dass es schwieriger zu lösen sein wird.

Meine Idee für die Lösung des Problems ist es FB25 für die Regelung in einer Schleife aufrufen während der Inhalt jedes Datenblocks zur entsprechendem Zimmer im DB100 kopirt wird, der Instanz Datenblock der FB25 ist, woraufhin die modifizierten Inhalte des DB100 in dir entsprechenden Datenblocks zur entsprechendem Zimmer zurück kopiert werden.

Ich weiß nicht, ob meine Idee richtig ist, und op auf diese Weise das Problem gelöst werden kann. Ich bin offen für Vorschläge

Vielen Dank im Voraus
 
Ihr Vorschlag einen FB für die Regelung programmieren und dann 10 aufrufen ist nicht akzeptabel denn ich hate diese Idee am amfang aber der Professor hat sie nicht akzeptiert.
[...]
Meine Idee für die Lösung des Problems ist es FB25 für die Regelung in einer Schleife aufrufen
Eine solche Lösung wäre total aufwendig und praxisfremd und absolut nicht wartbar. So programmiert kein professioneller Programmierer.
Wenn der Professor will, daß Ihr indirekte Adressierung lernt, dann könnte er Euch besser einen FIFO oder einen Ringpuffer programmieren lassen.

Bei Siemens gibt es keine Arrays of Instanzen, mit denen man die Schleife halbwegs lesbar programmieren könnte. Bleibt dann noch das aufwendige und völlig undurchsichtige Umkopieren von Instanzen in einen Work-DB oder eine Fallunterscheidung für 10 unterschiedliche Aufrufe - da kann man auch gleich die ganze Schleife weglassen. Die umständliche indirekte Zuordnung der Eingänge und Ausgänge zu den Instanzen ist da auch noch zu lösen. Und alles nur, um nicht 10x nacheinander einen FB-Aufruf hinzuschreiben ... :roll:

Weitere mögliche Schweinereien für FB-Aufrufe mit wechselnden Instanz-DB stammen aus dem vorigen Jahrtausend und sind eines Lehrers unwürdig, der modernes Wissen und Methoden vermitteln will. Zumal diese uralten Methoden auf den neueren Siemens-SPS sogut wie nicht mehr machbar sind.

Harald
 
Was nich funktioniert ist das die CPU in STOP geht u SF Rot leuchtet (PLCSIM) und ich weiss nicht warum.


Gut, Harald hat das perfekt beschrieben, was von der ganzen Sache zu halten ist.




Um Dir in diesem Dilemma trotzdem zu helfen:
Fehlerdiagnose der CPU auslesen.
Ich nehme an, dort wird ein Peripheriezugriffsfehler sein, weil die von Dir beschriebenen Eingangsworte nicht existieren.

Also müsstest Du die HW- Konfig mal anpassen- mit 2 kanaligen AE Karten und einer DE-Karte.
Dann kann man weiterschauen.

Ich nehme an, dass Du die Originalaufgabe nicht posten kannst- vermutlich ist diese nicht auf deutsch/englisch.
Von wo kommst Du?
 
Zurück
Oben