Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 10 von 10

Thema: Sicherheitsabfrage in SCL hat nicht funktioniert

  1. #1
    Registriert seit
    11.02.2009
    Ort
    01968 Brieske
    Beiträge
    105
    Danke
    25
    Erhielt 6 Danke für 6 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    beim Programmieren in Siemens S7 SCL hat meine Sicherheitsabfrage nicht funktioniert. Hat jemand eine Idee, weshalb diese Abfrage nicht gegriffen hat?

    Teil meines Programms:
    // Analogeingang einlesen
    Analogeingang:= (WORD_TO_INT(Peripherieeingangswort));

    // Berechnung
    Analogausgang:= Analogeingang + Offset;

    // Sicherheitsabfrage
    IF Analogausgang < 0 THEN Analogausgang:= 0;
    END_IF;
    IF Analogausgang > 27000 THEN Analogausgang:= 27000;
    END_IF;

    // Analogausgang ausgeben
    DB1.DW0:= INT_TO_WORD(Analogausgang);

    Beim Auslesen des Offset habe ich einen Fehler in meinem Programm gehabt. Normalerweise wollte ich meine Offsetwerte aus dem Datenbaustein folgende Datenwörter holen: DW0; DW2, DW4,… Habe allerdings folgende Werte ausgelesen: DW0; DW1; DW2; DW3… Mir ist klar, das ich im DW1 und 3 nur Müll zu stehen habe, aber durch meine Sicherheitsabfrage sollte dies ja abgefangen werden. Passiert aber nicht???
    Ich habe mir die Werte die ausgegeben werden angeschaut. Ich lese extrem große Werte (z.B. X hoch 43) aber auch negative Werte. Wie kann das sein?
    Zitieren Zitieren Sicherheitsabfrage in SCL hat nicht funktioniert  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    X hoch 43 ist Real-Format, du gibst aber Word aus! Schau dir mal an, was da nun wirklich als Word ausgegeben wird.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Zitat Zitat von DiGo1969 Beitrag anzeigen
    Normalerweise wollte ich meine Offsetwerte aus dem Datenbaustein folgende Datenwörter holen: DW0; DW2, DW4,… Habe allerdings folgende Werte ausgelesen: DW0; DW1; DW2; DW3… Mir ist klar, das ich im DW1 und 3 nur Müll zu stehen habe, aber durch meine Sicherheitsabfrage sollte dies ja abgefangen werden. Passiert aber nicht???
    Ob da immer sicher "Müll" drin steht will ich mal dahin gestellt sein lassen ...
    Wenn du deinen Fehler aber doch kennst, warum beseitigst du ihn dann nicht ? Wie lädst du dir die Datenworte aus dem DB ? Ich würde hier schon zusehen, dass ich die DBW's korrekt einlese ...

    Gruß
    LL

  4. #4
    DiGo1969 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    11.02.2009
    Ort
    01968 Brieske
    Beiträge
    105
    Danke
    25
    Erhielt 6 Danke für 6 Beiträge

    Standard

    zu den Datentypen nach: Analogeingang und –ausgang ist Word und der Rest ist INT (Offset und Sicherheitsabfrage).
    Das in den Werten „Müll“ steht muss ja sein, denn ich lese aus dem höher- und niederwertigen Byte des jeweilig anderem Datenwort.
    Was mich interessiert ist, warum die Sicherheitsabfrage nicht gegriffen hat? Kann es vielleicht sein, das die SPS bei der Berechnung prüft, ob die Werte zur Berechung in bestimmten Bereichen sein müssen? Sollte dies nicht sein, werden alle Werte ohne Berechnung durchgeschoben?????

    MfG Dirk

  5. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Hallo Dirk,
    mein Ansatz hier war :
    Du weißt, dass deine "wirklichen" Daten in den DBW0 , 2 , 4 ... stehen.
    Warum liest du dann auch die DBW 1 , 3 , 5 ... ein, wenn du doch weißt, dass diese sich aus der Überschneidung der Bytes von den Vorgänger / Nachfolger-DBW's bilden - also DBW 1 überschneidet sich mit DBW0 und DBW2.
    Beim Einlesen des DBW1 mußt du hier nicht zwangsläufig einen unsinnigen Inhalt einlesen. Es ist immer davon abhängig, was du in DBW0 und DBW2 drin stehen hast. Das mußt du berücksichtigen.

    Also wiederhole ich nochmals meine Frage :
    Wie lädtst du dir die Datenworte aus dem DB ? Ich würde hier schon zusehen, dass ich die DBW's korrekt einlese ...
    Vielleicht solltest du dein SCL-Script hier mal einstellen ...

    Gruß
    LL

  6. #6
    Registriert seit
    21.07.2008
    Beiträge
    1.066
    Danke
    51
    Erhielt 140 Danke für 136 Beiträge

    Standard

    Gut es geht ihm ja nur darum warum seine Vergleicher nicht funktioniert haben.

    Schreib nochmal genau auf welche Datentypen für welche Variable zugeordnet sind, irgendwie passt dein code so nicht.

  7. #7
    DiGo1969 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    11.02.2009
    Ort
    01968 Brieske
    Beiträge
    105
    Danke
    25
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Hallo Leute,
    ja, genau – es geht nur darum, warum der Vergleicher nicht funktioniert hat...

    Teil meines Programms:
    // Analogeingang einlesen
    Analogeingang:= (WORD_TO_INT(Peripherieeingangswort));

    // Berechnung
    Analogausgang:= Analogeingang + Offset;

    // Sicherheitsabfrage
    IF Analogausgang < 0 THEN Analogausgang:= 0;
    END_IF;
    IF Analogausgang > 27000 THEN Analogausgang:= 27000;
    END_IF;

    // Analogausgang ausgeben
    DB1.DW0:= INT_TO_WORD(Analogausgang);



    Peripherieeingangswort = WORD
    Analogeingang = INT
    Analogausgang = INT
    Offset = INT
    Den DB1.DW0 transferiere ich in einem anderem Baustein dann direkt in den Analogausgang (L DB1.DW0; T PAW 512)

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    OK ... und wie beschreibst du nun das DBW1 ?
    oder liest du das PEW in Byte-Spüngen aus ?

    Gruß
    LL

  9. #9
    DiGo1969 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    11.02.2009
    Ort
    01968 Brieske
    Beiträge
    105
    Danke
    25
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Hallo LL,
    ich beschreibe doch das DBW1 nicht. Wo ich mir das angeschaut habe, waren im PEW Werte um die 6500 und iIm DBW0, DBW2, DBW4 usw. stehen INT-Werte (um die 800 herum).
    Vielleicht noch einmal zum Verständnis:
    - Einlesen des PEW
    - Einlesen des Offset (DBW0...)
    - Berechnung: DB1.DBW0:= PEW(gewandelt in INT) + Offset
    - Sicherheitsabfrage
    - Ausgabe des DB1.DBW0
    und hier habe ich im DB1.DBW0 Werte kleiner 0 und größer 27000. Welche nur aus dem Einlesen der falschen Werte (DBW1, DBW3, DBW5...) kommen können, denn nach Berichtigung meines Programmfehlers waren die ausgegebenen Werte innerhalb meises Sicherheitsfensters.

    Ich habe noch in einer Excel-Tabelle versucht, das Problem zu verdeutlichen.

    MfG Dirk
    Angehängte Dateien Angehängte Dateien

  10. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Dirk,
    der Aufbau eines Datenbausteins ist mir schon klar. Was du mit deiner Excel-Tabelle sehr schön veranschaulicht hast ist ja auch das, was ich schon eingangs geschrieben habe - der Wert, der im DBW1 steht (welches sich aus dem DBW0 und 2 zusammensetzt) muss nicht zwangsläufig eine nicht-legale Zahl ergeben.

    Ich wiederhole also noch einmal meine Frage :
    Wieso und wo liest du überhaupt das DBW1 etc. ein, wenn du doch genau weißt, das dessen Inhalt für dich nicht brauchbar ist und du auch weißt, dass das nächste DBW, dass auf DBW0 folgt das DBW2 ist ?

    Vielleicht schreibst du ja dazu mal etwas ... (gerne auch vielleicht mit Quell-Code)
    Ansonsten weiß ich nicht, wie ich dir weiterhelfen soll ...

    Gruß
    LL

Ähnliche Themen

  1. Simulation funktioniert nicht
    Von Bensen83 im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 15.03.2010, 21:40
  2. MID-FC in SCL funktioniert nicht
    Von nobby_nobbs im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 19.03.2009, 02:14
  3. Quittierung SPS funktioniert nicht
    Von The Big B. im Forum HMI
    Antworten: 0
    Letzter Beitrag: 19.01.2009, 16:55
  4. MMC funktioniert nicht
    Von MesSen-Nord im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 23.10.2008, 11:06
  5. TD 200 C funktioniert nicht
    Von -Andrea- im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 14.04.2005, 20:41

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •