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

Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 33

Thema: Kopierfehler SFC20 (BLKMOV) ??

  1. #21
    Wastel ist offline Benutzer
    Themenstarter
    Registriert seit
    14.07.2004
    Beiträge
    76
    Danke
    19
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Ich mache das eigentlich nicht gerne, aber in diesem Fall :
    Warum machst du das mit dem ANY-Pointer in einem anderen Baustein ? Das könnte doch dein SCL-FB genauso schön erledigen und du hättest eine potentielle Fehlerquelle weniger ... Vielleicht resultiert dein Problem auch genau aus dieser Situation ...

    ...
    Weil ich anhand der "Datensatznummer" mir einen Pointer zusammen "stricken" muss. Das erschien mir in AWL einfacher.

  2. #22
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    Zitat Zitat von Wastel Beitrag anzeigen
    Weil ich anhand der "Datensatznummer" mit einen Pointer zusammen "stricken" muss. Das erschien mir in AWL einfacher.
    Musst du denn Überhaupt mit Pointern arbeiten ?
    Wenn ich es richtig in Erinnerung habe, dann sind doch die OUTPUT-Daten aus deinen INPUT-Daten abgeleitet ?
    Falls ich da aber jetzt etwas "verknotet" habe ... Es ist m.E. in SCL wesentlich einfacher sich einen ANY-Pointer zu basteln als in AWL ...

    ...

  3. #23
    Wastel ist offline Benutzer
    Themenstarter
    Registriert seit
    14.07.2004
    Beiträge
    76
    Danke
    19
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Musst du denn Überhaupt mit Pointern arbeiten ?
    Wie soll ich denn sonst eine String-Variable angeben, welche mir erst zu Laufzeit bekannt wird?

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Wenn ich es richtig in Erinnerung habe, dann sind doch die OUTPUT-Daten aus deinen INPUT-Daten abgeleitet ?
    Ja, aber nicht "String_01" = String_OUT_01"
    Das ist völlig variabel.

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Falls ich da aber jetzt etwas "verknotet" habe ... Es ist m.E. in SCL wesentlich einfacher sich einen ANY-Pointer zu basteln als in AWL ...

    ...
    In SCL habe ich dies nicht so richtig hinbekommen, deshalb mein Weg über den AWL-FB. Aber wenn Du evtl. ein kleines Bespiel für so etwas in SCL hättest, wäre das echt super.

    Gruß Wastel

  4. #24
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    Zu dem Thema ANY-Pointer in SCL kann ich dir natürlich ein Beispiel geben, ist aber (glaube ich) gar nicht mehr nötig. Das kannst du dir nämlich komplett sparen, wenn du die Bedingungen, nach denen du den Pointer bauen läßt im Script abhandelst. Das müßte doch dann ungefähr so laufen :
    Code:
    if (Index = 2) then
       if Uebernahme then
          String_Temp := String_Input[02] ;
       end_if ;
       if bearbeitet then
          for i := 1 to 35
             if String_Output[i] <> "" then
                String_Output[02] := String_Temp ;
                String_Temp := "" ;
                exit_for ;
             end_if ;
          end_for ;
       end_if ;
    end if ;
    ... oder liege ich da jetzt völlig falsch ...?

    ...

  5. #25
    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

    @Larry

    Hat der Input und Output als Array definiert?, dann ok.

    Aber:

    Code:
    String_Output[i] := String_Temp ;
    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

  6. #26
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    @Larry

    Hat der Input und Output als Array definiert?, dann ok.

    Aber:
    Code:
    String_Output[i] := String_Temp ;
    Hat er sicher nicht ... aber es geht mir jetzt darum, Alternativen aufzuzeigen. Sehr wahrscheinlich ist dann auch der "Fehler" vom Tisch.
    Mit dem Index hattest du natürlich recht, Ralle.

  7. #27
    Wastel ist offline Benutzer
    Themenstarter
    Registriert seit
    14.07.2004
    Beiträge
    76
    Danke
    19
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Ich denke, eine wichtige Sache habe ich nicht ausführlich genug erklärt:

    Der Anlagenfahrer wählt nicht direkt einen String-Wert aus, sondern gibt einen String-Wert in ein Eingabefeld und startet eine Such-Funktion.

    Diese Such-Funktion (FOR-Schleife) überprüft alle 34 Eingangsstrings auf Gleichheit. Wird eine gleicher String gefunden, habe ich jetzt über die Laufvariable der Schleife, eine Datensatznummer ermittelt, die ich zum Basteln des Pointers verwende.

    Warum ich jetzt Datensätze verwende:
    Zu jeder String-Variable gehört eine REAL-Variable (LOT-Nr & Ist-Gewicht).

    Diese REAL-Variable wird genauso mitkopiert wie die String-Variable, allerdings in einem anderen SFC-Kopiervorgang. Wichtig ist zudem die Reihenfolge der verwendeten String-Variablen, deshalb kann ich nicht STRING_01 = STRING_OUT_01 machen.

    Gruß Wastel

  8. #28
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    Zitat Zitat von Wastel Beitrag anzeigen
    Der Anlagenfahrer wählt nicht direkt einen String-Wert aus, sondern gibt einen String-Wert in ein Eingabefeld und startet eine Such-Funktion.

    Diese Such-Funktion (FOR-Schleife) überprüft alle 34 Eingangsstrings auf Gleichheit. Wird eine gleicher String gefunden, habe ich jetzt über die Laufvariable der Schleife, eine Datensatznummer ermittelt, die ich zum Basteln des Pointers verwende.
    Das habe ich (so in etwa) dann schon richtig verstanden. Wie der Index in meinem Beispiel zu Stande kommt ist völlig unerheblich. Aber ... auf die gleiche Weise, wie du die Position der Auswahl ermittelst kannst du auch die Zuweisung der OUTPUT-Strings machen (jeden Falls in etwa). In meinem Beispiel kannst du dann auch sehen, dass ich nicht willkürlich "1 in 1" schreibe, sondern den über Index erkannten String in die erste freie Stelle. Entsprach das nicht deiner Vorgabe ?

    Wenn du so arbeitest (was ich für grundsätzlich machbar halte - auch ohne deinen FB zu kennen), dann entfällt der ANY-Pointer und der SFC20 komplett. Außerdem wird in jedem Fall das Konstrukt durchsichtiger ...

    ...

  9. #29
    Wastel ist offline Benutzer
    Themenstarter
    Registriert seit
    14.07.2004
    Beiträge
    76
    Danke
    19
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Das habe ich (so in etwa) dann schon richtig verstanden. Wie der Index in meinem Beispiel zu Stande kommt ist völlig unerheblich. Aber ... auf die gleiche Weise, wie du die Position der Auswahl ermittelst kannst du auch die Zuweisung der OUTPUT-Strings machen (jeden Falls in etwa). In meinem Beispiel kannst du dann auch sehen, dass ich nicht willkürlich "1 in 1" schreibe, sondern den über Index erkannten String in die erste freie Stelle. Entsprach das nicht deiner Vorgabe ?

    Wenn du so arbeitest (was ich für grundsätzlich machbar halte - auch ohne deinen FB zu kennen), dann entfällt der ANY-Pointer und der SFC20 komplett. Außerdem wird in jedem Fall das Konstrukt durchsichtiger ...

    ...
    Das gebe ich dir vollkommen Recht! Das sehe ich genauso!

    Ich habe das eben mal mit dem Index probiert:

    Code:
    VAR_INPUT
      // Eingangsparameter
    i                :INT;                   //
    IN1            :STRING[32];        //
    IN2            :STRING[32];        //
    IN3            :STRING[32];        //
    IN4            :STRING[32];        //
       
    END_VAR
     
    VAR
    //  Interne Hilfs Variablen
    
    END_VAR
     
    VAR_OUTPUT
        //Ausgangsparameter
    OUT            :STRING[32];          //WRITE wurde ausgeführt
     
    END_VAR
     
    BEGIN
     
    OUT := IN[i];
     
    END_FUNCTION_BLOCK
    Sollte ja so funktionieren, oder?
    Jedenfalls mekert der SCL-Compiler:"Der Bezeicherner existiert nicht"
    (rote Markierung im Code) Da dies so nicht fuktioniert habe ich damals die AWL-Variante vorgezogen.

  10. #30
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das kann auch so nicht funktionieren. Den Grund dafür hatte Ralle vorhin schon genannt. Du müßtest ein ARRAY of String haben - dann geht das. Eine Alternative dafür wäre :
    Code:
    VAR_INPUT
      // Eingangsparameter
    i                :INT;                   //
    IN1            :STRING[32];        //
    IN2            :STRING[32];        //
    IN3            :STRING[32];        //
    IN4            :STRING[32];        //
       
    END_VAR
    
    Var
    In_Daten : ARRAY [1..4] of String[32] ;
    End_Var ;
     
    Begin
    In_Daten[1] := In1 ;
    In_Daten[2] := In2 ;
    In_Daten[3] := In3 ;
    In_Daten[4] := In4 ;
    ist aber in diesem Fall m.E. nicht so schön.

    Müssen deine Vorgabe-Strings unbedingt INPUT's sein, oder sind es quasi Konstanten ? In dem Fall ginge auch :
    Code:
    Var
    Vergleichs_Daten : ARRAY [1..4] of String[32] :=  'Eintrag 1' , 'Text 2' , 'Daten 3' , 'dies und das' ;
    End_Var ;

  11. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Wastel (07.07.2008)

Ähnliche Themen

  1. DBs mit SFC20 BLKMOV kopieren
    Von Lenni im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 07.02.2012, 22:33
  2. blkmov in SCL
    Von Felse im Forum Simatic
    Antworten: 31
    Letzter Beitrag: 25.03.2009, 14:20
  3. Probleme mit SFC20 "BLKMOV"
    Von matchef im Forum Simatic
    Antworten: 25
    Letzter Beitrag: 18.12.2008, 16:19
  4. Frage zu SFC20 BLKMOV
    Von chivas im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 24.02.2005, 14:47
  5. indriekte Adressierung von sfc20 (blkmov)
    Von Anonymous im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 04.06.2004, 08:26

Lesezeichen

Berechtigungen

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