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

Seite 10 von 36 ErsteErste ... 8910111220 ... LetzteLetzte
Ergebnis 91 bis 100 von 352

Thema: TIA Portal V14

  1. #91
    Registriert seit
    25.01.2008
    Ort
    Hamburg
    Beiträge
    223
    Danke
    12
    Erhielt 63 Danke für 33 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Einfach in der Variablentabelle unter Anwenderkonstanten Variablen mit dem gewünschten Tagnamen anlegen und denen den Indexwert als DINT (<-- laut Onlinehilfe beste performance für Indexe) zuweisen.

    ArraymitSymbol.jpg

    Nun kann man symbolisch auf das Array und seine Elemente zugreifen, sofern man Arrays außerhalb von Schleifen einsetzt.

    Aber Achtung die Anzahl von Elementen in einer CPU ist begrenzt.

    Hier eine 1518
    Elemente.png

    https://w3.siemens.com/mcms/programm...ata_cpu_de.pdf
    Auf Seite 2,4,6,8 und 10 die anderen CPUs

    Auch die lokalen Konstanten in der Schnittstelle können hierfür genutzt werden.
    Geändert von miasma (04.10.2016 um 10:26 Uhr)
    It is not the strongest of the species that survives, nor the most intelligent that survives. It is the one that is most adaptable to change.


  2. Folgender Benutzer sagt Danke zu miasma für den nützlichen Beitrag:

    DeltaMikeAir (04.10.2016)

  3. #92
    Registriert seit
    13.11.2004
    Beiträge
    169
    Danke
    0
    Erhielt 14 Danke für 9 Beiträge

    Standard

    Zitat Zitat von DeltaMikeAir Beitrag anzeigen
    Wir haben dann auch mittels Konstanten durchindexiert ( also nicht Variable[1] sondern Variable[Indexvariable] )

    Ging das in TIA V13 nicht mehr ?
    Arrays mit Konstanten als Grenzen ging auch erst wieder ab TIA V13 SP1

    Gruß

  4. #93
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    9.404
    Danke
    799
    Erhielt 2.766 Danke für 2.234 Beiträge

    Standard

    Zitat Zitat von vollmi Beitrag anzeigen
    Oh FB Arrays gehen jetzt. Cool
    Und wieder eine Möglichkeit mehr, SPS-Programme crashfreundlich zu schreiben, ohne daß ein Compiler dazwischenfunkt


    Zitat Zitat von miasma Beitrag anzeigen
    Wenn man jetzt noch für den Index eine Konstante einsetzt, kann man sogar symbolisch auf ein Array zugreifen.
    Da man Array-Elementen keinen Kommentar geben kann, ist das wohl die einzige Krücke, wie man ein Programm mit FB-Arrays halbwegs verständlich halten kann.

    Gibt es eigentlich auch eine Möglichkeit, das Programm einer bestimmten FB-Array-Instanz zu beobachten?

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #94
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.493
    Danke
    308
    Erhielt 1.442 Danke für 1.217 Beiträge

    Standard

    Wenn jetzt schon Array-FBs gehen,
    kann man diese dann auch in SCL in einer Schleife aufrufen, wie z.B. bei Codesys problemlos möglich?

    Für etwas "komplexes" wie einen Motor-FB würde ich sowas nie verwenden, bei Codesys habe ich das aber sehr oft z.B. für ein Array Of 20 Schaltuhrbausteinen verwendet.

    Mfg
    Manuel
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  6. #95
    Registriert seit
    25.06.2007
    Ort
    Dresden
    Beiträge
    3.926
    Danke
    457
    Erhielt 874 Danke für 633 Beiträge

    Standard

    Zitat Zitat von MSB Beitrag anzeigen
    Für etwas "komplexes" wie einen Motor-FB würde ich sowas nie verwenden, bei Codesys ....
    Angsthase , bei Codesys wird eigentlich alles in Arrays gepackt
    Ich habe hier ein Array of 16 Motorbausteine oder of 24 Schrittketten (als Array of SchrittkettentypXYZ)
    Grüße Frank

  7. #96
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.241
    Danke
    667
    Erhielt 575 Danke für 441 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Und wieder eine Möglichkeit mehr, SPS-Programme crashfreundlich zu schreiben, ohne daß ein Compiler dazwischenfunkt
    Nunja. Programmier mal 200 Auma Klappen die alle dasselbe machen nur an verschiedenen Orten der Anlage. Alle Klappen haben eine eindeutige Nummer. vom SCADA wird ebenfalls per Nummer auf ein Array in einem DB die Klappe bedient.
    Mein Brandprogramm greift per Array auf die Klappen zu und öffnet per Nummer die richtige klappe (sollwert, befehl, Rückmeldung). Da in Step7 der FB nicht als Array deklariert werden konnte. War der FB aufruf eigentlich das einzige im Programm welches nicht als Array stattfand. Dementsprechend Gross war der Aufrufende FB (mehrere Minuten zum öffnen und Download auf die CPU).

    Jetzt kann ich den FB in einem Array deklarieren (array[1..212] of OBJ_Brandabsaugklappe) und kann per FOR schleife durch das ganze Aufrufarray durchrattern. Der Baustein ist dann in Echt nur noch 10 Zeilen lang und macht exakt dasselbe wie der Baustein der vorher 2000 Zeilen lang war.

    Ich würd sagen das ist sehr crashsicher. Und ich hab mich bei den Instanzaufrufen nicht nur einmal im Namen der Instanz vertippt und aus versehen eine Instanz der 200 Stück zweimal aufgerufen und eine keinmal. Das passiert dir in der Arrayabarbeitung nicht.

    mfG René

  8. Folgende 2 Benutzer sagen Danke zu vollmi für den nützlichen Beitrag:

    HelleBarde (08.10.2016),rostiger Nagel (04.10.2016)

  9. #97
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    9.404
    Danke
    799
    Erhielt 2.766 Danke für 2.234 Beiträge

    Standard

    Zitat Zitat von vollmi Beitrag anzeigen
    Ich würd sagen das ist sehr crashsicher.
    Wenn Du indirekt/indiziert auf eine nicht existierende FB-Array-Instanz zugreifst, dann merkt das das SPS-Programm erst zur Laufzeit. Ein Compiler kann Dich nicht warnen.

    Zitat Zitat von vollmi Beitrag anzeigen
    Und ich hab mich bei den Instanzaufrufen nicht nur einmal im Namen der Instanz vertippt und aus versehen eine Instanz der 200 Stück zweimal aufgerufen und eine keinmal. Das passiert dir in der Arrayabarbeitung nicht.
    Das kann Dir aber genauso beim Bezug auf die Instanzen passieren, vor allem, wenn die Instanzen keine "sprechenden" Namen mehr haben.

    Zitat Zitat von vollmi Beitrag anzeigen
    Der Baustein ist dann in Echt nur noch 10 Zeilen lang und macht exakt dasselbe wie der Baustein der vorher 2000 Zeilen lang war.
    Dafür ist nun vermutlich die erzeugte Codegröße und die Zykluszeit dreimal so groß.


    Wie versorgst Du die FB-Array-Instanzen mit Übergabeparametern? Die müssten dann ja wohl auch alle als Array vorliegen?

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. #98
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.241
    Danke
    667
    Erhielt 575 Danke für 441 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Wenn Du indirekt/indiziert auf eine nicht existierende FB-Array-Instanz zugreifst, dann merkt das das SPS-Programm erst zur Laufzeit. Ein Compiler kann Dich nicht warnen.
    Natürlich. Das ist aber bei Arrays immer der Fall und bei einem Arrayloop für FBs genau gleich schlimm wie überall sonst auch. Allerdings wäre das mit den Zyklischen Loops nur um zyklisch durch ein paar FBs zu zirkeln ja recht unproblematisch da so ein Array ja üblicherweise nur einmal angefasst wird, nämlich beim Erstellen.

    Da hab ich wesentlich fiesere Möglichkeiten im Programm da Pointer falsch zu setzen. Aber auch die sieht man ja sofort wenn da Grenzen überschritten werden wenn der Baustein geladen wurde.

    Das kann Dir aber genauso beim Bezug auf die Instanzen passieren, vor allem, wenn die Instanzen keine "sprechenden" Namen mehr haben.
    Wenn man das Programm sozusagen Nummerisch aufbauen kann. dann ist die Nummer der Name. Mich interessiert normalerweise nicht die BMK nummer der Klappe sondern ich weiss das Brandklappe 20 sich in Brandsektor 30 befindet und von Rauchmelder 30 ausgelöst wird.

    Dafür ist nun vermutlich die erzeugte Codegröße und die Zykluszeit dreimal so groß.
    Wieso sollte die Codegrösse grösser werden wenn die Instanz nachher per For Schleife abgearbeitet wird? Die Codegrösse müsste ja eher 200 mal kleiner sein als wenn man jede Instanz einzeln deklariert und aufruft.

    Also das für 200 klappen
    Code:
          CALL  #Klp01
           LS_PAR             :="LRU_N_KLP".ABL[1]
           AumaIN             :="Nord_RU_KLP_LST->AS".Ab[1]
           WD                 :="AS Röhre Nord"._DBX_1012_5
           Global_BF_Bedienart:="AS Röhre Nord"._DBW_22_0
           Gesamt_Oeffnung    :=#Gesamt_Oeffnung_Z1
           Venti_An           :=#VentiZone1
           Venti_Klein        :=
           AumaOut            :="Nord_RU_KLP_AS->LST".AbL[1]
           Tuere              :=
           Klp_Fahr           :="Brandarrays".Klp[1]
           Zonen_Oeffnung     :=#Zonen_Oeffnung_Z1
           Tuere_Bedienart    :="LRU_N_KLP".Tuere[1].BA
    
    
          CALL  #Klp02
           LS_PAR             :="LRU_N_KLP".ABL[2]
           AumaIN             :="Nord_RU_KLP_LST->AS".Ab[2]
           WD                 :="AS Röhre Nord"._DBX_1012_5
           Global_BF_Bedienart:="AS Röhre Nord"._DBW_22_0
           Gesamt_Oeffnung    :=#Gesamt_Oeffnung_Z1
           Venti_An           :=#VentiZone1
           Venti_Klein        :=
           AumaOut            :="Nord_RU_KLP_AS->LST".AbL[2]
           Tuere              :=
           Klp_Fahr           :="Brandarrays".Klp[2]
           Zonen_Oeffnung     :=#Zonen_Oeffnung_Z1
           Tuere_Bedienart    :="LRU_N_KLP".Tuere[2].BA
    
    
          CALL  #Klp03
           LS_PAR             :="LRU_N_KLP".ABL[3]
           AumaIN             :="Nord_RU_KLP_LST->AS".Ab[3]
           WD                 :="AS Röhre Nord"._DBX_1012_5
           Global_BF_Bedienart:="AS Röhre Nord"._DBW_22_0
           Gesamt_Oeffnung    :=#Gesamt_Oeffnung_Z1
           Venti_An           :=#VentiZone1
           Venti_Klein        :=
           AumaOut            :="Nord_RU_KLP_AS->LST".AbL[3]
           Tuere              :=
           Klp_Fahr           :="Brandarrays".Klp[3]
           Zonen_Oeffnung     :=#Zonen_Oeffnung_Z1
           Tuere_Bedienart    :="LRU_N_KLP".Tuere[3].BA
    Braucht doch sicher mehr Speicher auf der CPU wie dieses
    Code:
    For #index 1 to 200 do
          CALL  #Klp[index]
           LS_PAR             :="LRU_N_KLP".ABL[index]
           AumaIN             :="Nord_RU_KLP_LST->AS".Ab[index]
           WD                 :="AS Röhre Nord"._DBX_1012_5
           Global_BF_Bedienart:="AS Röhre Nord"._DBW_22_0
           Gesamt_Oeffnung    :=#Gesamt_Oeffnung_Z1
           Venti_An           :=#VentiZone1
           Venti_Klein        :=
           AumaOut            :="Nord_RU_KLP_AS->LST".AbL[index]
           Tuere              :=
           Klp_Fahr           :="Brandarrays".Klp[index]
           Zonen_Oeffnung     :=#Zonen_Oeffnung_Z1
           Tuere_Bedienart    :="LRU_N_KLP".Tuere[index].BA
    end_for;
    Wie versorgst Du die FB-Array-Instanzen mit Übergabeparametern? Die müssten dann ja wohl auch alle als Array vorliegen?
    Natürlich. Aber das tun sie üblicherweise sowieso weil ich die Berechnung eh über Arrays mache ich erkenne einen Brand in einem Sektor der Nummerisch in einem Array mit allen Parametern abgelegt ist. von diesem Ort kann ich dann rechnerisch ableiten welche Klappen um wieviel öffnen müssen um die richtige Strömung zu bekommen.
    Auch Windmessung und Rauchmelder liegen in einem Array

    Das meiste ermittle ich rechnerisch. Also Brandzone nr soundsoviel bringt bei der windgeschwindigkeit klappe soundso bis soundso pluss ggf ersatzklappe links oder rechts davon. Ventilator nr soviel kommt dann auch.

    dazu gibts dann einfach noch einige Sonderfälle die direkt ausprogrammiert sind z.b. an Sektorengrenzen wo die klappengruppe nicht weitergeschoben wird sondern in sektor 30 bleibt bis sektor 33 erreicht wird und dann erst in sek 33 aufgehen.

    mfG René

  11. Folgende 4 Benutzer sagen Danke zu vollmi für den nützlichen Beitrag:

    Cassandra (04.10.2016),DeltaMikeAir (04.10.2016),HelleBarde (08.10.2016),rostiger Nagel (04.10.2016)

  12. #99
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    11.851
    Danke
    500
    Erhielt 2.590 Danke für 1.870 Beiträge

    Standard

    @Vollmi

    Arbeitest du am BER mit?
    Dann laß dir bitte noch viel Zeit.
    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

  13. #100
    Registriert seit
    13.10.2007
    Beiträge
    11.527
    Danke
    2.636
    Erhielt 2.953 Danke für 2.025 Beiträge

    Standard

    Das beispiel von Vollmi, hat von mir eine Zustimmung für seine Anwendung.

    Ich glaube nicht das er damit eine moderne 1500er in die Knie zwingen wird.

    Das Programm wird kurz, knackig und überichtlich.

    Ich gehe jetzt mal davon aus, das er es in der Praxis inbetrieb nehmen wird
    und somit Verifizieren und Validieren. Wo soll also das Problem entstehen.
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

Ähnliche Themen

  1. TIA TIA Portal V14 - Erste Infos
    Von fabianfischer im Forum Simatic
    Antworten: 239
    Letzter Beitrag: 18.10.2016, 21:46
  2. TIA V14 News - Hannover Messe
    Von Jochen Kühner im Forum Simatic
    Antworten: 27
    Letzter Beitrag: 29.04.2016, 08:48
  3. Step 7 Simatic Bios Update Version V14.01.06
    Von wohei im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 12.01.2016, 19:21
  4. Antworten: 0
    Letzter Beitrag: 06.04.2012, 08:37
  5. Antworten: 0
    Letzter Beitrag: 22.01.2012, 18:59

Lesezeichen

Berechtigungen

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