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

Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 36

Thema: TIA - Softwarestruktur

  1. #11
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.241 Danke für 973 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Mir ist ehrlich gesagt nicht ganz klar warum ihr das nicht in einem Array lösen wollt?
    Wenn es von der max. DB-Größe passt hab ich das in Classic schon immer als Array of UDT oder Struct gelöst.
    TIA müsste bei optimierten DBs beim Erweitern eigentlich besser sein als Classic. Ansonsten geht immer noch der Umweg über AWL-Quellen.
    Gruß
    Dieter

  2. #12
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Wenn er ein Array verwendet möchte, hätte er das Problem nicht, klar.
    Bei Einzel-DBs hat man aber die Möglichkeit ein sprechenderes Symbol mit Kommentar zu vergeben.
    Mit einem Array kann man viel machen, nachher läuft es aber auf ein Programm hinaus was ein Array[100] of Messstellen, Array[200] of Ventile und Array[50] of Motoren hat. Das hat auch nicht nur Vorteile.

    Bei S7 Classic und selbst bei der S5 konnte man sowas effizient umsetzen, nur beim TIA-Portal scheint es (noch?) nichts dafür zu geben.

    Ich weiß nicht wie das z.B. bei den Motion-Control Bausteinen im TIA-Portal gelöst ist. Ob der Parameter zur den Achsdaten eine wie auch immer geartete Referenz ist die einem als Anwender nicht zur Verfügung steht, oder ob dieser "per Value" dem Baustein übergeben wird. Da die Achsdaten nicht gerade klein sind, bläht das wenn "per Value" ungemein auf.

  3. #13
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von Blockmove Beitrag anzeigen
    Mir ist ehrlich gesagt nicht ganz klar warum ihr das nicht in einem Array lösen wollt?
    Wenn es von der max. DB-Größe passt hab ich das in Classic schon immer als Array of UDT oder Struct gelöst.
    TIA müsste bei optimierten DBs beim Erweitern eigentlich besser sein als Classic. Ansonsten geht immer noch der Umweg über AWL-Quellen.
    Gruß
    Dieter
    Weil wir das in unserm Standart so seit Jahren Problemlos einsetzen, und noch nie Probleme hatten eine laufende Anlage zu erweitern. Wenn wir neue Plätze hinzufügen, gibts neue DBs und keine Probleme. Man weiss sofort welche DB für jeden Fördertechnikplatz zuständig ist, und muss nicht erst schaun welchem Arrayindex entspricht welcher Platz...

    Nur so wie Ich das seh bringt mir Vollsymbolisch damit gar nichts...

    @Thomas_V2.1:
    Ja, dache an zumindest das mit einer 1500er Zeiger auf einen Bereich möglich wären ohne das Ich diesen vorher umkopieren muss. Gibts sowas nicht?
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  4. #14
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Ja, dache an zumindest das mit einer 1500er Zeiger auf einen Bereich möglich wären ohne das Ich diesen vorher umkopieren muss. Gibts sowas nicht?
    Ich habe die Möglichkeit zumindest noch nicht gefunden. Wenn dann ist sie gut versteckt. Aber es gibt mittlerweile ein gutes Dutzend Speicherzugriffsfunktionen, die aber alle entweder nur in "nicht optimierten" Bausteinen funktionieren, oder nicht wirklich nützlich zu verwenden sind.

    Ich denke mal ein Zeiger oder Referenzkonzept ist einfach nicht vorgesehen worden. Ich kann mir zwar vorstellen, dass so ein Konzept wegen der Möglichkeit des Austauschs und Erweiterung von Programmteilen im laufenden Betrieb problematisch sein kann (gespeicherte Zeiger werden ungültig), aber andere (z.B. Codesys) bekommen das auch hin.

  5. #15
    Registriert seit
    24.04.2013
    Beiträge
    309
    Danke
    23
    Erhielt 160 Danke für 88 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen

    Ich weiß nicht wie das z.B. bei den Motion-Control Bausteinen im TIA-Portal gelöst ist. Ob der Parameter zur den Achsdaten eine wie auch immer geartete Referenz ist die einem als Anwender nicht zur Verfügung steht, oder ob dieser "per Value" dem Baustein übergeben wird. Da die Achsdaten nicht gerade klein sind, bläht das wenn "per Value" ungemein auf.
    Hi Thomas

    das ist ja mal eine spannende Frage.
    Ich hatte auf einer 1518 mit den Motion Bausteinen rumgespielt. Mal rein aus Sicht der Zeitmessungen kann die 1500 mit Referenzen umgehen.

    Allgemein für 1500 und 1200 gilt:
    Wenn eine Struktur im Input eines FB ist, dann wird by-value übergeben, es dauert entsprechend lange.
    Wenn eine Struktur im InOut eines FB ist, dann wird by-reference übergeben, es geht entsprechend schneller.
    Für den Zugriff auf die Struktur im aufgerufenen FB macht es keinen Unterschied ob by-value oder by-reference übergeben wird.

    Für Achsen gelten aber andere Regeln:
    Bei der 1518 war es so, dass der MC-Power, obwohl er im Input die Achse übergeben bekommt genaus schnell war wie wenn die Achse an einem selbstgeschriebenen Baustein im InOut übergebe.

    Ich bin dem aber letzes Jahr so kurz vor Weihnachten nicht mehr nachgegangen. Aber da werde ich doch nochmal nachbohren ...

    'n schön' Tach auch
    HB

  6. Folgender Benutzer sagt Danke zu HelleBarde für den nützlichen Beitrag:

    Ralle (10.03.2015)

  7. #16
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard

    @Thomas

    Das fehlt mit auch, mir ist die ganze Zeit immer noch nicht ganz klar geworden, wie man vollsymbolisch wirklich effizient programmieren kann und dann vieleicht noch mit optimierten Bausteinen (was für eine schlimme Idee). Irgendwie fehlt mir genau die Möglichkeit, indiziert in beliebige Datenbausteine zu greifen. Auch das Konzept, alles über Arrays und deren Indizes zu machen, ist, auf Grund der immer noch vorhandenen Datenbausteine, nicht wirklich schön.
    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

  8. #17
    Registriert seit
    05.04.2012
    Beiträge
    951
    Danke
    94
    Erhielt 216 Danke für 191 Beiträge

    Standard

    Im TIA Portal indirekt adressieren, siehe :
    https://support.industry.siemens.com.../view/97552147

    Folgendes habe ich noch aus einer Doku rausgezogen:
    Datentyp ARRAY und indirekte Feldzugriffe

    Der Datentyp ARRAY repräsentiert eine Datenstruktur, die sich aus mehreren

    Elementen eines Datentyps zusammensetzt. Der Datentyp ARRAY eignet sich z.B.

    für die Ablage von Rezepturen, Materialverfolgung in einer Warteschlange,

    zyklische Prozesswerterfassung, Protokolle, usw.



    Mit einem Index (

    array [„index“]) können Sie auf einzelne Elemente im

    ARRAY indirekt zugreifen.


    Vorteile
    Einfacher Zugriff, da der Datentyp der ARRAY-Elemente irrelevant für den
    Zugriff ist.
    ��
    Keine umständliche Zeigererstellung notwendig

    ��
    Schnelle Erstellung und Erweiterung möglich

    ��
    Nutzbar in allen Programmiersprachen

    Eigenschaften

    ��
    Strukturierter Datentyp

    ��
    Datenstruktur aus fester Anzahl von Elementen des gleichen Datentyps

    ��
    ARRAYs können auch mehrdimensional angelegt werden

    ��
    Indirekter Zugriff mit Laufvariable mit dynamischer Indexberechnung zur

    Laufzeit möglich

    Empfehlung

    ��
    Benutzen Sie ARRAY für indizierte Zugriffe statt Zeiger (z.B. ANY-Pointer).

    Dadurch wird das Programm leichter lesbar, da ein ARRAY mit einem

    symbolischen Namen aussagekräftiger ist als ein Zeiger in einen

    Speicherbereich.

    ��
    Nutzen Sie als Laufvariable den Datentyp INT als temporäre Variable
    ��
    Nutzen Sie die Anweisung „MOVE_BLK“, um Teile eines ARRAYs in ein

    anderes zu kopieren.

    ��
    Nutzen Sie die Anweisung „GET_ERR_ID“, um Zugriffsfehler innerhalb des

    Arrays abzufangen.
    Geändert von zako (10.03.2015 um 08:52 Uhr)

  9. #18
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Standard

    Zitat Zitat von HelleBarde Beitrag anzeigen

    Allgemein für 1500 und 1200 gilt:
    Wenn eine Struktur im Input eines FB ist, dann wird by-value übergeben, es dauert entsprechend lange.
    Wenn eine Struktur im InOut eines FB ist, dann wird by-reference übergeben, es geht entsprechend schneller.
    Codesys handelt das exakt genau so. Das bringt einen gewaltigen Performance Vorteil, wenn man VAR_IN_OUT auf Structs durchgängig anwendet. Das ist auch der Grund, warum in .NET und C# das sogar die einzige Möglichkeit ist, es gibt nur noch Referenzen auf Objekte.



    Zitat Zitat von HelleBarde Beitrag anzeigen
    Für Achsen gelten aber andere Regeln:
    Bei der 1518 war es so, dass der MC-Power, obwohl er im Input die Achse übergeben bekommt genaus schnell war wie wenn die Achse an einem selbstgeschriebenen Baustein im InOut übergebe.
    HB
    Die Softmotion von Codesys verwendet durchgängig dieses Konzept bei den MC_ (CIA 402) Aufrufen. Vielleicht gibt das schon die PLC Open so vor.
    Als Freelancer immer auf der Suche nach interessanten Projekten.

  10. #19
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard

    @zako

    Ja, dein Siemens-Beitrag zeigt ja, was Thomas schon gezeigt hat, man muß dann z.Bsp. mit einer Case-Anweisung arbeiten und alle z.Bsp. DB händisch eintragen. Das setzt voraus, man kennt diese schon beim Programmieren mit symbolischem Namen. Will man das erweitern, dann muß man nachtragen. Oder man nutzt Array mit Index, kann dann aber keine so schönen symbolischen Namen mehr nutzen und hat ein Problem, wenn man den DB wechseln will, weil man z.Bsp. Rezeprgruppen in DB verwaltet. Da fehlt mit irgendwie noch ein ganz kleines Stück, aber villeicht fällt uns noch etwas ein.
    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

  11. #20
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Für einen besonderen user schreibe ich l a n g s a m.

    @Ralle: ich verwende einen IndexDB.
    In diesem sind die Namen der DB als Symbol hinterlegt.
    Die Aufrufe gehen von 0 bis x.
    Daraus wird der DB ermittelt.
    Ändert sich der das Symbol, so muss dies in diesem IndexDb gemacht werden und sonst nirgends.

    Ist nicht die schönste Art und Weise, doch funktioniert schon in Step7 Classic.
    Auch in Hochsprachen müssen Variablen definiert werden, und wie ist eine Symboltabelle zu bezeichnen?
    Und eine PLC ist nach wie vor nicht zur Datenverwaltung gebaut und das muss auch nicht sein, nach meiner Meinung.


    bike
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

Ähnliche Themen

  1. Antworten: 22
    Letzter Beitrag: 10.08.2017, 09:48
  2. [TIA-V11] Rechnet TIA falsch bei SCL
    Von BlackLizzard im Forum Simatic
    Antworten: 43
    Letzter Beitrag: 09.02.2016, 02:59
  3. TIA Kompatibilität TIA Professional <--> TIA Basic
    Von TimeOUT im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 21.08.2015, 19:28
  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
  •