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

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

Thema: Indizierter Zugriff auf Datenbaustein im SCL

  1. #1
    Registriert seit
    11.05.2006
    Beiträge
    72
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo
    Ich muss einen Analogwert einlesen und den Rohwert ins Format Real wandeln und indiziert im DB ablegen.

    Die Adresse des Analogeingangs ist als INT (z.b 40) im DB vorhanden. ICh krieg das Schreiben des Wertes in den DB nicht hin.
    Ist es überhaupt möglich?

    VAR_INPUT
    DB_NR : BLOCK_DB ; //Number database
    DB_ADR_II : INT ; //Startadress
    AI_COUNT_II : INT ; //Count of analog inputs
    END_VAR

    VAR_TEMP
    mIW_Raw_RL : REAL ;
    mDB_ADR_IL : INT ; //Startadress
    mLoopCnt_IL : INT ;
    mIW_IL : INT ;
    END_VAR

    mDB_ADR_IL := DB_ADR_II + 32;

    FOR mLoopCnt_IL := 1 TO AI_COUNT_II DO
    // Input active?
    IF NOT DB_NR.DX[mDB_ADR_IL + 26, 3] THEN
    GOTO mark1;
    END_IF;
    // Init
    DB_NR.DX[mDB_ADR_IL + 26, 0] := TRUE;
    DB_NR.DX[mDB_ADR_IL + 26, 1] := TRUE;
    DB_NR.DX[mDB_ADR_IL + 26, 2] := TRUE;

    // Input value convert to real
    mIW_IL := WORD_TO_INT(DB_NR.DW[mDB_ADR_IL]);
    mIW_Raw_RL := INT_TO_REAL(WORD_TO_INT(EW[mIW_IL]));
    DB_NR.DD[mDB_ADR_IL] := mIW_Raw_RL; --> "Kommt immer Meldung; ungültiger Datentyp"

    mark1 :;
    mDB_ADR_IL := mDB_ADR_IL + 32;

    Kann mir jemand einen Typ geben?
    gruss
    Zitieren Zitieren Indizierter Zugriff auf Datenbaustein im SCL  

  2. #2
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Da Du ja ein Real in ein Doppelword schreiben willst, besteht das Problem darin die Typprüfung auszutricksen.

    Wie wäre es mit einem "AT"?
    Eine Variable vom Typ DWORD mit AT auf den Speicherbereich von dem Realwert legen.

    So in etwa:
    Code:
    VAR_TEMP
    ...
      mIW_Raw_RL : REAL;
      mIW_Raw_DD AT mIW_Raw_RL : DWORD;
    ...
    END_VAR
    
    ...
    DB_NR.DD[mDB_ADR_IL] := mIW_Raw_DD; 
    ...
    //Edit:
    Übrigens ist die GOTO Anweisung in dem Code nicht nur unschön sondern auch sehr leicht zu ersetzen.
    Geändert von zotos (04.02.2008 um 16:18 Uhr)
    If you open your Mind too much, your Brain will fall out.

  3. Folgender Benutzer sagt Danke zu zotos für den nützlichen Beitrag:

    tarzipan7 (04.02.2008)

  4. #3
    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

    ... oder alternativ :
    Code:
    DB_NR.DD [mDB_ADR_IL] := REAL_to_DWORD(mIW_Raw_RL) ;
    Gruß
    LL

  5. #4
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    ... oder alternativ :
    Code:
    DB_NR.DD [mDB_ADR_IL] := REAL_to_DWORD(mIW_Raw_RL) ;
    Gruß
    LL
    Ich habe Deine alternative gerade getestet und sie funktioniert. Was mich allerdings ehrlich verwundert. Ich hätte jetzt erwartet das Step7 da ein vorzeichenlose Ganzzahl daraus macht. Da die S7 je kein UDINT kennt und dafür ein DWORD nimmt.
    If you open your Mind too much, your Brain will fall out.

  6. #5
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    ... oder alternativ :
    Code:
    DB_NR.DD [mDB_ADR_IL] := REAL_to_DWORD(mIW_Raw_RL) ;
    Gruß
    LL
    Ich hätte vermutet, daß REAL_TO_DWORD rundet?

  7. Folgender Benutzer sagt Danke zu Zottel für den nützlichen Beitrag:

    zotos (04.02.2008)

  8. #6
    Registriert seit
    11.05.2006
    Beiträge
    72
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von zotos Beitrag anzeigen
    Ich habe Deine alternative gerade getestet und sie funktioniert. Was mich allerdings ehrlich verwundert. Ich hätte jetzt erwartet das Step7 da ein vorzeichenlose Ganzzahl daraus macht. Da die S7 je kein UDINT kennt und dafür ein DWORD nimmt.
    Bin auch gerade am Testen. Und dieser Typ ist echt hilfreich für weitere Manipulationen mit Realwerten.

    Danke

  9. #7
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Zitat Zitat von tarzipan7 Beitrag anzeigen
    Bin auch gerade am Testen. Und dieser Typ ist echt hilfreich für weitere Manipulationen mit Realwerten.

    Danke
    Ich und auch Zottel hätten erwartet das REAL_TO_DWORD aus einem Real eine Ganzzahl macht (also die Kommastellen weg rundet).
    Ich habe es gerade noch mit CoDeSys getestet und auch da wird bei REAL_TO_DWORD eine Ganzzahl daraus (wie ich es auch erwartet habe).


    Step7 verwundert mich immer wieder.
    If you open your Mind too much, your Brain will fall out.

  10. #8
    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

    Hallo,
    ich habe mit den Typ-Umwandlern (in BYTE,WORD oder DWORD) bei SCL (bisher) die Erfahrung gemacht, dass sie im Grunde nur die Sicht auf die Variable ändern. Ich habe die Befehle bislang bei ähnlichen Transfer-Geschichten verwendet ...
    Was ich allerdings nicht verstehe ist, warum diese Wandlung überhaupt notwendig ist, denn Sinn macht sie keinen ...

    Gruß
    LL

  11. #9
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von zotos Beitrag anzeigen
    Ich und auch Zottel hätten erwartet das REAL_TO_DWORD aus einem Real eine Ganzzahl macht (also die Kommastellen weg rundet).
    Ich habe es gerade noch mit CoDeSys getestet und auch da wird bei REAL_TO_DWORD eine Ganzzahl daraus (wie ich es auch erwartet habe).


    Step7 verwundert mich immer wieder.
    Nee, es rundet wirklich. Ich arbeite nicht oft mit SCL, deshalb habe ich es gerade mal probiert. Die SCL-Anweisungen:

    a:=1.0;
    b:=REAL_TO_DWORD

    ergibt AWL:

    L 1.000000e+000
    T #TEMP1
    L #TEMP1
    RND
    T #TEMP2

    und das DWORD ist dann 1 (statt #L 3f800000)

  12. Folgender Benutzer sagt Danke zu Zottel für den nützlichen Beitrag:

    Larry Laffer (05.02.2008)

  13. #10
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Mir kam die Alternative gleich komisch vor. Darum hatte ich sie ja auch getestet.

    Also mein Test (Kurzform):
    SCL:
    Code:
    FUNCTION FC3 : VOID
    
    VAR_TEMP
      myReal :REAL;
      myDWORD:DWORD;
    END_VAR
    
    myReal := 1.0;
    myDWORD := REAL_TO_DWORD(myREAL);
    
    END_FUNCTION
    ergibt in AWL:
    Code:
          SET   
          SAVE  
          =     L      8.1
          L     1.000000e+000
          T     #myReal
          T     #myDWORD
          SAVE  
          BE
    IMHO ist das ein Bug und wahrscheinlich hast Du eine neuere Version von Step7 als ich (SCL V5.1+SP4) in der dieser Bug beseitigt wurde.

    @Larry: Welche Version hast Du?
    Geändert von zotos (04.02.2008 um 20:45 Uhr)
    If you open your Mind too much, your Brain will fall out.

  14. Folgender Benutzer sagt Danke zu zotos für den nützlichen Beitrag:

    Larry Laffer (05.02.2008)

Ähnliche Themen

  1. Datenbaustein zugriff SCL
    Von Rama83 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 04.02.2011, 14:19
  2. indizierter Zugriff auf DB
    Von hammerheadbene im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 27.05.2010, 13:20
  3. Indizierter DB-Zugriff in FUP/KOP ?
    Von HoGe im Forum Programmierstrategien
    Antworten: 3
    Letzter Beitrag: 29.01.2010, 20:36
  4. Antworten: 4
    Letzter Beitrag: 23.08.2006, 15:02
  5. Datenbaustein zugriff abfragen
    Von tarzanhb im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 23.07.2006, 07:16

Lesezeichen

Berechtigungen

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