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

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

Thema: variable string länge deklarieren

  1. #1
    Registriert seit
    24.10.2012
    Beiträge
    61
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe eine Frage zu strings und zwar möchte ich einen beliebigen string an einen Funktionsbaustein übergeben.

    Code:
     CALL  "SNMP_Protokoll" , DB400
           DB_NUMBER:=
           CREA_DB  :=
           DEL_DB   :=
           COMMUNITY:= 'public'
    Im Instanzdatenbaustein dieses Funktionsblocks ist die IN Variable mit dem Typ String gekennzeichnet (maximale Länge 254). Wenn ich jedoch, wie im obrigen Code gezeigt, den String 'public' angebe, gibt es ein Längen Konflikt. Der String ist lediglich 6 Byte lang und nicht 254. Ich möchte nun das die String Länge, die im Instant Datenbaustein deklariert ist eine variable Länge hat, so das man beliebige Strings dem Funktionsblock übergeben kann. Gibt es da eine Möglichkeit?

    Gruß Tim
    Zitieren Zitieren variable string länge deklarieren  

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

    Standard

    Ein String hat ja 2 Byte als Kopf, die maximale Länge und die tatsächliche Länge.
    Ich würde mal versuchen in einem DB einen String 254 anzulegen und dort 'public' hineinschreiben, das Byte 0 sollte dann 254 enthalten, das Byte 1 sollte 6 enthalten. Dann mal diesen DB-String an COMMUNITY anlegen.

    Alternativ kann man das auch mit einem in Temp deklarierten String versuchen, dann muß man aber Byte 0 und 1 selbst mit der richtigen Länge beschreiben, den String sozusagen initialisieren.
    Geändert von Ralle (02.11.2012 um 09:12 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

  3. #3
    Registriert seit
    24.10.2012
    Beiträge
    61
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Den String in einer Datenbank ablegen der die Maximale Länge 254 hat und dort 'public' reinschreiben funktioniert alles (das war mein erster Ansatz). Jedoch fand ich es unkomfortabel den Wert in der Datenbank zu ändern, daher die Idee mit dem Eingangsstring.

    Wie genau funktioniert das mit dem Temp deklarierten String?
    Geändert von Ralle (02.11.2012 um 09:33 Uhr)

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

    Standard

    Zitat Zitat von Grisu88 Beitrag anzeigen
    Den String in einer Datenbank ablegen der die Maximale Länge 254 hat und dort 'public' reinschreiben funktioniert alles (das war mein erster Ansatz). Jedoch fand ich es unkomfortabel den Wert in der Datenbank zu ändern, daher die Idee mit dem Eingangsstring.

    Wie genau funktioniert das mit dem Temp deklarierten String?
    Entschuldigem, ich hatte den falschen Butten erwischt und das Ganze direkt in deinen Kommentar geschrieben. Deshalb steht in deinem Post jetzt geändert durch Ralle, schäm.

    Mal so in aller Schnelle aus dem Kopf:
    Du legst in Temp einen String 254 an. Gut wäre es, diesen String dann per ind. Adressierung mit Daten zu befüllen,

    L P##MyString
    LAR1

    L 254
    T LB[AR1, P#0.0]
    L 6
    T LB[AR1, P#1.0]
    L 'p'
    T LB[AR1, P#2.0]
    ...

    Dann mit MyString arbeiten.

    Am einfachsten geht die gesamte Stringbearbeitung in SCL zu erledigen.

    MyString := 'public';

    Aber Achtung, die Lokalvariablen in der SPS sind begrenzt, da kann man nicht mit allzu vielen deklarierten Temp-Strings arbeiten!
    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

  5. #5
    Registriert seit
    24.10.2012
    Beiträge
    61
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard

    hmm so ganz ist das noch nicht was ich möchte . Also das was am Ende rauskommen soll, ist ein Funktionsblock bei dem man einen beliebigen string wie im Code von mir oben gezeigt eingeben kann. Das heißt es soll nicht jede einzelne Variable per ind. Adressierung angeben werden oder hab ich den Vorschlag falsch verstanden?

    mit scl ist das so eine Sache, damit hab ich mich noch nie beschäftigt und es sollte ein reiner awl code werden

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

    Standard

    Na ja, so wie du das machst, also 'public' direkt ranschreiben, das ist ja nicht variabel, dann würde ich doch die DB-Variante wählen. Ich mache es oft so, dass ich mir einem DB anlege, in dem alle Strings eingetragen sind, die ich z.Bsp. für eine Kommunikation benötige. Diese lege ich dann an die Bausteine, wenn es Variabel sein muß, dann mache ich das per Any-Pointer. Ich würde auch überlegen, ob es wirklich String 254 sein muß, oder ob.Z.Bsp. String 30 auch reicht, es müssen dann halt alle Strings als String 30 definiert werden. Als einfachste Variante habe ich mir mal einen ganz einfachen FC geschrieben, der machte in SCL nur

    String_Out := String_IN;

    Dann konnte man im SPS-Programm diesen Baustein z.Bsp. in einer Schrittkette einfach aufrufen und Strings umkopieren. Im Prinzip ist das nicht anderes als ein einfacher Blockmove, aber halt als eigener Baustein mit den entsprechenden verständlichen IN-Out-Bezeichnungen.
    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

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

    Grisu88 (02.11.2012)

  8. #7
    Registriert seit
    24.10.2012
    Beiträge
    61
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ja vielleicht ist das doch besser mit dem Datenbaustein

    vielen Dank für deine schnelle Hilfe

  9. #8
    Registriert seit
    11.12.2009
    Beiträge
    2.115
    Danke
    388
    Erhielt 390 Danke für 271 Beiträge

    Standard

    Ralle, ich denke eher das sein Ansatz ein anderer ist...

    Ich vermute es soll in etwa so ablaufen:

    Es wird ein Baustein erstellt, z.B. für einen Zylinder.
    An diesen will er seine E/A dranbauen, und einen String für den Namen des Zylinders.
    Das wird dann gleich aus der Visu gelesen und angezeigt. Somit für Faule Visu-Bastler ideal

    Da ist das mit dem Strings wo anders anlegen wieder für die Katze, und man hat eigtl. den Komfort wieder verloren.

    Grüße

    Marcel

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

    Standard

    Zitat Zitat von Matze001 Beitrag anzeigen
    Ralle, ich denke eher das sein Ansatz ein anderer ist...

    Ich vermute es soll in etwa so ablaufen:

    Es wird ein Baustein erstellt, z.B. für einen Zylinder.
    An diesen will er seine E/A dranbauen, und einen String für den Namen des Zylinders.
    Das wird dann gleich aus der Visu gelesen und angezeigt. Somit für Faule Visu-Bastler ideal

    Da ist das mit dem Strings wo anders anlegen wieder für die Katze, und man hat eigtl. den Komfort wieder verloren.

    Grüße

    Marcel
    Ja ich verstehe, dann sollte er vielleicht wirklich alles z.Bsp. mit String 30 machen und auch 'public........................' an den Input schreiben.
    Oder er muss vor dem Baustein immer 'zu Fuß' in eine passende Temp umkopieren.
    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

  11. #10
    Registriert seit
    24.10.2012
    Beiträge
    61
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    das mit 'public........................' würde zwar den Längen Konflikt lösen, jedoch brauch ich die tatsächliche Länge des Wortes (hier "public" also 6) im funktionsbaustein selber.

Ähnliche Themen

  1. Antworten: 10
    Letzter Beitrag: 24.01.2012, 10:11
  2. Antworten: 0
    Letzter Beitrag: 04.06.2010, 09:55
  3. String: Übergabe der Max Länge Falsch
    Von kai86 im Forum Simatic
    Antworten: 53
    Letzter Beitrag: 01.03.2010, 16:49
  4. Konstante String in Variable String schreiben
    Von sailor im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 07.12.2009, 18:01
  5. Länge eines String mit der LEN-Funktion auslesen
    Von baggerandy im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 10.04.2009, 16:13

Lesezeichen

Berechtigungen

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