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

Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 33

Thema: Fehlermeldung in SCL

  1. #21
    Registriert seit
    29.03.2004
    Beiträge
    5.800
    Danke
    144
    Erhielt 1.710 Danke für 1.240 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn du Absolutadressierung verwendest, wird überhaupt nicht geprüft wie der Datentyp in dem Datenbaustein ist.
    Es wird nichtmal geprüft ob der Datenbaustein überhaupt im Bausteinordner vorhanden ist.

    Wenn du eine Überprüfung haben möchtest, musst du symbolisch programmieren.

  2. #22
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Wenn du Absolutadressierung verwendest, wird überhaupt nicht geprüft wie der Datentyp in dem Datenbaustein ist.
    Es wird nichtmal geprüft ob der Datenbaustein überhaupt im Bausteinordner vorhanden ist.

    Wenn du eine Überprüfung haben möchtest, musst du symbolisch programmieren.
    Ok, das wusste ich auch nicht.

    Aber dennoch funktioniert die Positionierung des Linearmotors, wenn ich das so schreibe... ist dann ja auch seltsam, weil ja dann der DB überhaupt keinen DINT-Wert sondern einen DWORD-Wert erhält, oder?


    Noch etwas:

    Nach all dem Gesagten versuche ich das mal symbolisch zu machen...

    Was mir jedoch auch noch nicht klar ist, wenn ich in der Symboltabelle z.B. eine Variable (Wert) anlege und in diese dann eine Zahl lade, dann sieht das in SCL zunächst so aus:

    Wert := 10;

    Nun kann ich die Variable Wert auch in Anführungszeichen setzen und dann sieht es so aus:

    "Wert" := 10;

    Ist da jetzt ein Unterschied?

    PS: Was tät ich nur ohne euch...
    LG
    spirit

  3. #23
    Registriert seit
    25.06.2007
    Ort
    Dresden
    Beiträge
    3.930
    Danke
    465
    Erhielt 878 Danke für 634 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Wenn du eine Überprüfung haben möchtest, musst du symbolisch programmieren.
    Wenn den Projekt auf der Einstellung "Symbolisch - bei allen Zugriffen" steht, kann sogar der IDB neu erstellt werden ohne
    das du die Verbindung zur Variable verlierst. Ob man es dann gutheißen sollte von aussen in einen IDB zu fassen ist, dann
    eine andere Frage, die hier schon oft diskutiert wurde.

    Ich würde das Thema Absolutzugriff, d.h. ohne Symbolik, an deiner Stelle beerdigen.
    Grüße Frank

  4. #24
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von IBFS Beitrag anzeigen

    Ich würde das Thema Absolutzugriff, d.h. ohne Symbolik, an deiner Stelle beerdigen.
    Ok, dann mache ich das mal...

    Nun, wie fange ich so eine symbolische Programmierung an?

    Ich habe ja im Bausteinordner einen DB17; dieser heißt in der Symboltabelle z.B. Controller_DB.


    Da ich ja in diesen Datenbaustein Daten ein- und auslesen möchte, muss er wohl als IN-OUT-Parameter deklariert werden.

    Also sagen wir mal:


    VAR_IN_OUT

    LinearDB.Position : DINT;

    END_VAR


    Im SCL-Baustein lade ich dann wie folgt:

    LinearDB.Position := ( DINT# 198 );


    Im OB1 lautet beim Aufruf die Übergabe:

    LinearDB.Position := "Controller_DB".DBD22

    1)
    Kann das so funktionieren?

    2)
    Was mir jedoch auch noch nicht klar ist, wenn ich in der Symboltabelle z.B. eine Variable (Wert) anlege und in diese dann eine Zahl lade, dann sieht das in SCL zunächst so aus:

    Wert := 10;

    Nun kann ich die Variable Wert auch in Anführungszeichen setzen und dann sieht es so aus:

    "Wert" := 10;

    Ist da jetzt ein Unterschied?
    LG
    spirit

  5. #25
    Registriert seit
    29.03.2004
    Beiträge
    5.800
    Danke
    144
    Erhielt 1.710 Danke für 1.240 Beiträge

    Standard

    Zitat Zitat von spirit Beitrag anzeigen
    Aber dennoch funktioniert die Positionierung des Linearmotors, wenn ich das so schreibe... ist dann ja auch seltsam, weil ja dann der DB überhaupt keinen DINT-Wert sondern einen DWORD-Wert erhält, oder?
    Wie schon geschrieben: Mit DINT_TO_DWORD wird das Bitmuster 1:1 übernommen.

    Der Wert DINT#198 hat das Bitmuster: 2#0000_0000_0000_0000_0000_0000_1100_0110
    Nach DINT_TO_DWORD steht genau dieses Bitmuster auch das Ergebnis der Funktion, und bei dir in der Zielvariable.
    Wenn du dieses Bitmuster später als DINT interpretierst, erhältst du darum wieder deine 198.

    Anders verhalten sich andere Konvertierungsfunktionen wie INT_TO_DINT, oder DINT_TO_REAL, wo das Bitmuster entsprechend angepasst wird.

    Zitat Zitat von spirit Beitrag anzeigen
    Was mir jedoch auch noch nicht klar ist, wenn ich in der Symboltabelle z.B. eine Variable (Wert) anlege und in diese dann eine Zahl lade, dann sieht das in SCL zunächst so aus:

    Wert := 10;

    Nun kann ich die Variable Wert auch in Anführungszeichen setzen und dann sieht es so aus:

    "Wert" := 10;

    Ist da jetzt ein Unterschied?
    Wenn du die Variable ohne Anführungszeichen verwendest, wird dafür entweder eine lokale oder die globale Variable verwendet.
    Ist die Variable Wert lokal und auch global in der Symboltabelle vorhanden, wird mit

    Wert := 10;

    immer auf die lokale Variable geschrieben. D.h. dann hat das lokale Symbol Vorrang.

    Mit der Variable in Anführungszeichen:
    "Wert" := 10;
    wird immer auf das globale Symbol aus der Symboltabelle bezug genommen.

  6. #26
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    So, habe das jetzt mal versucht symbolisch zu machen...


    In meinem Bausteinordner gibt es besagten DB17; dieser heißt in der Symboltabelle Controller_DB.

    In SCL habe ich deklariert:

    VAR_IN_OUT
    LinearDB_Position : DINT;
    END_VAR

    Das Laden (in SCL) sieht nun wie folgt aus:

    LinearDB_Position := DINT#198 ;


    Im OB1 lautet beim Aufruf die Übergabe:

    LinearDB_Position := "Controller_DB".DBD22


    Kann es jetzt leider nicht mehr testen; aber beim kurzen Drübersehen - kann das so klappen?


    Vielen Dank!
    LG
    spirit

  7. #27
    Registriert seit
    29.03.2004
    Beiträge
    5.800
    Danke
    144
    Erhielt 1.710 Danke für 1.240 Beiträge

    Standard

    Nein, an Adresse DBD22 sollte in dem DB dann ein entsprechendes Symbol stehen was du dann verwenden musst.
    Code:
    DATA_BLOCK Controller_DB
        STRUCT
            was_auch_immer : ARRAY[0..21] OF BYTE;
            Position : DINT;
        END_STRUCT
    BEGIN
    END_DATA_BLOCK
    Dann machst du bei der Parameterübergabe:
    Code:
    LinearDB_Position := "Controller_DB".Position

  8. #28
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    ... wobei ich dir empfehlen würde, diese Art der Programmierung zu vermeiden. Es ist machbar und funktioniert - gar keine Frage. Ich persönlich finde es aber Sch....e - sorry.
    Wenn du "von außen" Werte in deine FB (oder FC's) hinein brauchst dann ist m.E. die Baustein-Schnittstelle (IN, OUT, INOUT) der richtigere Weg.
    Aber du bist selbst der Herr (die Herrin) deiner Werke ...

    Gruß
    Larry

  9. #29
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Nein, an Adresse DBD22 sollte in dem DB dann ein entsprechendes Symbol stehen was du dann verwenden musst.

    Dann machst du bei der Parameterübergabe:
    Code:
    LinearDB_Position := "Controller_DB".Position
    Ja Thomas, danke. Das hatte ich jetzt falsch wiedergegeben. Sobald ich im OB1 (Parameterübergabe) DB17.DBD22 eingebe und ENTER drücke erscheint automatisch:

    "Controller_DB".Position

    Dann sollte das ja so stimmen, oder?

    Und wenn ich es richtig verstanden haben, dann ist ein Vorteil dieser symb. Programmierung z.B. der, dass ich beim Laden von Zahlen keine Wandlung mehr vornehmen muss, da ich ja deklariert habe, dass es sich bei der Variablen "LinearDB_Position" um den Datentyp "DINT" handeln soll.

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    ... wobei ich dir empfehlen würde, diese Art der Programmierung zu vermeiden. Es ist machbar und funktioniert - gar keine Frage. Ich persönlich finde es aber Sch....e - sorry.
    Wenn du "von außen" Werte in deine FB (oder FC's) hinein brauchst dann ist m.E. die Baustein-Schnittstelle (IN, OUT, INOUT) der richtigere Weg.
    Aber du bist selbst der Herr (die Herrin) deiner Werke ...

    Gruß
    Larry
    Hi Larry,

    hm - ich nehme jetzt mal an, dass du dich auf meine ersten Beiträge in diesem Post beziehst? Denn die letzteren handeln ja bereits davon, dass ich zu einer symbolischen Programmierung übergehen will - also auch mit den Baustein-Schnittstellen arbeiten möchte...

    Natürlich ist jeder Herr/Herrin seiner Werke - aber ich bin sehr dankbar für eure super Unterstützung hier im Forum. Und sehr gerne nehme ich eure Ratschläge an und versuche sie (mehr oder weniger gut) in die Praxis umzusetzen. Denn genau das fehlt mir ja ganz massiv; Erfahrung und Praxis!

    Lieben Dank euch!
    LG
    spirit

  10. #30
    Registriert seit
    29.03.2004
    Beiträge
    5.800
    Danke
    144
    Erhielt 1.710 Danke für 1.240 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von spirit Beitrag anzeigen
    Ja Thomas, danke. Das hatte ich jetzt falsch wiedergegeben. Sobald ich im OB1 (Parameterübergabe) DB17.DBD22 eingebe und ENTER drücke erscheint automatisch:

    "Controller_DB".Position

    Dann sollte das ja so stimmen, oder?
    Tja, schön wärs.
    Der SCL Editor in Step 7 ist nicht viel mehr als notepad.exe. Da passiert nichts automatisch, du musst immer alles so eingeben wie es sein muss. Und erst beim Übersetzen bekommst du eventuelle Fehler gemeldet.

    Zitat Zitat von spirit Beitrag anzeigen
    Und wenn ich es richtig verstanden haben, dann ist ein Vorteil dieser symb. Programmierung z.B. der, dass ich beim Laden von Zahlen keine Wandlung mehr vornehmen muss, da ich ja deklariert habe, dass es sich bei der Variablen "LinearDB_Position" um den Datentyp "DINT" handeln soll.
    Kann man so sehen, der Compiler überprüft für dich ob du bei den Datentypen keinen Fehler gemacht hast.
    Des Weiteren kannst du so die Variable im Datenbaustein nach belieben verschieben, und musst danach nur den SCL Quellcode neu übersetzen damit auf die neue Adresse zugegriffen wird. Du musst keine Absolutadressen (Zahlen) anpassen.

Ähnliche Themen

  1. Step 7 SCL Quelle übersetzen,Hilfe für Fehlermeldung
    Von DI87 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 07.05.2013, 16:47
  2. Fehlermeldung bei SCL-Programm
    Von Tuggi im Forum Simatic
    Antworten: 37
    Letzter Beitrag: 19.01.2011, 18:59
  3. SCL Fehlermeldung: "Baustein nicht korrekt"
    Von dinner4one im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 04.06.2008, 13:23
  4. Antworten: 4
    Letzter Beitrag: 07.10.2006, 00:34
  5. Brauche Hilfe bei SCL.SFC Aufrufen in SCL
    Von Gerold im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 06.10.2005, 10:47

Lesezeichen

Berechtigungen

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