Grosses Array in kleines Array schreiben

Student
2009-05-21
2009-06-15
  • Student - 2009-05-21

    Hallo

    Ich suche eine guten Weg um ein Array mit neune Spalten in drei Arrays mit je 3 Spalten aufzuteilen.

    Momentan muss ich noch jede Spalte einzeln auslesen und einem neuen Array zuschreiben. Geht dies auch anders?

    Im Anhang habe ich einen Printscreen von meinen Programm.

    Gruss

    MOTORENSTEUERUNG.pdf [26.77 KiB]

     
  • foenig - 2009-05-21
    1. Sollen das Kopien werden? Oder willst Du einfach direkt auf die gleichen Werte zugreifen?

    2. Leider hast Du die Aufteilung etwas "ungeschickt" gewählt. Bei Deinem zweidimensionalen Array wäre es leichter das eine in drei zu zerteilen wenn die von Dir Spalten genannte Dimension auch die erste und nicht die zweite wäre.


    Erstmal braucht man einen Datentyp der, der Größe und der Datenverteilung entspricht (ich weiß gerade nicht wie ich das besser beschreiben soll):

    TYPE SplitArray :
    STRUCT
      Part_1    : ARRAY [1..3, 1..10] OF INT;
      Part_2    : ARRAY [1..3, 1..10] OF INT;
      Part_3    : ARRAY [1..3, 1..10] OF INT;
    END_STRUCT
    END_TYPE
    

    So nun zur Variante 1. Kopie:

    VAR
      Testarray  : ARRAY [1..9, 1..10] OF INT;
      Split      : SplitArray;
      pTestarray : POINTER TO ARRAY [1..9, 1..10] OF INT;
      pTestSplit : POINTER TO ARRAY [1..9, 1..10] OF INT;
      pSplit     : POINTER TO SplitArray;
    END_VAR
    
    pTestarray := ADR(Testarray);
    pSplit := ADR(Split);
    pTestSplit := pSplit;
    pTestSplit^ := pTestarray^;
    

    Variante 2. direkter Zugriff auf den Bereich:

    VAR
      Testarray  : ARRAY [1..9, 1..10] OF INT;
      pTestarray : POINTER TO ARRAY [1..9, 1..10] OF INT;
      pSplit     : POINTER TO SplitArray;
    END_VAR
    
    pTestarray := ADR(Testarray);
    pSplit := pTestarray;
    pSplit^.Part_1[1,5] := 5;
    
     
  • Student - 2009-05-27

    Leider habe ich von AWL und strukturiertem Text keine grosse Ahnung.

    Besser gesagt ich habe gar keine Erfahrung darauf.

    Könnte mir jemand in FUP oder AS weiterhelfen?

    Gruss

     
  • foenig - 2009-05-27

    Student hat geschrieben:
    Leider habe ich von AWL und strukturiertem Text keine grosse Ahnung.
    Besser gesagt ich habe gar keine Erfahrung darauf.
    Könnte mir jemand in FUP oder AS weiterhelfen?
    Gruss

    **Dann lern es! **

    Und beantworte meine Frage!

    foenig hat geschrieben:
    1. Sollen das Kopien werden? Oder willst Du einfach direkt auf die gleichen Werte zugreifen?

    Ich bin mir sicher, dass Dir meine Antwort auch nicht weiter hilft aber ich versuche es zumindest (bitte versuch Du auch was zu lernen und lass Dir nicht alles vorkauen).

    Im Anhang ist ein Bild das ich mit CoDeSys gemalt habe. Wie von Dir gewünscht in FUP (ich wäre geneigt eine Wette einzugehen, dass Du bei der Aufgabe in FUP keinen Deut mehr verstehst als in ST).

    PS: Variablen-Deklaration und Datentyp wie in dem ersten Beispiel in meinem Post oben.

    IMG: Studentenfutter.GIF

     
  • Student - 2009-05-29

    Es soll kopiert werden

     
  • foenig - 2009-05-30

    Student hat geschrieben:
    Es soll kopiert werden

    Dann passt ja das Beispiel aus dem letzten Post.

     
  • Student - 2009-06-15

    also ich habe mal versucht die Anweisungen zu befolgen. Was ich begriffen habe ist, dass ich meinem Testarray einen Pointer zuweisen kann. Danach kann ich dem Pointer ein neues Array zuweisen kann. Was nicht hin haut ist, dass ich ein grosses Array einem kleineren Array zuweisen kann.

    Immer wenn ich dies versuche heisst es dass ein Array mit der Splatengrösse 10 nicht einem Array der Spaltengrösse 5 zuweisen kann.

    Könntes du mir vielleicht nochmal weiter helfen?

    Vielen Dank

     
  • Student - 2009-06-15

    Hallo nochmals ich

    Also jetzt funktioniert alles. Habe meinen zweiten Pointer nicht mer neu Adressiert. Aber jetzt läufts rund.

    Vielen Dank für die Hilfe.

    Gruss und Dank

     

Log in to post a comment.