Hallo,
Folgendes Problem. Mein Sensor möchte initialisiert werden, dabei sendet er mir alle Informationen wobei jedoch mein RingBuffer überläuft. Ich suche daher nach einer Möglichkeit mehr als 255 Zeichen zu empfangen, oder nach dem Initialisieren die Informationen abzufragen. Wie muß ich die Struktur ändern um den "SendString" zu überschreiben, wie kann ich neu senden (xStartSend) und die Antwort auswerten. Wahrscheinlich mit einem Zustandsautomaten... nur wie starte ich mehrfach COM1 und empfange dannn?
Hier ist was ich habe und was auch für eine Abfrage funktioniert:
(*---- Solange eine Anforderung gesendet wird -> den Empfangsbuffer löschen *)
IF xSendActive3 THEN (* neue Anforderung wird gesendet *)
FOR i:= 0 TO 255 DO
ReceiveBuffer.Data[i] := 0; (* Empfangsbuffer löschen*)
END_FOR
ReceiveBuffer.Index := 0; (* Empfangsbuffer löschen*)
END_IF
(*--- Auffuf der Schnittstelle -----------------------------------------------------*)
(* Send and Receive for COM1 *)
COM1( bCOM_PORT_NR := 1,
cbBAUDRATE := BAUD_9600,
cbsBYTESIZE := BS_8,
cpPARITY := PARITY_NO,
csSTOPBITS := STOPBITS_1,
cfFLOW_CONTROL := NO_FLOW_CONTROL,
utRECEIVE_BUFFER := ReceiveBuffer,
ptSEND_BUFFER := ADR(SendString),
xINIT := xInitPort,
xOPEN_COM_PORT := xOpenPort,
iBYTES_TO_SEND := LEN(SendString) +1,
xSTART_SEND := xSendActive3 );
(*---- Empfangsdaten in String kopieren ---------------------------------------------------------------------------------------*)
ptString := ADR(ReceiveBuffer.Data); (* Stringzeiger auf den Anfang des Empfangsbuffers *)
ReceiveBuffer.Data[ ReceiveBuffer.Index ] := 0; (* String terminieren *)
ReceiveString := ptString^; (* String kopieren *)
(*-------------------------------------------------------------------------------------------------------------------------------------------*)
temp2:=STRING_TO_REAL(LIST_GET(44,1,ReceiveString));*)
temp:=LIST_GET(44,0,ReceiveString); (*Sensor*)
TEMPIST:=STRING_TO_REAL(LIST_GET(44,1,ReceiveString)); (*Temperatur in Real*)
Bin für jeden Tipp dankbar.
Cali