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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: SCL symbolischer Name übergeben

  1. #1
    Registriert seit
    29.10.2010
    Beiträge
    549
    Danke
    57
    Erhielt 39 Danke für 37 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    ich möchte über eine SCL Quelle den symbolischen Namen eines FB's auch mit generieren. Das Problem ist, ich kann den nur übergeben wenn er schon in der Symboltabelle steht. Ich gehe aber in meinem Fall davon aus das die Tabelle leer ist. Wie kann ich das lösen?


    Mfg dentech
    Zitieren Zitieren SCL symbolischer Name übergeben  

  2. #2
    dentech ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.10.2010
    Beiträge
    549
    Danke
    57
    Erhielt 39 Danke für 37 Beiträge

    Standard

    Neue Frage, wie kann ich in SCL einen DB mit zugehörigem UDT erzeugen?

  3. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo,
    zu deiner ersten Frage :
    den Baustein-Namen in "" setzen und in den Compiler-Optionen "Extras-Einstellungen-Bausteine erzeugen" die Checkbox "Bausteinnummer automatisch erzeugen" anwählen.

    zu deiner zweiten Frage :
    "Einfügen-Bausteinvorlage-DB" - ggf. speziellere Dinge noch anhand der SCL-Hilfe ...

    Hier mal ein UDT, den ich symbolisch so erzeuge - für das Andere habe ich gerade kein Beispiel :
    Code:
    TYPE "ZSB_Daten"         // Struktur der ermittelten ZSB-Daten
    STRUCT     
       St107_Fettmenge    : REAL ;
       St114_Hoehe        : REAL ;
       
       St106_IO           : BOOL ;
       St107_IO           : BOOL ;
       St114_Hoehe_IO     : BOOL ;
       St114_RM_IO        : BOOL ;
       Teil_IO            : BOOL ;
    END_STRUCT ;    
    END_TYPE
    Gruß
    Larry

  4. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    dentech (08.11.2012)

  5. #4
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von dentech Beitrag anzeigen
    ich möchte über eine SCL Quelle den symbolischen Namen eines FB's auch mit generieren. Das Problem ist, ich kann den nur übergeben wenn er schon in der Symboltabelle steht. Ich gehe aber in meinem Fall davon aus das die Tabelle leer ist. Wie kann ich das lösen?
    Du kannst in den Einstellungen den Haken bei "Bausteinnummer automatisch erzeugen" setzen, dann wird das Symbol automatisch in die Symboltabelle eingetragen.

    Leider lässt sich das zu verwendende Nummernband nicht einstellen, es wird immer bei der niedrigsten freien Nummer begonnen. Das kann unter bestimmten Umständen zu Fehlern führen, beispielsweise wenn man 4 FCs damit erzeugen lässt, und dann in einem nächsten Baustein z.B. CONCAT aufruft. Da FC Nummer 2 schon belegt ist, kann dieser Baustein nicht mehr automatisch eingefügt werden.

  6. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    dentech (08.11.2012)

  7. #5
    dentech ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.10.2010
    Beiträge
    549
    Danke
    57
    Erhielt 39 Danke für 37 Beiträge

    Standard

    Super, hat funktioniert. Aber eine Frage habe ich noch, wenn ich in SCL das Format Daten_AND_Time in einem DB speichern will. Wie kann ich das lösen?

    Ich habe z.B. die Variable OB80_DATE_TIME im Format DT und möchte sie im DB11 ab Adresse 8 speichern.

  8. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo,
    du willst die aus dem OB80 heraus in den DB11 bringen ?
    Dann müßtest du den OB80 selbst in SCL schreiben - besser wäre aber das mit Blockmove (SFC20) zu dem DB zu übertragen ...

    Gruß
    Larry

  9. #7
    dentech ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.10.2010
    Beiträge
    549
    Danke
    57
    Erhielt 39 Danke für 37 Beiträge

    Standard

    Hi,

    den OB80 erzeuge ich auch in dem Programm

  10. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    ... dann zeig doch mal das zugehörige Script-Teil ... (mit dem Code mit dem du dachtest, das in den DB11 zu bringen) ...

  11. #9
    dentech ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.10.2010
    Beiträge
    549
    Danke
    57
    Erhielt 39 Danke für 37 Beiträge

    Standard

    Code:
    //Erzeugen der Vorlage für den Datenbaustein
    TYPE    UDT1
    TITLE = 'UDT:Fehler_OBs'
    VERSION : 0.1
    NAME : Fehl_OBs
    FAMILY : 'Fehler'
    AUTHOR : ''
    
           STRUCT
            
            Fehler_OB80: STRUCT                                             //Zeitfehler OB80
                            OB_Zykl_ueber   :   BOOL;                       //Zykluszeitüberschreitung 
                            OB_bearbeitung  :   BOOL;                       //Der angeforderte OB ist noch in Bearbeitung
                            OB_Uhr_Sprg     :   BOOL;                       //abgelaufener Uhrzeitalarm durch Uhrzeitsprung
                            OB_Uhr_Wdr      :   BOOL;                       //abgelaufener Uhrzeitalarm bei Wiedereintritt in RUN nach HALT
                            OB_Puffer       :   BOOL;                       //Überlauf des OB-Anforderungspuffers für die aktuelle Prio Klasse
                            OB_Taktsync     :   BOOL;                       //Taktsynchronalarm-Zeitfehler
                            OB_Alarmlast    :   BOOL;                       //Alarmverlust durch zu hohe Alarmlast
                            OB_Wiedertritt  :   BOOL;                       //Wiedereintritt in RUN nach CiR
                            OB_Tech_Sync    :   BOOL;                       //Technologiesynchronalarm-Zeitfehler
                            OB_Error_Info   :   WORD;                       //Fehlerinformation
                            OB_Err_Ev_Class :   BYTE;                       //Klasse des Ereignisses, das den Fehler ausgelöst hat
                            OB_Err_EV_Num   :   BYTE;                       //Nummer des Ereignisses, das den Fehler ausgelöst hat
                            OB_Prio         :   BYTE;                       //Fehlerinformation
                            OB_Num          :   BYTE;                       //Fehlerinformation
                            OB_SFC20        :   INT;
                            OB_Date         :   DATE_AND_TIME;              //Datum und Uhrzeit des Ereignisses 
                            Reserve         :   ARRAY[16..28] OF BYTE;      //Reserve
                         END_STRUCT;
                                                                    
           END_STRUCT
    END_TYPE
    //Erzeugen des Datenbausteins mit Vorlage aus dem UDT
    DATA_BLOCK DB11 UDT1
    BEGIN
    END_DATA_BLOCK
    //Erzeugen des Organisationsbausteins OB80
    ORGANIZATION_BLOCK OB80
    VAR_TEMP
        OB80_EV_CLASS       :   BYTE;
        OB80_FLT_ID         :   BYTE;
        OB80_PRIORITY       :   BYTE;
        OB80_OB_NUMMER      :   BYTE;
        OB80_RESERVED_1     :   BYTE; 
        OB80_RESERVED_2     :   BYTE;
        OB80_ERROR_INFO     :   WORD;
        OB80_ERR_EV_CLASS   :   BYTE;
        OB80_ERR_EV_NUM     :   BYTE;
        OB80_OB_PRIORITY    :   BYTE;
        OB80_OB_NUM         :   BYTE;
        OB80_DATE_TIME      :   DATE_AND_TIME;
    END_VAR
    BEGIN
        IF    OB80_FLT_ID=b#16#01 THEN           //Zykluszeitüberschreitung 
            db11.dbx0.0 := true;
            db11.dbw2   := OB80_ERROR_INFO;      //Laufzeit des letzten Zyklus
            db11.dbb4   := OB80_ERR_EV_CLASS;    //Klasse des Ereignisses, das den Alarm ausglöst hat
            db11.dbb5   := OB80_ERR_EV_NUM;      //Nummer des Ereignisses, das den Alarm ausgelöst hat 
            db11.dbb6   := OB80_OB_PRIORITY;     //Prioritätsklasse des OB, der bearbeitet wurde
            db11.dbb7   := OB80_OB_NUM;          //Nummer des OB, der bearbeitet wurde, als der Fehler auftrat                                                               
            
        ELSIF OB80_FLT_ID=b#16#02 THEN           //Der angeforderte OB ist noch in Bearbeitung
            db11.dbx0.1 := true;
            db11.dbw2   := OB80_ERROR_INFO;      //Die zugehörige temporäre Variable des angeforderten OB
            db11.dbb4   := OB80_ERR_EV_CLASS;    //Klasse des Ereignisses, das den Alarm ausglöst hat
            db11.dbb5   := OB80_ERR_EV_NUM;      //Nummer des Ereignisses, das den Alarm ausgelöst hat
            db11.dbb6   := OB80_OB_PRIORITY;     //Prioritätsklasse des Fehler verursachenden OBs
            db11.dbb7   := OB80_OB_NUM;          //Nummer des Fehler verursachenden OB  
            
        ELSIF OB80_FLT_ID=b#16#05 THEN           //abgelaufener Uhrzeitalarm durch Uhrzeitsprung
            db11.dbx0.2 := true;
            db11.dbw2   := OB80_ERROR_INFO;      //Für den Uhrzeitalarm liegt der Startzeitpunkt in der Vergangenheit 
       
        ELSIF OB80_FLT_ID=b#16#06 THEN           //abgelaufener Uhrzeitalarm bei Wiedereintritt in RUN nach HALT
            db11.dbx0.3 := true;
            db11.dbw2   := OB80_ERROR_INFO;      //Für den Uhrzeitalarm liegt der Startzeitpunkt in der Vergangenheit
            
        ELSIF OB80_FLT_ID=b#16#07 THEN           //Überlauf des OB-Anforderungspuffers für die aktuelle Prio Klasse
            db11.dbx0.4 := true;
            db11.dbw2   := OB80_ERROR_INFO;      //Die zugehörige temporäre Variable des angeforderten OB
            db11.dbb4   := OB80_ERR_EV_CLASS;    //Klasse des Ereignisses, das den Alarm ausglöst hat
            db11.dbb5   := OB80_ERR_EV_NUM;      //Nummer des Ereignisses, das den Alarm ausgelöst hat
            db11.dbb6   := OB80_OB_PRIORITY;     //Prioritätsklasse des Fehler verursachenden OBs
            db11.dbb7   := OB80_OB_NUM;          //Nummer des Fehler verursachenden OB
            
        ELSIF OB80_FLT_ID=b#16#08 THEN           //Taktsynchronalarm-Zeitfehler
            db11.dbx0.5 := true;
            db11.dbw2   := OB80_ERROR_INFO;      //Die zugehörige temporäre Variable des angeforderten OB
            db11.dbb4   := OB80_ERR_EV_CLASS;    //Klasse des Ereignisses, das den Alarm ausglöst hat
            db11.dbb5   := OB80_ERR_EV_NUM;      //Nummer des Ereignisses, das den Alarm ausgelöst hat
            db11.dbb6   := OB80_OB_PRIORITY;     //Prioritätsklasse des Fehler verursachenden OBs
            db11.dbb7   := OB80_OB_NUM;          //Nummer des Fehler verursachenden OB
            
        ELSIF OB80_FLT_ID=b#16#09 THEN           //Alarmverlust durch zu hohe Alarmlast
            db11.dbx0.6 := true;
            db11.dbw2   := OB80_ERROR_INFO;      //Die zugehörige temporäre Variable des angeforderten OB
            db11.dbb4   := OB80_ERR_EV_CLASS;    //Klasse des Ereignisses, das den Alarm ausglöst hat
            db11.dbb5   := OB80_ERR_EV_NUM;      //Nummer des Ereignisses, das den Alarm ausgelöst hat
            db11.dbb6   := OB80_OB_PRIORITY;     //Prioritätsklasse des Fehler verursachenden OBs
            db11.dbb7   := OB80_OB_NUM;          //Nummer des Fehler verursachenden OB
            
        ELSIF OB80_FLT_ID=b#16#0A THEN           //Wiedereintritt in RUN nach CiR
            db11.dbx0.7 := true;
            db11.dbw2   := OB80_ERROR_INFO;      //CiR-Synchronisationszeit in ms
            
        ELSIF OB80_FLT_ID=b#16#0B THEN           //Technologiesynchronalarm-Zeitfehler
            db11.dbx1.0 := true;
            db11.dbb5   := OB80_ERR_EV_NUM;      //Nummer des Ereignisses, das den Alarm ausgelöst hat
            db11.dbb6   := OB80_OB_PRIORITY;     //Prioritätsklasse des Fehler verursachenden OBs
            db11.dbb7   := OB80_OB_NUM;          //Nummer des Fehler verursachenden OB
        END_IF;  
          
    END_ORGANIZATION_BLOCK

    Das ist der Code, im OB80 möchte ich vergleichen und dann das Datum des Bausteinaufrufs im DB speichern.

  12. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Schön wäre es nun, wenn du den DB11 symbolisch ansprechen könntest - dann würde es ein Einzeiler werden :
    Code:
    "DB11".myDateTime := Fehler_OB80.OB_Date ;  // ich hoffe ich habe die Var's richtig geschrieben 8)
    Gruß
    Larry

Ähnliche Themen

  1. DB in SCL übergeben
    Von Felse im Forum Simatic
    Antworten: 20
    Letzter Beitrag: 11.09.2012, 19:50
  2. Antworten: 1
    Letzter Beitrag: 23.01.2012, 17:06
  3. DB-Nummer in FB übergeben in SCL
    Von Der Bithirte im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 10.08.2010, 13:15
  4. Instanz-DB an SCL übergeben
    Von hub im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 14.05.2010, 12:13
  5. SCL : symbolischer Name
    Von Larry Laffer im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 14.06.2007, 06:56

Lesezeichen

Berechtigungen

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