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

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

Thema: String in OP der C7-613

  1. #1
    Registriert seit
    17.10.2008
    Ort
    Neubrandenburg
    Beiträge
    21
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo an Alle,

    als unregistered habe ich schon so manches Problem mithilfe des Forums lösen können, vielen Dank - zum jetzigen gibt es jedoch noch keinen Beitrag.

    Also:
    Ich möchte auf dem OP an der C7-613 ein Bild anzeigen in dem sich die Texte aus dem Programm heraus verändern lassen.
    Mittels der SFC20 (Block-Move) schreibe ich direkt in den Config-DB (bei mir DB101), leider verändert sich die Anzeige nicht, es wird kein String angezeigt.

    So habe ich es gemacht

    Aufruf in OB 1

    U M 70.1
    SPBN SP01
    call FB 5, DB 5 (Angelegter FB mit In/ OUT deklaration als String[20]
    inString:="Schnittstelle_OP".STRG_Schritt_0"
    outString:="SCREEN_1_Lang_1".SCREEN[0].PIC_STATIC[3] (Bild 0, 3. Zeile)
    SP01: NOP 0

    der FB 5
    Deklaration:
    IN --> inString als String[20]
    Out --> outString als String[20]

    call SFC20
    SRCBLK:=#inString
    RET_VAL:=MW252
    DSTBLK:=#outString

    So ist es in Ansetzen (zumindest was das Beschreiben des angelegten SCREEN-DB angeht) in Handbuch der C7-613 beschrieben.

    Kann irgend jemand helfen, hab mit der Suchfunktion leider keinen Erfolg gehabt. Außerdem ist ist mit dem Beobachten der Strings ja auch etwas schwierig.

    Mfg Matthias
    Zitieren Zitieren String in OP der C7-613  

  2. #2
    Registriert seit
    01.11.2007
    Beiträge
    1.237
    Danke
    91
    Erhielt 407 Danke für 368 Beiträge

    Standard

    Dein Programm sieht für mich erst mal o.K. aus, das sollte so funktionieren und lässt sich ja auch, wenngleich umständlich, beobachten.
    Haben denn die Strings, die du kopierst, korrekte Kennungen in den ersten beiden Bytes (1. Byte : max. Länge, 2. Byte: aktuelle Länge des strings) ?
    Es darf auch m.W. nirgendwo im String eine 00H drinstehen, das wird als Endekennung interpretiert.

    Grüße von HaDi

  3. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Zitat Zitat von HaDi Beitrag anzeigen
    Haben denn die Strings, die du kopierst, korrekte Kennungen in den ersten beiden Bytes (1. Byte : max. Länge, 2. Byte: aktuelle Länge des strings) ?

    Ich halte das auch für den Fehler - der String ist nicht initialisiert - das ist dem Blockmove wahrscheinlich egal ...

  4. #4
    Matthias_aus_AT ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.10.2008
    Ort
    Neubrandenburg
    Beiträge
    21
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo euch beiden,

    erst mal danke das Ihr euch die Zeit für mein Problem nehmt.

    Also, meine Vermutung war, das ich an irgendeiner Stelle im Prog. mittels der mitgelieferten HMI- Bausteine noch irgendetwas anschieben muss.

    Wenn es an der String- Initialisierung liegt habe ich jedoch einen Black-Out.
    Was meint ihr damit ?!
    Ich habe in einem Datenbaustein mehrere Texte mit STRING[20]- Typ eingegeben. Der (variable) Text ist natürlich nicht immer gleich lang.
    Diesen Text schiebe ich dann mit "Block- Move" in den DB den das HMI auswertet.
    An welcher Stelle müsste ich jetzt wie eine Initialisierung durchführen.

    Vielleicht gibt es auch ein Grundproblem in dem OP ?!
    Weshalb ?!
    Ich habe Bilder angelegt, auch mit Variablen, alles i.O.
    Die Infotexte jedoch zeigt er mir nicht an, hier kommen immer wieder die aus dem Bibliotheksprogramm (hatte ich zum Testen drauf)
    Inzwischen habe ich diese Texte im Programm alle entfern und gegen neue ersetzt, nach neuem Laden der DB's und Neustart des OP sind die alten Texte wieder da.
    (alle anderen Änderungen werden jedoch übernommen)

    Aber gerne erst mal das Hauptproblem mit den variablen Texten.

    Mfg Matthias
    Zitieren Zitieren String initialisieren  

  5. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Hallo Matthias,
    ein String besteht nicht nur aus dem von dir hineingeschriebenen Nutz-Inhalt, sondern auch noch aus einer Deklaration der Gesamt-Länge und der beinhalteten Zeichen.

    Wenn du dir deine STRING[20] in deinem DB anschaust, so wirst du sehen, dass der String in Wirklichkeit immer 22 Byte Platz in Anspruch nimmt. Hierbei sind die 2 Byte mehr die Kopfdaten desselben. Der Kopf des Strings ist immer gleich aufgebaut (bei Siemens) : 1.Byte die max. Länge des Strings (in deinem Fall muß es dann 20 beinhalten) und 2.Byte die tatsächlich benutzte Länge davon (hier kann max. auch 20 stehen oder eben entsprechend das, was du von dem String benutzt).
    Wenn du nur einen Text in den String schreibst, ist dadurch nicht automatisch der String initialisiert (also der Kopf deklariert - sondern es steht hier immer noch in beiden Bytes "0" drin). Die Visu greift aber diese Kopfdaten auf und "agiert" entsprechend.

    Diesen Text schiebe ich dann mit "Block- Move" in den DB den das HMI auswertet.
    An welcher Stelle müsste ich jetzt wie eine Initialisierung durchführen.
    Unmittelbar nach dem Block-Move ...
    Von woher holt der Block-Move seine Ursprungsdaten ?
    Hast du sie fest in einem DB hinterlegt ? Wenn ja, dann kannst du die Initialisierung auch dort schon machen - dann nimmt Block-Move sie auch gleich mit ...

    Ich hoffe, damit kommst du erstmal weiter ...

    Gruß
    LL

  6. #6
    Matthias_aus_AT ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.10.2008
    Ort
    Neubrandenburg
    Beiträge
    21
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Larry,

    ich habe in einem DB mehrere Texte - alle STRING[29] aber mit unterschiedlicher, tatsächlicher Länge.
    Wenn ich diese Texte - testweise - einfach in einen anderen DB übertrage kann ich das Ergebniss nach Block- Move byteweise in der VAT prüfen - es ist alles i.O.
    Der DB des OP, wo die Anzeigedaten liegen, ist etwas anders aufgebaut.
    Hier muss ich mit der symbolischen Adressierung (siehe 1. Beitrag) arbeiten.
    Lt. Handbuch sind diese DB's aber auch auf STRING[20] initialisiert/ eingestellt.
    Könnte noch eine weitere Initialisierung notwendig sein ?!

    Gruß Matthias
    Zitieren Zitieren String übertragen - initialisieren  

  7. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Hallo Matthias,
    ich versuche es noch einmal :
    Beispiel STRING[20] zugewiesen in DB20.DBB0 und folgende ...
    Hier wäre dann DBB0 die max. Länge des Strings - hier sollte manuell b#16#14 entspricht dezimal 20 zugewiesen sein.
    DBB1 ist die benutzte Länge. Steht hier "0" drin, dann ist es egal, was in DBB2 ff. drin steht - es wird ggf. ignoriert ...
    DBB2 - 21 : hier steht dein String-Inhalt - z.B. "Hallo Welt !". Dieser Nutzstring ist 12 Zeichen lang - entsprechend solte dann in DBB1 der Wert 12 - bzw. b#16#0C drinstehen.

    Ist das bei dir dann auch so ?
    Das ist jedenfalls das, was ich dir in meinen Beiträgen (bzw. auch HaDi dir) vermitteln wollte ...

    Gruß
    LL

  8. #8
    Registriert seit
    01.11.2007
    Beiträge
    1.237
    Danke
    91
    Erhielt 407 Danke für 368 Beiträge

    Standard

    Es ist immer schwierig, noch etwas Sinnvolles beizutragen, wenn Larry bereits geantwortet hat .

    Ergänzend vielleicht noch folgende Anmerkungen:
    -Such mal in der Step7-Hilfe nach "Format des Datentyps STRING"
    -der Blockmove kopiert auch den Kopf mit und es ist ihm völlig egal, was da drin steht
    -Die Kennung sollte bei dir daher natürlich schon im Quell-DB ("Schnittstelle_OP") richtig drinstehen
    -Wenn du die Texte als Aktualwerte mit dem Bausteineditor eingibst, wird auch die Länge passend eingetragen

    Grüße von HaDi

  9. #9
    Matthias_aus_AT ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.10.2008
    Ort
    Neubrandenburg
    Beiträge
    21
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Ihr Zwei,

    das Problem muss wohl etwas tiefer legen, aber vielleicht nochmals vereinfacht was ich vorhabe.
    Auf meinem in der C7-613 integrierten OP möchte ich (zum Beispiel) im Bild 1 neben Prozesswerten die Texte:
    "Handbetrieb"
    "Automatik"
    "Anlage Aus"
    anzeigen.
    Dazu habe ich einen DB "TEXTE" mit den 3 Einträgen:
    Text_1 STRING[20] 'Handbetrieb'
    Text_2 STRING[20] 'Automatik'
    Text_3 STRING[20] 'Anlage Aus'

    Je nach aktueller Betriebsart sage ich jetzt:
    call SFC 20
    SRCBLK:="TEXTE".Text_1
    RET_VAL:=MW100
    DSTBLK:="SCREEN_1_Lang_1".SCREEN[1].PIC_STATIC[1]

    nun erwarte ich eigentlich das sich die 1. Zeile des OP mit "Handbetrieb" schmückt - was leider nicht geht.
    Ich denke die Initialisierung der Strings in dem DB funktioniert tadellos.
    Testweise habe ich die Texte von meinem eigentlichen DB mit SFC in einen anderen von mir angelegten verschoben.
    Sowohl im Ausgangs- DB als auch in meinem Test DB wurden die Maxlänge und tatsächliche Länge richtig erkannt. (Zumindest wr die so bei Byteweiser Auslesung in der VAT zu erkennen)

    Nun verändere ich das "Schiebeziel" in der SFC 20 und nichts geht.
    Erschwerend kommt hinzu das ich das Ziel (DB für Screen's) auch byteweise nicht in der VAT ansehen kann.

    Ich habe versucht das RET_VAL zu analysieren, aber zum HEX-Wert: W#16#833A konnte ich nicht's finden.

    Habt Ihr diese Vorgehensweise an der C7 schon mal mit Erfolg ausgeführt/ genutzt. Meine Befürchtung: vielleicht geht das gar nicht.

    Ich hoffe ich nerve nicht und kann ggf. noch heute einen Erfolg verbuchen (IB am Dienstag nächster Woche)

    Gruß MMM
    Zitieren Zitieren Ggf. muss das Problem woanders sein  

  10. #10
    Matthias_aus_AT ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.10.2008
    Ort
    Neubrandenburg
    Beiträge
    21
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo nochmal,

    muss ergänzen, das einzig die Erkenntniss: geht nicht - vor Ort entstanden ist, die Test's und Fehlermeldungen habe ich mit PLCSIM erhalten.
    Ob dies hiermit 1:1 nachgestllt werden kann weiss ich immo nicht.

    Gruß MMM
    Zitieren Zitieren Ergänzung  

Ähnliche Themen

  1. Konstante String in Variable String schreiben
    Von sailor im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 07.12.2009, 18:01
  2. Antworten: 13
    Letzter Beitrag: 24.09.2009, 12:54
  3. Int na. String und String zusammensetzen
    Von bastler im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 09.11.2008, 20:29
  4. Ein String kopieren in einen anderen String
    Von CanYouHelpMe im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 25.09.2008, 17:21
  5. STRING aus einzelnen STRING's zusammenstellen
    Von ollibolli im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 23.08.2006, 09:39

Lesezeichen

Berechtigungen

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