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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: Fester Speicherbereich

  1. #11
    StructuredTrash ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    745
    Danke
    27
    Erhielt 164 Danke für 142 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von mkd Beitrag anzeigen
    Nach einem Beispiel hatte ich gefragt, weil wenige Zeilen abgespeckter Code mehr als 1000 Worte sagt.
    Stimmt meistens, aber in diesem Fall hätte das vermutlich mehr Fragen gestellt als beantwortet. Aber gut, meine Texte haben das ja auch getan.
    Zitat Zitat von mkd Beitrag anzeigen
    Ein PLC Programm würde ich so nicht programmieren.
    Ich habe jahrelang eine eigene Soft-SPS mit Borland Pascal programmiert. Das hat mich sicher mehr in Richtung ereignisorientierte Denk- und Arbeitsweise geschoben als für einen SPS-Programmierer üblich. Der Aufruf einer Init-Methode oder eines Init-Konstruktors für jedes Objekt stammt aus dieser Zeit, das Konzept habe ich dann beim Umstieg auf Beckhoff übernommen. Genauso den intensiven Einsatz von Aktionen als Ersatz für Objekt-Methoden und die Eigenart, nicht unbedingt alle Input-Parameter bei jedem Aufruf zu übergeben.
    Zitat Zitat von mkd Beitrag anzeigen
    Am meisten Sicherheit würde mir bei deinem "Konstrukt" die IN_OUT Variante geben.
    Mir auch, und deshalb werde ich wohl dabei bleiben. Die Diskussion mit Dir hat ihren Beitrag zu dieser Entscheidung geleistet, deshalb Dank dafür.
    Zitat Zitat von mkd Beitrag anzeigen
    Wie wäre es mit einem Input
    ADR(FB_Instance)
    ?
    Das hatte ich ja vor, aber die fehlende Typüberprüfung macht mir Pointer eben unsympathisch. Vor allem bei dieser Anwendung, bei der der Typ des zu übergebenden Parameters bekannt und konstant ist.




    Gruß und guten Rutsch!

  2. #12
    Registriert seit
    15.02.2011
    Ort
    Stromness, Scotland, UK
    Beiträge
    339
    Danke
    25
    Erhielt 34 Danke für 33 Beiträge

    Standard

    Zitat Zitat von mkd Beitrag anzeigen
    Wie wäre es mit einem Input
    ADR(FB_Instance)
    ?

    Auch wenn sich FB_Instance irgendwo im Speicher verschiebt, wird ja die neue Adresse übergeben.
    Wird dies eben gerade nicht gemacht bei einem Online-Change? Manchmal erscheinnt ja so ein Fenster, das einem warnt, das gewisse Variablen verschoben werden, und bei Pointerzugriff nicht mehr funktionieren??

    Ich würde das versuchen nachzustellen. Denn bei einem Pointerzugriff auf falsche Speicherbereiche kann Einiges kaputt gehen (So aus Erfahrung )

  3. #13
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Der Speicher wird immer dann neu organisiert wenn man neue Variablen einfügt oder welche löscht. Das ist einerseits eine Klasse Angelegenheit weil es die Fragmentierung des Speichers minimiert, andererseits gibt es gerade bei der Verwendung von Pointern natürlich Stress wenn sich die Adressen verschieben. Im günstigen Fall crasht das Programm und man merkt das da was schief gelaufen ist, wenn man Pech hat werden "nur" die falschen Variablen beschrieben und man wird bei der Fehlersuche bekloppt.....

    Ich stehe momentan vor dem gleichen Dilemma und habe auch noch keine richtige Lösung gefunden. Ich muss 70 Antriebe steuern. Die 70 Instanzen meines Antriebs-Steuer FBs werden je nach Betriebszustand und Betriebsmodus der Anlage als Pointer an verschiedene übergeordnete Programm-FBs übergeben. Das funktioniert super und ich kann mir ne Menge redundanten Code ersparen indem ich die Antriebe dynamisch im Progamm verteile.
    Im Idealfall müsste ich mir nur bei Programmstart in einem Initialisierungsschritt die Adressen aller Antriebs-FBs holen und die in ein Array Schreiben und gut. Da ich aber bei bei der IBN immer mal wieder Variablen hinzufüge oder lösche muss ich die Initialisierung dann jedesmal wiederholen um sicher zu gehen das die Pointeradressen noch stimmen. Zur zeit läuft die Initialisierung bei mir in jedem Zyklus ab damit ich das nicht vergesse, aber dann kann ich auch gleich mit VAR_IN_OUT arbeiten (was ich auch machen werde, wenn ich keine andere Lösung finde).

    Klasse wäre ein Compilerbefehl (Pragma) der definierte Speicherbereiche (bei der Variablendeklaration) von der Neuorganisierung ausschließt.

  4. #14
    StructuredTrash ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    745
    Danke
    27
    Erhielt 164 Danke für 142 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von MasterOhh Beitrag anzeigen
    Klasse wäre ein Compilerbefehl (Pragma) der definierte Speicherbereiche (bei der Variablendeklaration) von der Neuorganisierung ausschließt.
    Ich schliesse mich an, aber für Weihnachtswünsche ist es schon ein bisschen spät.

Ähnliche Themen

  1. zu fester Uhrzeit Schütz ansteuern
    Von Thomasheins11 im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 02.08.2013, 19:06
  2. CX9010 mit fester IP ins Netzwerk aufnehmen
    Von mike_roh_soft im Forum CODESYS und IEC61131
    Antworten: 8
    Letzter Beitrag: 03.12.2011, 19:16
  3. AWL Speicherbereich
    Von Chefmech im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 13.09.2011, 09:23
  4. Speicherbereich
    Von siemensdepp im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 28.02.2011, 09:12
  5. Antworten: 5
    Letzter Beitrag: 10.02.2006, 08:59

Lesezeichen

Berechtigungen

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