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

Ergebnis 1 bis 10 von 10

Thema: Scl

  1. #1
    Registriert seit
    09.09.2005
    Beiträge
    108
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo habe folgendes in SCL

    Code:
    FUNCTION_BLOCK FB99
    
    VAR_INPUT
        
    i : WORD :=500;  
       
    END_VAR
    
    VAR_OUTPUT
        
    stoffnummer1: word:= 540;   
    stoffbreite: word:= 550;
    stoffgewicht: WORD:= 560;
    END_VAR
    
    VAR_TEMP
       
        end_var
    VAR
    
    Stoffdaten :ARRAY[1..20,1..3]OF word;
    END_VAR
    
    begin
    Stoffdaten[1,1]:=1;
    stoffdaten[1,2]:=80;
    stoffdaten[1,3]:=200;
    
    Stoffdaten[2,1]:=2;
    stoffdaten[2,2]:=180;
    stoffdaten[2,3]:=400;
    
    stoffnummer1:=stoffdaten[1,1];
    stoffbreite:= stoffdaten[1,2];
    stoffgewicht:=stoffdaten[1,3];
    
    
    
    END_FUNCTION_BLOCK
    Jetzt möcht ich in i oben also mw 500 eingeben können welches array ausgegeben wird.

    Also unten in der Ausgabe

    stoffnummer1:= stoffdaten[i,1];

    so gings glaub ich in C auch mal
    Zitieren Zitieren Scl  

  2. #2
    Registriert seit
    25.09.2005
    Ort
    Neuss
    Beiträge
    278
    Danke
    11
    Erhielt 31 Danke für 29 Beiträge

    Standard

    Ich habe den Code mal auskommentiert (bitte auch mal zur Seite scrollen):


    Code:
    FUNCTION_BLOCK FB99
    
    VAR_INPUT
        
    i : WORD :=500;  // deklariert eine Variable i vom Typ WORD und initalisiert sie mit dem Wert 500 (das hat nix mit MW 500 zu tun)
       
    END_VAR
    
    VAR_OUTPUT
        
    stoffnummer1: word:= 540;  // deklariert eine Variable stoffnummer1 vom Typ WORD und initalisiert sie mit dem Wert 540
    stoffbreite: word:= 550;   // deklariert eine Variable stoffbreite1 vom Typ WORD und initalisiert sie mit dem Wert 550
    stoffgewicht: WORD:= 560;  // deklariert eine Variable stoffgewicht vom Typ WORD und initalisiert sie mit dem Wert 560
    END_VAR
    
    VAR_TEMP
       
        end_var
    VAR
    
    Stoffdaten :ARRAY[1..20,1..3]OF word;  // deklariert ein 2-dimensionales Array, Inhalte vom Typ WORD
    END_VAR
    
    begin
    Stoffdaten[1,1]:=1;   // lädt   1 in Array 1,1
    stoffdaten[1,2]:=80;  // lädt  80 in Array 1,2
    stoffdaten[1,3]:=200; // lädt 200 in Array 1,3
    
    Stoffdaten[2,1]:=2;   // lädt 2   in Array 2,1
    stoffdaten[2,2]:=180; // lädt 180 in Array 2,2
    stoffdaten[2,3]:=400; // lädt 400 in Array 2,3 
    stoffnummer1:=stoffdaten[1,1];  // überschreibt den initalisierten Wert 540 mit dem Wert 1 (Inhalt aus Array 1,1)
    stoffbreite:= stoffdaten[1,2];  // überschreibt den initalisierten Wert 550 mit dem Wert 80 (Inhalt aus Array 1,2)
    stoffgewicht:=stoffdaten[1,3];  // überschreibt den initalisierten Wert 560 mit dem Wert 200 (Inhalt aus Array 1,3)
    
    
    
    END_FUNCTION_BLOCK
    Ist das denn so beabsichtigt?
    Geändert von HeizDuese (21.03.2006 um 21:54 Uhr)

  3. #3
    Registriert seit
    17.09.2003
    Ort
    Zell bei Dietfurt a.d. Altmühl
    Beiträge
    357
    Danke
    8
    Erhielt 27 Danke für 25 Beiträge

    Standard

    Hallo Adenauer.

    Schreib doch eine folgendes:


    FUNCTION_BLOCK FB99

    VAR_INPUT
    i : INT; // Vorwahl Stoffnummer
    END_VAR

    VAR_OUTPUT
    stoffnummer1 , // Gewählte Stoffnummer
    stoffbreite , // Gewählte Stoffbreites
    stoffgewicht: WORD; // Gewähltes Stoffgewicht
    END_VAR

    VAR_TEMP
    end_var

    VAR
    Stoffdaten :ARRAY[1..20,1..3]OF word;
    END_VAR

    begin
    Stoffdaten[1,1]:=1;
    stoffdaten[1,2]:=80;
    stoffdaten[1,3]:=200;

    Stoffdaten[2,1]:=2
    stoffdaten[2,2]:=180;
    stoffdaten[2,3]:=400;


    IF i > 0 AND i <= 20 THEN // Überprüfe ob Stoffvorwahl zwischen 1 und 20 liegt
    stoffnummer1:=stoffdaten[i,1];
    stoffbreite:= stoffdaten[i,2];
    stoffgewicht:=stoffdaten[i,3];
    END_IF;

    END_FUNCTION_BLOCK


    Du Musst den "i" als Datentyp INT angeben damit er im ARRAY Register funktioniert. Außer du läst den "i" als WORD und schreibst z.b. bei Stoffnummer1 folgende :
    Stoffnummer1 := Stoffdaten [WORD_TO_INT(i),1];
    Aber das einfachere ist, wie ich es bei dir im geänderten Code geschrieben habe. Außerdem hast du noch eine Begrenzung vergessen wenn als eine Stoffvorwahl kleiner 1 oder größer 20 eingegeben wurde ist deine SPS in Stop gegangen, da auf den falschen Parametersatz zugegriffen wurde. Für weitere fragen stehe ich dir gerne zu Verfügung.
    Geändert von hubert (21.03.2006 um 22:03 Uhr)
    MfG

    Hubert

    \"Never change a running system. \"

  4. #4
    Adenauer ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.09.2005
    Beiträge
    108
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Danke schon mal das war bis jetzt auch nur nen ansatz.
    Kommen noch einige Array elemente dazu.

    Und ich muss noch ne funktion basteln so dass ich neue elemente ins array hinzufügen kann.

  5. #5
    Adenauer ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.09.2005
    Beiträge
    108
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo noch mal wie bekomme ich es wohl hin das jetzt mein i dem Merkerwort entspricht welches ich eingebe??

  6. #6
    Adenauer ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.09.2005
    Beiträge
    108
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    So das grundgerüst hätte ich jetzt.


    Code:
    FUNCTION_BLOCK FB99
    
    VAR_INPUT
         i :WORD; 
         schreiben: BOOL;
         neu: int;
    END_VAR
    
    VAR_IN_OUT
      stoffnummer1: WORD;
    stoffbreite: WORD  ;
    stoffgewicht: WORD ;  
    
    END_VAR
    
    VAR_TEMP
       
    END_VAR
    
    VAR
        Stoffdaten:ARRAY[1..999,1..3]OF WORD;
        END_VAR
    BEGIN
    Stoffdaten[1,1]:=10;
    Stoffdaten[1,2]:=20;
    Stoffdaten[1,3]:=30;
    Stoffdaten[2,1]:=0;
    Stoffdaten[2,2]:=0;
    Stoffdaten[2,3]:=0;
    Stoffdaten[3,1]:=0;
    ......................................
    .....................................
    Stoffdaten[997,3]:=0;
    Stoffdaten[998,1]:=0;
    Stoffdaten[998,2]:=0;
    Stoffdaten[998,3]:=0;
    Stoffdaten[999,1]:=900;
    Stoffdaten[999,2]:=990;
    Stoffdaten[999,3]:=999;
    
    
    IF WORD_TO_INT(i)>0 AND WORD_TO_INT(i) <=999 THEN
        stoffnummer1:=stoffdaten[WORD_TO_INT(i),1];
        stoffbreite:=stoffdaten[word_to_int(i),2];
        stoffgewicht:=stoffdaten[WORD_TO_INT(i),3];
        END_IF;
        
        
        
        IF schreiben THEN
            stoffdaten[WORD_TO_INT(i),1]:= stoffbreite;
        
        END_IF;
    
    end_function_bloc
    Jetzt bräuchte ich noch ne möglichkeit in mein Array werte reinzuschreiben.

    Also ich hab mir das so gedacht ich setzte das Bit (schreiben)
    wenn das Bit gesetzt ist wird der wert ( stoffbreite (MW...)in das angewählte array geschrieben.
    Ist das so möglich??????????

  7. #7
    Registriert seit
    17.09.2003
    Ort
    Zell bei Dietfurt a.d. Altmühl
    Beiträge
    357
    Danke
    8
    Erhielt 27 Danke für 25 Beiträge

    Standard

    Hallo Adenauer.

    Verstehe deine Frage leider nicht so ganz. Willst du nun deine 999 Array von aus je nach Vorwahl der Variabel "neu" (1-999) mit Werte füttern, sofern das Steuerbit schreiben da ist? Oder willst du die Werte aus deinen intern Array nach ausen transferieren sofern das Steuerbit da ist? Bit um genauere Erklärung.
    MfG

    Hubert

    \"Never change a running system. \"

  8. #8
    Adenauer ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.09.2005
    Beiträge
    108
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Also eigentilch soll es so aussehen.
    Gelesen werden kann immer.
    Wenn das Steuerbit gesetzt ist will ich in das Array welches angewählt ist neue Wert reinschreiben bzw bestehende ändern.
    Und diese dann auch beibehalten.

    Also muss ich mit einem W die Erste nummer anwählen 1ste Dimension und dann mit 3 weiteren Wörtern in die 2te Dimension 1...3 reinschreiben.
    Diese Funktion soll quasi ein OP mit Rezepuren ersetzen.
    Geändert von Adenauer (22.03.2006 um 23:35 Uhr)

  9. #9
    Registriert seit
    06.10.2003
    Beiträge
    3.414
    Danke
    451
    Erhielt 506 Danke für 408 Beiträge

    Standard

    Hallo Adenauer,

    ...Jetzt bräuchte ich noch ne möglichkeit in mein Array werte reinzuschreiben.

    Also ich hab mir das so gedacht ich setzte das Bit (schreiben)
    wenn das Bit gesetzt ist wird der wert ( stoffbreite (MW...)in das angewählte array geschrieben.
    Ist das so möglich??????????
    Im Prinzip ist das schon möglich, nur müsstest du das Lesen in der ersten IF-Anweisung unterbinden wenn du schreiben möchtest. Ansonsten schreibst du nicht die Daten der Bausteinparameter, sondern die Daten die gerade erst gelesen wurden.

    IF WORD_TO_INT(i)>0 AND WORD_TO_INT(i) <=999 and not schreiben THEN...

    Oder, das Lesen generell nach dem Schreiben ausführen.


    Gruß, Onkel
    Geändert von Onkel Dagobert (22.03.2006 um 23:53 Uhr)
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

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


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Statt einem 2-spaltigen Array leg doch lieber ein einfaches (einspaltiges Array) mit einer Struct als Element an, in welchem dann deine Daten im stehen. Dann wird das Ganze übersichtlicher.

    Code:
     
    Stoff: STRUCT
                Stoffnummer1 : Word   := 10;
                Stoffbreite: Word    := 0 ;
                Stoffgewicht : Word   := 0;
    END_STRUCT ;
     
    Stoffdaten : ARRAY[1..999] OF Stoff;
     
    Zugriff:
     
    Stoffdaten[i].Stoffnummer1 := 10;
    Stoffdaten[i].Stoffbreite := 0;
    Stoffdaten[i].Stoffgewicht := 0;
    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

Lesezeichen

Berechtigungen

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