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

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

Thema: WinCCflexible 2007 skaliert ungenau

  1. #1
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich will den Wert 0 bis 100 eines Schiebereglers ins MD108 im Real-Format schreiben.
    Da ein Schieberegler direkt keinen Realwert ausgeben kann (nehme ich mal an), habe ich ein interne Variable StellTemp mit Integer angelegt. Der Schieberegler schreibt jetzt in StellTemp und ich habe in Ereignisse - Ändern der variable eine lineare Skalierung eingestellt:
    X = StellTemp
    a = 1
    Y = MD108

    Die Skalierung funktioniert nicht genau genug. Stelle ich am Schieberegler z.B. 60 ein, so erscheint im MD108 der Wert 5.9e1 also 59.

    Außerdem funktioniert die Rückwärtsdarstellung nicht richtig. Wenn die Runtime gestartet wird, geht der Schiebereglerknopf nicht auf den Steuerungswert, der z.B. noch auf 59 steht.

    Gruß
    Earny
    Zitieren Zitieren WinCCflexible 2007 skaliert ungenau  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.792
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Ich könnte mir vorstellen, dass du hier mir den Rundungs-Ungenauigkeit REAL <-> INT zu kämpfen hast.

    Aus INT 2 wird ggf. 1.997 REAL und daraus dann bei entsprechender Wandlung INT 1.

    Mein Vorschlag hier wäre, beim Schieberegler mit INT (oder DINT)-Variablen zu arbeiten und diese dann falls nötig in der Steuerung umzuwandeln.

    Ich denke, dass ist auch bei deiner anderen Sache das gleiche Grund-Problem gewesen ...

    Gruß
    LL

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

    Earny (24.07.2008)

  4. #3
    Earny ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard

    Hallo Larry L.,
    ja, das Problem geht wohl auf die gleiche Ursache zurück.
    Ich weiß jetzt aber wie die Umrechnung genau wird.
    Ich habe einen kleinen Skript angelegt und der besteht nur aus einer Zeile:

    MD_108 = CSng(StellTemp)

    und das funktioniert exakt, weil VB natürlich eine Integerzahl exakt in eine Singlezahl (Real) umwandeln muss.
    Den Skript rufe ich bei Wertänderung am Schaltknopf des Schiebereglers auf. Da ich üblicherweise nur mit der Runtime für PC arbeite, geht das problemlos. Mein TP177B mag wohl keine Skripte.

    Jetzt fehlt mir noch die Rückdarstellung des Wertes aus dem MD_108 (MD10 wenn die Visualisierung startet.
    Gibt es in Flex eine Funktion, die beim Start der Visualisierung 1-malig ausgeführt wird?
    Ich kenn das von VB6.0. Da macht das die Prozedur Form_Load ( ).

    Gruß
    Earny

  5. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.262
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    Ich schlag auch noch einmal in die gleiche Kerbe wie Larry, warum willst du das unbedingt in der Visu machen? Wenn du die Umrechnung in der SPS machst, hast du auch kein Problem mit der Rückdarstellung, weil nur die DINT-Verknüpfung zwischen Schieberegler und SPS besteht. Die Umrechnung hin und her macht sich in diesem Falle doch wirklich viel einfacher in der SPS.

    Zu deiner Frage:

    Denke, du mußt ein zweites Script machen, daß auf Wertänderung des von der Steuerung übergebenen Wertes reagiert und diesen in die DINT für den Schieberegler wandelt. Aber Vorsicht, der Wert ändert sich ja auch, wenn du vom Schieberegler die DINT in die Real wandelst, nicht daß dabei ein Deathlock entsteht? Aber versuchen kann man es ja einmal.
    Geändert von Ralle (24.07.2008 um 11:57 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

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

    Earny (24.07.2008)

  7. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.792
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    und noch als Ergänzung zu Ralle's Beitrag :

    Das TP177B kann, soweit mir bekannt ist, keine Scripte. Wenn du umrechnen mußt, dann gibt es da die internen Funktionen "Linear Umrechnen", die du bei der Ursprungs-Variable "bei Wert-Änderung" aufrufen kannst.
    Ich bleibe aber bei meinem Statement vom Beitrag davor ...

    Gruß
    LL

  8. #6
    Earny ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard

    Hallo Ralle,
    ich habe schon öfter festgestellt, dass VB-Skripts bei den Flex-Projektierern nicht hoch im Kurs steht. Ich glaube das kommt daher, weil viele OPs und TPs von Siemens keine Skripte unterstützen.
    Ich hatte bisher schon etwas mit VB6.0 und VB2005 programmiert, sogar einfache Prozessvisualisierungen. Daher sehe ich im Einsatz von VB-Skript auch einige Vorteile, zumal ich zur Zeit fast ausschließlich mit der Runtime für PC arbeite und die unterstützt Skripte.

    Ich könnte natürlich auch den reinen Integerwert 0 bis 100 des Schiebereglers in den Speicher MW106 der S7-CPU schreiben und dann nach Real wandeln mit

    L MW106
    ITD
    DTR
    T MD108

    Das Problem mit der Rückdarstellung bleibt doch wohl bestehen. Wenn die Runtime startet, steht der Schieberegler bei mir immer auf 0, obwohl in der Steuerung irgendein Wert von 0 bis 100.0 (Real) im MD108 liegen kann.
    Ich müsste dann beim Start der Flex-Runtime das MD108 lesen und auf den Schieberegler geben. Damit das nicht mit dem von Dir erwähnten Deadlock passiert, darf dieser Skript nur ein einziges Mal, beim Start der Runtime ausgeführt werden. So wird dieses Problem bei VB6.0 gelöst, wie bereits erwähnt, in der Form_Load ( ) Prozedur.
    Der zweite VB-Skript, der den Realwert aus der Steuerung liest und dann nach Integer gewandelt auf den Schieberegler gibt, ist nicht das Problem, sondern die Aufrufbedingung.
    Wie ruft man einen Skript 1-malig beim Start der Runtime auf?

    Gruß
    Earny

  9. #7
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.262
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    Ich weiß nicht, ob es bei WinCCFlex auch ein immer auszuführendes Script gibt. Wenn WinCCFlex startet, dann sind die internen, nicht verknüpften Variablen ja anscheinend auf Null. Also könnte man nach dem einmaligen Ausführen des Scriptes einen interne Variable auf 1 setzen und damit später die Abarbeitungen verhindern bzw. umspringen. Kann man den Schieberegler nicht mit einer SPS-DINT direkt verbinden? Dann sollte der Schieberegler beim Neustart eigentlich nicht auf 0 stehen. Aber WinCCFlex hat ja so seine Eigenheiten.

    PS: Ich mag zu viel Scripte noch aus einem weiteren Grund nicht. Andere Programmierer haben manchmal damit Probleme und die Portierbarkeit auf andere Panels leidet darunter sehr. Oft werden nur eile aus einem Projekt in ein anderes übernommen. Entweder, dort funktioniert dann nichts mehr oder der Bearbeiter weiß nichts von den Scripten und sucht dann ewig herum. Außerdem nervt mich die fehlende Debugmöglichkeit bei den Panels, die Fehlersuche ist wirklich nervend. Hinzu kommen die Unterschiede zwischen WinCE und der PC-Runtime. Also mache ich in der Steuerung, was nur geht, aber das ist wirklich meine persönliche Auffassung und hat nicht mit muß oder soll zu tun!
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  10. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Earny (24.07.2008)

  11. #8
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.262
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    Es wäre mal zu probieren. Was passiert, wenn eine SPS-Variable 1 ist und WinCCFlex startet. Gibt es dann einmalig einen Event "bei Wertänderung"? Dann wäre es ja kein Problem, da man diese Variable ja immer auf 1 beläßt. Aber das geht wahrscheinlich so nicht.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  12. #9
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.792
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    ... ich habe das mit dem "OB100" in der Visu bei meinen Runtimes (!!!) so gelößt, dass ich zunächst eine Init-Seite auf der Visu als Start-Seite habe. Diese Seiote hat als einziges Animations-Element ein Feld, dass den 0,5 Hz Blinktakt der CPU abfragt. Diese Variable, auf diese Weise abgefragt, für "bei Wert-Änderung" das Init-Script der Visu aus, das mit ggf. Parameter lädt, Variablen vor-einstellt und am Ende die eigentliche Start-Seite der Visu aufruft.
    Damit sehe ich aber bei dem genannten TP Probleme. Vielleicht geht aber ein Teil davon trotzdem ... so als Anregung ...

    Gruß
    LL

  13. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Earny (24.07.2008)

  14. #10
    Earny ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Larry L.,
    hallo Ralle,
    es scheint so, als gäbe es die Form-Load ( ) -Prozedur bei Flexible nicht. Ich habe zwar noch bei den Ereignissen eines Bildes die Methode "aufgebaut" entdeckt, die arbeitet aber auch nicht wie gehofft.
    Ich habe das Ganze gemäß Euren Ratschlägen folgendermaßen gelöst:
    Der Schieberegler schreibt in den Speicher MD108 der CPU im DINT-Format und das S7-Programm wandelt den Wert in ein Real-Format, da ich dieses am INV-Eingang des FB43 benötige.
    Das elegante bei dieser Lösung ist außerdem, dass beim Aufschalten der Runtime auf die laufende Steuerung, der aktuelle Wert aus dem MD108 (DINT) von der Runtime übernommen und als Rückmeldung auf den Schieberegler geschaltet wird, wodurch dieser, die dem Wert entsprechende Stellung annimmt.
    Weshalb es dabei nicht zu dem von Ralle genannten Deadlock kommt, ist mir allerdings nicht ganz klar.
    Es muss wohl was mit der "Erfassungsart" der Variable MD118 zu tun haben. Die steht bei mir auf "Zyklisch bei Verwendung". Damit funktioniert die Sache - ganz ohne Skripte.

    Es gibt offensichtlich doch viele gute Gründe, auf den Einsatz von Skripten zu verzichten. Ralle hat einige genannt. Das ist für mich nachvollziehbar.

    Die Lösung von Larry mit dem 0,5 Hz Blinktakt habe ich verstanden, ist aber etwas aufwändig. Damit hast Du quasi die Form_Load ( )-Prozedur nachgebildet, nur das der Anstoß von außen, nämlich von der CPU kommt.

    Gruß
    Earny

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 08.02.2009, 21:21
  2. Antworten: 2
    Letzter Beitrag: 16.10.2008, 12:39
  3. WinCCFlexible 2007
    Von Martin87 im Forum HMI
    Antworten: 1
    Letzter Beitrag: 20.06.2008, 09:52
  4. WinCCFlexible 2007 Advanced und S7-PDIAG
    Von Martin87 im Forum HMI
    Antworten: 0
    Letzter Beitrag: 28.05.2008, 14:39
  5. Antworten: 3
    Letzter Beitrag: 18.03.2008, 15:10

Lesezeichen

Berechtigungen

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