rs-plc-aa
Level-1
- Beiträge
- 727
- Reaktionspunkte
- 57
-> Hier kostenlos registrieren
Hallo,
ich habe heute eine Beobachtung gemacht die mich ziemlich ins Grübeln bringt.
Ich habe ein Programm komplett neu strukturiert so daß alle mehr als ein mal benötigten Bausteine mit einer Schnittstelle versehen worden sind - also multiinstanzfähig.
Das was vorher Merkerbits übernahmen ist jetzt alles in DBs gewandert - d.h. jede Instanz hat zusätzlich einen Global-DB in dem alle Bits untergebracht sind und deren Zustände nur für die jeweilige Instanz zur verfügung stehen (sollten).
Ich schreibe deshalb in Klammern "sollten" weil jetzt mein Problem kommt:
(Nummern und Nämen nehme ich jetzt mal frei schnauze...)
Im FB 1 wird an OUT ein Bit #Anforderung gesetzt.
Das Bit #Anforderung wird beim Aufruf des FB 1 dem DB 100.DBX0.0 zugewiesen.
Jetzt wird anschließend FC 10 aufgerufen - diese hat an IN das Bit #Anforderung ebenfalls DB100.DBX0.0 zugewiesen bekommen.
Kurzum - ich möchte im FB 1 bestimmen ob im FC 10 etwas passiert oder nicht...
Jetzt habe ich aber folgendes Phaenomaen (korrekt?) daß im FB 1 das Bit an der Schnittstelle (Beobachtet im OB1) eine 1 führt allerdings wenn ich den DB100 beobachte nicht...
Genausowenig kommt an der FC 10 das Bit mit 1 an sondern immer mit 0
Verdacht 1: Es wird zurückgesetzt bevor FC 10 an der reihe ist -> möglich, aber nicht von mir
Verdacht 2: Wenn nicht von mir dann vielleicht von der CPU ?
Kann es sein daß wenn der selbe Speicherbereich in dem auch das Bit ist an einem anderen Baustein als IN_OUT deklariert ist - z.B. DB100.DBD0 - und wenn der andere Baustein diesen Bereich momentan nicht verwendet hat weil z.B.:
...
... es möglich ist daß - warum auch immer der Bereich gelöscht wird ?
Oder muß hierfür (mehrfach verwendet) dann generell der IN_OUT Bereich für alle Deklarationen gewählt werden ?
Vorher war das so daß im FB 1 der Merker "Anforderung" gesetzt wurde und dieser dann in FC 10 auch immer noch da war - und es wurde teilweise auch das ganze Merker-DW anderweitig verarbeitet - z.B. Initialschritt - das komplette DW löschen = alle Bits gelöscht usw.
Was ist jetzt anders bzw. wo könnte der Hund begraben liegen ?
ich habe heute eine Beobachtung gemacht die mich ziemlich ins Grübeln bringt.
Ich habe ein Programm komplett neu strukturiert so daß alle mehr als ein mal benötigten Bausteine mit einer Schnittstelle versehen worden sind - also multiinstanzfähig.
Das was vorher Merkerbits übernahmen ist jetzt alles in DBs gewandert - d.h. jede Instanz hat zusätzlich einen Global-DB in dem alle Bits untergebracht sind und deren Zustände nur für die jeweilige Instanz zur verfügung stehen (sollten).
Ich schreibe deshalb in Klammern "sollten" weil jetzt mein Problem kommt:
(Nummern und Nämen nehme ich jetzt mal frei schnauze...)
Im FB 1 wird an OUT ein Bit #Anforderung gesetzt.
Das Bit #Anforderung wird beim Aufruf des FB 1 dem DB 100.DBX0.0 zugewiesen.
Jetzt wird anschließend FC 10 aufgerufen - diese hat an IN das Bit #Anforderung ebenfalls DB100.DBX0.0 zugewiesen bekommen.
Kurzum - ich möchte im FB 1 bestimmen ob im FC 10 etwas passiert oder nicht...
Jetzt habe ich aber folgendes Phaenomaen (korrekt?) daß im FB 1 das Bit an der Schnittstelle (Beobachtet im OB1) eine 1 führt allerdings wenn ich den DB100 beobachte nicht...
Genausowenig kommt an der FC 10 das Bit mit 1 an sondern immer mit 0
Verdacht 1: Es wird zurückgesetzt bevor FC 10 an der reihe ist -> möglich, aber nicht von mir
Verdacht 2: Wenn nicht von mir dann vielleicht von der CPU ?
Kann es sein daß wenn der selbe Speicherbereich in dem auch das Bit ist an einem anderen Baustein als IN_OUT deklariert ist - z.B. DB100.DBD0 - und wenn der andere Baustein diesen Bereich momentan nicht verwendet hat weil z.B.:
...
Code:
// Netzwerk 1
UN #Ich_werde_benoetigt
BEB
Oder muß hierfür (mehrfach verwendet) dann generell der IN_OUT Bereich für alle Deklarationen gewählt werden ?
Vorher war das so daß im FB 1 der Merker "Anforderung" gesetzt wurde und dieser dann in FC 10 auch immer noch da war - und es wurde teilweise auch das ganze Merker-DW anderweitig verarbeitet - z.B. Initialschritt - das komplette DW löschen = alle Bits gelöscht usw.
Was ist jetzt anders bzw. wo könnte der Hund begraben liegen ?