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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 27

Thema: Realzahl runterzählen

  1. #11
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 375 Danke für 355 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Chris48 Beitrag anzeigen
    sorry ich weiß nich warum ichs net hinbekomm, aber bei mir ändert sich das VKE garnicht ob nun der Vergleich erfüllt is oder nicht, aber dass kann doch garnicht sein, weil es sind ja immer und-Verknüpfungen ...
    Was machst du denn mit M 255.5, der beeinflusst doch deine Flanke FP "Fest_Flanke_Durchfluss" in beiden Fällen ?
    kind regards
    SoftMachine

  2. #12
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    @Chris48
    Dein Problem: für beide Flankenerkennungen benutzt Du den gleichen Flankenhilfsmerker "Fest_Flanke_Durchfluss". Beim zweiten mal kann nie eine Flanke erkannt werden. Also entweder zwei verschiedene Flankenhilfsmerker benutzen oder die Flankenerkennung vor den beiden Netzwerken nur einmal extra programmieren und das Ergebnis verknüpfen.
    Code:
    //Hochzählen
    U "Ferm1_Pu_Vor"
    U(
    U M 255.5
    FP "Fest_Flanke_Durchfluss"
    )
    U(
    ...
    
    //Runterzählen
    U "Ferm1_Pu_Vor"
    U(
    U M 255.5
    FP "Fest_Flanke_Durchfluss" // <-- hier musst Du einen anderen Merker benutzen
    )
    U(
    ...
    oder
    Code:
    //Auswertetakt
    U M 255.5
    FP "Fest_Flanke_Durchfluss"
    = #Flanke
    
    //Hochzählen
    U "Ferm1_Pu_Vor"
    U #Flanke
    U(
    ...
    
    //Runterzählen
    U "Ferm1_Pu_Vor"
    U #Flanke
    U(
    ...
    Mit einem Konnektor müsste es auch gehen (wird aber vielleicht nicht in FUP/KOP dargestellt):
    Code:
    //Hochzählen
    U "Ferm1_Pu_Vor"
    U(
    U M 255.5
    FP "Fest_Flanke_Durchfluss"
    = #Flanke
    U #Flanke
    )
    U(
    ...
    
    //Runterzählen
    U "Ferm1_Pu_Vor"
    U #Flanke
    U(
    ...

    (@SoftMachine: für M 255.5 tippe ich mal auf Taktmerker 1Hz)

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    SoftMachine (29.07.2012)

  4. #13
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Beim zweiten mal kann nie eine Flanke erkannt werden.
    Wenn meine Vermutung richtig ist, daß es sich beim M255.5 um einen Merker aus dem CPU-Taktmerkerbyte handelt, dann wird es doch - allerdings ziemlich selten - vorkommen, daß bei der zweiten Flankenerkennung eine Flanke erkannt wird. Nämlich dann, wenn sich der M255.5 genau zwischen den beiden Verwendungsstellen ändert.

    Merke: Mehrfachzugriff auf die CPU-Taktmerker vermeiden! Wenn doch nötig, dann am Anfang des OB1 auf andere Merker umkopieren, damit sie für den gesamten Zyklus gleich bleiben.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet
    Zitieren Zitieren Taktmerkerbyte ist asynchron zum OB1!  

  5. #14
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 375 Danke für 355 Beiträge

    Standard

    Harald,
    das hast du doch schon in Beitrag #12 erledigt...

    Code:
    //Auswertetakt
    U M 255.5F
    P "Fest_Flanke_Durchfluss"
    =#Flanke
    
    //Hochzählen
    U "Ferm1_Pu_Vor"
    U#Flanke
    U(...
    
    //Runterzählen
    U "Ferm1_Pu_Vor"
    U #Flanke
    U(...
    kind regards
    SoftMachine

  6. #15
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Ich wollte eigentlich nur meine Aussage mit dem "nie erkannt" richtigstellen, für den wahrscheinlichen Fall, daß M255.5 Teil des CPU-Taktmerkerbytes ist. Oder anderweitig durch Multitasking oder Alarm-OB beeinflußt wird.

    Aber OK, nochmal ganz ausführlich:

    Auch die Verwendung von zwei Flankenhilfsmerkern (Code 1 in #12) ist noch nicht ganz korrekt, denn dann wird es passieren, daß gelegentlich (*) ein eigentlich erwartetes Hochzählen nicht erfolgt, wenn sich M255.5 genau zwischen den beiden Verwendungsstellen von 0 auf 1 ändert. Der Taktmerker M255.5 darf nur einmal abgefragt werden vor dieser mehrfachen Verwendung. Es muß eine Programmsequenz wie Code 2 in #12 verwendet werden oder mit einer Kopie des Taktmerkers gearbeitet werden. Es könnte z.B. auch der ganze Regelkram in einen eigenen Baustein (FB oder FC) verlagert werden, an den das Taktbit als Eingangsparameter angelegt wird; dann arbeitet der Baustein automatisch mit einer "konsistenten" Kopie des Taktmerkers.

    Harald

    (*) gelegentlich = hochsporadisch (c) Siemens AG
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #16
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von ducati Beitrag anzeigen
    2. es fehlt noch eine Min und Max-Begrenzung des Stellsignals (Stichwort Anti Windup)
    Der Programmcode enthält - wahrscheinlich unbeabsichtigt - bei einer Schrittweite von 1.0 eine Begrenzung des Stellsignals auf ca. -16777220.0 ... +16777220.0

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet
    Zitieren Zitieren REAL nach IEEE 754 mit 23 Bit Mantisse  

  8. #17
    Registriert seit
    09.01.2012
    Beiträge
    30
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    also danke vielmals für die antworten, ich habe mir dann aber heute nachmittag doch noch selbst eine andere variante überlegt, die jetzt funktioniert.

    Hochzählen

    O(
    L "Fest_allgemein_Betriebsd".Pumpenleistung_Vorgabe
    L "Fest_allgemein_Betriebsd".Pumpenleistung_Aktual
    <R
    )
    O(
    L "Fest_allgemein_Betriebsd".FU_Pumpe
    L 8.000000e+04
    >=R
    )
    SPB _003

    U M 255.5
    FP "Fest_Flanke_Durchfluss"
    SPBN _004

    L "Fest_allgemein_Betriebsd".FU_Pumpe
    L 1.000000e+03
    +R
    T "Fest_allgemein_Betriebsd".FU_Pumpe

    _004: NOP 0
    _003: NOP 0

    Runterzählen

    O(
    L "Fest_allgemein_Betriebsd".Pumpenleistung_Vorgabe
    L "Fest_allgemein_Betriebsd".Pumpenleistung_Aktual
    >R
    )
    O(
    L "Fest_allgemein_Betriebsd".FU_Pumpe
    L 0.000000e+00
    <=R
    )
    SPB _001

    U M 255.5
    FP "Fest_Flanke_Durchfluss"
    SPBN _002

    L "Fest_allgemein_Betriebsd".FU_Pumpe
    L 1.000000e+03
    -R
    T "Fest_allgemein_Betriebsd".FU_Pumpe

    _002: NOP 0
    _001: NOP 0

    hab da jetzt auch die begrenzungen drin

    wobei ich immer noch meine dass dass mit dem Taktmerker und der gleichen Flankenauswertung kein Problem sein dürfte, ich habe es mir nämlich so gedacht, dass ich am Anfang des jeweiligen Netzwerkes, jeweils den gleichen Takt "anstehen" und diesen dann abhängig vom Ergebnis des Vergleichs auf den Zähler "durchschalte", wo lag hier mein denkfehler, dass die Sprünge nicht so funktioniert haben wie ich es vorhatte.

  9. #18
    Registriert seit
    05.01.2009
    Ort
    69198 Schriesheim
    Beiträge
    236
    Danke
    54
    Erhielt 34 Danke für 33 Beiträge

    Standard

    Hallo
    also mit dem von dir zuletzt geposteten Code glaube ich auch nicht, daß es bei dieser wahrscheinlich doch recht trägen Anwendung zu Problemen kommen kann.
    ich denke das wichtige und spannende an den Beiträgen, sind die Sätze wie z.B.:

    Merke: Mehrfachzugriff auf die CPU-Taktmerker vermeiden! Wenn doch nötig, dann am Anfang des OB1 auf andere Merker umkopieren, damit sie für den gesamten Zyklus gleich bleiben.
    also darauf achten, daß die Operanden ihren Zustand während des Zykluses nicht ändern.
    Und mit der Sequenz
    l "taktmerkerbyte_CPU"
    t "taktmerkerbyte_Prog"
    im OB1, NW1, tut man ja auch keinem Weh

    gruß Thomas

    P.S. habe darüber selbst noch nicht nachgedacht, werde es mir merken
    Radiozitat: "Meine Frau hat nen geilen Arsch, nämlich mich"

  10. #19
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von Chris48 Beitrag anzeigen
    ich habe mir dann aber heute nachmittag doch noch selbst eine andere variante überlegt, die jetzt funktioniert.
    Das überrascht mich dann doch einigermaßen, denn:
    Hochzählen
    [...]

    SPB _003

    U M 255.5
    FP "Fest_Flanke_Durchfluss"
    //FP vergleicht das VKE mit "Fest_Flanke_Durchfluss" und speichert danach das VKE in "Fest_Flanke_Durchfluss" !
    //ab hier hat "Fest_Flanke_Durchfluss" den gleichen Inhalt wie M 255.5
    SPBN _004
    [...]
    Runterzählen
    [...]
    SPB _001

    //wie soll hier eine Flanke festgestellt werden, wenn "Fest_Flanke_Durchfluss" = M 255.5 ?!
    U M 255.5
    FP "Fest_Flanke_Durchfluss"
    SPBN _002
    [...]
    Harald

    PS:
    zum CODE einfügen besser die CODE-Tags benutzen, bekommt man mit dem #-Button
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  11. #20
    Registriert seit
    05.01.2009
    Ort
    69198 Schriesheim
    Beiträge
    236
    Danke
    54
    Erhielt 34 Danke für 33 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hi,

    Code:
    O(
    L "Fest_allgemein_Betriebsd".Pumpenleistung_Vorgabe
    L "Fest_allgemein_Betriebsd".Pumpenleistung_Aktual
    <R
    )
    O(
    L "Fest_allgemein_Betriebsd".FU_Pumpe
    L 8.000000e+04
    >=R
    )
    SPB _003                   //Bedingung zum erhöhen wenn vke 0
    
    U M 255.5
    FP "Fest_Flanke_Durchfluss"
    SPBN _004
    
    L "Fest_allgemein_Betriebsd".FU_Pumpe
    L 1.000000e+03
    +R
    T "Fest_allgemein_Betriebsd".FU_Pumpe
    
    _004: NOP 0
    _003: NOP 0
    bedingt durch die sprungbedingungen kommt er nicht in schwulitäten, er nutzt die Flanke nur einmal bei erhöhen,
    oder einmal bei verringern.
    Interessant wird das ganze aber bei

    L "Fest_allgemein_Betriebsd".Pumpenleistung_Vorgabe == L "Fest_allgemein_Betriebsd".Pumpenleistung_Aktual

    da wird die Leistung wahrscheinlich erhöht, je nach dem welchen Zustand der Taktmerker hat

    gruß Thomas
    Radiozitat: "Meine Frau hat nen geilen Arsch, nämlich mich"

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

    PN/DP (30.07.2012)

Ähnliche Themen

  1. easy realZahl ??
    Von rheumakay im Forum Sonstige Steuerungen
    Antworten: 2
    Letzter Beitrag: 07.04.2011, 08:14
  2. Hoch bzw. runterzählen
    Von PG675 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 25.11.2009, 11:19
  3. Realzahl zu Integer
    Von Kunstblume01 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 04.03.2009, 15:47
  4. Realzahl umwandeln
    Von maccap im Forum Hochsprachen - OPC
    Antworten: 10
    Letzter Beitrag: 13.11.2007, 14:48
  5. Realzahl darstellen
    Von Pinguino im Forum HMI
    Antworten: 2
    Letzter Beitrag: 22.10.2007, 21:48

Lesezeichen

Berechtigungen

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