Danke für den Hinweis mit B#2#1000. Das habe ich korrigiert.
Durch die Bedingung, dass Bit M1.0 auch auf ON gesetzt wird, wenn das Byte 0 ist, läuft es eigentlich sofort los und löst die erste Abfrage aus. Auch ein Fehler sollte die Abfrage im Shift weiterlaufen lassen, bis es wieder geht. Auch bei einem Fehler geht es eigentlich weiter, da Bit 7 ja immer kommt.
Kommunikationstimeout bedeutet, dass der Slave keine Antwort sendet, bzw. die SPS keine empfängt. Retry bedeutet, dass die Schnittstelle bei einem Timeout die gleiche Anfrage erneut raus schickt, also bis zu 3 Mal.
Auch die anderen Fehlerbits sind interessant, da hier Modbus mehr Details zu Fehlern geben kann. Im HMI steht nur "PLC No Response", wenn die Antwort nicht stimmt. Hier sieht man mehr, was genau das Problem ist.
Kurz zur Erklärung:
Bit 0= Datenrahmenfehler empfangen, einschließlich CRC-Prüfungsfehler, Funktionscodefehler, etc.
Bedeutet meist, irgendwas ist elektrisch auf der Schnittstelle schief gelaufen, also irgendwelche Bits durch EMV-Störungen verschluckt oder verdreht. Oder der Slave antwortet, aber nicht richtig. Hier gab es auf jeden Fall eine Antwort, nur hat die nicht gestimmt.
Bit 1= Kommunikations-Timeout
Bedeutet es ist keine Antwort vom Slave angekommen. Also meist Fehler in Baudrate, Parität, Draht A B vertauscht oder Stationsnummer. Das ist der häufigste Fehler. Manchmal (selten) bekommt man den Fehler auch, wenn der Slave zu schnell antwortet und die SPS das nicht mitbekommt.
Bit 2= Der Kommunikationsport wird aktuell von einer anderen Kommunikationsaufgabe verwendet.
Bedeutet, der Port wird schon durch etwas anderes genutzt.
Bit 3= Ungültige Registeradresse. Die angegebene Registeradresse liegt außerhalb des gültigen Bereichs.
Der Slave antwortet und sagt, die Adresse gibt es nicht. Das ist ein Modbus-Fehler.
Bit 4= Falsche Anzahl an Daten. Empfangene / gesendete Datenmenge entspricht nicht der Anzahl.
Das ist ein seltener Fehler, bei dem die Datenmenge der Antwort nicht stimmt. Kommt eher vor, wenn der Slave also der andere Teilnehmer nicht richtig arbeitet, ist aber selten.
Bit 5= Ungültige Slave-Adresse. Die angegebene Slave-Station ist nicht zulässig.
Wird wahrscheinlich am ehesten ausgelöst, wenn man in einer Variable 0 als Slave-Adresse übergibt. Die ist nämlich nicht gültig.
Bit 6= Reserviert (keine Funktion).