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

Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 26 von 26

Thema: Simatic Prozent 0-100%

  1. #21
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Anaconda55 Beitrag anzeigen
    Also so läuft es nun:

    L DBD [AR1,P#4.0] // hole Ziel-Geschw.
    L 100
    /R
    L #Override
    *R
    T #Geschwindigkeit // und zurückgeben
    Wie vermutet ist ein Problem die Zahlenformatverwürfelung. L 100 lädt eine GANZZAHL in den Akku1, /R erwaretet Realzahlen in den Akkus. Das kann so nicht funktionieren! In welchen Format liegt denn [AR1,P#4.0] wirklich vor? In welchem Format liegt den #Override vor? Wenn beides Realzahlen sind, dann genügt die Änderung in L 100.0, damit es funktioniert. Ansonsten schlage ich folgende Vorgehensweise bei Vorliegen von DInts vor:
    Code:
          L     20000000           // Hier gibt es sicher noch keinen Überlauf bei Multiplikation mit 100
          L     DBD [AR1,P#4.0]    // hole Ziel-Geschw. 
          >D
          SPB   MULT
          L     100                // Ziel-Geschw. noch in Akku1
          /D
          L     #Override
          *D    
          T     #Geschwindigkeit   // und zurückgeben
          SPA   Ende
    
    MULT: L     #Override          // Ziel-Geschw. noch in Akku1
          *D    
          L     100
          /D
          T     #Geschwindigkeit   // und zurückgeben
    
    ENDE: NOP 0
    Diese Lösung kommt jetzt komplett ohne die Wandlung in Reals aus und berücksichtigt den Wertebereich einer DInt
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  2. #22
    Registriert seit
    04.06.2007
    Ort
    Mal hier und mal dort
    Beiträge
    116
    Danke
    13
    Erhielt 5 Danke für 4 Beiträge

    Standard

    Spielt es eine Rolle ob ich die 100 als INT oder als DINT( l#100 ) lade?

  3. #23
    Registriert seit
    20.11.2006
    Ort
    Hamburg
    Beiträge
    225
    Danke
    35
    Erhielt 35 Danke für 32 Beiträge

    Standard

    Bei positiven Ganzzahlen bis 2^15 ist es egal, ob du sie als Int oder Dint lädst. Beim Laden von Int-Werten wird der Akku 1 links mit Nullen aufgefüllt.

  4. #24
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.622
    Danke
    377
    Erhielt 799 Danke für 642 Beiträge

    Standard

    Ich habe es so getestet:
    Code:
          L     MD  1000
          L     100
          /R    
          L     MD  1004
          *R    
          T     MD  1008
    Es funzt bis 17000000, aber ich verstehe nicht warum, weil Division und Multiplikation sind mit REAL befehle ausgeführt, obwohl die Daten sind DINTs ??
    Ab ungefähr 17000000 gehts shief. Dann treten schwere Rundungsfehler auf.

    Dies ist mehr "korrekt":
    Code:
          L     MD  1012
          L     L#100
          /D    
          L     MD  1016
          *D    
          T     MD  1020
    Es rechnet korrekt, auch bei grossen Zahlen.
    Jesper M. Pedersen

  5. #25
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Zitat Zitat von JesperMP Beitrag anzeigen
    Ich habe es so getestet:
    Code:
          L     MD  1000
          L     100
          /R    
          L     MD  1004
          *R    
          T     MD  1008
    Es funzt bis 17000000, aber ich verstehe nicht warum, weil Division und Multiplikation sind mit REAL befehle ausgeführt, obwohl die Daten sind DINTs ??
    Ab ungefähr 17000000 gehts shief. Dann treten schwere Rundungsfehler auf.

    Dies ist mehr "korrekt":
    Code:
          L     MD  1012
          L     L#100
          /D    
          L     MD  1016
          *D    
          T     MD  1020
    Es rechnet korrekt, auch bei grossen Zahlen.
    Bei großen schon, aber nicht bei kleinen. Wenn der Wert z.B. 199 ist, kommen gravierende Rundungsproblem auf. Aus diesem Grund habe ich in meinem Beispiel eine Fallunterscheidung drin und behandle "große" und "kleine" Zahlen getrennt.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  6. #26
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.622
    Danke
    377
    Erhielt 799 Danke für 642 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Rainer Hönle Beitrag anzeigen
    Bei großen schon, aber nicht bei kleinen. Wenn der Wert z.B. 199 ist, kommen gravierende Rundungsproblem auf. Aus diesem Grund habe ich in meinem Beispiel eine Fallunterscheidung drin und behandle "große" und "kleine" Zahlen getrennt.
    Ach so, das war der Grund. Klaro.
    Jesper M. Pedersen

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 12.02.2011, 11:44
  2. Antworten: 12
    Letzter Beitrag: 07.02.2011, 21:59
  3. SIMATIC WinCC flexible für SIMATIC Panels in Dresden
    Von Grollmus im Forum Werbung und Produktneuheiten
    Antworten: 0
    Letzter Beitrag: 24.03.2009, 10:13
  4. Timerwert in Dual ausgeben und Prozent berechnen
    Von Anaconda55 im Forum Simatic
    Antworten: 22
    Letzter Beitrag: 10.09.2008, 10:35
  5. Simatic NET: Start >Simatic > SIMATIC NET > COML S7
    Von plc_tippser im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 13.06.2004, 18:30

Lesezeichen

Berechtigungen

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