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

Seite 6 von 12 ErsteErste ... 45678 ... LetzteLetzte
Ergebnis 51 bis 60 von 115

Thema: verschiedene ergebnisse aus 0b 35 addieren

  1. #51
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.786
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ... wenn du einen INT zu oft erhöhst dann wird er auf wieder negativ.

    Das sagt mir aber auch, dass du schon 40.000 x erhöht hast. Vielleicht solltest du die Aufzeichnung und die Erhöhung des Pointers noch einmal überprüfen. Vielleicht auch in Verbindung mit dem SLD Befehl.

    Auf jeden Fall solltest du sicherstellen, dass dein Pointer IMMER in einem legalen Bereich ist, bevor du ihn herannimmst um damit ein DBD zu adressieren ...

    Gruß
    LL

  2. #52
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.786
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    Nachtrag:
    Woher kommt Pointerwertigkeit überhaupt ? Auch aus dem DB ? Vielleicht überschreibst du den Pointer auch mit sich selbst ...

    Hast du mal gecheckt, bis zu welchem DBD in deinem DB schon Werte eingetragen worden sind ?

  3. #53
    Registriert seit
    15.01.2008
    Ort
    München
    Beiträge
    256
    Danke
    76
    Erhielt 17 Danke für 14 Beiträge

    Standard

    Also ich hab die pointerwertigkeit jetzt mal genau beobachtet.
    die ist auf 1 sobald ich starte, wie gewollt.
    sobald mir dann eine drehzahl errechnet wir knallt der mir plötzlich schlagartig ne riesen zahl auf pointerwertigkeit.
    wo könnte die denn herkommen?
    die zahl ist manchmal negativ, manchmal positiv.

  4. #54
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.786
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    ... du überschreibst den Pointer mit deinem ersten Datensatz ...

  5. #55
    Registriert seit
    15.01.2008
    Ort
    München
    Beiträge
    256
    Danke
    76
    Erhielt 17 Danke für 14 Beiträge

    Standard

    Ich schätze mal ich hab den fehler gefunden.

    Ich lasse doch die pointerwertigkeit erhöhen sobald meine momentangeschwindigkeit anders ist als mein wert, der im pointer steht.
    Das funktioniert auch anfangs gut, allerdings wenn der wert im pointer dann anders ist als die momentangeschwindigkeit, dann ist das ja keine einmalige sache sondern dauert 5ms bis der nächste wert von ob35 mein ergebniss beeinflusst.
    solange ist die obige bedingung ja erfüllt und jedesmal wenn die cpu meinen fc durcharbeitet wir pointerwertigkeit um 1 erhöht.
    Nach 5ms íst meine Momentangeschwindigkeit wieder anders als die pointergeschwindgkeit --> er will schieben aber die pointerwertigkeit ist irgendein mist, da ja je nachdem wie oft mein fc durchgearbeitet wurde die pointerwertigkeit um 1 erhöht wurde.
    Wie würdest du das problem beheben?
    Ein timer, der alle 5ms meinen wert schiebt oder kann ich irgendwie ne flankenauswertung mit einbauen?

    Code:
    L      DBD[AR1,P#0.0]
    L      #Momentangeschwindigkeit
    <>    R
    SPBN M020
     
    L      #Pointerwertigkeit
    L      1
    +I    
    ....

  6. #56
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.786
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    ... die Frage verstehe ich nicht ganz ...

    Du hast das Ganze doch im OB35 programmiert, der dann in einem Intervall von 5 ms aufgerufen wird. Hier sollte dann auch der Pointer erhöht werden und der Wert in deine Liste geschrieben werden. Das würde ich übrigens auch tun, wenn sich der Wert nicht geändert hat.
    Abhängig wäre die ganze Aktion bei mir von einem Freigabe-Bit, das ich von dem übergeordneten Ablauf (Verfahrantrieb) schalte bzw. sperre.

    Hast du das grundlegend anders gemacht ?

  7. #57
    Registriert seit
    15.01.2008
    Ort
    München
    Beiträge
    256
    Danke
    76
    Erhielt 17 Danke für 14 Beiträge

    Standard

    Ich glaube ich hab einen recht großen fehler gemacht.
    Im ob35 errechne ich nur die Zeitvariable meiner Funktion. Diese lege ich auf einen Datenbaustein und rechne dann in einem FC weiter.
    Im Fc ist dann auch mein Pointer.
    Funtioniert die sache dann, wenn ich mein ergebnis aus dem Fc auf einen Datenbaustein lege und das pointernetzwerk in den ob35 einfüge.
    wahrscheinlich nicht oder, da mir erst die zeit im ob35 errechnet wird, dann müsste der fc abgearbeitet werden und dann erst das pointernetzwerk. Da wird dann die cpu schätz ich mal nicht ganz mitkommen oder?
    Ich dachte man soll den ob35 so klein wie möglich halten!
    Oder soll ich die ganzen netzwerke des fc´s kopieren und in den ob35 einfügen?

  8. #58
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.786
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    ... ich mache so etwas (wie schon geschrieben) folgendermassen :

    Im OB35:
    Code:
    UN -Freigabe_Messung
    BEB
     
    Pointer erhöhen
     
    U Pointer > Max.Adresse_im_DB
    S -Messung_beendet
    BEB
     
    L Messwert
    T DBD (Pointer)
    Den korrekten Code dafür hast du im Grunde ja schon ...

    Wenn du das in den OB35 schreibst, dann wird die deine Zykluszeit auch nicht explodieren. Zumindestens nicht bei einer 5ms Rate.

    Gruß
    LL

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

    stift (05.03.2008)

  10. #59
    Registriert seit
    15.01.2008
    Ort
    München
    Beiträge
    256
    Danke
    76
    Erhielt 17 Danke für 14 Beiträge

    Standard

    Hi also ich hab jetzt folgendes programmiert
    Code:
    UN  "Moter Ein"
    BEB
     
    L    #Pointerwertigkeit
    L    1
    +I
    T    #Pointerwertigkeit
     
    L    #Pointerwertigkeit
    L    300
    >=I
    BEB
     
    AUF "Momentanbeschleunigung
     
    L    #Pointerwertigkeit
    SLD 5
    LAR1
    L     db10.dbd28
    T     DBD [AR1, P#0.0]
     
    L     DB10.Zeit
    L     DB10.Zeit_fuer_Umdrehung
    >R
    SPBN M010
     
    L     0
    T    #Pointerwertigkeit
     
    M10: Nop 0
    Sobald ich den "Motor Ein" schalte geht die CPU aufgrund eines Fehlers in diesem Netzwerk in stop.
    Hab ich da irgendwo noch nen fehler?

  11. #60
    Registriert seit
    15.01.2008
    Ort
    München
    Beiträge
    256
    Danke
    76
    Erhielt 17 Danke für 14 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Die Pointerwertigkeit passt. War zum Zeitpunkt des Fehlers auf 19.
    Funktioniert das eigentlich dass ich im ob35 einen wert immer alle 5ms um 5 aufaddiere. Diesen Wert verarbeite ich in meinem Fc mit der Formel zur "Momentanbeschleunigung".
    Diese will ich anschließend wieder mit dem Pointer auf den Datenbaustein schieben.
    Eigentlich müsste ja dann meine CPU so schnell den FC durcharbeiten, dass sie das erste netzwerk vom ob35 durcharbeitet, anschließend parall der FC errechnet wird und noch bevor die cpu im ob35 das rechnen im 2.netzwerk anfängt müsste mein ergebnis im fc da sein.
    kann das überhaupt funktionieren?

Ähnliche Themen

  1. PCWorx Ergebnisse kürtzen
    Von dabotetz im Forum Sonstige Steuerungen
    Antworten: 2
    Letzter Beitrag: 15.03.2011, 21:24
  2. Taster verschiedene Wertigkeiten addieren
    Von blaupille29 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 30.11.2010, 11:36
  3. Antworten: 4
    Letzter Beitrag: 18.06.2010, 20:35
  4. Antworten: 19
    Letzter Beitrag: 19.04.2010, 12:53
  5. Antworten: 1
    Letzter Beitrag: 07.10.2008, 11:43

Lesezeichen

Berechtigungen

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