Pandalord
27.03.2008, 12:46
Hi all ich habe ein Problem mit einer Beckhoff KL6021 Klemme.
Folgenden Versuchsaufbau habe ich:
Output von der Klemme 1 geht in den input von der Klemme 2.
So jetzt habe ich wie in der Dokumentation beschrieben, 2 Tasks gemacht und dann die Programme so Geschrieben:
ComBackground(ST)
PROGRAM ComBackground
VAR
Sender_Init :KL6Init;
Sender_Com :KL6Control;
serstat AT%QB5002:BYTE;
FIRST: BOOL;
END_VAR
IF NOT FIRST THEN
Sender_Init( Start:=TRUE,
SerStatus:= serstat,
SerCtrl:= serstat);
FIRST:=TRUE;
END_IF
Sender_Com( COMin:= Sender_Data_IN,
COMout:= Sender_Data_OUT,
TxBuffer:= Sender_TxBuffer,
RxBuffer:= Sender_RxBuffer);
MAIN.PRG (ST)
PROGRAM MAIN
VAR
Senden_ctrl: BOOL;
Lesen_ctrl: BOOL;
END_VAR
IF Senden_ctrl THEN
Senden();
Senden_ctrl:=FALSE;
END_IF
IF Lesen_ctrl THEN
Lesen();
Lesen_ctrl:= FALSE;
END_IF
Senden.prg (ST)
PROGRAM Senden
VAR
Print:SendString;
PrintChar:SendByte;
Timer:TON;
i:BYTE;
END_VAR
Timer(IN:=TRUE,PT:=T#1s);
IF Timer.Q THEN
Print(SendString:='*Hello World',TXbuffer:=Sender_TxBuffer);
Timer(IN:= FALSE);
FOR i:=0 TO 9 DO
PrintChar(SendByte := 48+i,TXbuffer:=Sender_TxBuffer);
END_FOR
Print(SendString:='$0D$0A', TXbuffer:= Sender_TxBuffer);
Timer(in:=FALSE);
END_IF
Lesen.prg (ST)
PROGRAM Lesen
VAR
ReadScanner:ReceiveString;
Barcode:STRING;
LastBarcode:STRING;
Edge:R_TRIG;
empfang AT%IB5004:BYTE;
Empfang_Init: KL6Init;
END_VAR
Empfang_Init( Start:=TRUE,
SerStatus:= empfang,
SerCtrl:=empfang);
ReadScanner( Prefix:='*',
Suffix:='$0A$0A',
Timeout:=T#0S,
Reset:=FALSE,
ReceivedString:=Barcode,
RxBuffer:=Sender_RxBuffer);
Edge(CLK:=ReadScanner.StringReceived);
IF Edge.Q THEN
LastBarcode:=Barcode;
END_IF
SO als Global Vars hab ich:
VAR_GLOBAL
(************************SENDER_IN&OUT**********************************)
Sender_Data_IN AT%IB5000 :KL6inData;
Sender_Data_OUT AT%QB5000 :KL6outData;
Sender_TxBuffer : ComBuffer;
Sender_RxBuffer :ComBuffer;
(***********************END_VAR_SENDER********************************)
END_VAR
Ich hab die Biblotheken:COMlib.lib,ChrAsc.lib,Standart.lib drinn
Noch ne kleine erklärung die If'S in der Main force ich auf true.... so als schalter hab ich mir das gedacht.
Folgenden Versuchsaufbau habe ich:
Output von der Klemme 1 geht in den input von der Klemme 2.
So jetzt habe ich wie in der Dokumentation beschrieben, 2 Tasks gemacht und dann die Programme so Geschrieben:
ComBackground(ST)
PROGRAM ComBackground
VAR
Sender_Init :KL6Init;
Sender_Com :KL6Control;
serstat AT%QB5002:BYTE;
FIRST: BOOL;
END_VAR
IF NOT FIRST THEN
Sender_Init( Start:=TRUE,
SerStatus:= serstat,
SerCtrl:= serstat);
FIRST:=TRUE;
END_IF
Sender_Com( COMin:= Sender_Data_IN,
COMout:= Sender_Data_OUT,
TxBuffer:= Sender_TxBuffer,
RxBuffer:= Sender_RxBuffer);
MAIN.PRG (ST)
PROGRAM MAIN
VAR
Senden_ctrl: BOOL;
Lesen_ctrl: BOOL;
END_VAR
IF Senden_ctrl THEN
Senden();
Senden_ctrl:=FALSE;
END_IF
IF Lesen_ctrl THEN
Lesen();
Lesen_ctrl:= FALSE;
END_IF
Senden.prg (ST)
PROGRAM Senden
VAR
Print:SendString;
PrintChar:SendByte;
Timer:TON;
i:BYTE;
END_VAR
Timer(IN:=TRUE,PT:=T#1s);
IF Timer.Q THEN
Print(SendString:='*Hello World',TXbuffer:=Sender_TxBuffer);
Timer(IN:= FALSE);
FOR i:=0 TO 9 DO
PrintChar(SendByte := 48+i,TXbuffer:=Sender_TxBuffer);
END_FOR
Print(SendString:='$0D$0A', TXbuffer:= Sender_TxBuffer);
Timer(in:=FALSE);
END_IF
Lesen.prg (ST)
PROGRAM Lesen
VAR
ReadScanner:ReceiveString;
Barcode:STRING;
LastBarcode:STRING;
Edge:R_TRIG;
empfang AT%IB5004:BYTE;
Empfang_Init: KL6Init;
END_VAR
Empfang_Init( Start:=TRUE,
SerStatus:= empfang,
SerCtrl:=empfang);
ReadScanner( Prefix:='*',
Suffix:='$0A$0A',
Timeout:=T#0S,
Reset:=FALSE,
ReceivedString:=Barcode,
RxBuffer:=Sender_RxBuffer);
Edge(CLK:=ReadScanner.StringReceived);
IF Edge.Q THEN
LastBarcode:=Barcode;
END_IF
SO als Global Vars hab ich:
VAR_GLOBAL
(************************SENDER_IN&OUT**********************************)
Sender_Data_IN AT%IB5000 :KL6inData;
Sender_Data_OUT AT%QB5000 :KL6outData;
Sender_TxBuffer : ComBuffer;
Sender_RxBuffer :ComBuffer;
(***********************END_VAR_SENDER********************************)
END_VAR
Ich hab die Biblotheken:COMlib.lib,ChrAsc.lib,Standart.lib drinn
Noch ne kleine erklärung die If'S in der Main force ich auf true.... so als schalter hab ich mir das gedacht.