Variablentabelle

Anton234

Level-1
Beiträge
197
Reaktionspunkte
7
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo,
nutze seit längerem in meinem Programm mehrer Betriebstundenzähler, welche ich auf der Siemensseite als download erhalten habe.Siehe


Funktionieren wunderbar, hab nur die Frage, in der Variablentabelle steht, das Merker 80.0 und weitere wie MW84 hinterlegt sind.
Leider werden diese Belegungen nicht unter den Referenzdaten angezeigt; heißt das das dieser Bereich dann trotzdem noch frei ist? Auf was bezieht sich das dann, was in der Variablentabelle steht?

Besten Dank
Andy
 
Zuletzt bearbeitet von einem Moderator:
Die Variablentabelle ist lediglich ein Hilfsmittel um irgendwelche Variablen zu beobachten, bzw. mit irgendwas zu beschreiben.

Ob diese Variablen Faktisch im Programm verwendet werden oder nicht, geht aus der Variablentabelle nicht hervor.
Wenn du die verwendeten Merker/Merwörter in den Referenzdaten nicht findest,
dann sind die wohl auch nicht verwendet.

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Betriebsstundenzähler

nutze seit längerem in meinem Programm mehrer Betriebstundenzähler, welche ich auf der Siemensseite als download erhalten habe. ...
Funktionieren wunderbar, ...
Ist zwar hier nicht Deine Frage, aber unter "funktioniert wunderbar" stelle ich mir was anderes vor als der FB90 von Siemens. :rolleyes:

Wenn Du sekundengenaue Betriebsstundenzähler mit nicht so extremen Zählabweichungen benötigst, dann solltest Du Dir die Betriebsstundenzähler selber programmieren.

Gruß
Harald
 
Ja stimmt, da kann ich PN/DP nur zu stimmen.

Schau dir das mal an:

Der FC:

Code:
    L     B#(31, 3)
      L     W#16#2000
      L     'BY'
      L     'VL'

//;   Betriebsstundenzähler

//;  Takt = Impuls für 1 Zyklus alle 60 Sekunden
Code:
 UN    #Reset                      // alle Werte auf Null setzen
      SPB   m000
      L     0
      T     #Min
      T     #Std
      T     #Tag

m000: UN    #Takt                       // Takt
      SPB   ENDZ
      UN    #Freigabe
      SPB   ENDZ

//;                      // --------------------------------
//;
      L     #Min
      L     1                           // Minuten um 1 erhoehen
      +I    
      T     #Min
//;
      L     60
      >=I   
      SPB   M001
      SPA   ENDZ
//;                      // --------------------------------
M001: L     0
      T     #Min
      L     #Std
      L     1                           // Stunden um 1 erhoehen
      +I    
      T     #Std
//;
      L     24
      >=I   
      SPB   M002
      SPA   ENDZ
//;                      // --------------------------------
M002: L     0
      T     #Std
      L     #Tag
      L     1                           // Tage um 1 erhoehen
      +I    
      T     #Tag

//;                      // --------------------------------
//;
ENDZ: NOP   0
Der Aufruf im OB35:



Code:
U     M     60.1
      =     L     20.0
      BLD   103
      U     M    100.0
      =     L     20.1
      BLD   103
      U(    
      O     E      1.3
      O     E      1.4
      )     
      =     L     20.2
      BLD   103
      CALL  FC   120
       Takt    :=L20.0
       Reset   :=L20.1
       Freigabe:=L20.2
       Std     :=DB4.DBW0
       Min     :=DB4.DBW2
       Sek     :=DB4.DBW4
      NOP   0
 
Bezüglich der Merker kann ich dem MSB nicht ganz zustimmen.
Wenn die Merker nicht über die Referenzliste zu finden sind, können sie immer noch
(grösste Schweinerei) indirekt verwenden worden sein. Also wenn es schon steht, das die Merker verwendet worden sind, damm lieber Finger weg von diesem Merkerbereich.
Gruß, Valdi
 
Ich habe das schon richtig verstanden, du hast ja auch vollkommen recht damit. ;)
Wobei ich mich wie gesagt dagegen entschlossen hatte, diese Hinterfotzigkeiten kund zu tun.

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn die Merker nicht über die Referenzliste zu finden sind, können sie immer noch
(grösste Schweinerei) indirekt verwenden worden sein.
Wobei ich mich wie gesagt dagegen entschlossen hatte, diese Hinterfotzigkeiten kund zu tun.
Wow, welch harte Worte.
Schweinerei, Hinterfotzig? Leute, ich habe das schon gemacht und fühle mich: "Nicht schuldig".
Die Tatsache dass ich die Merker nicht mehr finde ist mir bewusst und das geht natürlich gar nicht.
Deshalb mache ich bei solchen Aktionen folgendes:
Code:
[COLOR=black][FONT=Verdana]L 0[/FONT][/COLOR]
[COLOR=black][FONT=Verdana]T MW 4   // Dieses Nullschreiben dient nur zur Auffindung in der Referenzliste[/FONT][/COLOR]
[COLOR=black][FONT=Verdana]// In den folgenden Anweisungen werden die einzelnen[/FONT][/COLOR]
[COLOR=black][FONT=Verdana]// Merker von dem Merkerwort 4 indirekt beschrieben.[/FONT][/COLOR]
[COLOR=black][FONT=Verdana]...[/FONT][/COLOR]
[COLOR=black][FONT=Verdana]...[/FONT][/COLOR]
Nun wird das Merkerwort 4 in der Referenzliste gefunden und im Kommentar steht ja dann alles andere. Der Kommentar steht dann wirklich so drin.
Ich muss halt nur aufpassen, das meine Merker dann wieder in jedem Zyklus den Zustand annehmen den sie sollen.
Spricht da etwas dagegen? Wäre doch wieder mal Zeit für eine offene Diskussion. ;)
 
@Paule
Wie kannst du nur, Pfui Deibel, sowas gehört verboten, dir sollte man die Tastatur um die Ohren hauen ... *ROFL*

Und jetzt mal ernsthaft:
- Jeder der "intensiver" Programmiert, weiß das es diese Möglichkeiten gibt
- Jeder kennt das Problem "Referenzdaten", manche basteln außenrum, wie du,
anderen ist das von Haus aus egal.

Aber, das muss man einen Anfänger wie hier, ja nicht gleich in der gänze kundtun,
wenn die Zeit reif ist, merkt derjenige das sowieso, das es noch mehr als U O gibt.

Mfg
Manuel
 
Aber, das muss man einen Anfänger wie hier, ja nicht gleich in der gänze kundtun,
wenn die Zeit reif ist, merkt derjenige das sowieso, das es noch mehr als U O gibt.
Ja da hast Du wohl Recht.
Puh, jetzt bin ich ja wieder beruhigt. War nur die Art wie Ihr das Verurteilt habt, bin sensibel. ;)
anderen ist das von Haus aus egal.
Das ist natürlich absolut übel und gehört strafrechtlich verfolgt. ;)
Steigerung oder gleichwertig ist dann nur noch "Know how ??? perfekt ?" :sb5:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie findet man indirekte Zugriffe auf Variablen?

Ich mache das so:
Ich erzeuge aus allen Programm-Bausteinen eine einzige AWL-Quelle und durchsuche diese dann nach [, AR1 und AR2.
Wenn sehr viele direkte Zugriffe auf Arrays vorhanden sind, dann entferne ich die symbolischen Namen der DB aus
der Symboltabelle. Dann werden die DB-Zugriffe mit der absoluten Adresse ohne eckige Klammern dargestellt.

Beim Verdacht, daß eine Variable irgendwie benutzt wird, kann man auch im Simulator per Variablentabelle die
Variable beschreiben und schauen, ob der Schreibwert drin stehenbleibt. So kann man aber nur nachweisen, daß sie
benutzt wird, wenn sie sich ändert. Wenn sie sich nicht ändert, dann heißt das nicht, daß sie nicht benutzt wird!

Bei Knowhow-geschützten Bausteinen sollte man davon ausgehen können, daß tatsächlich nur auf die Variablen der
Aufrufschnittstelle und ggf. des Instanz-DB zugegriffen wird (zumindest, wenn der Baustein von Siemens ist). Aber
auch da hat man keine Sicherheit. Zum Glück gibt es aber Tools, die einem den Programmcode solcher Bausteine
zugänglich machen.

Am "schönsten" finde ich solche Universal-Kopierbausteine, wo die DB-Nummern und Offsets von Quell- und Ziel-DB
als INT an die Baustein-Eingänge geschrieben werden. Da darf man dann JEDEN Aufruf dieser Bausteine kontrollieren.

In meinen Programmen mache ich es fast genauso wie Paule. Wenn ich indirekt auf Datensätze, Arrays oder Variablen
zugreifen muß, dann mache ich zusätzlich einen programmtechnisch unnötigen Zugriff auf das erste Element des
betroffenen Bereiches. Nur, damit mein Zugriff in der Referenzliste erscheint und ich (und andere Programmierer)
diesen Zugriff später finden. Ich überspringe aber meistens den Referenz-Zugriff.
Mein Referenz-Zugriff ist dann auch in der Art des nachfolgenden indirekten Zugriffs eine Lese- oder Schreib-
Operation: L, T, U, S, R, =. Mein Kommentar beschränkt sich aber auf: "//nur für Referenzliste".
Code:
//Programmteil mit lesendem indirekten Zugriff
      SPA   M1
      L     DB100.DBW 10                //nur für Referenzliste
M1:   L     #Index
      ...

//Programmteil mit schreibendem indirekten Zugriff
      SPA   M2
      T     DB100.DBW 10                //nur für Referenzliste
M2:   L     #Index
      ...

//Programmteil mit schreibendem indirekten Bit-Zugriff
      SPA   M3
      R     DB100.DBX 8.0                //nur für Referenzliste
M3:   L     #Index
      ...
Auch auf das Taktmerker-Byte der CPU mache ich im OB1 einen lesenden Byte-Zugriff, damit das ganze Byte als
benutzt in der Referenzliste auftaucht.

Bei speicherindirekten Zugriffen wie "AUF DB[MW22]" oder "L MW[LW4]" oder "SE T[DBW8]" wird es schon schwieriger,
einen geeigneten Referenz-Zugriff zu formulieren. Solche Sachen werden aber eher selten benutzt und die Programme
sind dann meistens hinreichend kommentiert.

Man kann sich allerdings nicht darauf verlassen, daß fremde Programmierer freundlicherweise Referenz-Zugriffe in ihr
Programm eingebaut haben. Die meisten SPS-Programmierer, mit denen ich zu tun hatte, wissen garnicht von dieser
Problematik oder scheren sich einen Dreck drum, ob ihr Programm wartungsfreundlich ist. Sowas kostet ja Zeit und
macht zusätzliche "unbezahlte" Arbeit.

Um sich selbst die Arbeit zu erleichtern, sollte man aber die paar Sekunden investieren und sich angewöhnen, solche
Referenz-Zugriffe einzubauen. Man wird ja älter und hat irgendwann nicht mehr alle selbstgeschriebenen Programme im
Kopf.

Gruß
Harald
 
Besten Dank für die vielen Antworten; aber gibts denn keinen der die Betriebstundenzähler von Siemens einsetzt (FB90) und mir gewissenhaft sagen kann, dass diese Merker, welche in der Variablentabelle aufgeführt sind, vergeben sind.
Vorrausgesetzt, die Merker finden Verwendung, warum werden sie dann nicht in den Referenzdaten aufgeführt; wurde doch schließlich von den Jungs von Siemens höchstpersöhnlich erstellt.Kennen die etwa die Problematik nicht ???
Den Bereich kann ich zur Überprüfung auslesen, angenommen ich verwende hierfür DW, besteht keine Verwendung, dann sind die DWs jederzeit 0 ??
Besten Dank
andy
 
@Paule
Wie kannst du nur, Pfui Deibel, sowas gehört verboten, dir sollte man die Tastatur um die Ohren hauen ... *ROFL*

Und jetzt mal ernsthaft:
- Jeder der "intensiver" Programmiert, weiß das es diese Möglichkeiten gibt
- Jeder kennt das Problem "Referenzdaten", manche basteln außenrum, wie du,
anderen ist das von Haus aus egal.

Aber, das muss man einen Anfänger wie hier, ja nicht gleich in der gänze kundtun,
wenn die Zeit reif ist, merkt derjenige das sowieso, das es noch mehr als U O gibt.

Mfg
Manuel

Hallo Manual,
ich bin auch gegen Lehrgänge im Forum, aber es steht nun mal fest.

1. Wenn die Merker in der Referenzliste nicht auftauchen, sind sie nicht zwangsläufig frei.
2. Gerade Anfänger tappen oft in diese Falle und suchen sich einen Wolf.
(habe schon von "kaputten Merkern" gehört.)

Mir war wichtig nur ein Hinweis auf diese Möglichkeit und gerade Anfänger sind auf solche Hinweise oft angewiesen.

Und ich bleibe bei meiner (und deiner) Meinung, dass die indirekte Adressierung viel zu oft aus Bequemlichkeit oder aber auch ganz bewusst eingesetzt wird, und der Instandhaltung das Leben schwer macht.
Gruß, Valdi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
FB90 ist sauber

aber gibts denn keinen der die Betriebstundenzähler von Siemens einsetzt (FB90) und mir gewissenhaft sagen kann, dass diese Merker, welche in der Variablentabelle aufgeführt sind, vergeben sind.
Vorrausgesetzt, die Merker finden Verwendung, warum werden sie dann nicht in den Referenzdaten aufgeführt
Ich habe eben mal Deinen Baustein FB90 "OHM_BSZ" aus dem Siemens Support heruntergeladen.
Hier noch einmal der korrekte Link zum Beitrag
Wie kann ich für mehr als 8 Betriebsmittel die Betriebsstunden zählen?

Der Baustein ist nicht geschützt, somit kann jedermann den Programmtext analysieren.
Der Baustein benutzt definitiv KEINE globalen Variablen, sondern NUR eigene temporäre Variablen und
Variablen des eigenen Instanz-DB. Das sieht man schon daran, daß alle Variablen-Symbole mit # beginnen.

Die im Projekt enthaltene Variablentabelle zeigt die nur in diesem Beispielprojekt benutzten Variablen (Merker)
an. Siehe OB1. Setzt man den FB90 in eigenen Projekten ein, dann kann man andere Merker benutzen.

Wenn man die Referenzdaten neu generiert, dann werden alle verwendeten Merker korrekt aufgelistet.

Aber wie ich in #3 schon sagte, ich würde diesen ungenauen Monster-Baustein nicht einsetzen.
Wofür braucht man um Himmels willen 2006 Byte Arbeitsspeicher für einen simplen Betriebsstundenzähler?

Gruß
Harald
 
ok, nochmals vielen Dank für die ausführliche Antwort.

d.h der Baustein frisst jede Menge Arbeitsspeicher und ist dazu noch ungenau?
Nutze den Baustein insgesamt 10 Mal, d.h. Arbeitspeicher wird im großen Stile verschwendet, natürlich schlecht.
Gibts dann mittlerweile noch nichts besseres von Siemens.
Danke
 
Zurück
Oben