Gelegenheitsnutzer
Level-1
- Beiträge
- 3
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo liebe Nutzergemeinde.
Ich habe da ein Problem. Ich habe mit WIN CC flex eine Rezepturverwaltung erstellt. Allerdings habe ich 40 diverse Materialien. Bei einem Rezept werden immer max. 7 benötigt. Jetzt wollte ich in SCL einfach ein Abfrage Programmieren indem ich die Menge > 0 Abfrage und dannach den dazugehörigen STRING [20] per BLOCKMOVE übersende.
Wenn ich die OUTPUT Variable direkt angebe, funktioniert auch alles super. Nur habe ich leider 7 Behälter die ich beschreiben muss. Daher wollte ich eine Schleife nehmen, die ich 7 mal durchlaufe und mit einem array[7] den Index einer Varibale beschreibe. Diese übergege ich dann in den OUTPUT. Leider klappt es nicht über die Variable. Habt ihr vielleicht eine Idee woran es liegen könnte?
Es ist eine große Zuordnung, aber ich habe immoment keine andere Idee außer diese. Oder muss ich einen FB nehmen, der speichter ja die Zwischenwerte. Allerdings ist dabei das Problem das der Pointer die String variablen nicht übergibt.
Ich bin echt um jeden Ratschlag dankbar
FUNCTION FC51 :VOID
VAR_INPUT
Mat_Na1: STRING[22];
Mat_Na2: STRING[22];
Mat_Na3: STRING[22];
Mat_Na4: STRING[22];
Mat_Na5: STRING[22];
Mat_Na6: STRING[22];
Mat_Na7: STRING[22];
Mat_Na8: STRING[22];
Mat_Na9: STRING[22];
Mat_Na10: STRING[22];
Mat_Na11: STRING[22];
Mat_Na12: STRING[22];
Mat_Na13: STRING[22];
Mat_Na14: STRING[22];
Mat_Na15: STRING[22];
Mat_Na16: STRING[22];
Mat_Na17: STRING[22];
Mat_Na18: STRING[22];
Mat_Na19: STRING[22];
Mat_Na20: STRING[22];
Mat_Nr1:INT;
Mat_Nr2:INT;
Mat_Nr3:INT;
Mat_Nr4:INT;
Mat_Nr5:INT;
Mat_Nr6:INT;
Mat_Nr7:INT;
Mat_Nr8:INT;
Mat_Nr9:INT;
Mat_Nr10:INT;
Mat_Nr11:INT;
Mat_Nr12:INT;
Mat_Nr13:INT;
Mat_Nr14:INT;
Mat_Nr15:INT;
Mat_Nr16:INT;
Mat_Nr17:INT;
Mat_Nr18:INT;
Mat_Nr19:INT;
Mat_Nr20:INT;
END_VAR
VAR_OUTPUT
Mat_Na_Behaelter1:STRING[22];
Mat_Na_Behaelter2:STRING[22];
Mat_Na_Behaelter3:STRING[22];
Mat_Na_Behaelter4:STRING[22];
Mat_Na_Behaelter5:STRING[22];
Mat_Na_Behaelter6:STRING[22];
Mat_Na_Behaelter7:STRING[22];
END_VAR
VAR
Mat_Na_Be:ARRAY[1..7] OF STRING[22];
Mat_Na_Be8:STRING[22];
Mat_Nummer1:INT;
Mat_Nummer2:INT;
Mat_Nummer3:INT;
Mat_Nummer4:INT;
Mat_Nummer5:INT;
Mat_Nummer6:INT;
Mat_Nummer7:INT;
Mat_Nummer8:INT;
Mat_Nummer9:INT;
Mat_Nummer10:INT;
Mat_Nummer11:INT;
Mat_Nummer12:INT;
Mat_Nummer13:INT;
Mat_Nummer14:INT;
Mat_Nummer15:INT;
Mat_Nummer16:INT;
Mat_Nummer17:INT;
Mat_Nummer18:INT;
Mat_Nummer19:INT;
Mat_Nummer20:INT;
zaehler:INT;
iSFCError:INT;
test:INT;
END_VAR
//Zuweisung Eingänge
Mat_Nummer1:=Mat_Nr1;
Mat_Nummer2:=Mat_Nr2;
Mat_Nummer3:=Mat_Nr3;
Mat_Nummer4:=Mat_Nr4;
Mat_Nummer5:=Mat_Nr5;
Mat_Nummer6:=Mat_Nr6;
Mat_Nummer7:=Mat_Nr7;
Mat_Nummer8:=Mat_Nr8;
Mat_Nummer9:=Mat_Nr9;
Mat_Nummer10:=Mat_Nr10;
Mat_Nummer11:=Mat_Nr11;
Mat_Nummer12:=Mat_Nr12;
Mat_Nummer13:=Mat_Nr13;
Mat_Nummer14:=Mat_Nr14;
Mat_Nummer15:=Mat_Nr15;
Mat_Nummer16:=Mat_Nr16;
Mat_Nummer17:=Mat_Nr17;
Mat_Nummer18:=Mat_Nr18;
Mat_Nummer19:=Mat_Nr19;
Mat_Nummer20:=Mat_Nr20;
test:=zaehler;
FOR zaehler := 1 TO 7 BY 1 DO
IF Mat_Nummer1 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na1,DSTBLK:=Mat_Na_Behaelter1);
Mat_Nummer1:=0;
ELSIF Mat_Nummer2 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na2,DSTBLK:=Mat_Na_Be[zaehler];
Mat_Nummer2:=0;
ELSIF Mat_Nummer3 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na3,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer3:=0;
ELSIF Mat_Nummer4 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na4,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer4:=0;
ELSIF Mat_Nummer5 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na5,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer5:=0;
ELSIF Mat_Nummer6 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na6,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer6:=0;
ELSIF Mat_Nummer7 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na7,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer7:=0;
ELSIF Mat_Nummer8 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na8,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer8:=0;
ELSIF Mat_Nummer9 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na9,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer9:=0;
ELSIF Mat_Nummer10 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na10,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer10:=0;
ELSIF Mat_Nummer11 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na11,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer11:=0;
ELSIF Mat_Nummer12 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na12,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer12:=0;
ELSIF Mat_Nummer13 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na13,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer13:=0;
ELSIF Mat_Nummer14 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na14,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer14:=0;
ELSIF Mat_Nummer15 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na15,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer15:=0;
ELSIF Mat_Nummer15 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na15,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer15:=0;
ELSIF Mat_Nummer16 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na16,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer16:=0;
ELSIF Mat_Nummer17 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na17,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer17:=0;
ELSIF Mat_Nummer18 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na18,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer18:=0;
ELSIF Mat_Nummer19 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na19,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer19:=0;
ELSIF Mat_Nummer20 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na20,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer20:=0;
END_IF;
Mat_Na_Behaelter1:=Mat_Na_Be8;
Mat_Na_Behaelter2:=Mat_Na_Be[2];
Mat_Na_Behaelter3:=Mat_Na_Be[3];
Mat_Na_Behaelter4:=Mat_Na_Be[4];
Mat_Na_Behaelter5:=Mat_Na_Be[5];
Mat_Na_Behaelter6:=Mat_Na_Be[6];
Mat_Na_Behaelter7:=Mat_Na_Be[7];
test:=zaehler;
END_FOR;
Ich habe da ein Problem. Ich habe mit WIN CC flex eine Rezepturverwaltung erstellt. Allerdings habe ich 40 diverse Materialien. Bei einem Rezept werden immer max. 7 benötigt. Jetzt wollte ich in SCL einfach ein Abfrage Programmieren indem ich die Menge > 0 Abfrage und dannach den dazugehörigen STRING [20] per BLOCKMOVE übersende.
Wenn ich die OUTPUT Variable direkt angebe, funktioniert auch alles super. Nur habe ich leider 7 Behälter die ich beschreiben muss. Daher wollte ich eine Schleife nehmen, die ich 7 mal durchlaufe und mit einem array[7] den Index einer Varibale beschreibe. Diese übergege ich dann in den OUTPUT. Leider klappt es nicht über die Variable. Habt ihr vielleicht eine Idee woran es liegen könnte?
Es ist eine große Zuordnung, aber ich habe immoment keine andere Idee außer diese. Oder muss ich einen FB nehmen, der speichter ja die Zwischenwerte. Allerdings ist dabei das Problem das der Pointer die String variablen nicht übergibt.
Ich bin echt um jeden Ratschlag dankbar
FUNCTION FC51 :VOID
VAR_INPUT
Mat_Na1: STRING[22];
Mat_Na2: STRING[22];
Mat_Na3: STRING[22];
Mat_Na4: STRING[22];
Mat_Na5: STRING[22];
Mat_Na6: STRING[22];
Mat_Na7: STRING[22];
Mat_Na8: STRING[22];
Mat_Na9: STRING[22];
Mat_Na10: STRING[22];
Mat_Na11: STRING[22];
Mat_Na12: STRING[22];
Mat_Na13: STRING[22];
Mat_Na14: STRING[22];
Mat_Na15: STRING[22];
Mat_Na16: STRING[22];
Mat_Na17: STRING[22];
Mat_Na18: STRING[22];
Mat_Na19: STRING[22];
Mat_Na20: STRING[22];
Mat_Nr1:INT;
Mat_Nr2:INT;
Mat_Nr3:INT;
Mat_Nr4:INT;
Mat_Nr5:INT;
Mat_Nr6:INT;
Mat_Nr7:INT;
Mat_Nr8:INT;
Mat_Nr9:INT;
Mat_Nr10:INT;
Mat_Nr11:INT;
Mat_Nr12:INT;
Mat_Nr13:INT;
Mat_Nr14:INT;
Mat_Nr15:INT;
Mat_Nr16:INT;
Mat_Nr17:INT;
Mat_Nr18:INT;
Mat_Nr19:INT;
Mat_Nr20:INT;
END_VAR
VAR_OUTPUT
Mat_Na_Behaelter1:STRING[22];
Mat_Na_Behaelter2:STRING[22];
Mat_Na_Behaelter3:STRING[22];
Mat_Na_Behaelter4:STRING[22];
Mat_Na_Behaelter5:STRING[22];
Mat_Na_Behaelter6:STRING[22];
Mat_Na_Behaelter7:STRING[22];
END_VAR
VAR
Mat_Na_Be:ARRAY[1..7] OF STRING[22];
Mat_Na_Be8:STRING[22];
Mat_Nummer1:INT;
Mat_Nummer2:INT;
Mat_Nummer3:INT;
Mat_Nummer4:INT;
Mat_Nummer5:INT;
Mat_Nummer6:INT;
Mat_Nummer7:INT;
Mat_Nummer8:INT;
Mat_Nummer9:INT;
Mat_Nummer10:INT;
Mat_Nummer11:INT;
Mat_Nummer12:INT;
Mat_Nummer13:INT;
Mat_Nummer14:INT;
Mat_Nummer15:INT;
Mat_Nummer16:INT;
Mat_Nummer17:INT;
Mat_Nummer18:INT;
Mat_Nummer19:INT;
Mat_Nummer20:INT;
zaehler:INT;
iSFCError:INT;
test:INT;
END_VAR
//Zuweisung Eingänge
Mat_Nummer1:=Mat_Nr1;
Mat_Nummer2:=Mat_Nr2;
Mat_Nummer3:=Mat_Nr3;
Mat_Nummer4:=Mat_Nr4;
Mat_Nummer5:=Mat_Nr5;
Mat_Nummer6:=Mat_Nr6;
Mat_Nummer7:=Mat_Nr7;
Mat_Nummer8:=Mat_Nr8;
Mat_Nummer9:=Mat_Nr9;
Mat_Nummer10:=Mat_Nr10;
Mat_Nummer11:=Mat_Nr11;
Mat_Nummer12:=Mat_Nr12;
Mat_Nummer13:=Mat_Nr13;
Mat_Nummer14:=Mat_Nr14;
Mat_Nummer15:=Mat_Nr15;
Mat_Nummer16:=Mat_Nr16;
Mat_Nummer17:=Mat_Nr17;
Mat_Nummer18:=Mat_Nr18;
Mat_Nummer19:=Mat_Nr19;
Mat_Nummer20:=Mat_Nr20;
test:=zaehler;
FOR zaehler := 1 TO 7 BY 1 DO
IF Mat_Nummer1 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na1,DSTBLK:=Mat_Na_Behaelter1);
Mat_Nummer1:=0;
ELSIF Mat_Nummer2 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na2,DSTBLK:=Mat_Na_Be[zaehler];
Mat_Nummer2:=0;
ELSIF Mat_Nummer3 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na3,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer3:=0;
ELSIF Mat_Nummer4 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na4,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer4:=0;
ELSIF Mat_Nummer5 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na5,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer5:=0;
ELSIF Mat_Nummer6 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na6,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer6:=0;
ELSIF Mat_Nummer7 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na7,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer7:=0;
ELSIF Mat_Nummer8 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na8,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer8:=0;
ELSIF Mat_Nummer9 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na9,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer9:=0;
ELSIF Mat_Nummer10 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na10,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer10:=0;
ELSIF Mat_Nummer11 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na11,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer11:=0;
ELSIF Mat_Nummer12 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na12,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer12:=0;
ELSIF Mat_Nummer13 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na13,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer13:=0;
ELSIF Mat_Nummer14 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na14,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer14:=0;
ELSIF Mat_Nummer15 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na15,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer15:=0;
ELSIF Mat_Nummer15 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na15,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer15:=0;
ELSIF Mat_Nummer16 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na16,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer16:=0;
ELSIF Mat_Nummer17 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na17,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer17:=0;
ELSIF Mat_Nummer18 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na18,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer18:=0;
ELSIF Mat_Nummer19 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na19,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer19:=0;
ELSIF Mat_Nummer20 > 0 THEN
iSFCError:=SFC20(SRCBLK:=Mat_Na20,DSTBLK:=Mat_Na_Be[zaehler]);
Mat_Nummer20:=0;
END_IF;
Mat_Na_Behaelter1:=Mat_Na_Be8;
Mat_Na_Behaelter2:=Mat_Na_Be[2];
Mat_Na_Behaelter3:=Mat_Na_Be[3];
Mat_Na_Behaelter4:=Mat_Na_Be[4];
Mat_Na_Behaelter5:=Mat_Na_Be[5];
Mat_Na_Behaelter6:=Mat_Na_Be[6];
Mat_Na_Behaelter7:=Mat_Na_Be[7];
test:=zaehler;
END_FOR;