Autor Thema: Easysoft 7.30 / Projekt / Merkerbereichsbelegung > Schreibkonflikt  (Gelesen 2621 mal)

Offline Juergen__R

  • Full Member
  • ***
  • Beiträge: 255
  • I love easy-Forum.net
Easysoft 7.30 / Projekt / Merkerbereichsbelegung > Schreibkonflikt
« am: Juni 26, 2021, 13:28:50 Nachmittag »
Was besagt die Anzeige Schreibkonflikt (rot)?
Hierzu gibt es keine Hilfetexte.

Schöne Grüße, Jürgen

Offline CiesleRa

  • Global Moderator
  • Full Member
  • *****
  • Beiträge: 315
  • easyE4 for President
Antw:Easysoft 7.30 / Projekt / Merkerbereichsbelegung > Schreibkonflikt
« Antwort #1 am: Juni 26, 2021, 14:06:06 Nachmittag »
Hallo Jürgen,

wenn man im Programm z.B. den Merker M5 setzt und irgendwo im Programm einen Wert auf das MB1 schreibt, gäbe es einen Schreibkonflikt, da M5 Teil von MB1 ist.
Es hilft bei der Programmierung Fehler zu finden.

Gruß Ralf
Alle von mir bereitgestellten Programme sind reine Beispielprojekte. Die Verwendung erfolgt auf eigene Gefahr. Jegliche Haftung ist ausgeschlossen.

Offline Juergen__R

  • Full Member
  • ***
  • Beiträge: 255
  • I love easy-Forum.net
Antw:Easysoft 7.30 / Projekt / Merkerbereichsbelegung > Schreibkonflikt
« Antwort #2 am: Juni 26, 2021, 17:02:52 Nachmittag »
Hallo Ralf,

danke für die schnelle Info!

Schöne Grüße aus Martfeld, dicht am Mittelpunkt Niedersachsen´s,

Jürgen

Offline ssyn

  • Jr. Member
  • **
  • Beiträge: 44
Antw:Easysoft 7.30 / Projekt / Merkerbereichsbelegung > Schreibkonflikt
« Antwort #3 am: Oktober 11, 2023, 13:19:50 Nachmittag »
Kann jemand mir bitte erklären die Frage mit Schreibkonflikt

Ein Musterprogramm, nur für Darstellung

IF M7 THEN
M2 := TRUE;
END_IF;
If NOT M7 THEN
M2 := FALSE;
END_IF;


Ganz einfach. Wenn ich gucke  jetzt in Merkerbereichsbelegung, dann sehe ich M2 in Rot (Schreibkonflikt). Obwohl man kann ganz genau sehen, dass M2 wird nicht zweimal geschrieben, sondern nur einmal. 

Ich probiere schon mehrmals, aber Ergebnis ist gleich - wenn Merker wird in Programme zweimal oder mehr geschrieben - dann wird unbedingt in Merkerbereichsbelegung Schreibkonflikt gezeigt werden. Obwohl es ist nicht Fehler unbedingt, in Programme kann man in einem Zyklus 2-3 oder mehr in einem Merker schreiben ohne Problem.

Jetzt aber fand ich ein alter Projekt, wo wird ein Merker zweimal geschrieben und gelesen, aber in Merkerbereichsbelegung wird es als gelb (Lesen / Schreiben), aber nicht als rot (Schreibkonflikt) gezeigt. Da gibt es kein JMP oder EXIT, jede Netzwerk wird bearbeitet werden.

Und ich verstehe nicht, wie könnte es sein, kann jemand mir bitte erklären?

Wie kann man Merker zwei oder mehr Mals schreiben und dabei kein Schreibkonflikt in Merkerbereichsbelegung bekommen?





 

Offline weiss_nix

  • Sr. Member
  • ****
  • Beiträge: 594
  • it has to be easy, it's a easy!
Antw:Easysoft 7.30 / Projekt / Merkerbereichsbelegung > Schreibkonflikt
« Antwort #4 am: Oktober 11, 2023, 17:31:14 Nachmittag »
Da die Auswertung nicht die Logik sondern nur die Tatsache der der mehrfachen Zuweisung prüft, ist die Meldung korrekt.

Aber schreib doch einfach:
M2 := M7;Ist auch kürzer ;)
Sollte ich (gefährliches) Halbwissen verbreiten, beuge ich demütig mein Haupt mit der Gewissheit versagt zu haben!
WICHTIG: Sämtliche Programme dienen lediglich der Veranschaulichung von Funktionen und sind nicht für den Produktiveinsatz geeignet!

Offline ssyn

  • Jr. Member
  • **
  • Beiträge: 44
Antw:Easysoft 7.30 / Projekt / Merkerbereichsbelegung > Schreibkonflikt
« Antwort #5 am: Oktober 12, 2023, 07:25:26 Vormittag »
Na, es war nur Beispiel mit ST. Und die Frage mit Schreibkonflikt bleibt. Und verstehe gar nicht, wie kann man Merker zweimal benutzen und danach kein Schreibkonflikt in Merkerbereichbelegung bekommen.

Update: Ich denke, ich fand die Ursache. Das hängt von Programmversion.

In EasySoft 7.31 - kommt kein Schreibkonflikt.
In EasySoft 8.0 - kommt Schreibkonflikt.

 
« Letzte Änderung: Oktober 12, 2023, 07:35:04 Vormittag von ssyn »

Offline radar17892

  • Sr. Member
  • ****
  • Beiträge: 709
  • Think easy!
    • mollgruppe
Antw:Easysoft 7.30 / Projekt / Merkerbereichsbelegung > Schreibkonflikt
« Antwort #6 am: Oktober 12, 2023, 19:32:31 Nachmittag »
Hallo ssyn,
der Compiler reagiert meiner Meinung nach richtig.
Denn dein Beispiel enthält zwei separate IF-Anweisungen. Die könnten im Programm auch weit auseinander platziert sein.
Anweisung 1:
IF M7 THEN
M2 := TRUE;
END_IF;

Anweisung 2:
If NOT M7 THEN
M2 := FALSE;
END_IF;

Hier wird der Merker auch mehrfach zugewiesen, aber in einer Anweisung. Deshalb meckert der Compiler nicht.
IF M7 THEN
M2 := TRUE;
ELSE
M2 := FALSE;
END_IF;
Weil Einfach einfach Einfach ist!

Offline ssyn

  • Jr. Member
  • **
  • Beiträge: 44
Antw:Easysoft 7.30 / Projekt / Merkerbereichsbelegung > Schreibkonflikt
« Antwort #7 am: Oktober 13, 2023, 07:01:12 Vormittag »
Ich habe auch danach gedacht und geprüft, auch mit ..IF ...ELSE und auch mit CASE, aber in neue Versionen kommt IMMER Schreibkonflikt (siehe Bild).

Ich denke die einzige richtige Meldung über Schreibkonflikt wäre es, wenn man versucht gleichzeitig in einen Merker schreiben will (z.B. in einem Netzwerk in FUP oder KOP).
Okay, wahrscheinlich es ist gar nicht wichtig, nur zur Information.

« Letzte Änderung: Oktober 13, 2023, 07:02:54 Vormittag von ssyn »

Offline CiesleRa

  • Global Moderator
  • Full Member
  • *****
  • Beiträge: 315
  • easyE4 for President
Antw:Easysoft 7.30 / Projekt / Merkerbereichsbelegung > Schreibkonflikt
« Antwort #8 am: Oktober 13, 2023, 07:38:17 Vormittag »
Hall Sayn,

bei deinem Beispiel in FUP ist die Meldung aus meiner Sicht vollkommen korrekt.
M1 wird nur gesetzt werden, wenn die Bedingung in Netzwerk 2 erfüllt ist.
Was vorher in Netzwerk 1 passiert hat keinen Einfluss. Es gewinnt immer der letzte
Schreibzugriff auf den Merker.

Gruß Ralf
Alle von mir bereitgestellten Programme sind reine Beispielprojekte. Die Verwendung erfolgt auf eigene Gefahr. Jegliche Haftung ist ausgeschlossen.

Offline weiss_nix

  • Sr. Member
  • ****
  • Beiträge: 594
  • it has to be easy, it's a easy!
Antw:Easysoft 7.30 / Projekt / Merkerbereichsbelegung > Schreibkonflikt
« Antwort #9 am: Oktober 13, 2023, 08:07:46 Vormittag »
Hier wird der Merker auch mehrfach zugewiesen, aber in einer Anweisung. Deshalb meckert der Compiler nicht.
IF M7 THEN
M2 := TRUE;
ELSE
M2 := FALSE;
END_IF;

Habe ich in easySoft 8.00 getestet; meckert auch ;)
Sollte ich (gefährliches) Halbwissen verbreiten, beuge ich demütig mein Haupt mit der Gewissheit versagt zu haben!
WICHTIG: Sämtliche Programme dienen lediglich der Veranschaulichung von Funktionen und sind nicht für den Produktiveinsatz geeignet!

Offline ssyn

  • Jr. Member
  • **
  • Beiträge: 44
Antw:Easysoft 7.30 / Projekt / Merkerbereichsbelegung > Schreibkonflikt
« Antwort #10 am: Oktober 13, 2023, 08:23:27 Vormittag »
Was vorher in Netzwerk 1 passiert hat keinen Einfluss. Es gewinnt immer der letzte
Schreibzugriff auf den Merker.

Ja, ich verstehe es ganz gut und stimme vollständig zu. 
Ich mache ähnliche Programm in Codesys und habe keine Fehler bekommen (Bild in Beilage).

Meine Meinung war, dass Schreibkonflikt in Merkerbereichsbelegung in neue EasySoft Versionen falsch reagiert. Drauf möchte ich beweisen und nichts mehr.

Offline weiss_nix

  • Sr. Member
  • ****
  • Beiträge: 594
  • it has to be easy, it's a easy!
Antw:Easysoft 7.30 / Projekt / Merkerbereichsbelegung > Schreibkonflikt
« Antwort #11 am: Oktober 13, 2023, 08:41:10 Vormittag »
... aus meiner bescheiden Sicht sollte jedes mehrfach schreiben auf Ausgänge/Merker aufgezeigt werden, egal ob direkt oder über Funktionen da der Compiler (sofern einer dahintersteckt?!?) den tieferen Sinn des Programmes nicht auswerten kann. Stichwort: Bitmanipulation

Eventuell sollte die Meldung nur auf eine "Mehrfachzuweisung" hinweisen und nicht unbedingt "Konflikt" benannt werden ...
Sollte ich (gefährliches) Halbwissen verbreiten, beuge ich demütig mein Haupt mit der Gewissheit versagt zu haben!
WICHTIG: Sämtliche Programme dienen lediglich der Veranschaulichung von Funktionen und sind nicht für den Produktiveinsatz geeignet!