Durchsuchen eines DB’s

Rich

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Ein DB mit verschiedensten Datentypen soll durchsucht werden.
Die Suchkriterien sollten dabei sein:
a)Datentype: BYTE
b)Wert (z.B. 0010)
Wie kann das in einer Funktion realisiert werden?
 
mit einer auswertung des datentyps mit hilfe eines ANY zeigers, danach ist nur noch ein vergleich auf w#16#2 nötig ...

das problem ist wohl die länge des DBs und der einzelnen speicherbereiche ... das sinnvoll zu implementieren bedarf einiges an hirnschmalz ...

gibt es denn einen grundsätzlichen aufbau, der DBs oder sind die einfach nur wild durcheinander gewürfelt...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

das Problem besteht meiner Meinung darin den Datentype zu erkennen.
Oder funktioniert einfach in dem der ANY Zeiger die Datentypecodierung 02 (für BYTE) bekommt?
Ansonsten ist der DB etwas wild aufgebaut, zuerst ein paar BOOL’s, dann ein Paar REAL’s um anschließend verschiedene UDT Strukturen an zu hängen.
 
den datentyp bekommst du mit dem ANY ... das wird ne ziemlich verschachtelte sache, weil du jedes element, dass du prüfen willst, irgendwie zur überprüfung übergeben mußt ... eieiei ...

... das wird doch so alles nichts, also ich will dir jetzt nicht den wind aus den segeln nehmen, was denkbar ist, ist meist auch machbar ...

ich hatte die ANY-auswertung bisher immer nur für eine feststehende variable gemacht ... deins muß dynamisch sein, also die einzelnen bereiche deines DBs durchlaufen ... schleife? aber wie adressieren? hmmm ... kannst du SCL einsetzen? ANY und SCL ist zwar etwas komplizierter als in AWL aber du könntest einen indizierten zugriff bauen ...

oh man ... ihr immer mit euren sonderwünschen :rolleyes:

sind die DBs wirklich so unterschiedlich aufgebaut?
 
Hallo,
ich kann mir nicht vorstellen, dass da etwas sinnvolles dabei herauskommt.
Der Any kann zwar den Datentyp usw. übergeben, aber auch nur. wenn man es ihm vorher mitgeteilt hat.
Beui der "freien Adressierung" einer Speicherstelle in einem DB wird man dieses ja immer über BYTE, WORD oder DWORD tun und auf diesem Weg nichts sinnvolles zurückbekommen. Ich denke hier auch (und im speziellen) an die entsprechenden (nicht-)Fähigkeiten von SCL (an gleicher Stelle).

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei der "freien Adressierung" einer Speicherstelle in einem DB wird man dieses ja immer über BYTE, WORD oder DWORD tun und auf diesem Weg nichts sinnvolles zurückbekommen

das selbe problem hat man auch in allen anderen speicherbereichen ... also volle kraft zurück und in larrys kanon eingestimmt: das wird wohl nichts, auch wenn mir da ein paar hochsprachenkonstrukte vorschweben, aber dafür sollteste dir vielleicht die S7-mEC RTX besorgen :rolleyes:
 
Hallo…

So wie ich das sehe habe ich zwei Möglichkeiten.

Die Einfache: Schreibe alle relevanten Daten in einen separaten DB der ein ARRY vom Type BYTE hat um anschließend einen Wert zu suchen.
Nachteil: Ich habe einen weiteren DB und löse mich von einer „Philosophie der Typicals“.
Vorteil: Der Code wurde bereits von Dir in einem anderen Beitrag beschrieben. :-D

Die Aufwendige: Der DB wird Adresse für Adresse nach dem projektierten Datentype gefragt um bei einer Übereinstimmung mit dem Suchkriterium (BYTE) den Wert zu vergleichen (z.B.0100). Dabei würde ich die Adresse in der Schleife laufen lassen.
Nachteil: Ich habe nicht den Hauch einer Ahnung wie eine Adresse eines DB’s angesprochen wird um einen Datentypvergleich durch zu führen! :confused:
 
Hallo Rich,

Der DB wird Adresse für Adresse nach dem projektierten Datentype gefragt

ich denke, Du wirst keine Change haben den Datentyp abzufragen, denn die Formate etc.
werden im Ladespeicher der CPU abgelegt. Soweit ich weiß kann man auf den Ladespeicher
vom Programm aus nicht zugreifen. :confused:

Grüße
Gebs
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wie wäre es wenn du dir einfach ne nen FB schreibst an dem du angeben kannst welcher DB durchsucht werden soll, wieviele bytes er absuchen soll und nach welchem Wert er suchen soll.

Im FB öffnest du den angegebenen DB und inizialisierst eine Schleife die so oft läuft wie du bytes absuchen möchtest. Zusätzlich lädst du den pointer P#0.0 in eine Zeigervariable.

In der Schleife vergleichst du lediglich den Wert mit dem DBB [#Zeiger] und addierst den pointer P#1.0 in jeder schleife zu #Zeiger.

Bin aber noch neu xD

Meinungen erwünscht
 
Na - ja ...
auf diese Weise kannst du einen DB scannen - es geht aber darum, herauszufinden welchen Typs der Eintrag im DB ist - als INT , REAL , DINT usw.
Das erfährst du auf diese Weise nicht ...

Gruß
LL
 
Stimmt, aber ich wüsste nicht mal ob das überhaupt geht. Isch guck ma SIMATIC doku ;-) vielleicht find ich was.. wenn ja melde ich mich
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Stimmt, aber ich wüsste nicht mal ob das überhaupt geht. Isch guck ma SIMATIC doku ;-) vielleicht find ich was.. wenn ja melde ich mich

wenn der larry sagt, dass das nicht geht, dann ist das so gut wie gesetz ... ich würd mich gern vom gegenteil belehren lassen und wünsche dir viel spaß bei der suche :ROFLMAO:
 
So ein Datenbaustein ist eigentlich nichts anderes als ein Haufen von Bytes. Nehmen wir mal an wir haben am Anfang ein DW, das sind 4 Bytes die nur in dieser Kombination einen Sinn ergeben, mit dem Wert D#16#12345678.
Wenn ich jetzt nach dem Wert B#16#56 suche dann finde ich den im 3. Byte dieses Doppelworts, aber was soll ich damit? Es gibt keine Möglichkeit rauszufinden zu welchem Datentyp eine bestimmte Speicherzelle gehört.
 
Zurück
Oben