TIA Drehzahlmessung mit SFB 48

Moo

Level-1
Beiträge
28
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich versuche eine Drehzahl mit einer 314er SPS über die schnellen digitalen Zähleingänge zu messen. Die höchste Frequenz die auftreten kann sind ca. 2kHz, sollte also passen. Drehe ich den Motor von Hand durch, sehe ich die an der SPS an- und ausgehende EingangsLED des digitalen Eingangs. Von daher gehe ich davon aus, dass er das Signal bekommt. Ich vermute deshalb die Beschaltung des SFB48 ist der Knackpunkt und wäre froh, wenn da mal jemand drüberschauen kann.

Kurze Erklärung: Solange entweder Hand oder Automatikbetrieb aktiviert ist soll die Drehzahl gemessen werden. Hand/ Automatikbetrieb ist solange auf 1 (True) bis wieder abgeschaltet wird.
Je nachdem welche Station angewählt ist schiebe ich entweder eine 0 oder 1 an den SFB 48. 0 und 1 entsprechen Kanal 0 und Kanal 1 und sind so verdrahtet...

LADDR mit W#16#300 sollte ja in Dezimal 768 entsprechen und so passen?
So wie der Baustein jetzt beschaltet ist erhalte ich immer -1 am Ausgang.
In der Hardware habe ich auf Frequenzmessung eingeschaltet.

Hier noch eine bessere Qualität des Bildes: https://img3.picload.org/image/ddcwodda/zaehler.png


zaehler.jpg
 
Zuletzt bearbeitet:
Du musst bei LADDR W#16#768 dranschreiben.
Also die Adresse die auch in der hw dezimal konfiguriert ist
 
Weiss sonst noch jemand was, woran es liegen könnte, dass ich keinen Wert außer -1 angezeigt bekomme?
 
LADDR:=W#16#300 ist bei der Standard-EA-Adresse 768 dez schon richtig (ist in TIA sogar schon so vorbelegt für die Standard-Projektierung)

Harald

Da muss ich dir wiedersprechen.
Ich habe den SFB bis jetzt nur unter Classic verwendet. Aber auch nach dem migrieren steht dort 768.
 

Anhänge

  • Zwischenablage02.jpg
    Zwischenablage02.jpg
    54,6 KB · Aufrufe: 29
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab den SFB47 hier und da mal benutzt. Da habe ich das PEW direkt drangeschrieben. Sollte mit dem SFB48 auch gehen.
Probier mal PEW768.
Du kannst das PEW auch mal auf ein Merkerwort rangieren um zu prüfen ob sich da überhaupt was tut.
 
LADDR:=W#16#300 ist bei der Standard-EA-Adresse 768 dez schon richtig (ist in TIA sogar schon so vorbelegt für die Standard-Projektierung)

Harald
Da muss ich dir wiedersprechen.
Ich habe den SFB bis jetzt nur unter Classic verwendet. Aber auch nach dem migrieren steht dort 768.
:confused: Komisch ... Bei allen meinen funktionierenden Classic-Projekten und bei allen Siemens-Beispielprojekten mit SFC47 und bei der SFC-Baustein-Hilfe und bei der TIA-Standard-Vorbelegung steht W#16#300 dran.
Auch die SFC-Bausteinbeschreibung ist eigentlich nicht so verwirrend formuliert, daß man drauf kommen könnte, man müsse W#16#768 dranschreiben ...
Man soll die in HW Konfig festgelegte EA-(Anfangs-)Adresse dranschreiben: Standard E 768 = 768 dezimal = W#16#300

Ich hab den SFB47 hier und da mal benutzt. Da habe ich das PEW direkt drangeschrieben. Sollte mit dem SFB48 auch gehen.
Probier mal PEW768.
Du kannst das PEW auch mal auf ein Merkerwort rangieren um zu prüfen ob sich da überhaupt was tut.
Wie meinst Du das? Die SFB47 und SFB48 haben keinen Eingang wo man ein PEW direkt dranschreiben könnte. Hast Du da vielleicht was verwechselt?

Drehe ich den Motor von Hand durch, sehe ich die an der SPS an- und ausgehende EingangsLED des digitalen Eingangs.
Ist Dein Signal an der richtigen Digitaleingangs-Klemme (DI+0.0) angeschlossen? (rechte Tür links oben Klemme 2, normalerweise E136.0)
Kannst Du das Signal an E136.0 beobachten?

Hast Du in der Geräte Konfig den Zählkanal richtig konfiguriert? (Signalauswertung "Impuls/Richtung", HW-Tor deaktiv)
Hardware Konfig ist in die CPU geladen?
Wird Dein Programmcode ausgeführt?
Ist der SFB-Ausgang STS_GATE = 1? Ist der SFB-Eingang SW_GATE = 1?

Schreibe fest 0 an den SFC-Eingang CHANNEL. Wenn Du mehrere Zähl-Kanäle verwenden willst, dann verwende für jeden Kanal einen eigenen FREQUENC_300C-SFB-Aufruf mit fest anparametrierter CHANNEL-Nummer.

Warum willst Du die Frequenz nur bei Hand oder bei Auto messen? Kannst Du die Frequenzmessung nicht freiweg immer laufen lassen?

Harald
 
Das funktioniert so wie es in dem screenshot zu sehen ist.
Ich weiß nicht durch welchen Zufall das bei Dir (vielleicht?) funktioniert, aber diese Beschaltung des SFC47.LADDR mit PEW768 ist eindeutig falsch. Schau in die Bausteinbeschreibung, in das Handbuch "31xC: Technologische Funktionen" und in die Siemens-Beispiel-Projekte:

Oder ist Dein Bausteinaufruf kein Aufruf des SFB47 sondern eines anderen (Wrapper-)FB?

Harald
 
Hallo Harald.

Das ist schon der SFB47

Normalerweise arbeite ich auch mit der Umrechnung von DEZ -> HEX wenn am "LADDR" von irgendwelchen Siemens-Bausteinen was anzuschließen ist.
Das was ich da gepostet habe ist in ein paar Projekten so durchkopiert worden und funktioniert auch.
Nachdem hier jetzt die Frage aufkam was denn jetzt richtig ist, habe ich das mal beigetragen.

Vielleicht ist es sogar Zufall, dass der Code funktioniert. Da der Compiler das so schluckt und es damit keine Probleme gab, war ich der Meinung das kann man auch so machen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Laut Beschreibung der SFBs soll an LADDR eine Konstante oder eine Word-Variable angeschaltet werden, die als Wert die Nummer der EA-Adresse enthält (die 768 dez bzw 16#300 hex).
In Deinem Programmcode ist aber eine Variable angeschaltet (PEW768), deren Wert sich ändern kann und höchst unwahrscheinlich immer den Wert 768 enthält. Deshalb klingt es ziemlich unglaublich, daß der Programmcode tatsächlich funktioniert - oder sind da noch Bugs oder Tricks in den SFBs, z.B. daß die LADDR überhaupt gar nicht ausgewertet wird?

Deine Anschaltung mit PEW768 hat mit Umrechnung DEZ->HEX nichts zu tun. Wenn man keine Hex-Konstante an LADDR anschalten will, dann kann man vorher den Wert 768 in eine Word-Variable schreiben und dann die Word-Variable an LADDR anschalten.

Harald
 
Hallo Harald,

Du hast mit allem Recht was du sagst. Bestimmt ist das der von Dir beschriebene Zufall.

Ich wollte es aber dann doch einmal wissen und habe das mal nachgestellt: Nur eine 313C-2DP, schneller Zähler parametriert, SFB47 im OB1. Also die Minimalkonfiguration.
Dabei habe ich etwas erstaunliches beobachtet.
Es ist scheinbar vollkommen egal, was bei "LADDR" steht. Der Zähler läuft hoch sobald ich Impulse auf den Eingang gebe.
Ich habe W#16#100, W#16#200, W#16#300 und auch mal PEW768 drangeschrieben.

Am Wochenende gucke ich mir das noch einmal genauer an. Das kann ja fast nicht sein.
 
Ich habe es gerade mit einer 314C-2DP (314-6CF00) ausprobiert und kann bestätigen: zumindest bei SFB47 ist der Wert an LADDR vollkommen egal, lediglich die korrekte Kanalnummer an CHANNEL reicht schon für die dokumentierte Funktionalität des SFB47 - und dies inklusive eventueller Systemfehlermeldungen und BIE! Und auch unabhängig davon, welche EA-Adresse für "Zählen" eingestellt ist.

Dies ist auch anderen Leuten schon aufgefallen, z.B. the LADDR input parameter of SFB47 - der 6. Beitrag von IBN-Service
I know this situation also.

The 3xxC - CPU "knows" the onboard - counteradress
and the SFB will work even if wrong adress setting
is done.

It is a little bit funny.
Use the correct adress to be sure, but it also works with
the wrong adress (ONLY if C - CPU)

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
SFB48 FREQUENC das selbe Verhalten: der Wert an LADDR ist vollkommen egal

zurück zum Problem des TE:

Wenn der SFB48/FREQUENC-Ausgang MEAS_VAL = -1 ist, dann ist der Messvorgang nicht gestartet (z.B. weil SW_GATE nicht TRUE ist) oder die erste Meßzeit ist noch nicht abgelaufen.
Sobald das interne Tor STS_GATE = 1 ist und die erste Meßzeit abgelaufen ist springt MEAS_VAL von -1 auf den gemessenen Frequenzwert (auf 0 wenn keine Eingangsimpulse kamen). Bei STS_GATE Flanke 0->1 wird außerdem der Ausgang COUNTVAL auf 0 gesetzt und danach kann man sehen, wie der Wert steigt (die Eingangsimpulse gezählt werden).
Es muß in der eingestellten Integrationszeit (Meßdauer) mindestens 1 Impulsflanke eintreffen, damit eine Frequenz > 0 ausgegeben wird (bei 100ms also > 10Hz Meßfrequenz).

Also wie schon in #8 gefragt:
Ist der SFB-Ausgang STS_GATE = 1? Ist der SFB-Eingang SW_GATE = 1?
Wird der Wert vom SFB-Ausgang COUNTVAL immer größer?
Kann das Eingangssignal (0 und 1) des E136.0 beobachtet werden?

Harald
 
Hallo Harald,

danke für die abschließende Aufklärung.
Im Nachhinein ärgere ich mich schon etwas darüber, dass ich nie über diesen Fehler gestolpert bin. Das hab ich übernommen ohne drüber nachzudenken, dass man das bei anderen Systembausteinen ja auch nicht so macht.
Hab ich wieder was dazugelernt...
 
Zurück
Oben