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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Dynamisches Array, Pointer

  1. #1
    Registriert seit
    12.09.2013
    Beiträge
    24
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Zusammen,
    hab hier schon ein wenig zum Thema Dynamisches Array gelesen,
    wollte es jetzt mal mit dem Pointer versuchen, mein Problem mir fehlt
    leider völlig der Ansatz dazu. Also ich suche eine möglichkeit mein
    Array zu vergrößer/verkleinern, ohne das ich dafür in den SCL Code reingehen
    muss. Aktuell ist es bei mir über Constanten geregelt.
    Ich hänge die Variablendeklaration mal dran,

    FUNCTION_BLOCK FB703
    CONST
    n:= 24; //Festlegen der Spaltenlänge
    m:= 24; //Festlegen der Zeilenlänge
    p_abs := 101325.0;
    R_S :=287.0;
    T_n := 273.15;
    pi := 3.14159265359;
    END_CONST
    VAR

    AJMat:ARRAY [1..n , 1..m] OF INT := n(m(0));
    .
    .
    .


    Hab mich Quer durch allemöglichen Hilfen von Siemens usw. gewälzt, hab
    auch das Grundprinzip des Pointers verstanden aber ich komm nicht auf drauf

    Gruß
    Gout
    Zitieren Zitieren Dynamisches Array, Pointer  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Hallo,
    die verwendeten Konstanten werden im Zeitpunkt des Compilierens zugewiesen und entsprechend verwendet. Sie dienen eigentlich nur dazu deinen Code etwas übersichtlicher zu halten.
    Ein Array kannst du nicht dynamisch umdefinieren - das Einzige was ginge wäre, dass du es auf deine Max-Anforderung dimensionierst und mal mehr und mal weniger davon nutzt.
    Bedenke immer : wenn das Array noch als STAT angelegt ist dann müßte die komplette Instanz neu generiert werden.

    Wofür meinst du denn, die Funktionalität zu brauchen ?

    Gruß
    Larry

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

    ducati (16.09.2013)

  4. #3
    gout ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    12.09.2013
    Beiträge
    24
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Naja da ich nachher nach lehren Spalten und Lehren Zeilen (Also überall nur nullen) suche,
    ist es schlecht mit dem zu Groß Setzten. Ist eine Physikalische eigenschaft dieser Speziellen matrix,
    ist ein Projekt, wo nachher keiner mehr im Code rumfummeln darf.

  5. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Zur Laufzeit dynamische Arrays gibt es bei Simatic nicht, weil die meisten SPS-Programmierer damit eh' nur die CPU in Crash führen würden.
    Für die wenigen Programmierer, welche wissen was sie tun und auch noch Ahnung vom Programmieren haben, steht nur die Möglichkeit zur Verfügung, eine Speicherplatz-Reservierung in der Größe des Arrays mit der maximal benötigten Größe anzulegen und dann diesen Speicherplatz logisch als kleineres Array anzusprechen.

    Das Array in Deinem SCL-Codebeispiel ist kein dynamisches Array, weil damit nur zur Compilierzeit die Größe des statischen Arrays festgelegt wird.
    Nach jeder Änderung der Deklaration der Arraygröße (bzw. n und m) zur Compilierzeit muß ein neuer Instanz-DB erzeugt werden.

    Kurz: Dein Code kann nicht verbessert werden.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    ducati (16.09.2013)

  7. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Zitat Zitat von gout Beitrag anzeigen
    Naja da ich nachher nach lehren Spalten und Lehren Zeilen (Also überall nur nullen) suche,
    ist es schlecht mit dem zu Groß Setzten. Ist eine Physikalische eigenschaft dieser Speziellen matrix,
    ist ein Projekt, wo nachher keiner mehr im Code rumfummeln darf.
    Das ist für mich keine Begründung dafür, es so machen zu wollen, wie du es vorhattest ...
    Aber wie auch immer - es gibt keine dynamischen Array's in Step7 ...
    Du könntest natürlich einen externen DB dynamisch verwenden - ob das die Sache dann aber besser macht ...
    ... und durchschaubarer ...

    Gruß
    Larry

  8. #6
    Registriert seit
    04.03.2010
    Beiträge
    44
    Danke
    7
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Auf dynamische ARRAYS kann man finde ich noch einigermaßen gut verzichten, was aber richtig schlecht ist, wenn man das selbe ARRAY
    in verschiedenen Bausteinen verwenden möchte und dann in jedem Baustein seine Konstanten anpassen muß. Sowas will ich an einer Stelle
    in meinem Programm machen können.

    PS: Klar kann man sein ARRAY global deklarieren, mit Strukturierter Programmierung hat das dann aber nichts mehr zu tun. Will meine geschriebenen Bausteine
    ja auch in anderern Projekten weiterverwenden. Richtig geil wäre es Konstanten per Schnittstelle übergeben zu können.
    Geändert von Didaddy (16.09.2013 um 19:24 Uhr) Grund: PS hinzugefügt
    Gruß Didaddy

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    > Erlaubt ist was funktioniert, wenn man alles perfekt machen will wird man nie fertig. <

  9. #7
    gout ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    12.09.2013
    Beiträge
    24
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Naja, ich möchte meinen Baustein für verschiedene Anlagen benutzen, (bzw. meine Kollegen). Dafür muss er halt angepasst werden. Da ich aber nicht von Jedem verlangen kann SCL zu beherrschen und ich auch garnicht möchte das ein Kollege von mir in
    China meinen Baustein öffnen und verändern kann, muss ich alles von außen Steuern können.
    Hoffe das sagt mehr über meine Beweggründe aus.

  10. #8
    Registriert seit
    09.08.2006
    Beiträge
    3.627
    Danke
    912
    Erhielt 656 Danke für 542 Beiträge

    Standard

    Zitat Zitat von gout Beitrag anzeigen
    Naja, ich möchte meinen Baustein für verschiedene Anlagen benutzen, (bzw. meine Kollegen). Dafür muss er halt angepasst werden. Da ich aber nicht von Jedem verlangen kann SCL zu beherrschen und ich auch garnicht möchte das ein Kollege von mir in
    China meinen Baustein öffnen und verändern kann, muss ich alles von außen Steuern können.
    Hoffe das sagt mehr über meine Beweggründe aus.
    Jo, das ist ja auch alles gut und richtig.

    Jedenfalls kannst Du von aussen (ohne Neucompilierung) nicht die Größe des Instanzdatenbausteins ändern. Eine Änderung einer Arraygröße bedeutet aber Änderung der IDB-Größe.

    Also Fazit: die maximal jemals benötigte Arraygröße musst Du vorher einstellen und dann nur jeweils den benötigten Teil benützen.

    Gruß.

  11. #9
    Registriert seit
    06.10.2003
    Beiträge
    3.411
    Danke
    451
    Erhielt 504 Danke für 407 Beiträge

    Standard

    Zitat Zitat von ducati Beitrag anzeigen
    ..Jedenfalls kannst Du von aussen (ohne Neucompilierung) nicht die Größe des Instanzdatenbausteins ändern. Eine Änderung einer Arraygröße bedeutet aber Änderung der IDB-Größe...
    Ich würde darüber nachdenken, das ARRAY in einem GDB abzulegen und dem FB als ANY zu übergeben. Konstanten für die Anzahl von Spalten und Zeilen als Bausteinparameter könnten im FB zur Überprüfung der DB-Länge und zur Adressierung dienen.

    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  12. Folgender Benutzer sagt Danke zu Onkel Dagobert für den nützlichen Beitrag:

    gout (18.09.2013)

  13. #10
    gout ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    12.09.2013
    Beiträge
    24
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Onkel Dagobert Beitrag anzeigen
    Ich würde darüber nachdenken, das ARRAY in einem GDB abzulegen und dem FB als ANY zu übergeben. Konstanten für die Anzahl von Spalten und Zeilen als Bausteinparameter könnten im FB zur Überprüfung der DB-Länge und zur Adressierung dienen.

    Gruß, Onkel
    So das wäre mal zimlich genau das wass ich möchte, so mein ansatz wäre, die Variablen als ANY deklarieren (BITTE KORRIEGIEREN wenn ich mich irre) anschließend im GDB variablen Deklarieren und mit dem POINTER auf die ANY`s "zeigen" oder bin ich da auf dem Falschen weg?

Ähnliche Themen

  1. Step 7 Pointer Array
    Von hoelle1985 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 04.07.2013, 17:45
  2. ANY Pointer auf Array of Real im Instanz-DB
    Von Potz Blitz im Forum Programmierstrategien
    Antworten: 7
    Letzter Beitrag: 28.02.2012, 12:48
  3. Pointer auf Array - Dereferenzierung
    Von ksc im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 20.12.2011, 10:19
  4. Array in DB schreiben(any-pointer)
    Von Limette im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 28.10.2011, 22:17
  5. Pointer auf Array
    Von Limette im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 27.10.2011, 12:32

Lesezeichen

Berechtigungen

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