TIA Variablentyp auslesen

Zuviel Werbung?
-> Hier kostenlos registrieren
Also nochmal:
Ich habe einen UDT. Sagen wir mal mit diesem Aufbau (hat im Projekt einen wesentlich größeren Aufbau):

t_Ruecklesezeit:Time
x_Vorhanden:Bool
s_Name:String
r_Dauer:Real
ui_Anzahl1:UInt
ui_Anzahl2:UInt

Nun habe ich 2 Variablen diesen Typs, z.B. DB1.Daten_Alt und DB1.Daten_Neu.
Ich möchte jetzt vergleichen ob DB1.Daten_Alt und DB1.Daten_Neu Inhaltlich unterscheidlich sind. Das geht ja mit einem einfachen Vergleich IF DB1.Daten_Alt = DB1.Daten_Neu THEN ...
Wenn ein Unterschied im gesamten vorhanden ist, möchte ich wissen, welche Variable innerhalb des UDT geändert wurde.
Also wurde z.B. x_Vorhanden von FALSE auf TRUE geändert usw.

Aktuell Vergleiche ich es Byteweise, was aber bei Variablen mit mehr oder weniger als 1 Byte auch wieder unschön ist.
 
Zuletzt bearbeitet:
ok, ich verstehe jetzt Dein Problem, habe aber immer noch folgendes Verständnisproblem:
Der Baustein, den Du schreiben möchtest, kennt den Aufbau des UDT nicht. Was bringt diesem Baustein dann die Information, daß die Variable x_Vorhanden sich geändert hat? Diese Information muß er ja auch irgendwie an das übergeordnete Programm "übersetzen", weil nur das übergeordnete Programm kennt "x_Vorhanden"....

Ich kann mir dann nur vorstellen, daß ich das Byte mit dem (ersten) Unterschied ausgebe und dann das Hauptprogramm die betroffene Variable in einem Inhaltsverzeichnis nachschlägt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie gesagt, ich versuche eine Art Logbuch.
Aktuell Vergleiche ich Byteweise und speicher mir dann weg, das sich z.B. Byte 5 vom Wert 6 auf Wert 8 geändert hat. Wenn ich jetzt aber eine Real-Variable habe, ist die Änderung nicht mehr nachvollziehbar, da ich erstmal schauen müsste was bei einer Real-Variable Byte 1 bis Byte 4 bedeutet und was die jeweilige Änderung eines Bytes dann für den Tatsächlichen Wert bedeutet. Daher wollte ich den tatsächlichen Wert, und dazu muss ich wissen, wie lang bzw welchen Typ dieses Variable hat...
Ein Inhaltsverzeichnis anlegen und abhängig des geänderten Byte dort nachschlagen wäre eine Idee, nur viel Aufwand die einzelnen Variable zuzuordnen.
Sieht wohl so aus, als müsste ich mit dem Byteweisen Vergleich vorlieb nehmen.
 
Ein Inhaltsverzeichnis anlegen und abhängig des geänderten Byte dort nachschlagen wäre eine Idee, nur viel Aufwand die einzelnen Variable zuzuordnen.

Wenn Du das Problem oft hast, würde ich mir einmal eine Excel schreiben, in die ich den UDT kopiere, die mir dann eine Quelle generiert für das Inhaltsverzeichnis... sollte danach eigentlich nicht mehr viel Arbeit sein... Du generierst Dir ein Array of String, jedes Array-Element repräsentiert ein Byte im UDT. Wenn Du dann per Schleife feststellst, ein Byte ist unterschiedlich, springst Du mit dem Index in das Array und hast den Variablennamen, den Du dann in Deinem Log ausgeben kannst.
 
Ich möchte ein kleines Logbuch schreiben und Änderungen von bestimmten Daten mitschreiben.
Damit man nicht bei jedem neuen Projekt alle Daten, die sich wie bereits gewähnt von Projekt zu Projekt ändern, händisch eingeben und anpassen muss, hätte ich das möglichs Automatisiert.
"Ich weiß weder den Name noch die Adresse noch die Struktur noch den Typ meiner Variablen, doch das SPS-Programm soll alle die Daten mitloggen, ohne daß ich dafür noch irgendwas extra händisch eingeben muß" :ROFLMAO: Nicht das die Projekte noch in Arbeit ausarten ;)

Für jedes Projekt gibt es doch bestimmt irgendwelche Excel-Listen oder Schaltpläne oder sonstige Listen. Dann mußt Du halt die anzupassenden Programmteile irgendwie aus den Listen generieren ... wie der Onkel schon vorgeschlagen hatte:
"Automatisieren" ist in diesem Zusammenhang eine gute Überleitung zum "Generieren". Das schmeiß ich nur mal so in den Raum ;) .

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn Du das Problem oft hast, würde ich mir einmal eine Excel schreiben, in die ich den UDT kopiere, die mir dann eine Quelle generiert für das Inhaltsverzeichnis...
Inhaltsverzeichnis? Wenn schon Quelle generieren, dann einen Baustein mit direktem Vergleich der Elementardaten im Klartext. Und dann vielleicht auch gleich ein ARRAY of BOOL mit den Vergleichsergebnissen.
 
Muss ich mal schauen ob und wie ich das umsetze.
Aber mit reinen TIA-Funktionen wird es wohl nicht möglich sein.
Danke schon bis hier hin für die Hilfe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich muss mich hier jetzt auch noch einmal reinhängen.
Es gibt ja auf Seiten der SPS (mittlerweile) schon viel, was man machen kann. Aber das Aufdröseln von etwas, dass ich nicht kenne halte ich für sehr grenzwertig - zumindestens in der SPS, die ja mit dem Speicher nicht wirklich dynamisch umgeht.
Etwas, was ich mir vorstellen könnte, gerade in Anlehnung an das, was der TE schreibt, wäre, dass die Struktur an gleicher Stelle (Stichwort AT-Sicht) immer die gleichen Typen hat. Dann weiß ich vielleicht den Variablennamen noch nicht ... aber ich weiß wenigstens ob ich an einem Bit herumknabbere oder einem REAL oder DateAndTime ... oder oder ...
Eine Festlegung auf dieser Ebene halte ich noch für praktikabel umsetzbar.

@TE:
Um was handelt es sich denn genau ? Es hört sich für mich "ein bisschen" nach Maschinen-Parametern an wo du mitloggen möchtest welcher Wert sich (ggf. wann und durch wen) von vorher zu nachher geändert hat ...

Gruß
Larry
 
Und wie vergleiche ich die einzelnen Elemente des UDT, ohne alle händisch einzugeben?
Wo ist denn das Problem das händisch einzugeben?
Wenn die UDTs unterschiedlich sind, musst du doch eh bei jeder Variable entscheiden wie du damit umgehst, und kannst ggf. auch einzelne Variablen aus dem Vergleich herausnehmen bei denen du eine Änderung erlaubst.
 
Zurück
Oben