Kann mir jemand helfen, Thema DBs und Variable

berieck

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

ich habe meine Erfahrungen im S7 Bereich nur in der Schule bekommen.
Also haupsächlich in Form von Schrittketten programmieren.

Jetzt habe ich ein Problem das ich Überwachungsanlagen programmieren soll und schon vorhande Programme habe.
Nur leider verstehe ich das ganze noch nicht komplett.
Kann mir vielleicht mal einer erklären was in den folgenden Netzwerken genau gemacht wird???

Es ist ein FC für die Verarbeitung von 32 Alarmen. Und zwar wenn der Alarm reinkommt, wenn der Alarm quittiert wurde, wenn der Alarm rausgeht und die Ansteuerung der Alarm Lampe. (So verstehe ich das mal) Aber was jetzt in welchem Schritt genau passiert weiß ich leider nicht.

Und ich würde den dann auch gerne von 32 auf 8 umstellen (das geht warscheinlich ganz einfach wenn man alle DW in B ändert) aber ich würde das zudem auch noch gerne dann in FUP machen.

Wäre schön wenn mir mal jemand erklären könnte was in den einzelnen Schritten passiert, damit ich das auch mal kapiere, denn in Büchern liest man sich tot und versteht dann nur die Hälfte davon. So ist das zumindestens bei mir momentan. Und dann wäre es echt super wenn mir jemand Tipps geben könnte wie ich das in FUP in Byte Form erstellen kann. Leider weiß ich nämlich nicht welche befehle man nimmt in FUP für L oder T und was man für UD nimmt wenn man nur im Byte Bereich arbeiten möchte.
Und was macht der BLD?

Netzwerk 1
Code:
      auf   #in_db
Netzwerk 2
Code:
L     #AL_INP
      L     #AL_SELECT
      UD    
      T     DBD   30
Netzwerk 3
Code:
      U     DBX   33.0
      S     DBX   37.0
      UN    DBX   33.0
      U     DBX   41.0
      R     DBX   37.0
      U     #AL_ACKN
      S     DBX   41.0
      UN    DBX   37.0
      R     DBX   41.0

      U     DBX   37.0
      U     #CY_PULSE
      O     DBX   41.0
      O     #L_TEST
      =     DBX   45.0
Netzwerk 3 ist jetzt auch noch einmal für die anderen 31 Alarme da

Netzwerk 4
Code:
      U     DBX   37.0
      U     #CY_PULSE
      O     DBX   41.0
      O     #L_TEST
      =     DBX   45.0
Netzwerk 36
Code:
      L     DBD   34
      T     #AL_OUT
Netzwerk 37
Code:
      L     DBD   38
      T     #AL_OUT_ACKN
Netzwerk 38
Code:
      L     DBD   42
      T     #AL_LAMPS
Netzwerk 39
Code:
      L     DBD   34
      L     DBD   46
      UD    
      T     DBD   50
      L     DBD   34
      <>D   
      S     #NEW_AL
      L     DBD   34
      L     DBD   38
      ==D   
      R     #NEW_AL
Netzwerk 40
Code:
      L     DBD   34
      L     0
      <>D   
      =     #ACT_AL
Netzwerk 41
Code:
      U     #NEW_AL
      U     #CY_PULSE
      O     
      U     #ACT_AL
      UN    #NEW_AL
      O     #L_TEST
      =     #L_CO_AL
Netzwerk 42
Code:
      U(    
      U     #NEW_AL
      BLD   100
      FP    DBX    2.4
      )     
      S     #H_NEW_AL
      U     #H_OFF
      R     #H_NEW_AL
Netzwerk 43
Code:
      L     DBD   34
      T     DBD   46
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was beim lesen dieses Kauderwelsch deutlich hilfreich wäre,
wäre die Strucktur des DB dessen Nummer mit IN_DB übergeben wird.

Ansonsten gehört sich derjenige der sowas in dem Stil ohne Kommentar schreibt,
fristlos entlassen und aufm Mond entsorgt.

Mfg
Manuel
 
Habe viel Phantasie, aber das NW 3 checke ich nicht.....

Code:
Netzwerk 3
 
      U     DBX   33.0    Alarm
      S     DBX   37.0    Alarm gespeichert
 
      UN    DBX   33.0    Alarm
      U     DBX   41.0    Quittierung gespeichert
      R     DBX   37.0    Alarm gespeichert
 
      U     #AL_ACKN      Quittierung
      S     DBX   41.0    Quittierung gespeichert
 
      UN    DBX   37.0    Alarm gespeichert
      R     DBX   41.0    Quittierung gespeichert
 
      U     DBX   37.0    Alarm gespeichert
      U     #CY_PULSE     Blinktakt
      O     DBX   41.0    Quittierung gespeichert
      O     #L_TEST       Lampentest
      =     DBX   45.0    Alarm Anzeige

Gruß Kai
 
Ansonsten ich versuchs mal:

Code:
auf   #in_db  //Arbeitsdb aufrufen

Code:
      L     #AL_INP
      L     #AL_SELECT
      UD    
      T     DBD   30
Alarme ausmaskieren, mit AL-Select wird festgelegt welche Eingänge des Doppelwortes effektiv zu einer Störung führen sollen.




Code:
      U     DBX   33.0   //Alarm-Eingang
      S     DBX   37.0   //Störungsbit
      UN    DBX   33.0   //
      U     DBX   41.0   //Störungsbit rücksetzten wenn Eingang Low und Quittiert
      R     DBX   37.0   //
      U     #AL_ACKN     //Quittiertaster oder ähnliches
      S     DBX   41.0   //Quittiert-Bit
      UN    DBX   37.0   //
      R     DBX   41.0   //Wenn Störung behoben, dann auch quittierbit rücksetzen

      U     DBX   37.0   //
      U     #CY_PULSE    //
      O     DBX   41.0   //
      O     #L_TEST      //
      =     DBX   45.0  //Vermutlich Einzeilstörunglampe, Blinken = unquittiert, Dauerlicht = Quittiert oder Lampentest

Code:
L     DBD   34
      T     #AL_OUT
Einfach aktuelle anstehende Alarme ausgeben ...

Code:
     L     DBD   38
      T     #AL_OUT_ACKN
Quittierte Alarme (1= Quittiert, 0= Alarm nicht aktiv oder unquittiert)

Code:
   L     DBD   42
      T     #AL_LAMPS
Hier werden die oben erwähnten Einzelstörmeldelampen auf den OUT-Bereich geschoben ...

Code:
      L     DBD   34
      L     DBD   46
      UD    
      T     DBD   50
      L     DBD   34
      <>D   
      S     #NEW_AL
      L     DBD   34
      L     DBD   38
      ==D   
      R     #NEW_AL
Vergleich der aktuellen Alarme, mit den Alarmen aus dem letzten Zyklus (DBD46), dann neuer Alarm ...
Wenn alle Alarme quittiert, dann kein neuer unquittierter Alarm


Der Rest ist nur noch en wenig Lämpchengedrösel, nicht weiter dramatisch ...

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
Netzwerk 3
 
      U     DBX   33.0    Alarm
      S     DBX   37.0    Alarm gespeichert
 
      UN    DBX   33.0    Alarm
      U     DBX   41.0    Quittierung gespeichert
      R     DBX   37.0    Alarm gespeichert
 
      U     #AL_ACKN      Quittierung
      S     DBX   41.0    Quittierung gespeichert
 
      UN    DBX   37.0    Alarm gespeichert
      R     DBX   41.0    Quittierung gespeichert
 
      U     DBX   37.0    Alarm gespeichert
      U     #CY_PULSE     Blinktakt
      O     DBX   41.0    Quittierung gespeichert
      O     #L_TEST       Lampentest
      =     DBX   45.0    Alarm Anzeige

Gruß Kai

Ja... soweit reicht meine Phantasie, aber warum nur bei einem Bit?
Es sind ja deren 32.

Edit: Die Alarmeingänge werden mit einer "Alarmmaske" verwundet, und ins DBD30 geschrieben.
Die Auswertung unten ist "ziemlich" klar aber:
welche Vorrangstellung hat der 33.0er?
 
Zuletzt bearbeitet:
Ja... soweit reicht meine Phantasie, aber warum nur bei einem Bit?
Es sind ja deren 32.

Netzwerk 3 ist jetzt auch noch einmal für die anderen 31 Alarme da
Also Netwerk 3-35 ist schmatisch 32 mal dasselbe für die 32 Bits ...

Edit: Die Alarmeingänge werden mit einer "Alarmmaske" verwundet, und ins DBD30 geschrieben.
Die Auswertung unten ist "ziemlich" klar aber:
welche Vorrangstellung hat der 33.0er?

Wenn du an den Eingang AL_INP nun z.B, das ED0 schreibst, dann entspräche, wenn ich mich jetzt nicht täusche, DBX33.0 dann E0.0 ...

Mfg
Manuel
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Zitat: Netzwerk 3 ist jetzt auch noch einmal für die anderen 31 Alarme da

ist noch EINMAL.... da hat dann wohl doch die Phantasie gefehlt....
gggg (ist noch 31mal für die anderen Alarme da)...lol
Der Programmierer war kein Freund indirekter Adressierung..... lol
 
Moin Moin,

das ist ja eine richtig rege Beteiligung gewesen.
Vielen Dank schon mal. Also was jetzt wo passiert weiß ich schon mal.

Jetzt habe ich noch die Frage offen, welche Bausteine muss ich verwenden wenn ich das ganze in FUP umändern möchte.

Leider weiß ich nämlich nicht welche befehle man nimmt in FUP für L oder T und was man für UD nimmt wenn man nur im Byte Bereich arbeiten möchte.
Ich stelle jetzt auch noch mal den IN_DB rein.

Code:
DB_VAR0    DWORD    DW#16#0    vorläufige Platzhaltervariable    
DB_VAR4    DWORD    DW#16#0    vorläufige Platzhaltervariable    
DB_VAR8    WORD    W#16#0    vorläufige Platzhaltervariable    
DB_VAR10    WORD    W#16#0    vorläufige Platzhaltervariable    
DB_VAR12    DWORD    DW#16#0    vorläufige Platzhaltervariable    
DB_VAR16    DWORD    DW#16#0    vorläufige Platzhaltervariable    
DB_VAR20    WORD    W#16#0    vorläufige Platzhaltervariable    
DB_VAR22    DWORD    DW#16#0    vorläufige Platzhaltervariable    
DB_VAR26    DWORD    DW#16#0    vorläufige Platzhaltervariable    
DB_VAR30    DWORD    DW#16#0    AL_INP + AL_SELECT    
DB_VAR34    DWORD    DW#16#0    AL_MARKER    
DB_VAR38    DWORD    DW#16#0    AL_MARKER QUITT    
DB_VAR42    DWORD    DW#16#0    AL_LAMPS    
DB_VAR46    DWORD    DW#16#0    AL_OLD    
DB_VAR50    DWORD    DW#16#0    AL_NEW ><    
DB_VAR54    DWORD    DW#16#0    vorläufige Platzhaltervariable    
DB_VAR58    DWORD    DW#16#0    vorläufige Platzhaltervariable    
DB_VAR62    DWORD    DW#16#0    vorläufige Platzhaltervariable    
DB_VAR66    DWORD    DW#16#0    vorläufige Platzhaltervariable
Sorry das ich das so kompliziert geschrieben habe.
ist noch EINMAL.... da hat dann wohl doch die Phantasie gefehlt....
gggg (ist noch 31mal für die anderen Alarme da)...lol
Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt habe ich noch die Frage offen, welche Bausteine muss ich verwenden wenn ich das ganze in FUP umändern möchte.

L und T sind in FUP im MOVE-Befehl zusammengefasst L = IN; T = OUT.
UD entspricht WAND_DW.
Außerdem solltest Du OPEN nicht vergessen (AWL = AUF).
So viel zu den Befehlen.

An Deiner Stelle würde ich das aber lassen. Ich bin zwar kein Verfechter der "Alles in AWL"-Philosophie, aber in diesem Fall macht es die Programmbearbeitung wesentlich einfacher.

Aber wie fast alles ist auch das Geschmackssache.

Gruß
maweri
 
Ja, ich würde das auch lieber lassen,
aber ich habe einen Kollegen hier, der kann mit AWL so gar nichts anfangen.
Und damit der das dann auch versteht, wollte ich das gerne in FUP machen.

L und T sind in FUP im MOVE-Befehl zusammengefasst L = IN; T = OUT.
UD entspricht WAND_DW.
Außerdem solltest Du OPEN nicht vergessen (AWL = AUF).
So viel zu den Befehlen.
Das hatte ich mir zwar schon gedacht, aber jetzt habe ich auch die Bestätigung. Danke!

Jetzt habe ich aber noch eine Frage. Denn wie schreibe ich folgendes Netzwerk um in eine Byte Einteilung und nicht DW? Und das dann auch noch in FUP?
Code:
      L     #AL_INP
      L     #AL_SELECT
      UD    
      T     DBD   30
 
Dafür kannst Du WAND_W verwenden. Nur vorher in den Einstellungen im Editor unter KOP/FUP die Typüberprüfung am Operanden abschalten.

Ich weiß aber nicht genau, ob das Ding nicht selbständig das Byte zum Word "auffüllt". Z.B. beim DBB30 das DBB31 "mitnimmt". Aber da nur ins DBB30 geschrieben wird, dürfte das kein Problem geben.
Vielleicht weiß das ja wer anders hier.
 

Anhänge

  • WAND_W.jpg
    WAND_W.jpg
    96,6 KB · Aufrufe: 9
Zurück
Oben