-> Hier kostenlos registrieren
Hallo,
ich möchte einen RS232_Receive in einem FB programmieren. Als FBD (Graphisch) habe ich es schon geschafft.
Nun möchte ich es aber in ST umsetzen.
Also habe ich mir einen neuen FB angelegt und das mal reingeschrieben:
Variabeln:
ST Code:
Der Ablauf geht so:
Erst wird gewartet, bis 4 Bytes im RECEIVE_BUFFER_COUNT drinnen sind. Dann soll der REQUEST auf TRUE gesetzt werden um die Daten in meine Receive_Data : Array[0..7] of Byte zu kopieren.
Per DONE wird dann angezeigt, wann das Kopieren fertig ist.
Danach sollen einfach die BIT0-BIT15 gesetzt werden.
Per RS232 kommen diese Daten rein:
Byte 0: Complete len (4)
Byte 1: Command, CMD_INPUT = 0
Byte 2: Data BITs 0..7
Byte 3: Data BITs 8..15
Wenn ich nun Funktionsblock ausführe reagiert er nur einmal und dann gar nicht mehr.
Ich glaube das RS232_RECEIVE_DATA.REQUEST := TRUE; löst das kopieren der Daten nicht aus und somit steigt der Buffer_count immer höher.
Kann hier jemand einen Anfänger etwas helfen!?
ich möchte einen RS232_Receive in einem FB programmieren. Als FBD (Graphisch) habe ich es schon geschafft.
Nun möchte ich es aber in ST umsetzen.
Also habe ich mir einen neuen FB angelegt und das mal reingeschrieben:
Variabeln:
Code:
CMD_INPUT BYTE VAR 0 0 0 0 0 0 0
Data_Count BYTE VAR 4 0 0 0 0 0 0
BIT0 BOOL VAR_OUTPUT FALSE 0 0 0 0 0 0
BIT1 BOOL VAR_OUTPUT FALSE 0 0 0 0 0 0
BIT2 BOOL VAR_OUTPUT FALSE 0 0 0 0 0 0
BIT3 BOOL VAR_OUTPUT FALSE 0 0 0 0 0 0
BIT4 BOOL VAR_OUTPUT FALSE 0 0 0 0 0 0
BIT5 BOOL VAR_OUTPUT FALSE 0 0 0 0 0 0
BIT6 BOOL VAR_OUTPUT FALSE 0 0 0 0 0 0
BIT7 BOOL VAR_OUTPUT FALSE 0 0 0 0 0 0
BIT8 BOOL VAR_OUTPUT FALSE 0 0 0 0 0 0
BIT9 BOOL VAR_OUTPUT FALSE 0 0 0 0 0 0
BIT10 BOOL VAR_OUTPUT FALSE 0 0 0 0 0 0
BIT11 BOOL VAR_OUTPUT FALSE 0 0 0 0 0 0
BIT12 BOOL VAR_OUTPUT FALSE 0 0 0 0 0 0
BIT13 BOOL VAR_OUTPUT FALSE 0 0 0 0 0 0
BIT14 BOOL VAR_OUTPUT FALSE 0 0 0 0 0 0
BIT15 BOOL VAR_OUTPUT FALSE 0 0 0 0 0 0
Receive_Data RS232_Data VAR 0 0 0 0 0 0
RS232_RECEIVE_DATA RS232_RECEIVE VAR 0 0 0 0 0 0
BYTE_TO_BITS BYTE_TO_BITS VAR 0 0 0 0 0 0
ST Code:
Code:
RS232_RECEIVE_DATA(REQUEST:=FALSE,DATA:=Receive_Data);
Receive_Data := RS232_RECEIVE_DATA.DATA;
IF RS232_RECEIVE_DATA.RECEIVE_BUFFER_COUNT = BYTE_TO_INT(Data_Count) THEN
RS232_RECEIVE_DATA.REQUEST := TRUE;
END_IF;
IF RS232_RECEIVE_DATA.DONE THEN
IF (Receive_Data[0] = Data_Count) AND (Receive_Data[1] = CMD_INPUT) THEN
BYTE_TO_BITS(IN:=Receive_Data[2]);
BIT0 := BYTE_TO_BITS.B0;
BIT1 := BYTE_TO_BITS.B1;
BIT2 := BYTE_TO_BITS.B2;
BIT3 := BYTE_TO_BITS.B3;
BIT4 := BYTE_TO_BITS.B4;
BIT5 := BYTE_TO_BITS.B5;
BIT6 := BYTE_TO_BITS.B6;
BIT7 := BYTE_TO_BITS.B7;
BYTE_TO_BITS(IN:=Receive_Data[3]);
BIT8 := BYTE_TO_BITS.B0;
BIT9 := BYTE_TO_BITS.B1;
BIT10 := BYTE_TO_BITS.B2;
BIT11 := BYTE_TO_BITS.B3;
BIT12 := BYTE_TO_BITS.B4;
BIT13 := BYTE_TO_BITS.B5;
BIT14 := BYTE_TO_BITS.B6;
BIT15 := BYTE_TO_BITS.B7;
END_IF;
END_IF;
Der Ablauf geht so:
Erst wird gewartet, bis 4 Bytes im RECEIVE_BUFFER_COUNT drinnen sind. Dann soll der REQUEST auf TRUE gesetzt werden um die Daten in meine Receive_Data : Array[0..7] of Byte zu kopieren.
Per DONE wird dann angezeigt, wann das Kopieren fertig ist.
Danach sollen einfach die BIT0-BIT15 gesetzt werden.
Per RS232 kommen diese Daten rein:
Byte 0: Complete len (4)
Byte 1: Command, CMD_INPUT = 0
Byte 2: Data BITs 0..7
Byte 3: Data BITs 8..15
Wenn ich nun Funktionsblock ausführe reagiert er nur einmal und dann gar nicht mehr.
Ich glaube das RS232_RECEIVE_DATA.REQUEST := TRUE; löst das kopieren der Daten nicht aus und somit steigt der Buffer_count immer höher.
Kann hier jemand einen Anfänger etwas helfen!?