Ich hätte einen möglichen Ansatzpunkt, wo eventuell in diesem Testprogramm etwas schief gehen könnte.
Sie verwenden für SCHEDULE und GET_RESULT immer das gleiche Message-Header-Array msg_read_awg[], ohne dessen Inhalt jemals wieder aufzufrischen. Es wird nur zu Beginn des Programms global initialisiert. Der chFlags-Eintrag ist aber nicht nur ein Ausgangsparameter, sondern auch ein Eingangsparameter. Das heißt die Übertragung verhält sich anders, wenn bei chFlags der Wert 0 oder 1 übergeben wird. Und zwar genau dahingehend, ob die NetDCU beim Empfang das letzte Byte der Übertragung mit ACK quittiert oder nicht.
Sie beginnen mit chFlags=0. Das heißt die NetDCU quittiert das letzte Byte beim Empfang *nicht*. Aber vermutlich sendet die Gegenstelle bei allen Bytes brav ein ACK, weshalb nach dem ersten Zyklus nun chFlags auf 1 steht. Da Sie diesen Wert nirgends zurücksetzen, wird nun im nächsten SCHEDULE auch mit chFlags=1 gearbeitet. Das heißt ab nun quittiert auch die NetDCU das letzte empfangene Byte mit ACK.
Ich vermute nun, dass in einer Übertragung Ihr AWG irgendwann einmal beim letzten Byte kein ACK gesendet hat, vermutlich weil das Byte nicht ordentlich dort ankam. Dies wird nun mit chFlags=0 quittiert, so dass im nächsten Zyklus die NetDCU das letzte Byte nun wieder nicht mehr quittiert. Dies ist nun vermutlich der fehlerhafte Zyklus, den Sie sehen. Möglicherweise sehen Sie in Ihrem Oszilloskop-Bild aber gar nicht so weit zurück, dass Sie den tatsächlich fehlerhaften vorangegangen 6-Byte-Zyklus noch sehen, sondern nur den aktuellen, der Ihre fehlerhaften Daten enthält.
Mein Vorschlag wäre darum, entweder für GET_RESULT ein anderes Array als bei SCHEDULE zu verwenden. Oder das Array in jedem Durchlauf vor dem SCHEDULE wieder neu vorzubelegen.
Vielleicht sollten Sie mal darauf achten, ob in chFlags ab und zu unterschiedliche Werte (0 oder 1) zurückkommen. Bisher löst dies in Ihrem Testprogramm wegen Abfrage auf >1 noch keine unterschiedliche Behandlung oder gar einen Fehler aus. Auch wäre es interessant, was tatsächlich im Fehlerfall in chFlags stand, also welcher Fehler konkret auftrat. Und hier wäre wie gesagt auch der vorangegangene Zyklus noch interessant.
Mit freundlichen Grüßen,
H. Keller