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

Ergebnis 1 bis 10 von 10

Thema: String in SCL aus DB in statische Variable schreiben

  1. #1
    Registriert seit
    16.08.2013
    Beiträge
    9
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo allerseits,

    habe ein kleines Problem! Versuche in SCL Strings[64] mit Anfangswerten '****volle_länge_mit_64_Zeichen****' aus einem DB in eine statische Variable in meinem FB zu bekommen!

    mit der Zuweisung " := " gehts leider nicht -> über PLCSIM durch beobachten einzelner Worte in der VAT -> steht immer W#16#0000 drin!

    habe es schon mit "Replace" versucht leider auch ohne Erfolg!

    kämpfe gerade mit der "BLKMOV" Funktion, aber finde einfach kein passenden Ansatz, dass es funktioniert!

    Welche Speichergrenze hat die Zuweisung :=?
    oder die Replace-Funktion?
    oder der BLKMOV?

    Hoffe, jemand kennt das Problem bereits und kann mir weiterhelfen!
    Zitieren Zitieren String in SCL aus DB in statische Variable schreiben  

  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,
    ich kenne das Problem nicht - wie wäre es, wenn du mal zeigst (Code) wie du es versucht hast es umzusetzen ...?

    Gruß
    Larry

  3. #3
    fabries ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    16.08.2013
    Beiträge
    9
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Also ist eig. ganz einfach habe um das Problem zum testen so eingegrenzt:
    Schreibe den String in eine Variable und dann von der Variable wieder in einen String im DB um diesen anschließend im Online-modus von PLCSIM zu beobachten.

    Code:
    ///////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////////
    
    FUNCTION_BLOCK  FB20000
    
    VAR 
    
        String_TempX : STRING[62];
        String_Temp_In : STRING[64];
        String_Temp_Out : STRING[64];
            _String_Temp_In AT String_Temp_In : ARRAY[1..66] OF CHAR;
           
    END_VAR
    
    BEGIN
    ///////////////////////////////////////////////////////////////////////////////////////////////
    
    String_Temp_In := DB_Auftragstelegramme.Telegramm.Tele_01;        
    DB_Auftragstelegramme.Telegramm.Test := String_Temp_In;
    
    END_FUNCTION_BLOCK
    ///////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////////
    
    
    DATA_BLOCK DB20000 FB20000 // Instanz für FB zuweisen!!!
    BEGIN
    END_DATA_BLOCK
    
    ///////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////////
    
    
    DATA_BLOCK "DB_Auftragstelegramme"
    STRUCT 	
       Telegramm : STRUCT 	//Telegramm 
        Tele_01 : STRING  [64] := '****************************************************************';	//Telegramm 01
        Tele_02 : STRING  [64] := '****************************************************************';	//Telegramm 02
       
        Test : STRING  [64] := '';
    END_STRUCT;
    BEGIN
    END_DATA_BLOCK
    
    ///////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////////
    genau so habe ich es mit der REPLACE-Funktion und auch mit dem BLKMOV getestet, leider ohne Erfolg!
    Hoffe das war ausführlich genug. Falls noch etwas unklar ist....

  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

    ... und in dem DB sind die Variablen auf tatsächlich so drin ?
    Ich frage deshalb weil ich mir vorstellen könnte, dass dein Initialisierungswert, den du z.B. auf Tele_01 legst, nur beim ersten Anlagen des DB darauf geschrieben wird.

    Schreib doch spasseshalber mal eine Codezeile, die die beiden Variablen einmal vordefiniert. In deinem Code sehe ich erstmal nichts Verwerfliches.

    Gruß
    Larry

  5. #5
    fabries ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    16.08.2013
    Beiträge
    9
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Die Variablen werden später von wo anders zugewiesen, aber das steht doch für dieses Probelm nicht zu frage!?

    das Probelm ist wenn ich diese Strings zum Beispiel nur String[2] mache dann funktioniert es mit der oben beschriebenen Erklärung, aber wenn die Strings auf die länge 10 oder 64 oder... haben geht das leider nicht mehr, das ein Wert wieder ankommt im DB. Sprich es findet kein Übertrag von DB in die statische Varialbe statt oder von der statischen Variable wieder in den DB.

    oder täusche ich mich???

    Ich frage deshalb weil ich mir vorstellen könnte, dass dein Initialisierungswert, den du z.B. auf Tele_01 legst, nur beim ersten Anlagen des DB darauf geschrieben wird.
    Was meist du damit genau?

    Gruß Fabries

  6. #6
    Registriert seit
    29.03.2004
    Beiträge
    5.739
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Du musst deinen DB noch initialisieren, wenn du den Text erst später eingegeben hast (umschalten auf Datensicht über Ansicht->Datensicht, dann initialisieren über Menü Bearbeiten->Datenbaustein initialisieren).

    Mit welcher Länge sind denn deine Strings "DB_Auftragstelegramme.Telegramm.Test" und "DB_Auftragstelegramme.Telegramm.Tele_01" angelegt?

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

    fabries (06.09.2013)

  8. #7
    fabries ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    16.08.2013
    Beiträge
    9
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Du musst deinen DB noch initialisieren, wenn du den Text erst später eingegeben hast (umschalten auf Datensicht über Ansicht->Datensicht, dann initialisieren über Menü Bearbeiten->Datenbaustein initialisieren).
    Von welchem Editor / Menü redest du? SCL , Simatic Manager?
    diese gibt es bei mir nicht
    (umschalten auf Datensicht über Ansicht->Datensicht, dann initialisieren über Menü Bearbeiten->Datenbaustein initialisieren)
    Die länge der Strings ist 64!

  9. #8
    Registriert seit
    29.03.2004
    Beiträge
    5.739
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Wie wird denn der DB "DB_Auftragstelegramme" bei euch angelegt, auch über eine SCL-Quelle?

  10. #9
    fabries ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    16.08.2013
    Beiträge
    9
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Du musst deinen DB noch initialisieren, wenn du den Text erst später eingegeben hast (umschalten auf Datensicht über Ansicht->Datensicht, dann initialisieren über Menü Bearbeiten->Datenbaustein initialisieren).
    super danke für den hinweis, es lag an der Initialisierung! Anfängerfehler von mir ^^

    Lässt sich das nicht automatisch Initialisieren?

  11. #10
    Registriert seit
    29.03.2004
    Beiträge
    5.739
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von fabries Beitrag anzeigen
    Lässt sich das nicht automatisch Initialisieren?
    Nur wenn du den DB über eine Quelle generierst. In SCL z.B. so:
    Code:
    DATA_BLOCK DB_Auftragstelegramme
    
        STRUCT
            Telegramm : STRUCT
                Tele_01 : STRING [64] := 'Anfangswert';
                Test : STRING[64] := 'Anfangswert';
            END_STRUCT;
        END_STRUCT
    BEGIN
        Telegramm.Tele_01 := 'Aktualwert';
        Telegramm.Test := 'Aktualwert';
    END_DATA_BLOCK
    Sieht in AWL aber fast genauso aus.

    Ansonsten hilft nur dran zu denken, habs auch schon das ein oder andere mal vergessen. Wenn du einen neuen DB anlegst der bisher noch nicht existierte, werden die Anfangswerte auch gleich als Aktualwerte eingetragen. Erst wenn du später Änderungen machst, musst du ggf. initialisieren.

Ähnliche Themen

  1. C-Script aus Index in Variable schreiben
    Von WendeMarkus im Forum HMI
    Antworten: 0
    Letzter Beitrag: 23.08.2010, 05:34
  2. Konstante String in Variable String schreiben
    Von sailor im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 07.12.2009, 18:01
  3. String aus DB in FC OUT-Variable kopieren
    Von AndyM im Forum Simatic
    Antworten: 24
    Letzter Beitrag: 06.04.2008, 11:26
  4. Texte aus SPS als string schreiben
    Von nonguru im Forum HMI
    Antworten: 5
    Letzter Beitrag: 03.02.2008, 22:08
  5. String aus Baustein raus schreiben
    Von merlin im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 01.08.2007, 08:01

Lesezeichen

Berechtigungen

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