Beckhoff:SendString

cas

Level-2
Beiträge
521
Reaktionspunkte
43
Zuviel Werbung?
-> Hier kostenlos registrieren
Kann mir bitte jemand mal ein Beispielcode geben.

Ich möchte einen String (5 Zeichen) mittels einer KL6001 senden.

Irgendwie sieht es aus als ob es funktionert, aber eigentlich dich nicht.

Manchmal werden Zeichen abgeschnitten und den Puffer krieg ich auch nicht leer.

Einfach nur wenn eine VAR True hat 'ABCDE' senden und fertig.

Wie wirds gemacht ?

MfG CAS
 
Zuviel Werbung?
-> Hier kostenlos registrieren
das Beispiel hab ich genommen.
1.)Falsche Klemme im Programm
2.) Falsche Parameter
3.) Und wenn ich das alles eingerichtet habe, dann schaufelt das Programm ständig des Buffer voll und die Übertraggung wird nicht mehr zeitnah ausgeführt.

Einfach nur bei einem Ereignis 5 Bytes senden möcht ich.

Mfg CAS
 
Hallo CAS,

ich habe die beiden Tasks umgesetzt und sende Strings in der langsamen Task mit folgendem Code:
Code:
DECLARATION:
pTxBuffer : POINTER TO ComBuffer;
pRxBuffer : POINTER TO ComBuffer;
Send_String : SendString;
xSend_Busy : BOOL;
FP_Send : R_TRIG;

CODE:

pTxBuffer := ADR(SchnelleTask.Baustein.TxBuffer);
pRxBuffer := ADR(SchnelleTask.Baustein.RxBuffer);
IF FP_Send.Q OR xSend_Busy THEN
Send_String(
 SendString := 'ABCDE',
 TXbuffer := pTxBuffer^,
 Busy => xSend_Busy,
 Error => ESend_Error);
END_IF
Und in der schnellen Task läuft bei mir noch:
Code:
DECLARATION:
ComControl : SerialLineControl;
xCommunicationError := BOOL
CommunicationErrorID : ComError_t;
PE_5By    AT %I*: KL6inData5B;
PA_5By    AT %Q*: KL6outData5B;
RxBuffer : ComBuffer;
TxBuffer : ComBuffer;

CODE:

ComControl(
 Mode := SERIALLINEMODE_KL6_5B_STANDARD,
 pComIn := ADR(PE_5By),
 pComOut := ADR(PA_5By),
 SizeComIn := SIZEOF(PE_5By),
 TxBuffer := TxBuffer,
 RxBuffer := RxBuffer,
 Error => xCommunicationError,
 ErrorID => CommunicationErrorID);
 
das Beispiel hab ich genommen.
1.)Falsche Klemme im Programm
2.) Falsche Parameter
3.) Und wenn ich das alles eingerichtet habe, dann schaufelt das Programm ständig des Buffer voll und die Übertraggung wird nicht mehr zeitnah ausgeführt.

Einfach nur bei einem Ereignis 5 Bytes senden möcht ich.

Mfg CAS
Ich versteh jetzt auch das Problem nicht.
Wenn du das original Beispiel nimmst, davon im Teil "Sample_KL6001" nur den Send() als "SendByte" verwendest. (und natürlich FAST(PRG) und MAIN(PRG)), dann hast du doch, was du möchtest.

Die Konfig muss natürlich zu deiner Hardware passen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hello Mario,

My Deutsche is not good ,so i will explain in English. Hope you can manage with it.

In send string programme, try without xSend_Busy.And to get the data
also create receive string programme in same manner.

Still it didn't work Then:
1.Check hardware and module KL6001 connections
2.Check configuration (Baudrate,time and Data format) should be same as serial communication device
3.Data might be too long then use EL6001 module with 22 bytes

Check this out and still i don't understand your prorblem.

Can you explain with snapshot or with programme ?
 
Zurück
Oben