Autor Thema: Serielle Schnittstelle mehrfach senden und Antwort auswerten  (Gelesen 13750 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline cali

  • Newbie
  • *
  • Beiträge: 12
    • Profil anzeigen
Serielle Schnittstelle mehrfach senden und Antwort auswerten
« am: 31. Dezember 2008, 11:28:30 »
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

Offline gravieren

  • Entwickler
  • *****
  • Beiträge: 578
    • Profil anzeigen
Re: Serielle Schnittstelle mehrfach senden und Antwort auswerten
« Antwort #1 am: 31. Dezember 2008, 11:41:47 »
Hi

Welches System hast du  ?


Versuche doch mal die besseren Portablen Funktionen von CoDeSys:
- SysComOpen
- SysComSetSetting
- SysComRead
- SysComWrite
- SysComClose

Offline cali

  • Newbie
  • *
  • Beiträge: 12
    • Profil anzeigen
Re: Serielle Schnittstelle mehrfach senden und Antwort auswerten
« Antwort #2 am: 31. Dezember 2008, 13:51:16 »
Hallo gravieren,

ich habe eine WAGO 750-841. Hast Du ein Beispiel dafür in ST? Man kann zwar bei Wago und im Programm einiges finden, aber ein richtiges ST Tutorial habe ich noch nicht gefunden. Wie bekomme ich denn mit, wenn Daten empfangen wurden und einen Timeout brauche ich ja auch...

Danke
Cali

Offline gravieren

  • Entwickler
  • *****
  • Beiträge: 578
    • Profil anzeigen
Re: Serielle Schnittstelle mehrfach senden und Antwort auswerten
« Antwort #3 am: 31. Dezember 2008, 17:40:14 »
Hi

>ich habe eine WAGO 750-841.
O.K.  Geht mit diesem Controller.


>Hast Du ein Beispiel dafür in ST?
Schau doch mal in ca. 2 Wochen in meinem Forum vorbei.
Möglicherweise werden dor Informationen zu finden sein.
(Ich arbeite momentan am Filesystem und am M-Bus)
(Sollte es meine "Freizeit" zulassen, findest du ein Example)




>Man kann zwar bei Wago und im Programm einiges finden,
>aber ein richtiges ST Tutorial habe ich noch nicht gefunden.
Such doch mal auf deinem Rechner nach der Datei "SysLibCom.pdf"



>Wie bekomme ich denn mit, wenn Daten empfangen wurden
Lese die o.g. Dokumentation durch.

>und einen Timeout brauche ich ja auch...
Lese die o.g. Dokumentation durch.


Nach dem durchlesen der Dokumentation werde ich dir die offenen Fragen beantworten.



Offline cali

  • Newbie
  • *
  • Beiträge: 12
    • Profil anzeigen
Re: Serielle Schnittstelle mehrfach senden und Antwort auswerten
« Antwort #4 am: 01. Januar 2009, 17:49:31 »
Hier meine Lösung:

Mit
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 );
wird gesendet was unter SendString steht. Diesen ändere ich bei jedem Durchlauf mit Hilfe eines Zustandsautomaten. Die die Antwort werte ich jedes mal aus. Thats it!

WenDeLuxe

  • Gast
Re:Serielle Schnittstelle mehrfach senden und Antwort auswerten
« Antwort #5 am: 03. September 2009, 16:43:14 »
Kann mir jemand Erklären, weshalb bei der Anzahl zu sendenden Zeichen (iBYTES_TO_SEND   := LEN) ein Byte dazuaddiert wird?