Das ganze geht auch nochmal anders wie das hier gerade beschrieben wird. Ohne die DBs auf Absolute Adressierung umzuschreiben usw.
Dazu kannst du folgendermaßen vorgehen:
Erstelle einen DB, z.B. DB10. Dort legst du ein Array[0..9] of Word an, welches du z.B. Stoerungen nennst. Das sind dann 10 Worte, also insgesamt 160 Fehlermeldungen. Wenn du so viele nicht brauchst, kannst du auch weniger nehmen.
Im HMI legst du dann auch ein Array[0..9] of Word an, das du ebenfalls Stoerungen nennen könntest. Das verknüpfst du über die Verbindung mit der Variable im DB. Somit fragt die Visu dann die DB Variable ab.
Wenn du nun eine Meldung anlegst, gibst du dort die Triggeradresse an. Dazu wählst du die Variable Stoerungen die du in der Visu angelegt hast. Nun gibt es dort die Auswahlmöglichkeit für das Triggerbit. Dort stellst du 0,1,2,3 usw. ein. Damit wird die Meldung mit einem einzelnen Bit des Triggerwords verknüpft. Wechselt das Bit von False nach True, poppt die Meldung auf.
In der Spalte Triggeradresse kannst du sehen, dass dort die DB Variable mit Triggerbit drinsteht. Das Triggerbit ist in der Form.x1,.x2,.x3 usw. angegeben.
Wie du nun die Fehlerbits in das DB Word bekommst, wenn du nicht absolut darauf zugreifen kannst?
Du könntest dir einen Baustein bauen, bei dem du mit dem Slice Befehl auf die Bits aus dem Word zugreifst. Ein FC mit 16 Eingängen und einem Ausgang, den du mehrmals aufrufst. An den Eingängen kannst du die Triggerbits in der Steuerung dranschreiben, an den Ausgang schreibst du dann die einzelnen Wörter dran. z.B. Stoerungen[0] für das erste Word.
Das kann man aber auch einfacher machen. Du nimmst das MW8 z.B. und transferierst es mit einem Move Befehl in die DB Variable Stoerungen[0]. Ist nicht so elegant, aber geht auch.
Hierbei musst du aber bedenken, dass die Bytes im Word vertauscht sind. D.h. M9.0, also das achte Bit im MW8 würde bei diesem Weg die mit Triggerbit 0 angelegte Meldung triggern.