Step 7 offenes Datenformat für In-Variable

Bär1971

Level-1
Beiträge
220
Reaktionspunkte
18
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

entweder ich seh den Wald vor lauter Bäumen nicht, oder ich suche gerade nach etwas unmöglichem.
Ich habe einen FB geschrieben, welcher eine Datenbank (DB mit Offset) nach einem Wert durchsucht. (Das nur als Hintergrundinfo)
Bisher muss ich diesen Baustein immer intern Projektbedingt anpassen da immer unterschiedliche Daten gesucht werden. Mal ein Bool-Status, mal ein Byte, oder eine Real-Zahl, ein ASCII-Zeichen etc...
Ich suche nun nach einer Möglichkeit, eine offene Eingangsvariable zu schaffen wie z.Bsp. beim Siemens MOVE-Baustein.

Ist sowas möglich?
 
Vielleicht ein #Pointer ?
Bin mir aber nicht wirklich sicher. Hab mit #Pointer seit 5 Jahren nichts mehr gemacht.
(wo anders gibt es Variant variablentypen.)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit Pointer suche ich mir innerhalb des DB´s die Startadresse des Datensatzes mit dem gefundenen Wert. Mein Problem ist einfach das in einem Projekt mal ein BOOL-Wert im nächsten Projekt vielleicht eine Real-Zahl gesucht werden soll. Dafür suche ich eben eine Lösung um dem Baustein eine passende "In-Variable" zu geben wie z.Bsp. beim MOVE-Baustein. Da kann man ja auch alle Datenformate übergeben. Derzeit kann ich meinen Baustein mit allem beschalten was nötig ist nur nicht mit dem Suchwert. Den muss ich immer intern im Baustein anpassen. Ist einfach unschön, verwirrend und nicht wirklich Bibliotheksfähig.
 
Der universelle Datentyp heißt ANY
Aber: je universeller Du Deinen Baustein machst, desto aufgeblähter wird er, desto mehr Fehler enthält er und es fällt auch nicht mehr auf, wenn das was Du damit suchen willst überhaupt nicht zum Projekt passt.

Harald
 
hm.. ich bekomms doch nicht ganz alleine hin.

Code:
   AUF   DB [#t_database_nb]
      L     #byte_nb_to_scan
      SLW   3
      LAR1  

      L     #volume_of_datasets
Loo1: T     #Loop_count_1

   [COLOR="#FF0000"]   L     DBW [AR1,P#0.0]
      L     #value_to_search_in_dbase
      ==I   [/COLOR]
      SPBN  next

      TAR1  
      SRW   3
      L     #byte_nb_to_scan
      -I    
      T     #t_start_adr_dataset
      SET   
      S     #dataset_located
      U     #dataset_located
      SPB   _end

next: NOP   0

      L     #size_dataset
      SLW   3
      +AR1  

      L     #Loop_count_1
      LOOP  Loo1

      SET   
      S     #dataset_not_located
      U     #dataset_not_located
      SPB   _end

Der markierte Teil:
L DBW [AR1,P#0.0]
L #value_to_search_in_dbase
==I
vergleicht in diesem Projekt auf eine INT-Zahl.

Die In-Variable "#value_to_search_in_dbase" kann man also als ANY-Datentyp deklarieren.
Aber wie kann man den indirekt adressierten Einsprung zur Suche ( L DBW [AR1,P#0.0]) Datentypungebunden aufrufen?
Und das ganze dann auch noch vergleichen?
Ist es überhaupt möglich diesen Vergleicher "any" zu gestalten?
Und wenn wie?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schau Dir in der Step7-Hilfe und hier in der FAQ den Aufbau des ANY-Datentyps an. In Deinem Baustein mußt Du in den ANY schauen was übergeben wurde und davon abhängig eine Fallunterscheidung machen, d.h. für jeden von Dir gewünschten/unterstützten Typ eine andere Routine schreiben. Dann kommt es auch noch darauf an, ob Du einen FC oder FB programmierst. Deine universal-"eierlegende Wollmilchsau" kann eine Lebensaufgabe werden, bis alles endlich fehlerfrei funktioniert...

Harald
 
Vielen Dank Harald für die Richtung. Ich denke das ich mein Datenbankkonzept neu überarbeiten muss um mich nicht in Teilaufgaben zu verzetteln. Aber jetzt hab ich einen Weg um die Aufgabe als Ganzes neu zu lösen.
 
Eine andere Möglichkeit wäre dem Baustein mehrere IN mit den jeweiligen Datentypen zu übergeben, musst halt dann im FB Auswerten wo was kommt.
 
Zurück
Oben