TIA Die Länge eines festen Arrays im UDT definieren und in SCL heraus bekommen

Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich ein InOut mit Datentyp "Any" mache (...) meckert er, dass das nicht mit optimierten Speicherbereich geht.
Der Datentyp ANY ist ein Pointer, der (dynamisch) auf Adressen von beliebigen Speicherbereichen zeigen kann. "Optimierte" Speicherbereiche haben allerdings keine Adresse, daher kann ein ANY-Pointer nicht auf "optimierte" Speicherbereiche zeigen.
 
Tja, Marty, was soll man dir blos raten? Beim Mensch-Ärgere-Dich würde ich sagen, du mußt noch mal zurück auf Feld 1. Einfach alles verwerfen und noch einmal von vorne anfangen. Vielleicht aus den gewonnen Erfahrungen lernen und mit einer gescheiten Datenablage beginnen. Wenn ich richtig einschätze, was du in etwa vor hast, dann würde ich einen DB anlegen, der nichts anderes beinhaltet, als ein ARRAY of UDT. Wobei der UDT alle Daten enthält, der für einen Sensor (oder was auch immer) gespeichert werden soll. Es können darin auch Variablen für ein HMI abgelegt werden. Idealerweise sollte dieser UDT in Zukunft auch nicht mehr verändert werden müssen. Lediglich die Länge des ARRAY kann variieren. In dem FB dann mit VARIANT arbeiten. Im FB sollte der UDT bekannt sein. Du willst ja sicherlich irgend wie symbolisch arbeiten.

Würdest du es denn hin bekommen, einen einzigen UDT für alle deine Sensor-Typen in Stein zu meiseln?

1761223878722.png
 

Anhänge

  • 1761224080028.png
    1761224080028.png
    143,3 KB · Aufrufe: 4
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@Mrtain,

stimmt nicht, der Eingangs-Parameter ist zwar vom Typ Variant, man kann aber direkt das Array draufschalten. Verwende ich immer so und es funktioniert einwandfrei.
Eigentlich genau was ich brauch, aber direkt ein Array auf CountOfElements legen, geht bei mir nicht. Es heißt immer "Ungültige Zuweisung".
1761223920212.png
 
Tja, Marty, was soll man dir blos raten? Beim Mensch-Ärgere-Dich würde ich sagen, du mußt noch mal zurück auf Feld 1. Einfach alles verwerfen und noch einmal von vorne anfangen. Vielleicht aus den gewonnen Erfahrungen lernen und mit einer gescheiten Datenablage beginnen. Wenn ich richtig einschätze, was du in etwa vor hast, dann würde ich einen DB anlegen, der nichts anderes beinhaltet, als ein ARRAY of UDT. Wobei der UDT alle Daten enthält, der für einen Sensor (oder was auch immer) gespeichert werden soll. Es können darin auch Variablen für ein HMI abgelegt werden. Idealerweise sollte dieser UDT in Zukunft auch nicht mehr verändert werden müssen. Lediglich die Länge des ARRAY kann variieren. In dem FB dann mit VARIANT arbeiten. Im FB sollte der UDT bekannt sein. Du willst ja sicherlich irgend wie symbolisch arbeiten.

Würdest du es denn hin bekommen, einen einzigen UDT für alle deine Sensor-Typen in Stein zu meiseln?

Anhang anzeigen 91667

Von vorne Anfangen ist kein Problem, versuche ich ja gerade. "Alles" in ein UDT packen, auch kein Problem. Ein UDT fürs HMI, ein UDT pro Sensor für alle gespeicherte Daten und ein Array (mit flexibler Länge) von diesem UDT für alle Sensoren. Das ist nicht das Problem.
Aber fürs HMI werden auch noch "Livedaten" von dem gerade ausgewählten Sensor für eine Tabelle berechnen. Die Tabelle hat in der Regel immer die gleiche Zeilenanzahl, nur in Sonderfällen/Sonderprojekten ist die vielleicht mal anders.
Das Problem ist, dass im UDT pro Sensor auch mehrere Arrays sind, dessen Länge die Zeilen der gleichen Tabelle definiert und diese Anzahl muss gleich sein mit den Livedaten-Array. Deshalb will ich die einmal Abfragen, ob die gleich sind.
Mit CountOfElemtents sollte das gehen, geht aber irgendwie nicht.

Genau, der UDT ist im FB bekannt, wird ja genau für ihn optimiert und alles ist symbolisch programmiert. Wieso soll ich dann mit VARIANT arbeiten, das habe ich leider nicht verstanden??
 
... Wieso soll ich dann mit VARIANT arbeiten, das habe ich leider nicht verstanden??
Hattest du nicht irgend etwas mit Any vor? Variant wäre dann die neuzeitliche Alternative. Aber wenn du es nicht brauchst, um so besser.
Dein aktueller Fehler bezieht sich allerdings auf ein Variant. Was macht es auch für einen Sinn, eine Arraylänge eines ARRAY[0..3] zu ermitteln?
 
Hattest du nicht irgend etwas mit Any vor? Variant wäre dann die neuzeitliche Alternative. Aber wenn du es nicht brauchst, um so besser.
Dein aktueller Fehler bezieht sich allerdings auf ein Variant. Was macht es auch für einen Sinn, eine Arraylänge eines ARRAY[0..3] zu ermitteln?
ANY war nur ein Vorschlag von hier .... wenn es kein Vorteil bringt, brauche ich das nicht.
Die Länge abfragen macht Sinn, um sicherzustellen, dass die Länge der Arrays von den verschiedenen Quellen zusammen passen. Andere Anwender bringen das sicher irgendwann durcheinander.
 
Das Problem ist, dass im UDT pro Sensor auch mehrere Arrays sind, dessen Länge die Zeilen der gleichen Tabelle definiert und diese Anzahl muss gleich sein mit den Livedaten-Array. Deshalb will ich die einmal Abfragen, ob die gleich sind.
Mit CountOfElemtents sollte das gehen, geht aber irgendwie nicht.
Was ja wieder für globale konszanten sprechen würde, die Anfang und Ende der Arrays definieren würden...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was ja wieder für globale konszanten sprechen würde, die Anfang und Ende der Arrays definieren würden...
Wäre nur schön, wenn man zum Einen die globalen Konstanten an lokale übergeben könnte, um den Baustein abzukappseln, und zum anderen die Konstanten auch als Struct, udt... anlegen könnte, damit man nur eine an den Baustein übergeben muss.
😞
 
Zurück
Oben