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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 23

Thema: Array beschreiben

  1. #11
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.289 Danke für 2.658 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Funky Beitrag anzeigen
    es gibt die Möglichkeit ein Array über Konstanten zu deklarieren.
    Da muß man schon zur Compilierzeit festlegen, mit welcher festen Arraygröße der Baustein in der SPS arbeiten soll.
    Gesucht ist aber eine Lösung, zur Laufzeit ("beim Aufruf") eine flexible Arraygröße zu übergeben.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  2. #12
    Registriert seit
    04.11.2015
    Beiträge
    17
    Danke
    4
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Zitat Zitat von spirit Beitrag anzeigen
    Ist es in diesem Zusammenhang eigentlich möglich einen allgemeinen FB zu schreiben und erst beim Aufruf zu bestimmen, wieviele Array-Elemente zur Anwendung kommen sollen?

    Beispiel:

    FC1 enthält ein Array[0..15]. Diese soll in einem allgemein programmierten FB aufgerufen werden.

    Im FB müsste ja jetzt sowas wie Array[0..n) programmiert sein, wobei für diesen Fall beim Aufruf n mit der Zahl 15 beschrieben wird. Geht sowas? f

    Das ist (noch) nicht möglich. Es geht aber das Gerücht umher, dass dies geplant ist.

  3. #13
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.618
    Danke
    776
    Erhielt 646 Danke für 492 Beiträge

    Standard

    Zitat Zitat von EXOR Beitrag anzeigen
    Das ist (noch) nicht möglich. Es geht aber das Gerücht umher, dass dies geplant ist.
    Das dürfte richtig schwer für Siemens werden, sowas zu realisieren. Immerhin müsste ja dann auch ein IDB per Laufzeit vergrössert und verkleinert werden können und dies ohne Datenverlust von Nachfolgend deklarierten Instanzen oder Instanzvariablen. Dazu kann dann bei Fehlern sogar der Arbeitsspeicher zur neige gehen.

    Ich meine sie kriegens ja noch nichtmal hin DBs ohne Reinit zu aktualisieren wenn sie alle Daten offline zur verfügung haben.

    mfG René

  4. #14
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.289 Danke für 2.658 Beiträge

    Standard

    Ich glaube, einige Leser missverstehen spirit. Vielleicht kann sie nochmal eindeutig erklären was sie sucht. Und warum das ein FB sein soll.

    Ich verstehe das so, daß der aufgerufene Baustein zur Laufzeit verschieden große Arrays übergeben bekommen soll (per Referenz) und irgendwas damit machen soll (*). In dem Baustein wäre dann wohl eine Schleife passend zur (automatisch erkannten?) Arraygröße. Das Array liegt außerhalb des aufgerufenen Bausteins.

    (*) z.B. Min-/Max-Wert oder vorgegebenen Wert suchen, Mittelwert berechnen, ...
    Wäre ja toll, wenn ein Baustein das mit zur Laufzeit verschieden großen Arrays könnte.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #15
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Ich glaube, einige Leser missverstehen spirit. Vielleicht kann sie nochmal eindeutig erklären was sie sucht. Und warum das ein FB sein soll.

    Ich verstehe das so, daß der aufgerufene Baustein zur Laufzeit verschieden große Arrays übergeben bekommen soll (per Referenz) und irgendwas damit machen soll (*). In dem Baustein wäre dann wohl eine Schleife passend zur (automatisch erkannten?) Arraygröße. Das Array liegt außerhalb des aufgerufenen Bausteins.

    (*) z.B. Min-/Max-Wert oder vorgegebenen Wert suchen, Mittelwert berechnen, ...
    Wäre ja toll, wenn ein Baustein das mit zur Laufzeit verschieden großen Arrays könnte.

    Harald
    Ok, dann versuche ich mich nochmals ...

    Es steht derzeit keine best. Anwendung dahinter; angedacht ich einfach folgende beispielhafte Situation:


    - Es wird ein Baustein programmiert, der ein Kühlhaus_1 steuert
    - Das Kühlhaus soll um ein Kühlhaus_2 erweitert werden; in der Zukunft evtl. noch um weitere
    - Damit nicht immer wieder ein neuer Baustein programmiert werden muss, soll für alle Kühlhäuser der schon bestehende herangezogen werden
    - Somit könnte man hier ja von einem Multiinstanzaufruf ausgehen

    Jetzt die Problematik:

    Im programmierten Baustein gibt es ein Array[0..n].

    - Beim Aufruf des Bausteins für Kühlhaus_1 soll gelten: Array[0..25]
    - Beim Aufruf des Bausteins für Kühlhaus_2 soll gelten: Array[0..45]

    Beim Multiinstanzaufruf wird jezt bei Kühlhaus_1 für n die Zahl 25 übergeben; bei Kühlhaus_2 für n die Zahl 45.

    Das wäre meine Frage gewesen ...
    LG
    spirit

  6. #16
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Hallo Spirit,

    Siemens kann keine dynamische Speicherverwaltung (und ich habe auch jetzt schon Angst vor dem Tag an dem sie es vielleicht können wollen).
    Was du also sinnvollerweise nur machen könntest wäre : du integrierst in deine Instanz ein Array, das groß genug für deine maximale Anforderung ist, und benutzt mal mehr oder weniger Elemente daraus. Hierbei solltest du dann aber auch überwachen, ob an dem Zahl-Input deines FB ein legaler Wert übergeben worden ist (also einer, der im Bereich der Array-Indexe liegt) - ansonsten diesen entweder auf Default setzen oder besser noch eine Fehlermeldung (vom FB) ausgeben.
    Selbstverständlich gäbe es auch noch andere Wege, dieses Vorhaben umzusetzen - ich würde für mich aber nur den vorgeschlagenen in Betracht ziehen ...

    Gruß
    Larry

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

    spirit (23.12.2015)

  8. #17
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Hallo Spirit,

    Siemens kann keine dynamische Speicherverwaltung (und ich habe auch jetzt schon Angst vor dem Tag an dem sie es vielleicht können wollen).
    Was du also sinnvollerweise nur machen könntest wäre : du integrierst in deine Instanz ein Array, das groß genug für deine maximale Anforderung ist, und benutzt mal mehr oder weniger Elemente daraus. Hierbei solltest du dann aber auch überwachen, ob an dem Zahl-Input deines FB ein legaler Wert übergeben worden ist (also einer, der im Bereich der Array-Indexe liegt) - ansonsten diesen entweder auf Default setzen oder besser noch eine Fehlermeldung (vom FB) ausgeben.
    Selbstverständlich gäbe es auch noch andere Wege, dieses Vorhaben umzusetzen - ich würde für mich aber nur den vorgeschlagenen in Betracht ziehen ...

    Gruß
    Larry
    Lieben Dank Larry,

    wenn ich es richtig verstehe, dann müsste ich in dem Baustein (Kühlhaus) ein Array verwenden, das groß genug ist. In dem genannten Fall ein Array[0..45].

    Nur - wie sieht dann der Aufruf für Kühlhaus_1 (Array[0..25]) aus?
    LG
    spirit

  9. #18
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Genau so ... du übergibst halt nur eine kleinere Zahl und verwendest im Baustein dann halt nur einen Teil der Array-Elemente.

    Wofür benötigst du so eine Funktion ? Also wofür das Array in diesem Zusammenhang ?

  10. #19
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Genau so ... du übergibst halt nur eine kleinere Zahl und verwendest im Baustein dann halt nur einen Teil der Array-Elemente.

    Wofür benötigst du so eine Funktion ? Also wofür das Array in diesem Zusammenhang ?
    Wie geschrieben Larry,

    es steht momentan keine direkte Anwendung dahinter. Ich hatte mir einfach nur überlegt, wie so etwas gehandelt werden könnte, wenn ein Multiinstanzaufruf im Zusammenhang mit verschieden langen Array's zur Anwendung kommen soll.

    In diesem Fall könnte das Array ein "Array of Time" sein, um z.B. einzelne Schritte einer Kette zu überwachen.
    LG
    spirit

  11. #20
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ... das sollte keine Kritik sein ...
    Man ist halt nur mit dem Vorschlagen viiiiiel effektiver wenn man versteht, was der Andere / die Andere zu tun beabsichtigt.
    Außerdem lerne ich auch immer noch gerne dazu ...

    Gruß
    Larry

Ähnliche Themen

  1. Array von FB Ausgang beschreiben
    Von michal im Forum Programmierstrategien
    Antworten: 6
    Letzter Beitrag: 03.08.2011, 08:58
  2. Array beschreiben
    Von focus81 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 16.08.2010, 14:25
  3. Eindimensionales Array beschreiben
    Von SPS_LB im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 06.09.2009, 03:04
  4. Array indirekt beschreiben
    Von Airpower im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 22.06.2009, 08:34
  5. Array im Script beschreiben
    Von Neuling74 im Forum HMI
    Antworten: 2
    Letzter Beitrag: 16.06.2007, 08:59

Lesezeichen

Berechtigungen

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