-> Hier kostenlos registrieren
Hallo zusammen!
Ich habe so einen ähnlichen Beitrag schonmal gestellt, jedoch bin ich leider zu keiner Lösung gekommen, deshalb versuche ich es mit der Bitte um mögliche Lösungsvorschläge nochmals.
Version: Step 7 Professional V17
Gerät: CPU S7-1511-1PN
TRC Einstellungen: Adhoc = true / Len = 0 / optimierter Datenzugriff
Mein Problem besteht darin, dass ich mit meinem TRCV Baustein Daten eines RFID Readers empfangen möchte, was jedoch nicht richtig klappt. Einlesen möchte ich mit variabler Länge (Adhoc Modus) in ein Char oder Byte Array (egal welches).
Der zu erwartende String schaut folgendermaßen aus: 7767CE65$R$L -> also 10 Zeichen
Problem: es wird leider folgendermaßen eingelesen 767CE65$R$L -> also immer nur 9 Zeichen statt 10 Zeichen -> das 1te Zeichen wird nicht erkannt...
Folgendermaßen schaut es aus wenn ich am Reader etwas scanne:
so wie ich das verstehe werden 2 TCP Pakete empfangen:
1. Packet enthält -> 7
2. Packet enthält -> 767CE65$R$L
Jedoch ist es für mich nicht verständlich warum das 1.Paket nicht im Buffer[0] steht...!!!
Der beigefügte Code ist sicherlich noch ausbaufähig, jedoch geht es mir hauptsächlich um das korrekte Einlesen. Habe auch schon andere Ansätze für das Empfangen der Daten probiert, doch scheitere ich immer wieder an diesem Problem...
Ich füge hier mal meinen gesamten SCL Code ein:
Ich habe so einen ähnlichen Beitrag schonmal gestellt, jedoch bin ich leider zu keiner Lösung gekommen, deshalb versuche ich es mit der Bitte um mögliche Lösungsvorschläge nochmals.
Version: Step 7 Professional V17
Gerät: CPU S7-1511-1PN
TRC Einstellungen: Adhoc = true / Len = 0 / optimierter Datenzugriff
Mein Problem besteht darin, dass ich mit meinem TRCV Baustein Daten eines RFID Readers empfangen möchte, was jedoch nicht richtig klappt. Einlesen möchte ich mit variabler Länge (Adhoc Modus) in ein Char oder Byte Array (egal welches).
Der zu erwartende String schaut folgendermaßen aus: 7767CE65$R$L -> also 10 Zeichen
Problem: es wird leider folgendermaßen eingelesen 767CE65$R$L -> also immer nur 9 Zeichen statt 10 Zeichen -> das 1te Zeichen wird nicht erkannt...
Folgendermaßen schaut es aus wenn ich am Reader etwas scanne:
so wie ich das verstehe werden 2 TCP Pakete empfangen:
1. Packet enthält -> 7
2. Packet enthält -> 767CE65$R$L
Jedoch ist es für mich nicht verständlich warum das 1.Paket nicht im Buffer[0] steht...!!!
Der beigefügte Code ist sicherlich noch ausbaufähig, jedoch geht es mir hauptsächlich um das korrekte Einlesen. Habe auch schon andere Ansätze für das Empfangen der Daten probiert, doch scheitere ich immer wieder an diesem Problem...
Ich füge hier mal meinen gesamten SCL Code ein:
Code:
REGION Initialize TCP/IP Blocks
#TCON_Instance(REQ := #TCON_Instance.REQ,
ID := 1,
DONE => #TCON_Instance.DONE,
BUSY => #TCON_Instance.BUSY,
ERROR => #TCON_Instance.ERROR,
STATUS => #TCON_Instance.STATUS,
CONNECT := "PLC_Controller_Connection_DB");
#TRCV_Instance(EN_R := #TRCV_Instance.EN_R,
ID := 1,
LEN := #TRCV_Instance.LEN,
ADHOC := #TRCV_Instance.ADHOC,
NDR => #TRCV_Instance.NDR,
BUSY => #TRCV_Instance.BUSY,
ERROR => #TRCV_Instance.ERROR,
STATUS => #TRCV_Instance.STATUS,
RCVD_LEN => #TRCV_Instance.RCVD_LEN,
DATA := #Input.Buffer);
END_REGION
REGION Enable Connection and Set Receive Mode
//Enable Connection
#TCON_Instance.REQ := "Clock_2Hz";
//Check Connection
IF #TCON_Instance.DONE = 1 AND #TCON_Instance.STATUS = 0
THEN
#ConnectionStatus.IsConnected := TRUE;
END_IF;
IF #ConnectionStatus.IsConnected
THEN
//Enable TRCV
#TRCV_Instance.EN_R := TRUE;
#ConnectionStatus.RecvRequested := TRUE;
END_IF;
END_REGION
REGION Receive Data
IF #ConnectionStatus.RecvRequested AND #TRCV_Instance.NDR
THEN
#ConnectionStatus.IsConnected := FALSE;
#ConnectionStatus.RecvRequested := FALSE;
//Received Length of Buffer
#Input.RecvLength := #TRCV_Instance.RCVD_LEN;
END_IF;
END_REGION