Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: bin ich jetzt ganz bekloppt? Schnelle Hilfe für einfache Sachen gesucht. Danke!!!!

  1. #1
    Registriert seit
    21.02.2011
    Ort
    Deutschland, Baden-Würtemberg
    Beiträge
    990
    Danke
    115
    Erhielt 125 Danke für 100 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo liebes Forum,

    ich habe ein Problem, für welches mich alle für blöd halten werden.

    Hier ist der Code meines Simulationsprogrammes:

    (*Analogwertverarbeitung / Klimasteuerung*)
    (*Erstellungsdatum: 01.03.2012*)

    (*Steuerung Raumtemperatur*)

    Instanz1_Analogsimulation_ST(
    Sollwert_WORD:=Merkerwort_TEMP_SOLL ,
    Impulsdauer_Hochzaehlen:= Laufzeit_Hoch,
    Pausendauer_Hochzaehlen:=Laufzeit_Hoch ,
    Impulsdauer_Runterzaehlen:=Laufzeit_Runter ,
    Pausendauer_Runterzaehlen:= Laufzeit_Runter,
    Zaehler_Reset:= FALSE,
    Initialwert_setzen:= Initialwert_Setzen,
    Merker_Initialwert:=Merkerwort_INITIAL ,
    Ausgabe_Istwert=>Zwischenwert_TEMP );
    Ausgabewert_TEMP:=( WORD_TO_REAL(Zwischenwert_TEMP)/10.0);

    (*Steuerung Luftfeuchte*)

    Instanz2_Analogsimulation_ST(
    Sollwert_WORD:=Merkerwort_FEU_SOLL ,
    Impulsdauer_Hochzaehlen:= Laufzeit_Hoch,
    Pausendauer_Hochzaehlen:=Laufzeit_Hoch ,
    Impulsdauer_Runterzaehlen:=Laufzeit_Runter ,
    Pausendauer_Runterzaehlen:= Laufzeit_Runter,
    Zaehler_Reset:= FALSE,
    Initialwert_setzen:= Initialwert_Setzen,
    Merker_Initialwert:=Merkerwort_INITIAL ,
    Ausgabe_Istwert=>Zwischenwert_FEU );
    Ausgabewert_FEU:=( WORD_TO_REAL(Zwischenwert_TEMP)/10.0);

    (*Programmende*)




    So, nun seht ihr in der letzten Zeile der beiden Programmteile die Zeile:
    Ausgabewert_FEU:=( WORD_TO_REAL(Zwischenwert_TEMP)/10.0);

    Diesen Ausgabewert lasse ich im PLC_PRG auf einen Merker schreiben.
    Ich weiß gerade ums verecken nicht, welche Art von Merker für diese REAL-Zahl benutzt werden muss.

    Die REAL-Zahl wird ja mit 32bit Speicher belegt, deshalb dachte ich, ich nehme ein Doppelwort, sprich: %MD8
    Der angezeigte Fehler: Fehler 4010: Unverträgliche Typen, kann REAL nicht in DWORD konvertieren.

    Alles andere, was mir eingefallen ist, hat auch nichzt wirklich gut funktioniert.

    Könnt ihr mir weiterhelfen??

    VIELEN Dank schon mal!

    Verzweifelte Grüße, Florian
    Zitieren Zitieren bin ich jetzt ganz bekloppt? Schnelle Hilfe für einfache Sachen gesucht. Danke!!!!  

  2. #2
    Registriert seit
    12.05.2010
    Ort
    Dortmund
    Beiträge
    889
    Danke
    57
    Erhielt 121 Danke für 89 Beiträge

    Standard

    wie hast du die Variable denn komplett deklariert?
    so sollte es aussehen
    Ausgabewert_FEU AT%MD8:REAL;
    sonst erkennt er ja nicht, dass es sich um ne Real-Zahl handelt..
    Weil Denken die schwerste Arbeit ist, die es gibt, beschäftigen sich auch nur wenige damit.

  3. Folgender Benutzer sagt Danke zu rheumakay für den nützlichen Beitrag:

    KingHelmer (02.03.2012)

  4. #3
    Avatar von KingHelmer
    KingHelmer ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    21.02.2011
    Ort
    Deutschland, Baden-Würtemberg
    Beiträge
    990
    Danke
    115
    Erhielt 125 Danke für 100 Beiträge

    Standard

    Hi,

    Die Variable ist in der Deklarationstabelle sieht wie folgt aus:

    VAR_OUTPUT
    Ausgabewert_Temp: REAL;
    Ausgabewert_FEU: REAL;
    END_VAR


    Diese Deklaration findet ja im Baustein Analogwertsimulation statt.
    Die Adressvergabe dann im PLC_PRG. Bisher hatte ich nie Probleme, dort einfach
    einen Merker z.B. %MW2 anzubinden.
    Dass es mit REAL jetzt nicht klappt, ist mir ein vollkommenes Rätsel.....

  5. #4
    Registriert seit
    17.10.2007
    Ort
    35043 Marburg
    Beiträge
    176
    Danke
    4
    Erhielt 30 Danke für 29 Beiträge

    Standard

    Hallo,
    so wie Rheumakay schon schrieb, deklarier doch im Plc_Prg eine Variable mit AT%MD8:REAL.
    Wenn du das nicht möchtest kannst du es auch mit einem Pointer machen:
    Code:
    (*Deklaration*)
    
    pdw:POINTER TO DWORD;
    
    (*Implemantation*)
    
    pdw:=ADR(Ausgabewert_FEU);
    %MD8:=pdw^;
    Dann geb ich mal noch das Stichwort UNION!

    Aber du musst immer eine Variable deklarieren so das du auch gleich in der Deklaration auf den Merkerbereich mappen kannst.
    Grüße...
    Paradox ist, wenn sich jemand im Handumdrehen den Fuß bricht.

  6. Folgender Benutzer sagt Danke zu Simatiker für den nützlichen Beitrag:

    KingHelmer (02.03.2012)

  7. #5
    Registriert seit
    30.08.2005
    Beiträge
    280
    Danke
    41
    Erhielt 96 Danke für 66 Beiträge

    Standard

    Ich vermute mal:

    du bekommst den Fehler nicht in dieser Zeile:
    Ausgabewert_FEU:=( WORD_TO_REAL(Zwischenwert_TEMP)/10.0);

    die ist nämlich komplett richtig, wenn die Deklaration richtig ist. So wie du das schreibst, machst du wohl in PLC_PRG:
    %MD8 := instanz.Ausgabewert_FEU;

    das kann dann natürlich nicht funktionieren. Wenn du den Wert wirklich im Merkerbereich brauchst (wozu eigentlich?) dann
    musst du dir wie oben beschrieben eine Real-Variable deklarieren die mit AT %MD8 an diese Stelle gelegt wird.

    Bernhard

  8. Folgender Benutzer sagt Danke zu Werner29 für den nützlichen Beitrag:

    KingHelmer (02.03.2012)

  9. #6
    Avatar von KingHelmer
    KingHelmer ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    21.02.2011
    Ort
    Deutschland, Baden-Würtemberg
    Beiträge
    990
    Danke
    115
    Erhielt 125 Danke für 100 Beiträge

    Standard

    Hallo Bernhard,

    Wenn du den Wert wirklich im Merkerbereich brauchst (wozu eigentlich?)
    Ich brauche für alle SIgnale, Rückmeldungen, Analogwerte usw. immer einen Merker, um die Daten an einen externen PC zur Visualisierung ausgeben zu können.

    In diesem Fall wird die Software auf dem PC einen Zahlenwert von z.B. 265 auf das Merkerwort %MW2 schreiben, welches ich in der SPS dann in eine REAL-Zahl umwandeln kann und durch 10 teilen. Sprich ich werde dann den Wert 26,5 °C weiterverarbeiten als Sollwert.

    Andersherum beim Istwert.

    Ich werde das gleich mal testen und mich wieder melden!

    Grüße und danke

  10. #7
    Avatar von KingHelmer
    KingHelmer ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    21.02.2011
    Ort
    Deutschland, Baden-Würtemberg
    Beiträge
    990
    Danke
    115
    Erhielt 125 Danke für 100 Beiträge

    Standard

    Hallo nochmal,

    Also es hat jetzt funktioniert, nachdem ich folgendes im Deklarationsteil von PLC_PRG eingetragen habe:

    PROGRAM PLC_PRG
    VAR
    Instanz1_Analogwertverarbeitung: Analogwertverarbeitung;
    Anzeige_TEMP AT %MD8:REAL;
    Anzeige_FEU AT%MD12:REAL;
    END_VAR


    Ich werde nun grundsätzlich Variablen im PLC_PRG deklarieren und nicht wieder direkt auf Merker verweisen.
    Es ist auch eine Spur übersichtlicher, finde ich.

    Grüße, und danke nochmal!

  11. #8
    Registriert seit
    12.05.2010
    Ort
    Dortmund
    Beiträge
    889
    Danke
    57
    Erhielt 121 Danke für 89 Beiträge

    Standard

    @KingHelmer ->bin beleidigt bekomme ich keine Danke!?

    Übrigens bist du dir im klaren, wenn du es nur im PLC_Prg deklarierst, ist das nur Lokal ! Wenn du die Daten doch an extern weitergibst, erstelle dir doch dafür eine Globale Liste...dies nur mal als Hinweis
    Weil Denken die schwerste Arbeit ist, die es gibt, beschäftigen sich auch nur wenige damit.

  12. #9
    Avatar von KingHelmer
    KingHelmer ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    21.02.2011
    Ort
    Deutschland, Baden-Würtemberg
    Beiträge
    990
    Danke
    115
    Erhielt 125 Danke für 100 Beiträge

    Standard

    Das Danke hast du bekommen, sry

    Ich dachte, dass Merker grundsätzlich global-ansprechbar sind.
    In der Simulation mit anderen Programmen hat es zumindest geklappt, die Merker vom PC aus anzusprechen.

    Normalerweile erstelle ich nur eine Liste in den globalen Variablen für alle Klemmen an der SPS.
    zum Beispiel: DI1_1 AT%IX1.0 : BOOL;
    DO1_1 AT%QX2.0 : BOOL;

    usw... Hier allerdigs auch nur der EInfachheit halber. Man könnte hier ja auch wieder im Programm die Eingänge direkt ansprechen.
    Nur kann sich ja kein Mensch merken, welcher Eingang welche Adresse hat.

  13. #10
    Registriert seit
    12.05.2010
    Ort
    Dortmund
    Beiträge
    889
    Danke
    57
    Erhielt 121 Danke für 89 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Variablen/Merker/EAs habe ich immer in globalen Listen abgespeichert,das macht die Sache ja gerade erst so übersichtlich!
    Wenn ich mit Sicherheit weiß, dass die Var ausschließlich nur in dem entsprechenden Baustein benötigt werden, deklariere ich die in diesem.
    Eben nicht nur das eigentliche Programm/Ablauf STRUKTURIERT aufbauen sondern eben auch die Var, usw.
    Wirst sehen,die Arbeit lohnt sich!!
    Weil Denken die schwerste Arbeit ist, die es gibt, beschäftigen sich auch nur wenige damit.

Ähnliche Themen

  1. Antworten: 31
    Letzter Beitrag: 09.09.2011, 23:02
  2. Danke für die Hilfe :)
    Von Power_Pete im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 12.05.2010, 17:20
  3. SCL und ich Teil II Hilfe gesucht..
    Von KSscl im Forum Simatic
    Antworten: 22
    Letzter Beitrag: 13.07.2007, 23:00
  4. Antworten: 17
    Letzter Beitrag: 18.06.2007, 22:10

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •