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

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

Thema: Integerdaten aus einem DB zu einer Stringkette wandeln

  1. #1
    Registriert seit
    01.10.2010
    Ort
    NRW
    Beiträge
    11
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo alle zusammen!

    Bin noch recht neu hier im Forum aber habe schon sehr viel aus euren Artikeln lernen können. Seit zwei Wochen beschäftige ich mich mit einem Projekt, wo 2 2D-Laserscanner über eine SPS ausgewertet werden sollen und Abstände verschiedener Objekte bzw Statusbits als Stringkette mittels einer CP343-1Lean an einen PC gesendet werden sollen.

    Die Auswertung habe ich soweit hin bekommen, dass 10 Integerwerte in einem Datenbaustein abgelegt werden. (siehe screenshot.jpg)

    Jetzt sollen diese 10 Integerwerte in einen String zusammengeschrieben werden, damit sie über den AG_Send verschickt werden können.
    Zur Zeit habe ich in FUP mit den Bibliothekenbausteinen I-STRING und CONCAT eine etwas zusammen "gefrickelt".
    Gibt es da nicht Möglichkeiten das sauberer zu Lösen?Am liebsten in SCL...

    Viele Grüße
    Angehängte Grafiken Angehängte Grafiken
    Zitieren Zitieren Integerdaten aus einem DB zu einer Stringkette wandeln  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Hallo,
    klar kannst du das in SCL machen. Die Umgebung verwendet zwar die gleichen FC's für die Wandlung bzw. zum Verknüpfen - es sieht aber deutlich lesbarer aus.

    Gruß
    Larry

  3. #3
    s_alpen ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    01.10.2010
    Ort
    NRW
    Beiträge
    11
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    OK,

    kann ich die Werte einfach so aus der DB aufrufen?

    ...
    DB1.DB_var[1]:=INT_TO_STRING(DB2.DB_Var[1]);
    ...

    Habe mit SCL noch nicht viel programmiert.

    Grüße

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Ja ... im Grundsatz so richtig.
    Ich würde allerdings hier die Hilfs-Strings im Speicherbereich des Bausteins abbilden - also z.B. im TEMP-Bereich den/die Strings deklarieren und dann die Zuweisen und hinterher verknüpfen. Den DB für die Zwischenstrings brauchst du im Grunde nicht.

    Das Endergebnis würde ich dann nur noch ausgeben ...

    Gruß
    Larry

  5. #5
    Registriert seit
    27.12.2009
    Beiträge
    93
    Danke
    4
    Erhielt 20 Danke für 18 Beiträge

    Standard

    Hallo,

    wie willst Du auf der Pc-seite die Ziffern wieder auseinander pfrimeln?

    Mein Vorschlag:
    -Wandle jede Integerzahl in String um.
    -Erzeuge Dier einen Trennzeichenstring z.B. '#' und einen laaaangen Tempstring (>200Chars)
    -dann erzeuge einen TempString mit
    1.Concat String1+Trennstring -> Tempstring;
    2.1.Concat Tempstring+String2 -> Tempstring;
    2.2.Concat Tempstring+Trennzeichen -> Tempstring;
    3.1.Concat Tempstring+String3 -> Tempstring

    ...

    10.1 Concat Tempstring+String10 -> Tempstring

    Dann Sende den String an PC (Länge Steht in Stringvereinbarung 2.Byte)

    Auf der PC-Seite kann man dann die Ziffern anhand der Trennzeichen wieder Trennen, z.B. in PHP mit der explode-Funktion.

    Ich hoffe, dass dich diese Infos etwas weiterbringen.

    Gruß
    S7_Programmer

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

    s_alpen (18.10.2010)

  7. #6
    s_alpen ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    01.10.2010
    Ort
    NRW
    Beiträge
    11
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Guten Morgen zusammen. Danke für eure Hilfe.
    Die Software auf dem anderen PC schreibt eine andere Abteilung und die wollen eine Stringkette...

    Habe jetzt in SCL eine Funktion geschrieben, die die Einzelnen Integerwerte ausliest und zu einem String zusammenfügt und in DB201 ablegt.
    Beim Compilieren sind keine Fehler oder Warnungen aufgetaucht, daher habe ich dann den den FC-Baustein in den OB1 übernommen.

    FUNCTION DATEN_AUFBEREITEN : VOID

    VAR_TEMP

    // temporäre Variablen
    b1:STRING[4];
    b2:STRING[4];
    b3:STRING[1];
    b4:STRING[1];
    b5:STRING[1];
    b6:STRING[1];
    b7:STRING[1];
    trenn:STRING[1]; //Trennzeichen
    c:STRING; //zu bildene Stringkette

    END_VAR

    //Überführung von INT nach String
    b1 := INT_TO_STRING(DB1.X_OFF);
    b2 := INT_TO_STRING(DB1.Y_OFF);
    b3 := INT_TO_STRING(DB1.LMS_Stat1);
    b4 := INT_TO_STRING(DB1.LMS_Stat2);
    b5 := INT_TO_STRING(DB1.STOP);
    b6 := INT_TO_STRING(DB1.START_SWITCH);
    b7 := INT_TO_STRING(DB1.STOP_SWITCH);
    trenn:= '#';

    //Erstellen der Zeichenkette mit Trennzeichen
    c := CONCAT(IN1 := b1,IN2 := trenn);
    c := CONCAT(IN1 := c,IN2 := b2);
    c := CONCAT(IN1 := c,IN2 := trenn);
    c := CONCAT(IN1 := c,IN2 := b3);
    c := CONCAT(IN1 := c,IN2 := trenn);
    c := CONCAT(IN1 := c,IN2 := b4);
    c := CONCAT(IN1 := c,IN2 := trenn);
    c := CONCAT(IN1 := c,IN2 := b5);
    c := CONCAT(IN1 := c,IN2 := trenn);
    c := CONCAT(IN1 := c,IN2 := b6);
    c := CONCAT(IN1 := c,IN2 := trenn);
    c := CONCAT(IN1 := c,IN2 := b7);

    //Ausgabe der Kette in eine Variable
    DB201.Stringkette := c;

    END_FUNCTION


    DB201 mit Stringkette TYP:String[19] und Anfangswert '' definiert.
    Mit Hilfe das Bausteins FB200 [AG_SEND/AG_RECV] sollen die Daten dann über CP343-1 Lean an den externen Rechner versand werden. Daher den Baustein AG_Send mit Send=DB201 und LEN=22 parametreiert(siehe Bild).

    Die Verbindng zweischen LEAN und Andere Station ist zuvor mit char-daten getestet worden. Mit der neuen Stringkette sendet die CPU jedoch keine Daten mehr raus.

    Woran kann das liegen? Ob der String richtig zusammengefügt wurde, kann ich leider in der Online-Beobachtung nicht kontrollieren...
    Gibt es andere Dignosemöglichkeiten oder habe ich noch etwas falsch Parametreiert?

    Vielen Dank für eure Hilfe


    Gruß[IMG]file:///C:/DOKUME%7E1/HEISTE%7E1/LOKALE%7E1/Temp/moz-screenshot.png[/IMG]
    Angehängte Grafiken Angehängte Grafiken

  8. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Hallo,
    ganz generell habe ALLE Siemens FC's Probleme mit nicht initialisierten Strings - selbst die, die den String erst erzeugen (obwohl das da vollkommender Quatsch ist).
    Ich weiß jetzt auch nicht, ob das jetzt tatsächlich die Lösung zu deinem Problem ist, du könntest es aber mal probieren. Schreib doch mal vor der Verwendung der TEMP-Strings b1 .. b7 in dein Script das folgende mit hinein :
    Code:
    b1 := '' ;
    b2 := '' ;
    etc.
    Es könnte sehr gut sein, dass das der Schlüssel ist ...

    Gruß
    Larry

    Nachsatz : das würde dann auch für c gelten ...

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

    s_alpen (18.10.2010)

  10. #8
    s_alpen ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    01.10.2010
    Ort
    NRW
    Beiträge
    11
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    danke für die Hilfe.
    Das Programm läuft jetzt so wie gefordert.
    Habe die tempStrings wie Larry Laffer beschrieben initialisiert.
    Zwei Dinge musste ich weiterhin ändern.

    Zum einen habe ich an dem AG_SEND/AG_RECV Datenblock die zu sendenen Daten aus mit einem POINTER und bestimmter Zeichenlänge übergeben und nicht einach die gesamte Datenbank angegeben und zum anderen hatte ich noch ein Problem mit der Zeichenlänge mit den Stringvariablen b3-b7. Hier sollten quasi boolsche Werte 1 oder 0 übertragen werden. Da diese zuvor im Programm als Integer abgelegt werden, muss der String mindestens 2 Zeichen groß sein, da bei INT_to_STRING das Vorzeichen mitgenommen wird.

    Gruß

  11. #9
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Ich reiche mal noch den Code nach, den ich dir vorgestern posten wollte, leider hat da mein Netz so gestreikt, dass nichts ging.

    Ein wenig kannst du den Code damit noch straffen.
    Code:
      Auftrag := '';
      CR := '$r$l';
      Auftrag := CONCAT(IN1 := '' 
                             ,IN2 := Stations_Code_tmp
                             ,IN3 := CR
                             ,IN4 := Auftrag_Order_No_tmp
                             ,IN5 := CR
                             ,IN6 := Product
                             ,IN7 := CR
                             ,IN8 := strDatum
                             ,IN9 := CR
                             ,IN10 := strZeit
                             ,IN11 := CR
                             ,IN12 := Event_tmp
                             ,IN13 := CR
                             ,IN14 := Text_tmp
                            );
    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. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    s_alpen (26.11.2010)

  13. #10
    Registriert seit
    11.05.2006
    Beiträge
    72
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Ralle Beitrag anzeigen
    Ich reiche mal noch den Code nach, den ich dir vorgestern posten wollte, leider hat da mein Netz so gestreikt, dass nichts ging.

    Ein wenig kannst du den Code damit noch straffen.
    Code:
      Auftrag := '';
      CR := '$r$l';
      Auftrag := CONCAT(IN1 := '' 
                             ,IN2 := Stations_Code_tmp
                             ,IN3 := CR
                             ,IN4 := Auftrag_Order_No_tmp
                             ,IN5 := CR
                             ,IN6 := Product
                             ,IN7 := CR
                             ,IN8 := strDatum
                             ,IN9 := CR
                             ,IN10 := strZeit
                             ,IN11 := CR
                             ,IN12 := Event_tmp
                             ,IN13 := CR
                             ,IN14 := Text_tmp
                            );
    Habe ein ähnliches Problem und die Lösung in einen SCL-FB gemacht.
    Sobald ich diese Stringauswertung drin habe, geht der Lokaldatenbedarf rauf auf 880Bytes bei mir. Ist ja enorm. Habe nur einen String[17] als Ausgangsparameter. Gibt es da vielleicht andere Möglichkeiten?
    Geändert von tarzipan7 (25.11.2010 um 08:54 Uhr)

Ähnliche Themen

  1. Visu auf einer 750-XXX mit einem Gif Bild?
    Von Michael68 im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 12.11.2010, 19:35
  2. Antworten: 8
    Letzter Beitrag: 13.04.2010, 10:27
  3. Antworten: 6
    Letzter Beitrag: 13.02.2008, 09:23
  4. String in einer DB nach Integer wandeln
    Von noeppkes im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 01.10.2007, 14:32
  5. Antworten: 10
    Letzter Beitrag: 18.07.2005, 11:38

Lesezeichen

Berechtigungen

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