-> Hier kostenlos registrieren
Servus,
Dieser FC ist mit Euer Hilfe entstanden.
www.sps-forum.de
Macht seit fast 3 Jahren sein Job und braucht jetzt eine Erweiterung, die mich überfordert.
Der UDT wurde erweitert und es sind 0..127 Array of UDT Aufrufe im DB. Der UDt ist 204 Byte groß.
Die Erweiterung, die ich bräuchte, sieht wie folgt aus.
Die alte Suche bleibt die gleiche, der Ausgang soll auch weiterhin gesetzt werden.
Hinzukommen soll:
Wird etwas gefunden, dann soll der UDT in dem Array wo es gefunden wurde in einen anderen DB kopiert werden.
So ähnlich habe ich schon mal in einem anderen FC etwas kopiert.
Es soll aber einfacher gehen. Aber ich weiß nicht ob ich das hierfür überhaupt nutzen kann.
Was ich aber überhaupt nicht weiß und deswegen frage ich Euch, ist wie ich die Startadresse von dem Array der Fundstelle herausfinde.
Ich vermute mit dem Schleifenzähler von der Suche?? Der Suchbereich befindet sich immer in den ersten 36 Byte von einem Array.
0 bis 35
204 bis 239
usw...
Im Anhang ist ein Bild mit dem Aufbau vom UDT und ein paar Erklärungen.
Dann noch eine Frage kann man eine DB Nr. als Inputvariable anlegen?
Ich würde gerne anstatt "X_DB2390_NIOTeile".Teil.PraegeCode[1] besser DB_Nr.Teil.PraegeCode[1] schreiben, damit ich diesen FC öfters aufrufen kann.
Wer von Euch wäre so nett und hilft mir bei meinem Dilemma.
Viel Dank
Grüße Tommylik
Dieser FC ist mit Euer Hilfe entstanden.
Step 7 - 16 Chars von Kamera mit DB vergleichen
Hallo, Ein Roboter liest über eine Siemens Kamera vom BT den Prägecode ein. Er wird so im DB gespeichert. Es ist ein Array[1..16] of Char Mein allererstes Problem ist, dass ich die Input-Variable nicht an parametriert bekomme. FUNCTION X_FC2395_Code_suchen : VOID TITLE = 'Suche' // //...
Macht seit fast 3 Jahren sein Job und braucht jetzt eine Erweiterung, die mich überfordert.
Code:
FUNCTION X_FC2395_Code_suchen : VOID
TITLE = 'Suche'
//
// Baustein-Kommentar ...
//
VERSION : '1.0'
AUTHOR : author
NAME : name
FAMILY : family
// Bausteinparameter
VAR_INPUT
Start_suchen : BOOL; // Trigger Signal
PrCode : ARRAY[1..12] OF CHAR; // 8 Byte werden nur genutzt
END_VAR
VAR_IN_OUT
// Durchgangsparameter
END_VAR
VAR_OUTPUT
// Ausgangsparameter
PrCode_gefunden : BOOL; // niO Prägecode im Datenbaustein gefunden BT wird ausgeschleust
Done : BOOL; // DB durchsucht und kein Prägecode gefunden
END_VAR
VAR_TEMP
// temporäre Variablen
i : INT;
END_VAR
BEGIN
PrCode_gefunden := FALSE;
IF Start_suchen THEN
FOR i := 1 TO 127 DO
IF "X_DB2390_NIOTeile".Teil[i].PraegeCode[1] = PrCode[1]
AND "X_DB2390_NIOTeile".Teil[i].PraegeCode[2] = PrCode[2]
AND "X_DB2390_NIOTeile".Teil[i].PraegeCode[3] = PrCode[3]
AND "X_DB2390_NIOTeile".Teil[i].PraegeCode[4] = PrCode[4]
AND "X_DB2390_NIOTeile".Teil[i].PraegeCode[5] = PrCode[5]
AND "X_DB2390_NIOTeile".Teil[i].PraegeCode[6] = PrCode[6]
AND "X_DB2390_NIOTeile".Teil[i].PraegeCode[7] = PrCode[7]
AND "X_DB2390_NIOTeile".Teil[i].PraegeCode[8] = PrCode[8] THEN
PrCode_gefunden := True;
EXIT;
END_IF;
END_FOR;
Done := NOT PrCode_gefunden;
END_IF;
END_FUNCTION
Der UDT wurde erweitert und es sind 0..127 Array of UDT Aufrufe im DB. Der UDt ist 204 Byte groß.
Die Erweiterung, die ich bräuchte, sieht wie folgt aus.
Die alte Suche bleibt die gleiche, der Ausgang soll auch weiterhin gesetzt werden.
Hinzukommen soll:
Wird etwas gefunden, dann soll der UDT in dem Array wo es gefunden wurde in einen anderen DB kopiert werden.
So ähnlich habe ich schon mal in einem anderen FC etwas kopiert.
Es soll aber einfacher gehen. Aber ich weiß nicht ob ich das hierfür überhaupt nutzen kann.
Code:
IF Bedingung AND NOT Bedingung THEN
ret_val_SFC20 := BLKMOV(SRCBLK := QuellDB, DSTBLK := ZielDB); //kopieren
END_IF;
Was ich aber überhaupt nicht weiß und deswegen frage ich Euch, ist wie ich die Startadresse von dem Array der Fundstelle herausfinde.
Ich vermute mit dem Schleifenzähler von der Suche?? Der Suchbereich befindet sich immer in den ersten 36 Byte von einem Array.
0 bis 35
204 bis 239
usw...
Im Anhang ist ein Bild mit dem Aufbau vom UDT und ein paar Erklärungen.
Dann noch eine Frage kann man eine DB Nr. als Inputvariable anlegen?
Ich würde gerne anstatt "X_DB2390_NIOTeile".Teil.PraegeCode[1] besser DB_Nr.Teil.PraegeCode[1] schreiben, damit ich diesen FC öfters aufrufen kann.
Wer von Euch wäre so nett und hilft mir bei meinem Dilemma.
Viel Dank
Grüße Tommylik