TIA Analogwertverarbeitung

Kaewien

Level-1
Beiträge
30
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe User.

Folgendes Scenario: Ich gebe ein Analogsignal aus einem Stöber-Umrichter (0-10V) auf meiner CPU 1212C AC/DC/Rly.

Dieses analoge Signal lese ich über ein Convert-Baustein von INT -> REAL ein.
Den eingelesenen REAL-Wert Skaliere ich von 0 - 100 und lasse ihn mir als INT ausgeben.

Diesen skalierten INT-Wert möchte ich auf ein Panel bringen.

Folgenden Problem: Der skalierte Wert schwankt, wenn ich ihn beobachte, zwischen -30000 bis + 30000 ungefähr, obwohl der eingelesene Wert recht stabil ist.

Woran kann das liegen? Was muss ich beachten?

Mit freundlichen Grüßen/kind regards

Kevin
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Naja der Skalier-Baustein fordert ein REAL-Wert, also ein Doppelword.
Und die Eingangsadresse ist ein Word bzw. INT.

Deswegen so ein durcheinander.

Oder was habe ich übersehen?

Danke schonmal!

Gruß
 
Schau dir mal in einer Vat deinen eingelesenen/konvertierten Real Wert wortweise an, vermutlich sind die Wörter verdreht.

Edit: Ich seh gerade das es um TIA geht, keine Ahnung ob das noch so geht wie in Classic.
 
Zuletzt bearbeitet:
Ja ich habe den Scale_X genommen.
Ich baue das gerade mal mit dem Norm_X

Das die Wörter verdreht waren könnte vielleicht der Grund gewesen sein.

Ich prüfe das mal.

Gruß
 
Du hast bestimmt der Scale X genommen

Du brauchst der Norm X!
Nein, er braucht beides!

Erst wird der INT-Analogeingangswert mittels Norm_X auf einen normierten Real-Wert von 0.0 bis 1.0 (= 0-100%) gebracht.
Anschließend wird dieser normierte Wert mittels Scale_X auf den gewünschten INT-Wert skaliert:



Der Vorteil - Skalieren und Rückskalieren funktionieren jetzt immer auf dem gleichen Weg. Nur die Min/Max-Werte tauschen dann die Bausteine.


In diesem speziellen Fall hier könnte auch einfach der normierte Wert x100 genommen werden, da er ja schon eine Prozentangabe darstellt. Besser ist aber, sich gleich den richtigen Weg anzugewöhnen.


PS: Ja ich weiß, dass die 27.000 als Max nicht korrekt sind. Hatte aber keine Lust, den genauen Wert rauszusuchen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein, er braucht beides!

Erst wird der INT-Analogeingangswert mittels Norm_X auf einen normierten Real-Wert von 0.0 bis 1.0 (= 0-100%) gebracht.
Anschließend wird dieser normierte Wert mittels Scale_X auf den gewünschten INT-Wert skaliert:



Der Vorteil - Skalieren und Rückskalieren funktionieren jetzt immer auf dem gleichen Weg. Nur die Min/Max-Werte tauschen dann die Bausteine.


In diesem speziellen Fall hier könnte auch einfach der normierte Wert x100 genommen werden, da er ja schon eine Prozentangabe darstellt. Besser ist aber, sich gleich den richtigen Weg anzugewöhnen.


PS: Ja ich weiß, dass die 27.000 als Max nicht korrekt sind. Hatte aber keine Lust, den genauen Wert rauszusuchen.

Hallo hucki,

vielen Dank für die ziemlich genaue Beschreibung.
Ich habe das jetzt so umgesetzt und werde es demnächst ausprobieren.

PS: Der genaue Wert wist 27648 ;)
 
Das merk' ich mir nie! :(
Mal tip ich aus dem Kopf 27684, mal 27486 ...

Man muss auch nicht alles wissen. Man muss nur wissen, wo es ggf. steht (=F1).
:ROFLMAO:

Ich habe auch nur in meinen schlauen Ordner geschaut :D

Aber das mit dem normieren kannte ich noch gar nicht.
Dafür schonmal Danke.

Andere Frage: Ab Firmware version 2.0 bei dieser CPU soll es möglich sein ein Baustein z.B. zu laden ohne die CPU in Stop zu versetzen.
Es ist Firmware Version 3.0 installiert.

Und beim laden will er immer in Stop-Zustand gehen. Daher ist es mir zur zeit nicht möglich die Ändereung zu testen.
Gibt es im TIA eine versteckte Option, die es mir ermöglicht im Run-Zustand zu bleiben?

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein, er braucht beides!

Erst wird der INT-Analogeingangswert mittels Norm_X auf einen normierten Real-Wert von 0.0 bis 1.0 (= 0-100%) gebracht.
Anschließend wird dieser normierte Wert mittels Scale_X auf den gewünschten INT-Wert skaliert:
Hmmm, im Grunde würde es eine einfache Division des Analogwertes durch 276 auch tun ...
Doch irgendwie muß man die heutigen CPUs ja beschäftigen, damit die Zykluszeit auf über 1ms kommt. ;)


Folgenden Problem: Der skalierte Wert schwankt, wenn ich ihn beobachte, zwischen -30000 bis + 30000 ungefähr, obwohl der eingelesene Wert recht stabil ist.
Auch wenn der TE das Skalieren vielleicht umständlich oder falsch gemacht hat, das erklärt eigentlich nicht die großen Sprünge quer durch den INT-Bereich bei "recht stabilem" Eingangswert. Das klingt eher nach falsche Adresse (z.B. um 1 Byte verschoben) oder nach MSB/LSB-Byte vertauscht oder falsch gewählte Anzeige eines Datentyps. Wo "beobachtest" Du denn den schwankenden skalierten Wert? Auf dem Panel? (Welchem?)

Ist das Panel und die SPS im selben TIA-Projekt? Hast Du Dich vielleicht bei der Adressierung der SPS-Variable im Panel-Projekt vertan?


Ich habe auch nur in meinen schlauen Ordner geschaut :D
[...]
Und beim laden will er immer in Stop-Zustand gehen.
Dann schau doch mal in die Liste der schlauen TIA-Hilfe, ob Du was gemacht hast, was das Laden in RUN verhindert.
Thema: Bausteine im Betriebszustand "RUN" in Gerät laden
(Index > Laden, im Betriebszustand RUN)

Der Vollständigkeit halber: welche TIA-Version benutzt Du?

Harald
 
Auch wenn der TE das Skalieren vielleicht umständlich oder falsch gemacht hat, das erklärt eigentlich nicht die großen Sprünge quer durch den INT-Bereich bei "recht stabilem" Eingangswert. Das klingt eher nach falsche Adresse (z.B. um 1 Byte verschoben) oder nach MSB/LSB-Byte vertauscht oder falsch gewählte Anzeige eines Datentyps. Wo "beobachtest" Du denn den schwankenden skalierten Wert? Auf dem Panel? (Welchem?)

Den schwankende INT-Bereich habe ich im Datenbaustein, wo ich die Analogwerte abgelegt habe, beobachtet.
Die Adressen werden mir in der Gerätekonfig angezeigt. Kanal 0 EW64 und Kanal 1 EW66
Wie kann das passieren, dass die Bytes vertauscht werden?

Ist das Panel und die SPS im selben TIA-Projekt? Hast Du Dich vielleicht bei der Adressierung der SPS-Variable im Panel-Projekt vertan?

Ja das ist in einem Projekt. Am Panel gibt es keine Probleme.


Dann schau doch mal in die Liste der schlauen TIA-Hilfe, ob Du was gemacht hast, was das Laden in RUN verhindert.
Thema: Bausteine im Betriebszustand "RUN" in Gerät laden
(Index > Laden, im Betriebszustand RUN)

Der Vollständigkeit halber: welche TIA-Version benutzt Du?

Guter Einwand..
Und ich benutze Tia V12
 
Ich hatte mich vielleicht nicht richtig ausgedrückt.
Wenn der Umrichter den Wert mit Big-Endian zurückgibt, muß er in der SPS noch gedreht werden. Bei KUKA ist das zBsp. auch so.
Wenn man sich den Eingangswert mal Byte/Wortweise anschaut müßte das zu sehen sein. Oder der Speicherbereich stimmt halt nicht.

Wenn ein INT Wert so große Sprünge ins Negative macht deutet das auf eine Bytedrehung hin, weil da immer das Zweierkomplement mit verändert wird.
 
Hallo,

ich habe den eingelesenen Wert wie beschrieben erst normiert von 0 - 27648 (so war das glaube ich) und anschließend skaliert.

So funktioniert es nicht nur, so ist es wahrscheinlich auch richtig.

Danke nochmal für die Hilfe.

Gruß Kevin
 
Zurück
Oben