TIA Probleme bei Zeitmessung zwischen zwei Lichtschranken

Kolo

Level-1
Beiträge
14
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Sehr geehrte SPS Forum User,

ich habe ein Problem das ich nicht alleine lösen kann, deshalb dachte ich mir ich frage einfach mal um Hilfe.

Und zwar muss ich mithilfe zwei Lichtschranken die Geschwindigkeit von Behältern auf einem Förderband ausrechnen.
Benutzen tue ich hierfür eine Simens S7 1214 C CPU mit TIA Portal 15.1. Ich habe auch einen Lösungsansatz der aber leider nicht komplett funktioniert.

Ich starte jeweils an jeder Lichtschranke einen Impuls der die Systemzeit mit dem RD_SYS_T Baustein ausliest diese Zeiten packe ich dann in einen T_DIFF Baustein um die Zeitdauer zwischen den beiden Signalen auszurechnen. Mit dieser Zeit berechne ich mir dann die Geschwindigkeit, das funktioniert soweit auch ganz super. Das einzige Problem ist nun das sobald die Zeitdauer zum ersten mal gemessen wurde, das bei erneuter Betätigung der ersten Lichtschranke die Zeitdauer ins negative gerät bis die zweite Lichtschranke erneut ein Signal bekommt.

Falls jemand ein Lösungsvorschlag hat wie ich verhindern kann das meine Messung immer für einen kurzen Moment einen fehlerhaften Wert ausgibt wäre ich sehr dankbar!


Mit freundlichen Grüßen
 
Pseudocode:
Code:
Wenn Flanke_LS1 Dann
  T1 := RD_SYS_T()
  T2 := T1

Wenn Flanke_LS2 Dann
  T2 := RD_SYS_T()

Diff := T_Diff(T2, T1)
Oder können sich mehrere Objekte zwischen LS1 und LS2 befinden?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für ihre Antwort,

die Lichtschranken habe ich so positioniert das sich keine mehreren Objekte zwischen ihnen befinden können,
ich vergaß außerdem zu erwähnen das ich kompletter Anfänger bin und Programme bis jetzt nur in FUP geschrieben habe, bin also noch nicht so Code-gewannt,
aber das müsste sich ja auch mit FUP realisieren lassen oder?

Mit freundlichen Grüßen
 
aber das müsste sich ja auch mit FUP realisieren lassen oder?
Na klar geht das auch in FUP. Ich dachte, mein Pseudocode wäre eine exakte allgemein formulierte Anleitung, die man einfach in jeder Programmiersprache implementieren kann. ;)

So ungefähr müsste das in FUP aussehen:
Code:
                      +------------+
            +---+     |  RD_SYS_T  |
Flanke_LS1--| & |--+--|EN       OUT|--T1
            +---+  |  +------------+
                   |
                   |  +----------+
                   |  |   MOVE   |
                   +--|EN        |
                      |          |
                  T1--|IN     OUT|--T2
                      +----------+

            +------------+
            |  RD_SYS_T  |
Flanke_LS2--|EN       OUT|--T2
            +------------+

            +------------+
            |   T_DIFF   |
           -|EN          |
        T2--|IN1      OUT|--Diff
        T1--|IN2         |
            +------------+

Harald
 
Vielen Dank!!!

ich bekomme nun keine negativen Werte mehr raus und die Geschwindigkeit wird konstant angezeigt.

Mit freundlichen Grüßen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

wenn jetzt dein Behälter an der ersten Lichtschranke vorbei ist, bekommst du so wie ich das sehe, die Differenz 0 angezeigt.
Ich würde den Befehlt Move T1 --> T2 weglassen, und stattdessen die Flanke der Linkschranke 2 an den EN des T_DIFF setzen.
So wird dir erst eine neue Differenz errechnet mit passieren der zweiten Lichtschranke.

Grüße
Peter
 
Ich weiß, es ging in der Fragestellung konkret um "RD_SYS_T". Kolo, falls du die Wahl hast, es gibt für deine Problematik meines Erachtens günstigere Lösungen.

Mit "RD_SYS_T" bzw. mit "DATE_AND_TIME" wäre ich nicht besonders glücklich. Solange die Uhrzeit oder das Datum nicht verstellt werden kann, wird es sicherlich keine Probleme geben. Im nächsten Projekt kann es aber schon anders aussehen. Und spätestens dann wundert man sich über seine eigene Dummheit. Ich hätte hier besser das umstrittene "RUNTIME" verwendet, oder auch einen simplen Timer. "RUNTIME" liefert übrigens die Zeit als LongReal , was in deinem Fall auch gleich der weiteren Verarbeitung zur Berechnung der Geschwindigkeit zugute kommen würde.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich weiß, es ging in der Fragestellung konkret um "RD_SYS_T". Kolo, falls du die Wahl hast, es gibt für deine Problematik meines Erachtens günstigere Lösungen.

Mit "RD_SYS_T" bzw. mit "DATE_AND_TIME" wäre ich nicht besonders glücklich. Solange die Uhrzeit oder das Datum nicht verstellt werden kann, wird es sicherlich keine Probleme geben. Im nächsten Projekt kann es aber schon anders aussehen. Und spätestens dann wundert man sich über seine eigene Dummheit. Ich hätte hier besser das umstrittene "RUNTIME" verwendet, oder auch einen simplen Timer. "RUNTIME" liefert übrigens die Zeit als LongReal , was in deinem Fall auch gleich der weiteren Verarbeitung zur Berechnung der Geschwindigkeit zugute kommen würde.


Vielen Dank für Ihre Antwort,

ich wollte das Programm zuerst mit der Runtime Funktion realisieren, mir war aber nicht genau bewusst wie ich das genau umsetzen könnte,
ich werde es aber im Hinterkopf behalten, falls ich ein ähnliches Programm wieder benötigen sollte.

Mit freundlichen Grüßen
 
Zurück
Oben