Step 7 FC105 funktioniert nicht wie gedacht

JulianW

Level-2
Beiträge
42
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Ich bin bin seit etwa 2 Wochen dabei, mit Hilfe von Step 7, Temperaturen auf einem MP277 10“ anzeigen zu lassen. Die Analogwertverarbeitung wollte ich mit Hilfe des FC 105 verwirklichen.
Folgende Bauteile habe ich verwendet: CPU 315-2 DP, Et200M IM 153-1, 2 mal SM331 AI 8x12 bit. (Thermoelement)

Nun mein Problem: Der von mit verwendete FC105 schmeißt mir beim OUT einen für mich unbrauchbaren Wert raus. Warum??
Ich habe ihm als HI_LIM 1200 und LO_LIM -200 gegeben.
In allen Beiträgen aus Foren die ich gefunden habe, steht am Ausgang ein realer Zahlenwert zwischen den festgelegten Grenzen.

LG JulianEDE31564-3FA4-423B-8ABA-360DCA413103.jpeg1AA8D560-E452-4037-97CD-714356CFD7D9.jpeg06954C76-EF11-4C64-8BD6-309ECD5F3DA1.jpeg
 
Hast du einmal geprüft, ob du überlappende Zugriffe hast auf dein MD1? Überprüfe dies doch einmal. Rechtsklick auf die MD1 Variable => Gehe zu => Verwendungsstelle. In dem Fenster dann den Haken für überlappende Zugriffe setzen.
 
SCALE ist für Strom- und Spannungs-Messbereiche. Thermoelement Typ J wird nicht mit SCALE skaliert, sondern liefert schon die Temperatur * 0.1°C
Du mußt den Wert vom Analogeingang in REAL wandeln und dann durch 10.0 dividieren, dann erhältst Du die Temperatur in °C.
In Deinem Bild: PEW256 = 520 entspricht 52.0°C

Siehe das Handbuch der Analogbaugruppe, Kapitel "Analogwertdarstellung für Analogeingabekanäle"

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hast du einmal geprüft, ob du überlappende Zugriffe hast auf dein MD1? Überprüfe dies doch einmal. Rechtsklick auf die MD1 Variable => Gehe zu => Verwendungsstelle. In dem Fenster dann den Haken für überlappende Zugriffe setzen.
Wenn ich den Haken setze ändert sich leider nichts :(
 
SCALE ist für Strom- und Spannungs-Messbereiche. Thermoelement Typ J wird nicht mit SCALE skaliert, sondern liefert schon die Temperatur * 0.1°C
Du mußt den Wert vom Analogeingang in REAL wandeln und dann durch 10.0 dividieren, dann erhältst Du die Temperatur in °C.
In Deinem Bild: PEW256 = 520 entspricht 52.0°C

Siehe das Handbuch der Analogbaugruppe, Kapitel "Analogwertdarstellung für Analogeingabekanäle"

Harald
Achso? Das wusste ich nicht, danke. Aber der Fühler liegt aktuell neben mir, in einer etwa 20°C kalten Halle. Ich nehme mal an dass ich noch etwas falsch in der HW konfig habe.
Welchen Baustein benutze ich den zum wandeln von INT auf REAL? Bzw wie sagen ich dem Wert dass er sich durch 10 dividieren soll?
Tut mir wirklich leid, aber ich hatte in meiner Ausbildung zum EAT traurigerweise nur Digitalwertprogrammierung :(
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich den Haken setze ändert sich leider nichts :(
Tipp: Variablen > 1 Byte (also eigentlich fast alle außer BOOL/BYTE/CHAR) legt man auf gerade Adressen, z.B. MW0, MW2, MD4, MD8 .... Damit verringert man das Risiko, die Variablen versehentlich mit anderen Variablen zu überlappen.
Wenn hier im Forum von einem Anfänger Fragen nach unverständlichen Werten kommen und die Werte liegen auf ungeraden Adressen, dann ist sehr häufig der Grund, daß dem Fragesteller die Problematik der Adress-Überlappung nicht bekannt ist. Und deshalb die standardmäßige Nachfrage nach überlappenden Zugriffen...

Harald
 
Welchen Baustein benutze ich den zum wandeln von INT auf REAL? Bzw wie sagen ich dem Wert dass er sich durch 10 dividieren soll?
In FUP mußt Du diese Operationen hintereinanderschalten: I_DI --- DI_R --- DIV_R
Oder Du schreibst Dir einen FC für die Wandlung, der kann dann in AWL oder SCL programmiert sein.

Harald
 
Tipp: Variablen > 1 Byte (also eigentlich fast alle außer BOOL/BYTE/CHAR) legt man auf gerade Adressen, z.B. MW0, MW2, MD4, MD8 .... Damit verringert man das Risiko, die Variablen versehentlich mit anderen Variablen zu überlappen.
Wenn hier im Forum von einem Anfänger Fragen nach unverständlichen Werten kommen und die Werte liegen auf ungeraden Adressen, dann ist sehr häufig der Grund, daß dem Fragesteller die Problematik der Adress-Überlappung nicht bekannt ist. Und deshalb die standardmäßige Nachfrage nach überlappenden Zugriffen...

Harald
In FUP mußt Du diese Operationen hintereinanderschalten: I_DI --- DI_R --- DIV_R
Oder Du schreibst Dir einen FC für die Wandlung, der kann dann in AWL oder SCL programmiert sein.

Harald
Alles klar Harald. Ich bedanke mich bei dir und wünsche dir ein schönes WE
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier der Code für einen FC "SCALE_T":
Code:
FUNCTION "SCALE_T" : REAL
TITLE =INT-Wert durch Faktor dividieren, Ergebnis REAL
//z.B. um Temperaturwerte von Analogeingängen zu wandeln
//Faktor ist oft 10.0 (PT100 Standard, Thermoelemente) oder 100.0 (PT100 Klima)
VERSION : 0.1

VAR_INPUT
  IN : INT ;
  Faktor : REAL ;
END_VAR
BEGIN
NETWORK
TITLE =INT-Wert durch Faktor dividieren

      L     #IN;
      ITD   ;
      DTR   ;
      L     #Faktor;
      /R    ;
      T     #RET_VAL;

END_FUNCTION
In FUP so aufrufen:
Code:
        +-------------+
        |    FC123    |
        |  "SCALE_T"  |
   ...--|EN           |
        |             |
PEW256--|IN    RET_VAL|-MD4
        |             |
  10.0--|Faktor    ENO|-
        +-------------+

Harald
 
Achso? Das wusste ich nicht, danke. Aber der Fühler liegt aktuell neben mir, in einer etwa 20°C kalten Halle. Ich nehme mal an dass ich noch etwas falsch in der HW konfig habe.
In Verbindung mit Thermoelementen ist die „Vergleichsstelle“ zu berücksichtigen!
Schau mal hier:
https://support.industry.siemens.com/cs/document/109780210/was-m%C3%BCssen-sie-beim-einsatz-von-thermoelementen-beachten-wenn-der-erwartete-wert-nicht-angezeigt-wird-?dti=0&lc=de-WW#!
 
Welchen Baustein benutze ich den zum wandeln von INT auf REAL? Bzw wie sagen ich dem Wert dass er sich durch 10 dividieren soll?
In FUP mußt Du diese Operationen hintereinanderschalten: I_DI --- DI_R --- DIV_R
Eigentlich kannst Du Dir das auch alles ersparen und den Wert direkt als INT an das Panel übergeben.
Beim IO-Feld, das diesen Wert anzeigen soll, kann man dann auch einstellen, an welcher Stelle des Wertes ein Komma angezeigt werden soll.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann darf er nur nicht auf die Idee kommen, Trendkurven und Archive zu verwenden.
Und die Vergleichsstellen-Temperatur beim Thermoelement muß auch noch irgendwo abgezogen werden. Könnte man etwa so machen:
Code:
FUNCTION "SCALE_T" : REAL
TITLE =INT-Wert durch Faktor dividieren, Ergebnis REAL
//z.B. um Temperaturwerte von Analogeingängen zu wandeln
//Faktor ist oft 10.0 (PT100 Standard, Thermoelemente) oder 100.0 (PT100 Klima)
//Bezug ist der Bezugswert (Nullwert), z.B. Vergleichstellen-Temperatur
AUTHOR : PN_DP
VERSION : 0.2

VAR_INPUT
  IN : INT ;
  Faktor : REAL ;
  Bezug : REAL ;
END_VAR
BEGIN
NETWORK
TITLE =INT-Wert durch Faktor dividieren und Bezugspunkt abziehen

      L     #IN;
      ITD   ;
      DTR   ;
      L     #Faktor;
      /R    ;
      L     #Bezug;
      -R    ;
      T     #RET_VAL;

END_FUNCTION

Harald
 
Und die Vergleichsstellen-Temperatur beim Thermoelement muß auch noch irgendwo abgezogen werden.
:unsure: Hmmm. Ich würde die VergleichsstellenTemperatur nicht von der mit dem ThermoElement gemessenen TemperaturDifferenz abziehen wollen, sondern sie dazu addieren.
Angenommen, die Temperatur an der "eigentlichen" Messstelle (deren Temperatur ich messen will) liegt bei 200°C und die Temperatur an der Vergleichsstelle (z.B. an/in der AnalogEingangsKarte, mit der das SpannungsSignal des ThermoElements eingelesen wird) beträgt 20°C.
Dann liefert mir das ThermoElement die TemperaturDifferenz der beiden Messstellen 200°C - 20°C = 180 K.
Also müsste ich doch die 20°C an der Vergleichsstelle noch dazu addieren, um auf die 200°C an der Messtelle zu kommen.

Die SiemensBeschreibungen zu den diversen Kompensations-/Korrektur-Methoden lassen mich leider im Unklaren, ob ich als Anwender tatsächlich selbst diese Addition noch durchführen muss. Wenn ich doch z.B. die Vergleichsstelle oder den ReferenzKanal angeben/parametrieren muss, dann würde ich davon ausgehen, dass Siemens diese Angaben auswertet, um mir das "fertige" Ergebnis liefern zu können und nicht, dass ich 2 AnalogEingänge einlesen und selbst verrechnen muss - den einen für's ThermoElement und den anderen für den VergleichsstellenTemperatur-Pt100 (oder -Pt1000).
Bin ich da zu blauäugig? Nutzt die Karte meine Angaben nicht, um die entsprechende Kompensation ausführen und liefert sie mir nicht das EndErgebnis?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier geht es um S7-300 und die Analogeingangsbaugruppe AI 8x12 Bit ( 331-7KF0* ) und Step7 classic. Da kann man in HW Konfig keine Vergleichsstelle angeben. Es muß entweder an den Anschlüssen 10 (COMP+) und 11 (COMP-) eine Vergleichsstelle angeschlossen werden oder die Anschlüsse gebrückt (kurzgeschlossen) werden für die Aktivierung der internen Vergleichsstelle. Details siehe z.B. das Handbuch AI 8x12 Bit Getting Started Teil 3: Thermoelemente, das auch schon von revve in Beitrag #3 verlinkt wurde.

Ich vermute mal, diese Verdrahtung an 10/11 fehlt beim TE JulianW. Ich vermute auch, daß das Thermoelement nicht mit einer Leitung mit dem richtigen Material/Legierung angeschlossen wurde. Wenn man richtig verdrahtet, dann liefert der Analogeingang schon den kompensierten tatsächlichen Temperaturwert und die Vergleichsstellentemperatur muß nicht extra verrechnet werden.

Harald
 
Zurück
Oben