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

Seite 6 von 7 ErsteErste ... 4567 LetzteLetzte
Ergebnis 51 bis 60 von 70

Thema: INT konvertieren in Booleans

  1. #51
    Registriert seit
    01.10.2007
    Ort
    Waiblingen
    Beiträge
    3.317
    Danke
    767
    Erhielt 536 Danke für 419 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    mein Programmvorschlag:

    L #IN
    SLW 12 // Bit 4 in A1 schieben
    U >0
    = bit4
    SLW 1
    U >0
    = bit3
    SLW 1
    U >0
    = ....

  2. #52
    Registriert seit
    03.12.2007
    Ort
    Landshut
    Beiträge
    25
    Danke
    12
    Erhielt 1 Danke für 1 Beitrag

    Standard

    mahlzeit!

    kann mir jemand einen ansatz in scl zu dem thema geben?

    habe eine 3-stellige bcd-zahl (als word), die ich in s5time ausgeben möchte ohne den fc40 hernehmen zu müssen. sozusagen bit-schieberei

    ich sag schon mal danke

    mfg
    Geändert von PsYchO_LoGiC (05.12.2007 um 12:48 Uhr)

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

    Standard

    Zitat Zitat von PsYchO_LoGiC Beitrag anzeigen
    mahlzeit!

    kann mir jemand einen ansatz in scl zu dem thema geben?

    habe eine 3-stellige bcd-zahl (als word), die ich in s5time ausgeben möchte ohne den fc40 hernehmen zu müssen. sozusagen bit-schieberei

    ich sag schon mal danke

    mfg
    Für was willst Du denn das machen? Also BCD und s5time (=Steinzeit) tifft die Gegenwart?

    Wenn Du den Zeitwert doch schon in BCD hast (*kotz*) dann musst Du doch nur noch das die passenden Zeitbasis Bits in dem WORD Manipulieren also Bit 12 und 13.
    If you open your Mind too much, your Brain will fall out.

  4. #54
    Registriert seit
    03.12.2007
    Ort
    Landshut
    Beiträge
    25
    Danke
    12
    Erhielt 1 Danke für 1 Beitrag

    Standard

    das problem ist bloß, dass ich in dem baustein die zeitwerte mehrmals ausgeben muss und ich den baustein ziemlich oft im programm verwenden muss. ich möchte durch das s5time-format speicherplatz sparen, da die vorhandene cpu nicht die leistungsstärkste und der speicherbereich schon relativ ausgelastet is.

    Zitat Zitat von zotos Beitrag anzeigen
    Wenn Du den Zeitwert doch schon in BCD hast (*kotz*) dann musst Du doch nur noch das die passenden Zeitbasis Bits in dem WORD Manipulieren also Bit 12 und 13.
    das mit der zeitbasis ist mir schon klar
    ich arbeite hier mit ein- und ausgangsvariablen. und die anweisung INT_TO_S5TIME gibts leider nicht. ansonsten bringt das programm mir immer die meldung "ungültiger datentyp". deswegen wollte ich die zahl in BCD codieren und die bits einzeln in die s5time variable schieben. hab inzwischen schon so etwas ähnliches gefunden, was mit arrays gelöst wurde. werde das mal ausprobieren

    mfg
    Geändert von PsYchO_LoGiC (05.12.2007 um 15:47 Uhr)

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

    Standard

    Um was geht es denn genau?
    Ich bin mir sicher das man da eine Zeitgmäße Lösung findet.

    Also Du brauchst Zeitglieder in einem FC oder einem FB?
    Welcher Typ: Ein- oder Ausschaltverzögert?

    Wie genau soll die Auflösung sein 1ms 10ms 100ms 1s oder Umgekeht wie groß soll der Range sein? ca.: 0..65s oder 0..650s 0.. 6500s oder mehr?
    If you open your Mind too much, your Brain will fall out.

  6. #56
    Registriert seit
    03.12.2007
    Ort
    Landshut
    Beiträge
    25
    Danke
    12
    Erhielt 1 Danke für 1 Beitrag

    Standard

    ja, da bin ich mir auch sicher
    bin gerade dabei mich in komplexere programmierung und in scl einzuarbeiten. ich kenn bis jetzt nur relativ einfache schrittketten und simple lade- und transferoperationen. deswegen geh ich auch öfters kompliziertere wege, um bestimmte techniken kennenzulernen. (mein chef is zu knickerig um mir ne richtige schulung zu bezahlen...)

    es geht hier eigentlich um eine zeitmessung der bearbeitungszeiten von einzelnen stationen eines rundtisches. das ganze soll wenn möglich in einem fc geschehen mit start- und stop-signal und einem ausgegebenen zeitwert. diese wird dann am ende des bearbeitungszyklus am op angezeigt (TP170A).
    hier reicht eine genauigkeit von 0,1s (0,01 wär natürlich auch spitze) und länger als 5s sollte es insgesamt nicht dauern.

    das mit dem zeit messen an sich hab ich soweit schon verstanden (mit OB1_PREV_CYCLE, danke für das beispiel zotos ). der wunsch ist aber, dass die neue zeit erst dann angezeigt werden soll, wenn der messvorgang abgeschlossen ist. davor soll man noch die alte gemessene zeit sehen können. deswegen wollte ich den zählwert erst zwischenspeichern (IN_OUT-variable) und erst beim stop-signal in den eigentlichen Ausgang schreiben. und diesen wollte ich eben im s5time format ausgeben.

    ich könnte es natürlich viel einfacher machen, wenn ich die zahl direkt ausgeb, aber ich wollte gern die "bit-schieberei" kennenlernen.
    bin aber natürlich für jeden anderen vorschlag offen

    mfg

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

    Standard

    Also wenn man einen INT Wert nimmt kann man ja bis 32767ms Zählen was ja 32s entspricht die Genauigkeit liegt aber nicht im ms bereich sondern hat eine Abweichung der in der Größenordnung von einem OB1-Zyklus liegt.

    Ich habe mit Absicht zu INT gegriffen, da ich mich weigere nur weil Siemens kein UINT zur Verfügung stellt mit WORD zu rechnen.

    Die Anzeige auf dem TP könnte nun in ms erfolgen oder eben passend mit einem Komma/Punkt maskiert das man die Angabe in s mit Komma erhält.

    Code:
    FUNCTION FC124 : INT (* Rückgabewert ist die Zeit ist in ms *)
    
    VAR_INPUT
      START     :BOOL;  (* Signal START = True Zeit wird genullt und die Messung startet *)
      STOPP     :BOOL;  (* Signal STOPP = True Zeit wird als Rückgabewert gesetzt und die Messung gestoppt *)
      OB1Cycle  :INT;   (* Variable OB1_prev_cycle aus dem OB1 *)
    END_VAR
    
    VAR_IN_OUT          (* Bei einem FC VAR_IN_OUT und in einem FB einfach nur VAR *)
      ET        :INT;   (* Verstrichene Zeit *)
      RUN       :BOOL;  (* Die Messung läuft *)
    END_VAR
    
    
    IF START AND NOT RUN THEN
      RUN := TRUE; (* Die Messung wird gestartet *)
      ET  := 0;    (* Die Zeit wird genullt *) 
    END_IF;
    
    IF RUN THEN
      ET := ET + OB1Cycle; (* Die Zeit wird aufaddiert *)
      FC124 := 0;          (* Rückgabe gleich Null *)
    ELSE
      FC124 := ET;         (* Rückgabe der gemessenen Zeit in ms *)
    END_IF;
    
    IF STOPP THEN 
      RUN := FALSE; (* Messung wird gestoppt *)
    END_IF;
    
    END_FUNCTION
    Den Überlauf könnte man auch recht einfach noch realisieren die Frage wäre dann aber wie man reagiert.
    If you open your Mind too much, your Brain will fall out.

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

    PsYchO_LoGiC (05.12.2007)

  9. #58
    Registriert seit
    03.12.2007
    Ort
    Landshut
    Beiträge
    25
    Danke
    12
    Erhielt 1 Danke für 1 Beitrag

    Standard

    vielen dank

    werds morgen gleich mal ausprobieren

    schönen abend noch!
    mfg

  10. #59
    Registriert seit
    03.12.2007
    Ort
    Landshut
    Beiträge
    25
    Danke
    12
    Erhielt 1 Danke für 1 Beitrag

    Standard

    sooo... bin jetzt endlich mal dazugekommen, das ganze mal auszuprobieren. jetzt stehe ich bloß vor einem seltsamen problem. hier erstmal der code des bausteins, falls das helfen könnte
    Code:
    FUNCTION FC155 : VOID
    TITLE = 'Zeitmessung'
    
    VAR_INPUT
        Start       :BOOL;
        Stopp       :BOOL;
        Reset       :BOOL;
        OB1_Cycle   :INT;
    END_VAR
    
    VAR_OUTPUT
        ZW          :INT;
    END_VAR
    
    VAR_IN_OUT
        ET          :INT;
        RUN         :BOOL;
    END_VAR
    
    
    IF Start AND NOT RUN AND NOT Stopp THEN
        RUN := TRUE;
        ET := 0;
    END_IF;
    
    IF RUN AND NOT Stopp THEN
        ET := ET + OB1_Cycle;
    END_IF;
    
    IF Stopp THEN
        ZW := (ET + 5) / 10;
        RUN := FALSE;
    END_IF;
    
    IF Reset THEN
        ZW := 0;
        ET := 0;
        RUN := FALSE;
    END_IF;
    
    END_FUNCTION
    der baustein wird 13 mal in einem fc abgearbeitet, der ansonsten nichts weiteres enthält. die belegung könnt ihr am bild im anhang sehen. sie sieht im prinzip immer gleich aus. beim testen habe ich bloß die zeitmessung am ersten aufruf verwendet.


    jetzt zum problem

    ich will die zeitwerte in einen datenbaustein speichern. der baustein macht die messung und die berechnung am ende richtig und gibt den wert auch richtig aus, jedoch nur, solange das stopp-signal anliegt. sobald es wegfällt, bekommt das datenbausteinwort den wert 120. wenn ich dann wieder das stopp-signal anlege, bekommt das wort wieder den richtigen wert, bis es wieder weg ist. der datenbaustein wird sonst nirgends beschrieben und sämtliche belegungen sind eindeutig und nicht mehrfach verwendet.

    wenn ich nun den ausgang mit einem merkerwort belege und dieses dann in das datenbausteinwort transferiere, behalten beide ihren richtigen wert.

    noch etwas lustiges ist, dass alle nachfolgenden aufrufe am ausgang 120 ausgeben. sobald bei einem aufruf ein stopp-signal anliegt, haben alle folgenden ausgänge den wert null.

    vielleicht ist es nur ein kleiner billiger fehler, aber ich komm einfach ned drauf

    ich hoffe, ihr könnt mir hier ein wenig weiterhelfen...
    ich freu mich über eine antwort

    mfg matthias
    Angehängte Grafiken Angehängte Grafiken
    • Dateityp: jpg 01.jpg (23,7 KB, 23x aufgerufen)

  11. #60
    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
    Den Effekt kann ich gerade nicht nachvollziehen. Ich vermute mal das es außerhalb des hier gezeigten Code liegt.
    Zumal Du ja erwähnst das ein FC-Aufruf Auswirkungen auf alle Aufrufe danach hat.
    If you open your Mind too much, your Brain will fall out.

Ähnliche Themen

  1. S5 in S7 konvertieren
    Von reekoh im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 02.10.2010, 15:32
  2. S5 konvertieren
    Von geduldiger im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 15.05.2007, 10:12
  3. s5 => S7 konvertieren
    Von mega_ohm im Forum Simatic
    Antworten: 39
    Letzter Beitrag: 15.02.2007, 15:11
  4. AWL alt in S5 od. S7 konvertieren
    Von Anonymous im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 19.10.2005, 12:51
  5. CPM konvertieren
    Von Anonymous im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 30.08.2005, 08:43

Lesezeichen

Berechtigungen

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