-> Hier kostenlos registrieren
Guten Morgen,
folgendes Szenario:
Standard PC mit TC3 Runtime und Interner RS232 Schnittstelle (COM2 & COM3)
Ich will jetzt über TC3 auf die RS232 Schnittstellen des Rechners zugreifen.
Dazu habe ich den Baustein SerialLineControlADS gefunden.
Die Hilfestellung von Beckhoff habe ich auch durch, jedoch verstehe ich den Einsatz der VAR_IN_OUT Variablen nicht:
Link zum SerialLineControlADS:
https://infosys.beckhoff.de/index.p...cPlcLibSerCom_FB_SerialLineControlADS.htm&id=
Meine Vorgehensweise:
Ich habe 2 Strukturen:
TYPE ComSerialConfig :
(* contains the configuration parameters of the com port to be opened. *)
STRUCT
ComPort :UDINT :=1; (* Serial port number [1..255] *)
Baudrate :UDINT :=9600;
Parity :ComParity_t :=PARITY_NONE;
DataBits :INT :=8; (* [4..8] *)
StopBits :ComStopBits_t :=STOPBITS_ONE;
DTR :ComDTRCtrl_t :=DTR_CTRL_HANDSHAKE; (* 'Data Terminal Ready' signal *)
RTS :ComRTSCtrl_t :=RTS_CTRL_HANDSHAKE; (* 'Request to Send' signal (= RFR 'Ready for Receiving') *)
CTS :BOOL :=FALSE; (* 'Clear to Send' signal *)
DSR :BOOL :=FALSE; (* 'Dataset Ready' signal *)
TraceLevel :BYTE :=0; (* None=0;Error=1,Warning=2,Info=3,Verbose=4,Noise=5 *)
Reserved1 :BYTE;
Reserved2 :BYTE;
Reserved3 :BYTE;
END_STRUCT
END_TYPE
und:
TYPE ComBuffer:
STRUCT
Buffer: ARRAY[0..300] OF BYTE;
RdIdx: INT;
WrIdx: INT;
Count: INT; (* Anzahl der Zeichen im Ringpuffer *)
FreeByte:INT; (* Anzahl freie Plätze im Ringpuffer *)
Error: INT; (* Fehlercode der Schnittstelle *)
blocked : BOOL;
END_STRUCT
END_TYPE
Der Funktionsbaustein sieht wie folgt aus:
FUNCTION_BLOCK rs232
VAR_INPUT
Connect :BOOL; (* connect to serial port [TRUE=connect, FALSE=disconnect] *)
SerialCfg :ComSerialConfig;
NetId :T_AmsNetId :=''; (* host NetId *)
Timeout :TIME :=DEFAULT_ADS_TIMEOUT; (* Timeout for ADS calls *)
END_VAR
VAR_IN_OUT
TxBuffer :ComBuffer; (* serial Tx ComBuffer *)
RxBuffer :ComBuffer; (* serial Rx ComBuffer *)
END_VAR
VAR_OUTPUT
PortOpened :BOOL; (* Indicates if selected serial port is opened *)
Error :BOOL; (* 'TRUE' if an error occurred *)
ErrorID :UDINT; (* Displays the error code; 0 = no error *)
Busy :BOOL; (* 'TRUE' if internal ADS communication is busy *)
TxBufCount :UDINT; (* number of bytes in internal Tx buffer *)
RxBufCount :UDINT; (* number of bytes in internal Rx buffer *)
END_VAR
SerialLineControlADS(
Connect:= ,
SerialCfg:=SerialCfg ,
NetId:= ,
Timeout:= ,
TxBuffer:=TxBuffer ,
RxBuffer:=RxBuffer,
PortOpened=> ,
Error=> ,
ErrorID=> ,
Busy=> ,
TxBufCount=> ,
RxBufCount=> );
Die Main sieht so aus:
PROGRAM MAIN
VAR
visu_funktionen:visu_funktionen();
eingabe:eingabe();
barcode:barcode();
sondergenehmigung:sondergenehmigung();
initialisierung:initialisierung();
rs232:rs232();
END_VAR
visu_funktionen();
eingabe();
barcode();
sondergenehmigung();
initialisierung();
rs232();
Jetzt meldet er beim Compilieren:
Error 30 Cannot convert type 'ComSerialConfig' to type 'ComSerialConfig(tc2_serialcom, 3.3.6.0 (beckhoff automation gmbh))'
Error 28 Functionblock 'SerialLineControlADS' must be instantiated to be accessed
Error 32 Type 'ComBuffer' is not equal to type 'ComBuffer' of VAR_IN_OUT 'RxBuffer'
Error 31 Type 'ComBuffer' is not equal to type 'ComBuffer' of VAR_IN_OUT 'TxBuffer'
Error 27 VAR_IN_OUT 'RxBuffer' must be assigned in call of 'rs232'
Error 26 VAR_IN_OUT 'TxBuffer' must be assigned in call of 'rs232'
Was habe ich da vergessen bzw. wo liegt hier mein Problem?! Ich hoffe mir kann jemand weiter helfen.
Danke im Voraus
Gruß
Daniel
folgendes Szenario:
Standard PC mit TC3 Runtime und Interner RS232 Schnittstelle (COM2 & COM3)
Ich will jetzt über TC3 auf die RS232 Schnittstellen des Rechners zugreifen.
Dazu habe ich den Baustein SerialLineControlADS gefunden.
Die Hilfestellung von Beckhoff habe ich auch durch, jedoch verstehe ich den Einsatz der VAR_IN_OUT Variablen nicht:
Link zum SerialLineControlADS:
https://infosys.beckhoff.de/index.p...cPlcLibSerCom_FB_SerialLineControlADS.htm&id=
Meine Vorgehensweise:
Ich habe 2 Strukturen:
TYPE ComSerialConfig :
(* contains the configuration parameters of the com port to be opened. *)
STRUCT
ComPort :UDINT :=1; (* Serial port number [1..255] *)
Baudrate :UDINT :=9600;
Parity :ComParity_t :=PARITY_NONE;
DataBits :INT :=8; (* [4..8] *)
StopBits :ComStopBits_t :=STOPBITS_ONE;
DTR :ComDTRCtrl_t :=DTR_CTRL_HANDSHAKE; (* 'Data Terminal Ready' signal *)
RTS :ComRTSCtrl_t :=RTS_CTRL_HANDSHAKE; (* 'Request to Send' signal (= RFR 'Ready for Receiving') *)
CTS :BOOL :=FALSE; (* 'Clear to Send' signal *)
DSR :BOOL :=FALSE; (* 'Dataset Ready' signal *)
TraceLevel :BYTE :=0; (* None=0;Error=1,Warning=2,Info=3,Verbose=4,Noise=5 *)
Reserved1 :BYTE;
Reserved2 :BYTE;
Reserved3 :BYTE;
END_STRUCT
END_TYPE
und:
TYPE ComBuffer:
STRUCT
Buffer: ARRAY[0..300] OF BYTE;
RdIdx: INT;
WrIdx: INT;
Count: INT; (* Anzahl der Zeichen im Ringpuffer *)
FreeByte:INT; (* Anzahl freie Plätze im Ringpuffer *)
Error: INT; (* Fehlercode der Schnittstelle *)
blocked : BOOL;
END_STRUCT
END_TYPE
Der Funktionsbaustein sieht wie folgt aus:
FUNCTION_BLOCK rs232
VAR_INPUT
Connect :BOOL; (* connect to serial port [TRUE=connect, FALSE=disconnect] *)
SerialCfg :ComSerialConfig;
NetId :T_AmsNetId :=''; (* host NetId *)
Timeout :TIME :=DEFAULT_ADS_TIMEOUT; (* Timeout for ADS calls *)
END_VAR
VAR_IN_OUT
TxBuffer :ComBuffer; (* serial Tx ComBuffer *)
RxBuffer :ComBuffer; (* serial Rx ComBuffer *)
END_VAR
VAR_OUTPUT
PortOpened :BOOL; (* Indicates if selected serial port is opened *)
Error :BOOL; (* 'TRUE' if an error occurred *)
ErrorID :UDINT; (* Displays the error code; 0 = no error *)
Busy :BOOL; (* 'TRUE' if internal ADS communication is busy *)
TxBufCount :UDINT; (* number of bytes in internal Tx buffer *)
RxBufCount :UDINT; (* number of bytes in internal Rx buffer *)
END_VAR
SerialLineControlADS(
Connect:= ,
SerialCfg:=SerialCfg ,
NetId:= ,
Timeout:= ,
TxBuffer:=TxBuffer ,
RxBuffer:=RxBuffer,
PortOpened=> ,
Error=> ,
ErrorID=> ,
Busy=> ,
TxBufCount=> ,
RxBufCount=> );
Die Main sieht so aus:
PROGRAM MAIN
VAR
visu_funktionen:visu_funktionen();
eingabe:eingabe();
barcode:barcode();
sondergenehmigung:sondergenehmigung();
initialisierung:initialisierung();
rs232:rs232();
END_VAR
visu_funktionen();
eingabe();
barcode();
sondergenehmigung();
initialisierung();
rs232();
Jetzt meldet er beim Compilieren:
Error 30 Cannot convert type 'ComSerialConfig' to type 'ComSerialConfig(tc2_serialcom, 3.3.6.0 (beckhoff automation gmbh))'
Error 28 Functionblock 'SerialLineControlADS' must be instantiated to be accessed
Error 32 Type 'ComBuffer' is not equal to type 'ComBuffer' of VAR_IN_OUT 'RxBuffer'
Error 31 Type 'ComBuffer' is not equal to type 'ComBuffer' of VAR_IN_OUT 'TxBuffer'
Error 27 VAR_IN_OUT 'RxBuffer' must be assigned in call of 'rs232'
Error 26 VAR_IN_OUT 'TxBuffer' must be assigned in call of 'rs232'
Was habe ich da vergessen bzw. wo liegt hier mein Problem?! Ich hoffe mir kann jemand weiter helfen.
Danke im Voraus
Gruß
Daniel