Werte in einem DB suchen und vergleichen

Kann ich den den FC einfach umbenennen?

Zotos hat mir ja freundlicherweise das kompl. Projekt zugeschickt..Hab keine SCL compiler...

Denke nur umbenennen geht nicht oder?
 
HW-Konfig durchgeführt und übertragen...

gleiches Fehlerbild..

ist meine Standard Test-SPS....immer gleich HW-Konfig..
Habe nur die Bausteine von Zotos reinkopiert...vorher auch Urgelöscht...

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe den Aufruf erneuert...

aber bei mytraget
und RET_VAL
gibts jetzt ne Fehlermeldung...

CALL "myFC"
myTarget :=P#DB220.DBX4600.0 BYTE 22
RET_VAL :=P#DB220.DBX4622.0 BYTE 46
ElementNumber:=MW220
NOP 0

Zur SPS
Habe schon ne neue 314C muß dies aber alles vorher Testen.
Maschine muss laufen..

Gruß
 
Im Anhang ist die geänderte Version.

Du hast auch geschrieben das Du mit dem DB und der VAT auch nicht klar kommst. Woran scheitert es den dort?

Ich habe in der geänderten Version mal die Anzahl der Arrayelemente auf 20 reduziert [0..19].
 

Anhänge

  • StringDB.zip
    39,6 KB · Aufrufe: 10
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,


also ich weiss auch nicht..

Komme irgendwie nicht klar..
War jetzt in der VAR...habe auch die vorgegebenen Werte "gesteuert" komme aber einfach nicht auf denTrichter wie es funktionieren soll...

Wo muß ich den Suchbegriff eingeben..??...Steh auf dem Schlauch..


???
Gruß
 
Sorry...

falls es jemand auf den Senkel geht...
Komm halt leider nicht weiter....

Muss ich den DB noch vorbelegen...denn der ist ja leer...
Welche Variable muss ich "füttern" damit ich nen RETVAL bekomme...
 
Welche Version nutzt Du denn? Damit wir vom gleichen schreiben.

Die VAT ist so aufgebaut das ganz ober der Suchbegriff eingegeben wird (das soll das "//gesuchte Produkt ID" anzeigen).

Dann Kommt das Ergebnis ("Result") Elementnummer (alte Version MW220 und im neuen MW20) und der Inhalt des gefundenen Elements.

Und am Schluss der VAT ist ein Ausschnitt aus dem Array ab dem Eintrag "//Ausschnitt aus dem Array".

Array beschreiben, Suchbegriff eingeben und Ergebnis anschauen.
 
Also,

ich verstehe es so...
In der Var steht von DB20.DBB922-941 die 20 Zeichen des Stings die gesucht werden!

Soweit o.k.

Aber warum steht am Anfang auf Speicherstelle DBB920/921 ein Dez-Wert und Steuerwerte A-Z?

Seh den Zusammenhang noch nicht...

Ich hoffe ich bin nicht zu dumm hierfür....


Gruß
 
Also,

ich verstehe es so...
In der Var steht von DB20.DBB922-941 die 20 Zeichen des Stings die gesucht werden!

Soweit o.k.

Aber warum steht am Anfang auf Speicherstelle DBB920/921 ein Dez-Wert und Steuerwerte A-Z?

Seh den Zusammenhang noch nicht...

Ich hoffe ich bin nicht zu dumm hierfür....


Gruß

Ein String in der S7 ist wie folgt aufgebaut.

1. Byte: Maximale Länge des Strings (hier 20)
2. Byte: Aktuelle Länge des Strings (z.B. 4)
3. bis 22. Byte: Daten

Wenn in Byte 2 eine 4 steht werden nur die bytes 3 bis einschließlich 6 verwendet.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
o.k.

Nun aber wie bekomme ich Daten in den DB...Kenne es mit Deklarationsansicht... Geht hier aber nicht wegen dem UDT..

Und wenn ich es testen möchte..Wie geh ich dann vor...

Und noch zum Schluß...Ich kann dies aber nachher auch den Db für bis zu 400 Produkt-IDs erweitern sofern es die CPU kann oder dann wieder ein größerer Aufwand...

Gruß Kodan... Bin halt in solchen Sachen Anfänger....
 
Wenn Du SCL hättest wäre die erweiterung auf 400 Einträge ein klax solange die CPU mit dem Monster DB klar käme (was ich aber bezweifele).

Zum DB das geht bei mir eigentlich Super einfach Quelle des DBs generieren und Aktualwerte eintragen:

Code:
DATA_BLOCK "myDB"
TITLE =
VERSION : 0.0


  STRUCT     
   myArray : ARRAY  [0 .. 19 ] OF "myUDT";    
   Target : STRING  [20 ];    
   Result : "myUDT";    
  END_STRUCT ;    
BEGIN
   myArray[0].ID := 'P001'; 
   myArray[0].P_NAME := 'Fritz'; 
   myArray[0].VALUE := 1; 
   myArray[1].ID := 'P002'; 
   myArray[1].P_NAME := 'Hans'; 
   myArray[1].VALUE := 2; 
   myArray[2].ID := 'P003'; 
   myArray[2].P_NAME := 'Klaus'; 
   myArray[2].VALUE := 3; 
   myArray[3].ID := ''; 
   myArray[3].P_NAME := ''; 
   myArray[3].VALUE := 0; 
   myArray[4].ID := ''; 
   myArray[4].P_NAME := ''; 
   myArray[4].VALUE := 0; 
   myArray[5].ID := ''; 
   myArray[5].P_NAME := ''; 
   myArray[5].VALUE := 0; 
   myArray[6].ID := ''; 
   myArray[6].P_NAME := ''; 
   myArray[6].VALUE := 0; 
   myArray[7].ID := ''; 
   myArray[7].P_NAME := ''; 
   myArray[7].VALUE := 0; 
   myArray[8].ID := ''; 
   myArray[8].P_NAME := ''; 
   myArray[8].VALUE := 0; 
   myArray[9].ID := ''; 
   myArray[9].P_NAME := ''; 
   myArray[9].VALUE := 0; 
   myArray[10].ID := ''; 
   myArray[10].P_NAME := ''; 
   myArray[10].VALUE := 0; 
   myArray[11].ID := ''; 
   myArray[11].P_NAME := ''; 
   myArray[11].VALUE := 0; 
   myArray[12].ID := ''; 
   myArray[12].P_NAME := ''; 
   myArray[12].VALUE := 0; 
   myArray[13].ID := ''; 
   myArray[13].P_NAME := ''; 
   myArray[13].VALUE := 0; 
   myArray[14].ID := ''; 
   myArray[14].P_NAME := ''; 
   myArray[14].VALUE := 0; 
   myArray[15].ID := ''; 
   myArray[15].P_NAME := ''; 
   myArray[15].VALUE := 0; 
   myArray[16].ID := ''; 
   myArray[16].P_NAME := ''; 
   myArray[16].VALUE := 0; 
   myArray[17].ID := ''; 
   myArray[17].P_NAME := ''; 
   myArray[17].VALUE := 0; 
   myArray[18].ID := ''; 
   myArray[18].P_NAME := ''; 
   myArray[18].VALUE := 0; 
   myArray[19].ID := ''; 
   myArray[19].P_NAME := ''; 
   myArray[19].VALUE := 0; 
   Target := ''; 
   Result.ID := ''; 
   Result.P_NAME := ''; 
   Result.VALUE := 0; 
END_DATA_BLOCK
 
Zuletzt bearbeitet:
Hallo Zotos,

also langsam glaub ich das das Problem aus dem Ruder läuft....

Aber ob das mit der Datenflut überhaupt funktioniert so...Bezweifelst du ja selbst... Und es in mehere DB´s aufteilen verringert den Aufwand sicher nicht...

Was rätst du mir?...

Gruß Kodan..



Dachte es ginge Leichter in einem DB einen Datensatz zu lesen....
 
Zuviel Werbung?
-> Hier kostenlos registrieren
nimm doch einen integer als index statt nem string...

verlagert das problem in die visu :D

ich weiß ja nicht, was das OP7 kann, aber vielleicht kommste mit nem integer und textlisten im OP weiter
 
Du hast ja im ersten Post die Vorgaben gemacht.

Also 20 Zeichen für die ID und 20 Zeichen für den Produktnamen so wie ein INT für einen Wert.

Wenn die ID nicht 20 Zeichen lang sein müsste würde das schon was sparen genau so beim Produktnamen. Da bei 400 Datensätzen jedes gesparte Byte in der Struktur gleich 400Bytes im gesamten DB sind.

Wenn sich daran nichts ändern läst könnte man auch drei DBs nehmen und auf die UDT verzichten also einen DB für die ID einen DB für den Produktnamen und einen DB für den wert. Jeweils ein Array mit 400 Elementen.

Wie hast Du Dir das ganze denn so vorgestellt?
 
Zurück
Oben