Konkurrierende Zugriffe

m.hoeft

Level-2
Beiträge
17
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

in CodeSys 2.3 gibt es den Menüpunkt Projekt überprüfen/Konkurrierender Zugriff. Ich erhalte dann z. B. diese Ausgabe:

%QD500..%QW1027 wird in folgenden Tasks referenziert:
Tontraktur - LOOP_KEYBOARD.SEND_TO_MIDI (5): lMODBUS_MIDI_OUT AT %QW1000 [Schreib-Zugriff]
Registertraktur - LOOP_KEYBOARD.SEND_TO_MIDI (5): lMODBUS_MIDI_OUT AT %QW1000 [Schreib-Zugriff]
Reader - LOOP_KEYBOARD.SEND_TO_MIDI (5): lMODBUS_MIDI_OUT AT %QW1000 [Schreib-Zugriff]
Event - LOOP_KEYBOARD.SEND_TO_MIDI (5): lMODBUS_MIDI_OUT AT %QW1000 [Schreib-Zugriff]

Diese Warnung wird normalerweise angezeigt, wenn ich sowas mache wie:

Code:
IF a THEN
    %QW1000 := ...;
ELSE
    %QW1000 := ...;
END_IF
Schreibe ich:

Code:
IF a THEN
    x := ...;
ELSE
    x := ...;
END_IF
%QW1000 := x;

verschwindet die Warnung. Also achte ich darauf, dass Adressen wirklich nur an einer Stelle im Programm gelesen bzw. beschrieben werden. Trotzdem erscheinen für manche Adressen immer noch die Warnungen. Was muss ich machen, damit der Compiler sich nicht mehr beschwert?

Vielen Dank für die Antworten im Voraus!

Viele Grüße Michael
 
Zuletzt bearbeitet:
Hallöchen,

also ich habe hier gerade ein etwas größeres Programm mit haufenweise gleichartiger IF Abfragen wie deiner und ich bekomme keine Fehlermeldungen/Warnungen beim Überprüfen auf Konkurierende Zugriffe.
#
Aber das hört sich doch so an, als würdest du die gleichen Variablen (QW1000) in 4 verschiedenen Tasks beschreiben.
Also sollten diese 4 Tasks nicht ereingnisgesteuert sein, sodass immer nur einer der 4 Tasks aktiv ist, dann würden diese ja um das Beschreiben der Variable kämpfen.
Sowas würde sich dann je nach Zustand der Variable in den einzelnen Tasks als "Flackern" der Variablen zeigen.


Sollte aber eigentlich nichts mit der IF-Anweisung zu tun haben....

Kann es leider nicht reproduzieren :/

Gruß,
Flo
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Flo,

vielen Dank für Deine schnelle Antwort. Mein Codebeispiel ist vielleicht nicht besonders gut, prinzipiell gilt aber das Adressen nur an einer Stelle und von einer Task beschrieben werden dürfen. In dem aktuellen Projekt wird die Variable lMODBUS_MIDI_OUT definitiv nur in einer Task benutzt und auch nur an einer Stelle beschrieben, nämlich in der Task "Tontraktur", Baustein "LOOP_KEYBOARD", Aktion "SEND_TO_MIDI". Für die anderen Tasks wird derselbe Baustein genannt, der tatsächlich nur in der ersten Task aufgerufen wird. Also eigentlich kann nichts schiefgehen oder habe ich da etwas übersehen?

Gruß Michael
 
Zurück
Oben