TIA Array-Datenblöcke: Das sieht so schlecht aus

LowLevelMahn

Level-1
Beiträge
766
Reaktionspunkte
90
Zuviel Werbung?
-> Hier kostenlos registrieren
ich mache mir einen Array-Datenblock DB1 of Array[1..2] of bool

und muss dann diesen blöden Behelfs-Pfad "DB1.THIS[0]" nutzen um auf DB-Elemente zuzugreifen - "DB1[0]" waere ja auch irgendwie zu logisch - wofuer das "THIS"

was sagt mir das:

In TIA ist ein Datenblock erstmal hart als Struct ausprogrammiert worden (vor laengerer Zeit) und damit hat er Struct-Semantik, also kein "[x]" direkt drann

dadurch besteht dann der Zwang zu einem benamten Root-Knoten z.B. bei normalen DBs der versteckte "Static" oder bei DB-Arrays der DB-Name als Root in der Deklarationsansicht

damit der DB-Name im Pfad nicht zweimal auftaucht (da der Root ja auch so heisst wie der DB) und weglassen wegen der Struct-Semantik nicht klappt hat man dann einfach THIS als Platzhalter verwendet

solche (trivial)Spezialtypen wie UDT-DB oder Array-DB musste man nachtraeglich dann mit solchen Mitteln in den Struct-Only-DB reindruecken (mein Beileid TIA-Entwickler) - daher kommt
bestimmt auch die Einschränkung das ein Array-DB nicht absolut sein kann

so wurde es bestimmt gemacht

class Datablock
class Array_Datablock: Datablock
class UDT_Datablock: Datablock

und in Datablock steckt die Zugriffssemantik drinn

aber leider macht man sowas nicht durch Ableitung sonder einfach mit Spezialisierung oder Aggregation

class Datablock: DatablockBase<Struct>
class Array_Datablock: DatablockBase<Array>
class UDT_Datablock: DatablockBase<UDT>

wobei in den Klassen Struct,Array und UDT dann die Zugriffssemantik implementiert ist

dann braucht man nicht solche "THIS" Kruecken - aber scheinbar ist TIA wohl stark Pseudo OOP/Prozedural entwickelt - sowas nervt echt

Es geht mir nicht um den Schreibaufwand oder das es eben so ist - sondern es zeigt ganz deutlich wie TIA intern programmiert wird - zu viel Spezialbehandlung fuer triviales == viele Fehler
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Mich interessiert es einfach persönlich wie der TIA-Fehler-Zirkus so zustande kommen konnte und solche kleinen (aber feinen) Ausreißer zeigen überdeutlich wo überall an einem guten Design gespart wurde.
Daraus kann man z.B. Rückschlüsse ziehen wie an anderen Stellen gearbeitet wurde - die Fehler werden vorhersagbarer

ansonsten arbeite ich aber nur sehr wenig mit TIA, Step7 - und wenn finde ich Fehler: http://www.sps-forum.de/simatic/60661-tia-und-step7-erzeugen-unterschiedliche-array-offsets.html
 
und weiter geht die Sinnlosigkeit


wenn man mit der TIA Openeness-API den IDB ausliesst kommt da dann genau der Aufbau wie er im TIA in der Deklarationsansicht aussieht und im Programm ist wieder anders


nur so nebenbei - die Namensorgie ist selbst/hausgemacht - oder historisch - technisch gibt es dafür absolut keinen Grund


also


MeinIntDB: DB of Array[1..2] of Int


Deklarations-Ansicht:


Code:
MeinIntDB (Struct)
  MeinIntDB Array[1..2] of Int
   [0]
   [1]
   [2]


TIA-Openess:


Code:
MeinIntDB.MeinIntDB[0]
MeinIntDB.MeinIntDB[1]
MeinIntDB.MeinIntDB[2]


HMI/SCL-Zugriff:


Code:
MeinIntDB.THIS[0]
MeinIntDB.THIS[1]
MeinIntDB.THIS[2]

fuer die Openeness nimmt man die interne Information - und fuer das HMI eine andere = bisschen anderer Code

jetzt würde es mich noch interessieren:
-wie sehen die OPC-UA Zugriffe aus
-und die Online-Symbole davon (per WinCC)

schöne Siemens Symbolwelt
 
Auch sehr schön - Konstanten als Array-Grenzen:

ich erstelle 2 Konstanten (PLC-Variablen/Anwenderkonstante) um zu prüfen wie gut der Array-Deklarationsparser ist

1.2
1..2

und im DB dann

Array["1.2"..3] of Int <-- OK
Array["1..2"..3] of Int <-- FEHLER: Verwendete Konstante "1" ist nicht definiert

was bedeutet das: der Parser ist Müll weil er noch nicht mal die TIA-Eigene Namenskonvention beherrscht
und warum versteht TIA das nicht: weil der Parser-Entwickler nach ".." sucht und dann einfach splittet - d.h. es ist ein Mal-eben-schnell-gebastelt-wird-schon-reichen-Parser - und es gibt keine vollständigen Tests dafür
 
Zuviel Werbung?
-> Hier kostenlos registrieren
A
was bedeutet das: der Parser ist Müll weil er noch nicht mal die TIA-Eigene Namenskonvention beherrscht
und warum versteht TIA das nicht: weil der Parser-Entwickler nach ".." sucht und dann einfach splittet - d.h. es ist ein Mal-eben-schnell-gebastelt-wird-schon-reichen-Parser - und es gibt keine vollständigen Tests dafür

[Ironie]

Das ist halt auch nur für Industriemaschinen/Kraftwerke/U-Boote/Atommüllendlager usw. vorgesehen.
Wenn du dir das gesamte TIA ansiehst, dann erkennt man doch, wo da das Hauptaugenmerk liegt, Klicki-Bunti läßt halt grüßen.
Aber bald machen wir das alles mit dem Smartphone, spätestens mit Industrie 4.1.

[/Ironie]

PS: Ich weiß, andere sind auch nicht viel besser, aber müssen die das denn sein??? :ROFLMAO:
 
und noch was ist mit Arrays aufgefallen

ich habe eine Anwenderkonstante int aconst = 10
und einen FB mit einer Constante int fconst = 20
wenn ich jetzt im FB ein Array array["aconst"..fconst] definieren sieht das Array dann im IDB so aus array["aconst"..20]

welchen Sinn hat es das nur die FB-Konstante Aufgelöst wird, oder warum steht nicht bei beiden einfach das Symbol?
 
Zurück
Oben