-> Hier kostenlos registrieren
schon gemacht. hatte ja keine wirkung
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Ja, ich werte die RCVD_LEN aus. (Es geht gar nicht anders, zumindest bei großen Telegrammen, da habe ich dann mehrere NDR habeAha... das lese ich da aber nicht so raus. Ich lese da eher, dass unbedingt auch noch RCVD_LEN ausgewertet werden muss, um das empfangene Telegramm in einem zweiten Puffer zusammenzusetzen oder die Lage im Empfangspuffer festzustellen. Woher soll TRCV die Frame-Länge wissen? Von Sendepausen zwischen Frames?
#STATE_RECEIVE:
#statRcvdLenTotal := #statRcvdLenTotal + #statRcvdLen;
#tmpRetValMoveBlkVariant := MOVE_BLK_VARIANT(SRC := #statDataBufferRcv.buffer,
COUNT := #statRcvdLen,
SRC_INDEX := #CONST_DINT_0,
DEST_INDEX := UDINT_TO_DINT(#statRcvdLenTotal - #statRcvdLen),
DEST => "MESSAGE_BUFFER".buffer);
IF (#statRcvdLenTotal = #statRcvLenExpected) THEN // Erwartete Länge komplett empfangen
// FC aufrufen um Daten auszuwerten
"handleReceivedMessage"(messageBuffer := "MESSAGE_BUFFER",
rcvdLen := #statRcvdLenTotal);
FOR #i := 0 TO (#tmpReceiveBufferSize - 1) BY 1 DO
#statDataBufferRcv.buffer[#i] := 0;
END_FOR;
#statLenDetected := false;
#statRcvdLenTotal := 0;
#statStateRcvValue := #STATE_CONNECTED;
ELSE // wait for more data to rcv
FOR #i := 0 TO (#tmpReceiveBufferSize - 1) BY 1 DO
#statDataBufferRcv.buffer[#i] := 0;
END_FOR;
#statStateRcvValue := #STATE_CONNECTED;
END_IF;
#STATE_CONNECTED:
#done := false;
#ndr := false;
#rcvdLen := #CONST_UINT_0;
#instTrcv.EN_R := true; // always true
IF (#instTrcv.NDR = TRUE) //New Data Received
THEN
#statRcvdLen := #instTrcv.RCVD_LEN; // empfangene Länge speichern
#statStateRcvValue := #STATE_RECEIVE;
// TRCV
#instTrcv(ID := #statConnID,
ADHOC := 1,
LEN := 0,
DATA := #statDataBufferRcv.buffer);
Hmm, was hat die Endianness mit den sich verschiebenden Daten zu tun??Habe es hinbekommen nachdem der Hersteller mir den Hinweis gegeben hat, dass die Sensorik intel-orientiert mit little-endian arbeitet
und man dadurch die Daten drehen muss.
Bei mir ändern sich die Daten/Zeichen aber sekündlich. In der SPS steht auch nie in einem Datenword immer der selbe Kram.
Wartest du nun, bis irgendwann ein Datenframe (zufällig) an der richtigen Stelle im Empfangspuffer liegt?Habe dann abgefragt, wann die Präambel richtig in meinem Buffer steht und konnte somit die Daten auslesen und aufbereiten.
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen