# Symbolische Adressierung



## Tigerente1974 (9 September 2021)

Hallo Forum.

Mich würde mal eure Meinung interessieren.
Schon in Zeiten von Step7 Classic sind mir Programme begegnet, in denen z.B. der Merker M10.0 den symbolischen Namen M10.0 hatte. Der Symbolkommentar beinhaltete dann die Information, wofür der Merker benutzt wird. Gleichermaßen wurde mit Ein- und Ausgängen verfahren.
Jetzt in Zeiten von TIA ist mir das in ähnlicher Weise erneut begegnet. Die Gesamtanlage wurde in Baugruppen gegliedert. Zu jeder Baugruppe gibt es dann einen DB mit dem Namen der Baugruppe. In dem DB steckt eine recht großes, immer wiederkehrendes Muster. Darin sind die Meldearrays, Bitarrays zum Rangieren der HW-Eingänge, Bitarrays für die Schrittketten, Achsen und diverse andere Strukturen. Vom Ansatz her finde ich das gar nicht schlecht. Allerdings ist auch hier alles nur über den Kommentar näher beschrieben:


Irgendwie kann ich mich nicht so recht damit anfreunden. Wie findet ihr sowas?


----------



## escride1 (9 September 2021)

Besonders in einem Array hast Du keine Möglichkeit als die Beschreibung als Kommentar einzustellen. Insofern einfach Variableninformationen mit Kommentar am Operanden anzeigen und es ist alles übersichtlich da.
Im Falle von Merkern, Eingängen, Ausgängen, sieht man auch direkt welcher das ist und muss nicht über eine Tabelle heraussuchen welcher Eingang das denn nun ist wenn er anders benannt wurde, zusätzlich sieht man in der HMI ebenfalls welche Adresse genau genutzt wurde.

Daher mache ich das eben so das Variablen etc. alle mit I0.0, ... bezeichnet werden, im Kommentar dann aber immer steht wofür diese ist.
Störmeldungen werden in einem Array of bool für die Bitmeldungen abgelegt. Im Kommentar steht wofür sie steht und dann eben auch die direkte Adresse.

Für mich ist das übersichtlicher und meine Kunden finden das ebenso.


----------



## rostiger Nagel (9 September 2021)

Tigerente1974 schrieb:


> Irgendwie kann ich mich nicht so recht damit anfreunden. Wie findet ihr sowas?


Schrecklich...!


----------



## Oberchefe (9 September 2021)

Den Sinn vom UDT_B1 auf deinem Screenshot kann ich nicht erkennen. Ich kann auf die einzelnen Members nicht wirklich in einer Schleife zugreifen (weil es eben kein Array ist). Warum ich dann keine sprechenden Symbolnamen für die Members vergebe, ist mir ein Stück weit ein Rätsel. Ich kann nur mutmaßen, dass der Code in irgendeiner Form automatisch generiert wird (sei es über Openess oder auch Quellen), und dass bei diesem Automatismus die Symbolnamen der Einfachheit halber unter den Tisch fallen.


----------



## escride1 (9 September 2021)

Oberchefe schrieb:


> Den Sinn vom UDT_B1 auf deinem Screenshot kann ich nicht erkennen. Ich kann auf die einzelnen Members nicht wirklich in einer Schleife zugreifen (weil es eben kein Array ist). Warum ich dann keine sprechenden Symbolnamen für die Members vergebe, ist mir ein Stück weit ein Rätsel. Ich kann nur mutmaßen, dass der Code in irgendeiner Form automatisch generiert wird (sei es über Openess oder auch Quellen), und dass bei diesem Automatismus die Symbolnamen der Einfachheit halber unter den Tisch fallen.


Wieso sollte ein Array of UDT kein Array sein?
DB.MH.MH[Index].0
DB.MH.MH[Index].1
DB.MH.MH[Index].2
In diesem Falle 0..7 also 8 gleiche Geräte immer gleich ansprechen bzw. abarbeiten. Es geht hier ja nicht darum die einzelnen Var 0,1,2,3,... in einer Schleife abzuarbeiten sondern gleich den ganzen UDT zu übergeben.

Solche Array of UDT habe ich selbst schon erstellt, z.B. um 30 Motoren mit einem einzigen FC und einem Global-DB via Modbus zu steuern.

Klar, man könnte statt 0 einfach "Crane_enable_job_from_Y-COM" nutzen, aber wozu, wenn es doch eben im Kommentar steht und man so auch nicht im Array suchen muss sondern durch die Reihenfolge 0-XX direkt weiß wo man hinschauen sollte?


----------



## Blockmove (10 September 2021)

escride1 schrieb:


> Klar, man könnte statt 0 einfach "Crane_enable_job_from_Y-COM" nutzen, aber wozu, wenn es doch eben im Kommentar steht und man so auch nicht im Array suchen muss sondern durch die Reihenfolge 0-XX direkt weiß wo man hinschauen sollte?


Weil man Programme nicht für das eigene Ego schreibt sondern für Kunden.
Wenn ich in so einer Anlage einen Fehler suchen müsste, würde ich bei sowas auch erstmal fluchen.
Variablennamen sollen „sprechend“ sein. Das lernt man in Ausbildung und Studium.


----------



## Tigerente1974 (10 September 2021)

Danke für die bisherigen Antworten.
Ich denke es ging dem Ersteller ging es bei den Arrays nicht darum, die irgendwie in einer Schleife abzufragen. Da wurde einfach eine Bitstruktur gebraucht und die hat er sich in einem Array n-mal angelegt.
Wie beschrieben finde ichtdie Programmstruktur an sich gar nicht schlecht. Das mit den "nicht sprechenden" Variablennamen ist aber irgendwie sperrig.
Aber wie escride1 schon schrieb, ist das scheinbar gar nicht so unüblich,und die Anwender kommen damit auch zurecht. Vielleicht ist das auch eine Frage der Gewohnheit. Ich glaube aber nicht, dass ich mal so programmieren würde.


----------



## Oberchefe (11 September 2021)

> Wieso sollte ein Array of UDT kein Array sein?
> DB.MH.MH[Index].0
> DB.MH.MH[Index].1
> DB.MH.MH[Index].2



Ich meine das UDT selber, das besteht nicht aus einem Array of BOOL sondern aus einzelnen BOOL

DB.MH.MH[Index].[Index2]
DB.MH.MH[Index].[Index2]
DB.MH.MH[Index].[Index2]


----------

