-> 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
 
	