-> Hier kostenlos registrieren
Hallo miteinander,
ich bin ueber Suchfunktionen auf dieses Forum aufmerksam geworden. Nun habe ich mich registriert, um ein Problem, dass mich seit einigen Tagen beschaeftig zu teilen und evtl Loesungsansaetze gemeinsam zu finden...
Was will ich?:
Ich will einen eigenen Baustein schreiben, mit dem es moeglich ist 2 Arrays miteinander auf Gleichheit ihrer Elemente zu pruefen. Voraussetzung dafuer ist natuerlich, dass die beiden Arrays vom gleichen Datentyp sind und die selbe Laenge haben. Allerdings sollen Datentyp und Laenge der beiden Arrays flexibel sein.
Dies koennte man ja bis jetzt prinzipiell mit den in TIA zur Verfuegung stehen Vergleichern unter "Einfache Anweisungen" tun, indem man den Datentyp Variant auswaehlt. Allerdings moechte ich zusaetzlich, dass die Anzahl der ungleichen Arrayelemente und der Index des ersten ungleichen Arrayelements am Bausteinausgang ausgegeben wird.
Mein Loesungsansatz:
Auf Grund der obigen Beschreibung, bin ich gezwungen, die beiden Arrays als Parametertyp Variant an den Baustein zu uebergeben. Innerhalb des Bausteins kann man dann mit den Variant Anweisung "Is_Array" pruefen, ob es sich um ein Array handelt, mit "typeOfElelents" den Datentyp der Array Elemente ermitteln und mit "countOfElements" die Array Laengen ermitteln.
Zur Pruefung der Array Elemente waere mein Ansatz nun, dass ich die einzelnen Elemente beider Arrays in einer FOR-Schleife mit der Anweisung "MOVE_BLK_VARIANT" einzeln in jeweils eine temp Variable kopiere und diese beiden temp Variablen dann miteinander vergleiche.
Problem:
Bei meinem Loesungsansatz stoeren mich 2 Dinge:
1)
Ich muss die FOR Schleife zur Pruefung der Array Elemente fuer jeden Datentyp einzeln auscodieren. Das ist erstens muehselig, unschoen und hat zusÃaezlich durch die vielen "BLK_MOVE_VARIANT" Anweisungen erhebliche Performance Verluste zur Folge.
2)
Dieser Loesungsansatz wuerde beim Datentyp BOOL schon mal nicht funktionieren, da "BLK_MOVE_VARIANT" keine Arrays of Bool kopieren kann.
Nun meine Frage letztendlich wäre, ob dass was ich vorhabe prinzipiell in TIA rein symbolisch moeglich ist? Mir ist klar, dass es mit Any Pointern, AWL und absoluter indirekte Adressierung moeglich ist, aber genau dass will ich nicht.
Man koennte auch den Parametertyp ARRAY
[*] verwenden. Allerdings muesste man dann fuer jeden Datentyp der Arrays einen eigenen Baustein schreiben, was ich auch nicht unbedingt tun will. Im Idealfall will ich einen Baustein mit dem man Arrays aller Datentypen und variabler Laenge vergleichen kann wie oben beschrieben.
Ich bin mittlerweile der Meinung, dass das so nicht umsetzbar ist, lass mich aber gerne vom Gegenteil ueberzeugen.
Mit besten Gruessen
qwsayxqay
ich bin ueber Suchfunktionen auf dieses Forum aufmerksam geworden. Nun habe ich mich registriert, um ein Problem, dass mich seit einigen Tagen beschaeftig zu teilen und evtl Loesungsansaetze gemeinsam zu finden...
Was will ich?:
Ich will einen eigenen Baustein schreiben, mit dem es moeglich ist 2 Arrays miteinander auf Gleichheit ihrer Elemente zu pruefen. Voraussetzung dafuer ist natuerlich, dass die beiden Arrays vom gleichen Datentyp sind und die selbe Laenge haben. Allerdings sollen Datentyp und Laenge der beiden Arrays flexibel sein.
Dies koennte man ja bis jetzt prinzipiell mit den in TIA zur Verfuegung stehen Vergleichern unter "Einfache Anweisungen" tun, indem man den Datentyp Variant auswaehlt. Allerdings moechte ich zusaetzlich, dass die Anzahl der ungleichen Arrayelemente und der Index des ersten ungleichen Arrayelements am Bausteinausgang ausgegeben wird.
Mein Loesungsansatz:
Auf Grund der obigen Beschreibung, bin ich gezwungen, die beiden Arrays als Parametertyp Variant an den Baustein zu uebergeben. Innerhalb des Bausteins kann man dann mit den Variant Anweisung "Is_Array" pruefen, ob es sich um ein Array handelt, mit "typeOfElelents" den Datentyp der Array Elemente ermitteln und mit "countOfElements" die Array Laengen ermitteln.
Zur Pruefung der Array Elemente waere mein Ansatz nun, dass ich die einzelnen Elemente beider Arrays in einer FOR-Schleife mit der Anweisung "MOVE_BLK_VARIANT" einzeln in jeweils eine temp Variable kopiere und diese beiden temp Variablen dann miteinander vergleiche.
Problem:
Bei meinem Loesungsansatz stoeren mich 2 Dinge:
1)
Ich muss die FOR Schleife zur Pruefung der Array Elemente fuer jeden Datentyp einzeln auscodieren. Das ist erstens muehselig, unschoen und hat zusÃaezlich durch die vielen "BLK_MOVE_VARIANT" Anweisungen erhebliche Performance Verluste zur Folge.
2)
Dieser Loesungsansatz wuerde beim Datentyp BOOL schon mal nicht funktionieren, da "BLK_MOVE_VARIANT" keine Arrays of Bool kopieren kann.
Nun meine Frage letztendlich wäre, ob dass was ich vorhabe prinzipiell in TIA rein symbolisch moeglich ist? Mir ist klar, dass es mit Any Pointern, AWL und absoluter indirekte Adressierung moeglich ist, aber genau dass will ich nicht.
Man koennte auch den Parametertyp ARRAY
[*] verwenden. Allerdings muesste man dann fuer jeden Datentyp der Arrays einen eigenen Baustein schreiben, was ich auch nicht unbedingt tun will. Im Idealfall will ich einen Baustein mit dem man Arrays aller Datentypen und variabler Laenge vergleichen kann wie oben beschrieben.
Ich bin mittlerweile der Meinung, dass das so nicht umsetzbar ist, lass mich aber gerne vom Gegenteil ueberzeugen.
Mit besten Gruessen
qwsayxqay
Zuletzt bearbeitet: