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

Seite 4 von 6 ErsteErste ... 23456 LetzteLetzte
Ergebnis 31 bis 40 von 51

Thema: String zusammen setzen und als Array of Char abspeichern - ohne SCL

  1. #31
    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


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Lass uns damit ruhig in diesem Thread bleiben ...

    Was genau hast du vor ?
    Den ASCII-Code eines Zeichens kannst du im einfachsten Fall direkt an die passende Stelle des Byte-Array's bringen - egal ob im String oder ob in deinem Zielspeicher.
    Beispiel : der ASCII-Code 48 ist ein Byte-Wert und steht für das Zeichen '0'.
    Du kannst aber auch den Concat mit dem Zeichen füttern - du mußt das dann nur in Hochkomma setzen.

    Also ... need more Info ...

    Gruß
    Larry

  2. #32
    Registriert seit
    05.11.2011
    Beiträge
    75
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke Larry,

    ich habs nochmal editiert, da ich selbst drauf gekommen bin. War eigentlich auch logisch


    Einen diesmal hoffentlich wirklich letzten Punkt:
    Ich würde das Ganze gerne in eine eigene Funktion auslagern, frage mich aber nun ob bzw. wie ich den "End-String" (um die 15 Zeichen) aus der Funktion raus bekomme (ohne Umweg über einen DB, also OUT bzw IN_OUT oder RET_VAL).

    Ich kann zwar allem Anschein nach einen String als OUT definieren, aber String[15] z.B. geht nicht. Ich müsste dann ja erstmal wieder den Rest abschneiden ... oder gibts da ne andere Möglichkeit?

  3. #33
    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

    Das Ganze in eine eigene Funktion (ich würde allerdings eher einen FB nehmen - aber FC ist auch OK) halte ich für absolut sinnvoll ...
    Der Datentyp String beinhaltet in seinem Header immer die Längen-Information. Das eine Byte gibt die deklarierte Länge an, das andere die verwendete (also tatsächliche) Länge. Wenn du den String mit den Siemens-Bausteinen zusammengestezt hast (also z.B. ConCat) dann ist die Länge bereits korrekt eingetragen. Die kannst du dann manuell wieder auslesen oder mittels des Siemens-FC Length (steht in der gleichen Bibliothek wie Concat und Right).

    Gruß
    Larry

  4. #34
    Registriert seit
    05.11.2011
    Beiträge
    75
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Thx nochmal für die Info. FB ist tatsächlich besser, hier kann ich einfach als OUT meine Variable mit korrekter Länge einsetzen - z.B. String[15]. Damit hats schon geklappt. Nice

  5. #35
    Registriert seit
    05.11.2011
    Beiträge
    75
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Gibt doch noch ein Problem... mir fehlt jetzt irgendwie das Trennzeichen überall. Ich vermute irgendwie, dass sich die Adressierung der Lokaldaten durch den nun einzigen Eintrag in STAT geändert hat - kann das sein?


    EDIT: Noch ein paar Infos...

    Ich habe den Kram von oben nun in einem FB ausgelagert. Dort gibts zusätzlich die OUT-Variable "Zeitstempel_Str_15" als String[15] - diese ist auch entsprechend im Header belegt. Ich schreibe in diesem FB nun am Ende über BLKMOV nicht in einen DB sondern in diesen String[15]

    Dieser FB wird im überlagerten FB als Multiinstanz aufgerufen (dort der einzigste Eintrag in STAT), die OUT-Variable "Zeitstempel_Str_15" existiert auch im überlagerten FB (natürlich auch als String[15] und auch Header vorbelegt) und ist entspr. dann dort mit BLKMOV verschaltet - der schreibt dann wieder in den DB.
    Geändert von saarlaender (07.08.2012 um 12:27 Uhr)

  6. #36
    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

    Zitat Zitat von saarlaender Beitrag anzeigen
    Gibt doch noch ein Problem... mir fehlt jetzt irgendwie das Trennzeichen überall. Ich vermute irgendwie, dass sich die Adressierung der Lokaldaten durch den nun einzigen Eintrag in STAT geändert hat - kann das sein?
    Das ist immer schwer, so etwas pauschal zu beantworten (so ohne den Code) - ich kann es mir aber vorstellen wenn du die LB's direkt ansprichst (L LB15) und nicht symbolisch (L #meine_TempVariable) bzw. wenn du ein Misch-Masch fährst.

    Gruß
    Larry

  7. #37
    Registriert seit
    05.11.2011
    Beiträge
    75
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Also ich hab hier noch was von Siemens ausgedruckt liegen. Da steht, dass wenn ich diesen FB als Multiinstanz nutzen will, einen Aufruf wie
    Code:
    L P##test
    LAR1
    ersetzen muss durch
    Code:
    TAR2
    UD DW#16#00FF_FFFF
    LAR1 P##test
    +AR1

    Wenn das stimmt, muss ich das echt bei zig Stellen in dem FB machen...

  8. #38
    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

    Ich hatte dir doch schon mit dem pauschal was geschrieben ...
    Das mit der Multi-Instanz und dem AR2 darufaddieren ist dann ein Thema, wenn du für deinen FB nicht einen eigenen Instanz-DB machst sondern ihn in die Instanz eines anderen FB mit einlagerst. Machst du das bzw. hast du das vor ? Wenn du es vorhast - OK ... Wenn du es aktuell aber nicht machst, so ist das nicht dein Problem ...

  9. #39
    Registriert seit
    11.05.2005
    Ort
    Baden-Württemberg
    Beiträge
    669
    Danke
    113
    Erhielt 153 Danke für 124 Beiträge

    Standard

    Wenn du den FB als Multiinstanz aufrufen willst, dann kommst da nicht drum rum.

    Für dein Beispiel reicht:
    Code:
    LAR1 AR2
    L P#test
    +AR1
    "arbeite klug, nicht hart" - deutsches Sprichwort

  10. #40
    Registriert seit
    05.11.2011
    Beiträge
    75
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich hab irgendwo noch ein dickes Problem drin.

    Die ganze Geschichte hat eigentlich funktioniert, aber wenn ich die CPU von STOP wieder anlaufen lasse, stimmt das alles nicht mehr. Dann fehlen die Trennzeichen und es wird teilweise zu wenig übertragen. Einfach unerklärlich erstmal.

    Wenn ich dann im übergeordneten FB eine neue TEMP-Variable anlege (egal welcher TYP), ändert sich etwas. Wenn ich das gleiche im Zeitstempel-FB mache (Aufruf NOCH NICHT über Multiinstanz!), ändert sich wieder etwas.
    Wenn ich dann wieder einen oder beide neue TEMP-Variablen lösche, hab ich wieder die richtigen Werte mit Trennzeichen.

    Wenn ich dann wieder die CPU stoppe und neu anlaufen lasse, fängt das ganze Spielchen wieder von vorne an...


    HAt da jemand auch nur die leiseste Ahnung oder muss ich beide Bausteine mal hier abtippen?

Ähnliche Themen

  1. S7-1200-Array of Char in string
    Von Diplomand11 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 21.01.2011, 08:44
  2. SCL - OB und Array als Parameter
    Von Bluescreener im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 15.02.2008, 15:21
  3. Das Array und Char/String Geheimnis...
    Von Percival im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 12.10.2007, 11:10
  4. Antworten: 5
    Letzter Beitrag: 14.06.2005, 14:55
  5. Array als String darstellen
    Von DiplomandSPS im Forum HMI
    Antworten: 10
    Letzter Beitrag: 30.03.2004, 23:18

Lesezeichen

Berechtigungen

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