- Beiträge
- 24.269
- Reaktionspunkte
- 7.706
-> Hier kostenlos registrieren
Wenn Du nicht am Anfang so falsche Informationen gestreut hättest, und die wahren Informationen erst in Beitrag #33 und #39 ans Licht kommen, dann wären wir wohl schon früher drauf gekommen, daß Dein Problem daher kommt, weil Du die Zählerstände nicht synchron zur Verarbeitungsfrequenz ausliest und insbesondere mit einer falschen/nicht eingehaltenen Meßzeit rechnest. Immer wenn die Differenzzeit (Phasenverschiebung) der nicht synchronen Zyklen (Berechnungs-Zyklus und Profibus-Zyklus) sich zu einer Zykluszeit des kürzeren Zyklus aufsummiert hat, dann bekommst Du einen Phasensprung.
Lösungen:
- die vermutlich einfachste und genaueste Lösung: schließe den Encoder an einer Zählerkarte im zentralen Rack an
- oder lies den Zählerwert synchron zum Profibus-Zyklus (taktsynchron)
- oder rechne die Schwankung des Meßintervalls heraus (ggf. runden)
Wie schnell brauchst Du denn tatsächlich die Bandgeschwindigkeit? Alle 50 ms ist doch sicher sowieso unnötig/sinnfrei?
Du müsstest das Meßintervall so lang machen, daß die Schwankung der Auslesefrequenz von 28 ms unter Deinen Genauigkeitsanforderungen liegt. Wenn der Rechenfehler durch den 28ms-Phasensprung auf unter 3% fallen soll, dann müßte Dein Meßintervall mindestens 1 s lang sein. Wenn Du tatsächlich nicht 1 Sekunde auf den nächsten Meßwert warten kannst, dann könntest Du die Meßintervalle ineinander "verschachteln": Du könntest z.B. alle 100ms den Zählerstand in einen 10-Werte-Ringpuffer legen, und die Differenz zum Zählerstand 1 s vorher bilden. Du könntest zusätzlich noch den Mittelwert zum vorhergehenden Meßwert oder über alle 10 Meßwerte bilden.
Können Deine SPS CPU und deren integrierte Profibus-Schnittstelle (kein CP!) und die ET200M-Kopfstation (153-2Bxxx?) die taktsynchrone Arbeitsweise? Der von Dir verwendete FC CNT_CTRL ist dafür jedenfalls ungeeignet...
PS: Möglicherweise kann der FC CNT_CTRL auch für FM350-1 verwendet werden. Doch wenn ich unerklärliche Probleme habe, dann halte ich mich zunächst ganz genau an die Siemens-Anleitungen. Was anderes bzw. eigene Interpretationen kann ich einbringen, wenn alles wie erwartet funktioniert.
Harald
Lösungen:
- die vermutlich einfachste und genaueste Lösung: schließe den Encoder an einer Zählerkarte im zentralen Rack an
- oder lies den Zählerwert synchron zum Profibus-Zyklus (taktsynchron)
- oder rechne die Schwankung des Meßintervalls heraus (ggf. runden)
Wie schnell brauchst Du denn tatsächlich die Bandgeschwindigkeit? Alle 50 ms ist doch sicher sowieso unnötig/sinnfrei?
Du müsstest das Meßintervall so lang machen, daß die Schwankung der Auslesefrequenz von 28 ms unter Deinen Genauigkeitsanforderungen liegt. Wenn der Rechenfehler durch den 28ms-Phasensprung auf unter 3% fallen soll, dann müßte Dein Meßintervall mindestens 1 s lang sein. Wenn Du tatsächlich nicht 1 Sekunde auf den nächsten Meßwert warten kannst, dann könntest Du die Meßintervalle ineinander "verschachteln": Du könntest z.B. alle 100ms den Zählerstand in einen 10-Werte-Ringpuffer legen, und die Differenz zum Zählerstand 1 s vorher bilden. Du könntest zusätzlich noch den Mittelwert zum vorhergehenden Meßwert oder über alle 10 Meßwerte bilden.
Können Deine SPS CPU und deren integrierte Profibus-Schnittstelle (kein CP!) und die ET200M-Kopfstation (153-2Bxxx?) die taktsynchrone Arbeitsweise? Der von Dir verwendete FC CNT_CTRL ist dafür jedenfalls ungeeignet...
PS: Möglicherweise kann der FC CNT_CTRL auch für FM350-1 verwendet werden. Doch wenn ich unerklärliche Probleme habe, dann halte ich mich zunächst ganz genau an die Siemens-Anleitungen. Was anderes bzw. eigene Interpretationen kann ich einbringen, wenn alles wie erwartet funktioniert.
Harald