Hi@all,
ich weiÃ, dass "ANY" ein öfters diskutiertes Thema ist, ich habe aber leider noch keine Antwort für meine Anwendung gefunden:
Im Prinzip möchte ich mit dem FB2000 (SCL) mehrere Eingangsbytes (EB200-EB250) auslesen, welche über Profinet von einem Feldgerät beschrieben werden und diese Daten in den DB2000 (Array) schreiben.
Dazu nutze ich 2x ANY und einen SFC20 und habe diesen wie unten "beschalten".
Meine Annahme ist, dass beim "Zeigen" auf die EB's relativ egal ist, was bei "DBNumber" steht, da es ja nur auf die Eingangsadresse ankommen sollte, sobald ich bei "pAny.MemoryArea" 16#81 nutze und somit nur auf die Eingangsadressen schaue.
Ist das richtig??
Was mich wundert: Mit PLCSIM (EB manuell beschrieben) funktioniert es tadellos, aber sobald ich das gleiche Prg auf die CPU schiebe (keine Fehler) wird nichts in den DB2000 geschrieben, obwohl die Daten in den EB's liegen.
Info: CPU-416-2 DP mit CP443-1 Adv, alle Firmware auf dem neusten Stand
Software: Step7 Prof. 2010 V5.5 / SP4 / HF11
hier ein kurzer Programmausschnitt (als txt etwas mehr):
("EB_Tele_lenght" ist als Input (INT) deklariert und wird von auÃen mit 50 beschrieben)
//ANY pointer IN
pAny.S7Code := 16#10;
pAny.DataType := 16#02;
pAny.Length := EB_Tele_lenght;
pAny.DBNumber := 0; // not used for EB !
pAny.MemoryArea := 16#81; //16#81 -> EB, 16#84 -> DB
pAny.ByteAddressMSB := 0;
pAny.ByteAddressLSB := w#16#12C0; //1624; //EB_addr;
//ANY pointer OUT
pAnyO.S7Code := 16#10;
pAnyO.DataType := 16#02;
pAnyO.Length := EB_Tele_lenght;
pAnyO.DBNumber := 2000; // write in DB2000
pAnyO.MemoryArea := 16#84; //16#81 -> EB, 16#84 -> DB
pAnyO.ByteAddressMSB := 0;
pAnyO.ByteAddressLSB := 8;
// push data from EB'S to DB2000 (Array)
push := BLKMOV(SRCBLK := pEB // IN: ANY
,DSTBLK := pDB // OUT: ANY
); // INT
ein etwas gröÃerer Ausschnitt:
test_PRG.txt (2,1 KB)
ich weiÃ, dass "ANY" ein öfters diskutiertes Thema ist, ich habe aber leider noch keine Antwort für meine Anwendung gefunden:
Im Prinzip möchte ich mit dem FB2000 (SCL) mehrere Eingangsbytes (EB200-EB250) auslesen, welche über Profinet von einem Feldgerät beschrieben werden und diese Daten in den DB2000 (Array) schreiben.
Dazu nutze ich 2x ANY und einen SFC20 und habe diesen wie unten "beschalten".
Meine Annahme ist, dass beim "Zeigen" auf die EB's relativ egal ist, was bei "DBNumber" steht, da es ja nur auf die Eingangsadresse ankommen sollte, sobald ich bei "pAny.MemoryArea" 16#81 nutze und somit nur auf die Eingangsadressen schaue.
Ist das richtig??
Was mich wundert: Mit PLCSIM (EB manuell beschrieben) funktioniert es tadellos, aber sobald ich das gleiche Prg auf die CPU schiebe (keine Fehler) wird nichts in den DB2000 geschrieben, obwohl die Daten in den EB's liegen.
Info: CPU-416-2 DP mit CP443-1 Adv, alle Firmware auf dem neusten Stand
Software: Step7 Prof. 2010 V5.5 / SP4 / HF11
hier ein kurzer Programmausschnitt (als txt etwas mehr):
("EB_Tele_lenght" ist als Input (INT) deklariert und wird von auÃen mit 50 beschrieben)
//ANY pointer IN
pAny.S7Code := 16#10;
pAny.DataType := 16#02;
pAny.Length := EB_Tele_lenght;
pAny.DBNumber := 0; // not used for EB !
pAny.MemoryArea := 16#81; //16#81 -> EB, 16#84 -> DB
pAny.ByteAddressMSB := 0;
pAny.ByteAddressLSB := w#16#12C0; //1624; //EB_addr;
//ANY pointer OUT
pAnyO.S7Code := 16#10;
pAnyO.DataType := 16#02;
pAnyO.Length := EB_Tele_lenght;
pAnyO.DBNumber := 2000; // write in DB2000
pAnyO.MemoryArea := 16#84; //16#81 -> EB, 16#84 -> DB
pAnyO.ByteAddressMSB := 0;
pAnyO.ByteAddressLSB := 8;
// push data from EB'S to DB2000 (Array)
push := BLKMOV(SRCBLK := pEB // IN: ANY
,DSTBLK := pDB // OUT: ANY
); // INT
ein etwas gröÃerer Ausschnitt:
test_PRG.txt (2,1 KB)