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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 25

Thema: String-Bearbeitung

  1. #1
    Registriert seit
    10.03.2006
    Beiträge
    16
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo!!!
    Ich habe ein Problem mit der String-Bearbeitung...
    Ich wollte mit der FC32 die letzten L Zeichen einer String-Variable auslesen und dann mit der SFC20 in einen Datenbaustein ablegen.

    In meinem Programm schreibe ich :

    CALL "RIGHT"
    IN :=#Kette
    L :=MW110 // Anzahl von Zeichen
    RET_VAL:=#Menuetext


    CALL "BLKMOV"
    SRCBLK :=#Menuetext
    RET_VAL:=MW108
    DSTBLK :=P#DB3.DBX6.0 BYTE 32

    Die Variablen #Kette(String [64]) und #Menuetext (String[32])habe ich symbolisch in der Deklarationstabelle definiert.

    Wenn ich LW von #Menuetext abfrage , steht nichts drin.
    Was mache ich falsch???
    Worin könnte mein Fehler liegen???
    Geändert von Anna (02.05.2006 um 11:14 Uhr)
    Zitieren Zitieren String-Bearbeitung  

  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

    Was steht denn in MW108, ich vermute das Problem beim SFC20.

    Die Hilfe zum SFC20 gibt noch folgenden Hinweise:

    Quell- und Zielfeld dürfen sich nicht überlappen. Ist das angegebene Zielfeld größer als das Quellfeld, dann werden auch nur so viele Daten in das Zielfeld kopiert, wie im Quellfeld stehen.Ist das angegebene Zielfeld kleiner als das Quellfeld, dann werden nur so viele Daten kopiert, wie das Zielfeld aufnehmen kann.Ist der ANY-Pointer (Quelle oder Ziel) vom Typ BOOL, so muß die angegebene Länge durch 8 teilbar sein, da sonst die SFC nicht ausgeführt wird.Quell- oder Zielparameter (oder beide) dürfen auch vom Datentyp STRING sein. Ist die Quelle ein String, werden maximal nur die aktuell im String enthaltenen Zeichen kopiert. Ist das Ziel ein String, wird die aktuelle Länge auf die Anzahl der kopierten Zeichen gesetzt. Es können keine String-Felder (ARRAY OF STRING) kopiert werden, d.h. es ist nur “STRING 1“ zulässig.Falls Sie in einem DB oder im Lokaldatenbereich mit STEP 7 einen Quell- und einen Zielstring definiert haben und Sie diese Strings bei den Parametern SRCBLK und DSTBLK angeben, überträgt die SFC 20 auch die "maximale Länge" und die "tatsächliche Länge" des Quellstrings in den Zielstring. Um dies zu vermeiden, müssen Sie wie folgt vorgehen: Bauen Sie sich die ANY-Pointer, die Sie bei den Parametern SRCBLK und DSTBLK angeben, selbst auf. Verwenden Sie für den Datentyp STRING.
    Wie auch immer man das genau interpretieren soll, hier lohnt es sich wohl mit der Suche anzufangen. Sicherheitshalber würde ich nach dem Baustein (Right) mal ein Paar Lokalbyte in Merker transferieren und kontrollieren, ob hier noch der String vorhanden ist.
    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
    Anna ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.03.2006
    Beiträge
    16
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Unglücklich

    Danke für die Antwort...
    Ich habe auch mit Any- Zeiger probiert.


    L P##Any_Quelle
    L B#16#10
    T LW [AR1,P#0.0]
    L B#16#2
    T LB [AR1,P#1.0]
    L 32 // Laenge
    T LW [AR1,P#2.0]
    L 10 // DB- Nummer
    T LW [AR1,P#4.0]
    L P#DBX 0.0
    L MW 110 //Byte des ersten Datenwortes...
    ITD
    SLD 3
    +D
    T LD [AR1,P#6.0]

    CALL "BLKMOV"
    SRCBLK :=#Any_Quelle
    RET_VAL:=MW108
    DSTBLK :=P#DB3.DBX6.0 BYTE 32

    Es funktioniert auch nicht..Im MW108 steht: 817F.

    Das bedeutet Interner Fehler
    Erläuterung: Dieser Fehler wurde nicht vom Anwender verursacht und kann von ihm nicht behoben werden.
    Was kann man damit machen????
    Geändert von Anna (02.05.2006 um 13:29 Uhr)
    Zitieren Zitieren Any-Zeiger...  

  4. #4
    Registriert seit
    27.08.2003
    Ort
    Schweitenkirchen
    Beiträge
    472
    Danke
    101
    Erhielt 73 Danke für 59 Beiträge

    Standard

    Hallo,
    evtl. mal einzeln über einen Test-DB probieren ?

    Oder mal so angeben?

    CALL "BLKMOV"
    SRCBLK :=P#DB10.DBX6.0 BYTE 32
    RET_VAL:=MW108
    DSTBLK :=P#DB3.DBX6.0 BYTE 32

  5. #5
    Anna ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.03.2006
    Beiträge
    16
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Unglücklich

    Wenn ich schreibe
    CALL "BLKMOV"
    SRCBLK :=P#DB10.DBX9.0 BYTE 32
    RET_VAL:=MW108
    DSTBLK :=P#DB3.DBX6.0 BYTE 32
    Dann geht es....
    Aber bei mir muss DBX im DB10 variabel sein.
    Deswegen soll man eigentlich Any Pointer definieren...
    Mit Any sieht es bei mir so aus:
    #Any_Quelle ist deklariert mit Lokaladresse. 0.0
    Lokaladresse des #Any_Ziel ist 10.0...

    L P##Any_Quelle
    L B#16#10
    T LW [AR1,P#0.0]
    L B#16#2
    T LB [AR1,P#1.0]
    L 32
    T LW [AR1,P#2.0]
    L 10
    T LW [AR1,P#4.0]
    L P#DBX 0.0
    L MW 110
    ITD
    SLD 3
    +D
    T LD [AR1,P#6.0]

    L P##Any_Ziel
    L B#16#10
    T LW [AR1,P#10.0]
    L B#16#2
    T LB [AR1,P#11.0]
    L 32
    T LW [AR1,P#12.0]
    L 3
    T LW [AR1,P#14.0]
    L P#DBX 0.0
    L 6
    ITD
    SLD 3
    +D
    T LD [AR1,P#16.0]

    CALL "BLKMOV"
    SRCBLK :=#Any_Quelle
    RET_VAL:=MW108
    DSTBLK :=#Any_Ziel

    Was mache ich falsch???
    Geändert von Anna (02.05.2006 um 13:28 Uhr)
    Zitieren Zitieren JA..Ohne Any- Zeiger funktioniert alles ganz prima!!!  

  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

    Dazu gibt es folgenden Fehlertext bei Siemens:

    8x7F Interner FehlerDieser Fehlercode zeigt einen internen Fehler am Parameter x an. Dieser Fehler wurde nicht vom Anwender verursacht und kann von ihm auch nicht behoben werden.
    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. #7
    Anna ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.03.2006
    Beiträge
    16
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Unglücklich

    Ich weiß, Ralle , was dazu in Siemens steht....

    Meine Frage , wie kann es behoben werden????
    Zitieren Zitieren Ralle, ich weiß...  

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

    Hast du ja drunterstehen, hatte ich überlesen .

    Code:
     
    LAR1 P##Quelle //Anfangsadresse des ANY-Pointers in AR1 laden
    L B#(16, 2) //Syntax-ID und Typ: Byte laden
    T LW [AR1,P#0.0]
    L #AnzahlDBB //Transferlaenge
    T LW [AR1,P#2.0]
    L #QuellDB //Quelle-DB 
    T LW [AR1,P#4.0]
    L P#DBX 0.0 //Anfangs-DW im Quell-DB
    L #QuellDW
    ITD 
    SLD 3
    +D 
    T LD [AR1,P#6.0]
    Geändert von Ralle (02.05.2006 um 13:01 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

  9. #9
    Anna ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.03.2006
    Beiträge
    16
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Unglücklich

    Nea, kann ich es nicht zum Laufen kriegen....
    es bleibt immer Fehler in RET_Val mit dem Fehlercode: 837F...
    Was kann es sein???
    Geändert von Anna (02.05.2006 um 13:26 Uhr)
    Zitieren Zitieren Fehler code 837F  

  10. #10
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Anna
    Wenn ich LW von #Menuetext abfrage , steht nichts drin.
    Was mache ich falsch???
    Worin könnte mein Fehler liegen???
    zur stringbearbeitung muss das verwaltungsbyte initialisiert werden.

    temp: strg String[7] 0.0

    L 7 //dem verwaltungsbyte die länge des strings übergeben
    T LB 0
    CALL FC 5 //DI_STRING
    I :=L#-678901
    RET_VAL:=#strg
    NOP 0

    CALL SFC 20
    SRCBLK :=P#L 0.0 BYTE 9 //muss 2 länger sein als der string
    RET_VAL:=MW10
    DSTBLK :=P#DB10.DBX0.0 BYTE 9
    NOP 0

    --------------------------------------------------------
    hier mal der aufbau des any-zeigers
    temp: QANY 0.0

    L W#16#1002 //Typ BYTE
    T LW 0
    L #Blockgroesse //Anzahl Bytes
    T LW 2
    L #FiFo_DB //Ziel-DB
    T LW 4
    L #QAnfang_schleife //Anfang der Quelle
    SLD 3
    OD DW#16#84000000
    T LD 6

    CALL SFC 20
    SRCBLK :=#QANY
    RET_VAL:=#RET_VAL
    DSTBLK :=#ZANY
    Geändert von volker (02.05.2006 um 13:19 Uhr)
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

Ähnliche Themen

  1. C-Norm für die Bearbeitung von Gläser
    Von Wignatz im Forum Maschinensicherheit - Normen und Richtlinien
    Antworten: 1
    Letzter Beitrag: 14.07.2011, 08:11
  2. Sinn von indirekter Bearbeitung (BI)?
    Von msg im Forum Simatic
    Antworten: 19
    Letzter Beitrag: 28.06.2011, 22:23
  3. OB35 und zyklische Bearbeitung
    Von hank12 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 28.06.2009, 19:18
  4. SCL Beispiel für ANY Pointer Bearbeitung
    Von clweb im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 18.08.2008, 20:38
  5. Indirekete Bearbeitung S5 nach S7
    Von Marc_3 im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 13.07.2004, 19:58

Lesezeichen

Berechtigungen

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