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

Ergebnis 1 bis 10 von 10

Thema: Bosch unbekannten Variablentyp übergeben

  1. #1
    Registriert seit
    12.11.2013
    Beiträge
    10
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich würde gerne folgendes Problem an einer IndraMotion MTX 12V08 Steuerung lösen und komme hier nicht weiter.

    Ich möchte im Falle eines Fehlers (z.B. Temperatur der Spindel zu hoch) eine Fehlermeldung an meinem HMI darstellen.
    In dieser Fehlermeldung sollen nicht nur der String 'Temperatur der Spindel zu hoch' , sondern auch die dazugehörigen Messwerte durchgegeben werden.

    Ich möchte nun einen kompletten String an das HMI weitergeben, indem über zwei Platzhalter (%d) die SOLL und IST Werte weitergegeben werden.


    In TwinCat würde das ganze so aussehen:

    SendMessageToHMI (sMsg:='Temperatur der Spindel zu hoch SOLL=%d IST=%d',
    arg1:=F_BYTE(nTempSpinReq), arg2:=F_BYTE(nTempSpinState);


    Hier ist das Problem auf das ich stoße. Ich muss ja gewährleisten das die beiden Messwerte (SOLL und IST) in einen String umgewandelt werden, bevor ich diese als Platzhalter übergebe.
    In TwinCat ist dazu ein Funktionsblock dazwischengeschalten der jeglichen Datentyp in einen String umwandelt --> FB_FormatString. Es werden also die Messwerte nTempSpinReq und nTempSpinState mittelts F_BYTE() vom Typ T_Arg übergeben und dann im FB_FormatString umgewandelt.

    Jetzt haben unterschiedliche Messwerte auch oft unterschiedliche Datentypen zum Übergeben (INT, BYTE, WORD, .... )
    Gibt es auf der Bosch Steuerung auch eine Möglichkeit verschiedene Messwerte mit unbekanntem Typ erst zu übergeben, um Sie dann in einem nächsten Schritt mit einem ANY_TO_STRING o.ä. umzuwandeln?

    (Wie gesagt funktioniert die übergabe der Datentypen unter TwinCat immer mit den Hilfsfunktionen F_BYTE, F_INT, F_WORD,... vom typ T_Arg. Nach der Übergabe werden die Messwerte dann mit dem FB_FormatString umgewandelt. So etwas in der Richtung suche ich auch für meine Bosch)


    Ich hoffe es findet sich ein Bosch Experte unter euch
    Zitieren Zitieren Bosch unbekannten Variablentyp übergeben  

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

    Standard

    Moin,
    den Temperaturwert kannst du mittels INT_TO_STRING umwandeln
    dann die beiden string Werte (Text& Temperatur) mittels CONCAT zu einem String zusammenfügen (drücke mal F1.. dort wird es auch noch mal erklärt)
    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:

    xck-kg (25.02.2014)

  4. #3
    xck-kg ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    12.11.2013
    Beiträge
    10
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi, danke für die schnelle Antwort.

    Das heisst am einfachsten ist es dann wenn ich die verschiedenen Datentypen in einen String umwandle und dann praktisch alle aneinander hänge?
    So z.b.: ?


    sMsg:= 'Temperatur der Spindel zu hoch'
    arg1:=INT_TO_STRING(nTempSpinReq);
    arg2:= BYTE_TO_STRING(nTempSpinState);




    sOut := ' ';
    sOut := CONCAT(sOut, sMsg);
    sOut := CONCAT(sOut, arg1);
    sOut := CONCAT(sOut, arg2);

    //und dann um es noch auszugeben:

    SendMessageToHMI (sOut);





    Das wäre auch ein weg an den ich in etwa gedacht habe. So muss ich halt schon vorher alle Datentypen einzeln in einen String umwandeln, bevor ich Sie übergebe. Hier habe ich aber jetzt noch das Problem dass mein String nun folgendermaßen aussieht:

    '
    Temperatur der Spindel zu hoch80150'

    --> Wie kann ich noch die CONCAT Funktion so erweitern, dass meine Platzhalter bedient werden. Also wie oben im Beispiel, sollte das Ergebnis so aussehen:

    'Temperatur der Spindel zu hoch SOLL=80 IST=150'

    Einfach zwei weitere String erstellen ' SOLL ' und ' IST ' und diese dann dazwischen mogeln?



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

    Standard

    so könnte man es auch machen :

    sMsg:= 'Temperatur der Spindel zu hoch Soll='
    arg1:=INT_TO_STRING(nTempSpinReq);
    arg2:= BYTE_TO_STRING(nTempSpinState);

    sOut := CONCAT(sMsg, arg1, 'IST=',arg2);


    SendMessageToHMI (sOut);

    mit CONCAT kannst du gleichzeitig mehrere Strings miteinander verketten..probiers einfach mal aus
    Gruß Thomas
    Weil Denken die schwerste Arbeit ist, die es gibt, beschäftigen sich auch nur wenige damit.

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

    xck-kg (25.02.2014)

  7. #5
    xck-kg ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    12.11.2013
    Beiträge
    10
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ahhhhhhh sehr gut!

    Ich dachte CONCAT kann immer nur 2 Strings zusammenlegen ... DANKE!

    Vll nochmal zu dem Versuch mit dem Platzhalter. Ich habe über F1 jetzt was zu der Format Syntax gefunden, in der man Platzhalter einsetzen kann ....
    Kann ich jetzt den Ausgabestring vll auch so aufbauen?

    arg1:=INT_TO_STRING(nTempSpinReq);
    arg2:= BYTE_TO_STRING(nTempSpinState);


    sMsg:= 'Temperatur der Spindel zu hoch SOLL= {@VAR(arg1)%s} IST {@VAR(arg2)%s}'


    SendMessageToHMI (sMsg);



    ---> So würde ich mir die CONCAT Geschichte komplett sparen...
    (Wobei ich hier bei dem Platzhalter {@VAR(arg1)%s} noch nicht verstanden habe für was das "@VAR" steht ... "(arg1)%s" ist mir aber klar ...)

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

    Standard

    das wird wohl so nicht gehen,
    da du ja durch 'xxx' den Beginn/Ende einer Zeichenkette deklarierst.
    Weil Denken die schwerste Arbeit ist, die es gibt, beschäftigen sich auch nur wenige damit.

  9. #7
    xck-kg ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    12.11.2013
    Beiträge
    10
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von rheumakay Beitrag anzeigen
    das wird wohl so nicht gehen,
    da du ja durch 'xxx' den Beginn/Ende einer Zeichenkette deklarierst.
    Also in TwinCat funktioniert es ähnlich...

    Es wird der FB SendMessageToHMI aufgerufen und dann werden die verschiedenen Eingänge gesetzt. Hier nochmal:
    SendMessageToHMI (sMsg:='Temperatur der Spindel zu hoch SOLL=%d IST=%d', arg1:=F_INT(nTempSpinReq), arg2:=F_BYTE(nTempSpinState);

    An der Stelle mit den Prozentzeichen werden dann die jeweiligen argumente eingesetzt.

    Wenn ich jetzt also meinen eigenen FB_SendMessageToHMI deklariere und ihm als INPUT_VAR die Werte auch so weitergebe wie in TwinCat, müsste es soch auch funktionieren oder ?

    SendMessageToHMI (sMsg:= 'Temperatur der Spindel zu hoch: SOLL= {@VAR(arg1)%s} IST {@VAR(arg2)%s}'
    arg1:= INT_TO_STRING(nTempSpinReq),
    arg2:= BYTE_TO_STRING(nTempSpinState) );



    Liegt der Fehler an den Platzhaltern oder warum sollte das mit der Zeichenkette nicht gehen ?

  10. #8
    lothar Gast

    Standard

    Hallo,

    womöglich hast Du Dich in der Onlinehilfe verlaufen: was Du gefunden hast, ist nicht die Syntax, die im SPS-Codeeditor zu verwenden ist, sondern die hat mit "ProVi" zu tun.
    Am besten schaust Du mal das ProVi-Handbuch an. Liegt im Rexroth-Medienverzeichnis (dort suchen nach: Provi).

    Wer z.B. Variable, etc. im Meldungstext mitgeben muss, ist bei ProVi richtig.

    Die prinzipielle Vorgehensweise ist:

    // 1. Diagnose einschalten: Menü: Diagnose/ProVi-SFC-Diagnose
    // 2. Cursor in die Zeile stellen, welche die Meldung auslösen soll
    // 3. Meldung editieren, dazu: Menü: Diagnose/Provi-Meldungseditor
    // dort: Meldungstyp und Modulnummer wählen,
    // Meldungsnummer wird automatisch fortlaufend, beginnend mit 0, angeboten.
    // Meldungstexte editieren ggf. in mehreren Sprachen.
    // Der ProVi-string (in den geschweiften Klammern) wird danach (bei ok) automatisch erzeugt

    // die Meldung könnte im Editor z.B. so aussehen (das hat Ähnlichkeit mit der Syntax, die Du gefunden hast...):
    // Mein ProVi-Fehlertext_0, Modul_1, mit Variable LifeTicker: {@VAR(LifeTicker)}



    So könnte der SPS-Code aussehen (wobei die erste Zeile automatisch generiert wurde, und die zweite die Meldung bedient:
    {ProVi Error, Module: 1, Not: FALSE, Set: FALSE, KA: FALSE, Indicate: FALSE, No: 0}
    bProViTest_01 := Blink_0_5Hz;

    Gruss
    Lothar
    Geändert von lothar (25.02.2014 um 16:19 Uhr)

  11. Folgender Benutzer sagt Danke zu lothar für den nützlichen Beitrag:

    xck-kg (03.03.2014)

  12. #9
    xck-kg ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    12.11.2013
    Beiträge
    10
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von rheumakay Beitrag anzeigen

    sOut := CONCAT(sMsg, arg1, 'IST=',arg2);

    mit CONCAT kannst du gleichzeitig mehrere Strings miteinander verketten..probiers einfach mal aus
    Gruß Thomas
    Kurzer einschub: CONCAT kann nur genau zwei Strings aneinanderhängen!
    Habe es gerade an der Steuerung getestet.

  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
    Jau,da gebe ich dir recht.
    Dann gehts aber, wenn du einen zusätliches Schmiermerkerwort benutzt (also CONCAT 2x benutzen)
    Weil Denken die schwerste Arbeit ist, die es gibt, beschäftigen sich auch nur wenige damit.

Ähnliche Themen

  1. Biete Bosch R200 Baugruppe für eine Bosch CL200
    Von ronaldo1901 im Forum Suche - Biete
    Antworten: 0
    Letzter Beitrag: 22.09.2010, 18:31
  2. Antworten: 6
    Letzter Beitrag: 26.10.2007, 21:36
  3. S7-200 Variablentyp Word
    Von pixelpeter im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 24.08.2007, 21:12
  4. Antworten: 2
    Letzter Beitrag: 29.03.2007, 15:46
  5. Variablentyp Erkennen
    Von Markus im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 12.01.2007, 17:28

Stichworte

Lesezeichen

Berechtigungen

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