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

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

Thema: SCL: kleines Programm

  1. #1
    Registriert seit
    24.02.2009
    Beiträge
    12
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Morgen zusammen,

    Seit kürzer Zeit wollte ich ein Baustein durch SCL erstellen der mir eine Spezifische funktion ermöglicht! Das wäre das dynamische auslesen eines DB.

    Ich habe folgendes ohne erfolg versucht:
    Code:
    FUNCTION_BLOCK Abfluss
    
    VAR_INPUT
    INPUT      {S7_dynamic:='true'; S7_m_c:='true'; S7_unit:=''}:REAL:=0;                 
    END_VAR    
    
    VAR_OUTPUT 
    Q_U        {S7_dynamic:='true'; S7_m_c:='true'; S7_unit:=''}:REAL:=0; 
    Differenz  {S7_dynamic:='true'; S7_m_c:='true'; S7_unit:=''}:INT:=0; 
    END_VAR
    
    VAR
    Max_value:                     REAL:=0;
    Min_value:                     REAL:=0;
    Adressenwert:                  INT:=0;
    Ausgabewert:                   REAL:=0;
    END_VAR
    
    //************************************************************
    //*** ANWEISUNGSTEIL ***
    //************************************************************
    BEGIN
    Max_value:=962.70;
    Min_value:=961.42;
    
    INPUT:=961.50;
    
    Adressenwert:=REAL_TO_INT((INPUT-Min_value)*100);
    
    Ausgabewert:=Wassermenge_01.Value_8;
    
    END_FUNCTION_BLOCK
    Nun möchte ich eingentlich das 8 durch die Variable Adressenwert ersetzen, somit das auslesen des DB dynamisch machen! Ist das möglich? Wie sieht die syntax aus?

    Besten Dank
    Uli
    Zitieren Zitieren SCL: kleines Programm  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Hallo,
    das würde dann eventuell so aussehen :
    Code:
    Ausgabewert:=dword_to_real(Wassermenge_01.dd[8]);
    Gruß
    LL

  3. #3
    Uli_87 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.02.2009
    Beiträge
    12
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für die schnelle Antwort,

    vielleicht habe ich mich falsch ausgedrückt.

    Ich muss so machen das die 8 zu einer variable wird, es kann dan 8 oder 15 oder irgend eine Zahl werden!

    Habt ihr vielleicht eine Idee?

    P.S. So wie es oben von mir beschrieben ist funktionierts, nur bekomme ich immer die Value_8, das was dann dynamisch werden soll

    Gruss
    Uli
    Geändert von Uli_87 (05.06.2009 um 12:56 Uhr)

  4. #4
    Registriert seit
    12.05.2007
    Beiträge
    416
    Danke
    14
    Erhielt 45 Danke für 40 Beiträge

    Standard

    In WinCcflexible kannst du dir einen Variablennamen aus Strings zusammenbauen in SCL nicht (oder ich weiß es nicht)!

    Zwei Nachteile:
    1. Werden die Variablen erst zur Laufzeit erstellt fällst du bei Flexible erst in der Runtime auf die Schnauze und es wird ein Debugger gestartet...

    2. Sollte sich der Symbolische Name deiner Variablen ändern musst überall im Projekt suchen wo du den Namen "Stringtechnisch" zusammenbaust...


    Das Problem an der Sache ist dass die Variable erst zur Laufzeit erstellt würde dass der Syntaxcheck zur Projektierungszeit aber nicht kann.
    Mach's über Indizes... wie mein Vorredener vorgeschlagen hat.

  5. #5
    Uli_87 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.02.2009
    Beiträge
    12
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für die Antwort!

    Naja dann funktioniert es nicht mit SCL, schade...

    Vielen Dank
    Uli

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Hallo Uli,
    es würde funktionieren, wenn SCL den Aufbau der Datenquelle kennt.
    Also befinden sich deine Daten entweder z.B. der Instanz, die du gerade programmierst (im VAR-Bereich deines FB).
    Letztendlich adressiert der SCL-Compiler absolut. Deshalb müssen alle verwendeten Adressen im Moment des compilierens bekannt sein ...

    Gruß
    LL

  7. #7
    Uli_87 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.02.2009
    Beiträge
    12
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Leider habe ich noch nicht so viel erfahrung, verstehe nicht ganz was du meinst! Könntest du mir ein Beispiel machen wie ich es lösen könnte?

    Vielen Dank

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Gegenfrage :
    was willst du machen ...?

  9. #9
    Uli_87 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.02.2009
    Beiträge
    12
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Also, ich habe ein DB erstellt der mehrere REAL werte beinhaltet, nun möchte ich ein FC erstellen der mir ein bestimmter Wert holt, das ganze kann ich über die indizes des DB machen, also sagen wir mal so... im DB sind folgende werte:

    0.0: 150
    4.0: 250
    5.0: 350

    nun habe ich ein eingan auf dem baustein (z.b. INT) mit folgenden werte:
    1 oder 2 oder 3 (die sollten den folgenden werten entsprechen 1 sollte 150 zurückgeben 2 sollte 250 und 3 - 350 zurückgeben).

    der DB fülle ich manuell, aber die auswahl der daten aus dem DB sollte dynamisch erfolgen!

    Danke
    Uli

  10. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also :
    du erstellst keinen FC sondern einen FB.
    Im VAR-Bereich deines FB erstellst du einen Bereich mit der benötigten Anzahl von Werten.
    Code:
    VAR
       meineDaten : ARRAY [1..10] of REAL ;
    auf dieses ARRAY kannst du dann per Index zugreifen :
    Code:
    OUT_Real := meineDaten [IN_Index] ;
    ungefähr so ...
    Ist das dann was für dich ?

Ähnliche Themen

  1. Kleines Programm
    Von pulpago im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 07.09.2011, 12:07
  2. kleines SCL Programm - finde Fehler nicht
    Von FrankTheTank im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 25.08.2011, 10:35
  3. Kleines Programm schreiben
    Von Mariooo im Forum Programmierstrategien
    Antworten: 19
    Letzter Beitrag: 07.02.2008, 09:35
  4. ein kleines Programm in S5
    Von wowo im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 10.10.2007, 23:40
  5. Ein kleines Programm nur !!! Nur wie !??
    Von Anonymous im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 16.02.2004, 03:04

Lesezeichen

Berechtigungen

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