📄 c_serial.st
字号:
// *** Der Empfangsbuffer wird dabei ebenfalls ***
// *** geloescht ***
// *** ***
// *** --> Kein Uebergabeparameter ***
// *** <-- Kein Rueckgabeparameter ***
// *** ***
// ************************************************
//
//[#ENGLISH]
// ************************************************
// ************* Serial COM close *************
// ************************************************
// *** ***
// *** This Function deletes an initialized COM ***
// *** Receiving Buffer also will be cleared ***
// *** ***
// *** --> Not in use ***
// *** <-- Not in use ***
// *** ***
// ************************************************
FUNCTION GLOBAL Serial::Ser_close
IF pHandle > 0 THEN
SERUSER_Close(pHandle);
// Now Receiving Buffer is also cleared
ELSE
Error_S := SERUSER_GetError(pHandle);
END_IF;
END_FUNCTION //GLOBAL serial::Ser_close
//[#DEUTSCH]
// ***************************************************************************
// **************** COMMAND SERVER READ ****************
// ***************************************************************************
// *** ***
// *** Funktion prueft den Empfangsbuffer und schaufelt ***
// *** die momentan empfangenen Zeichen in einen Internen ***
// *** Buffer ( 1k ). ***
// *** Die Adresse des Internen Buffers wird zur點k黚ergeben ***
// ********* ******
// *** <-- output = Pointer des Tempor鋜en Buffers ***
// ***************************************************************************
//
//[#ENGLISH]
// ***************************************************************************
// **************** COMMAND SERVER READ ****************
// ***************************************************************************
// *** ***
// *** Function checks receiving buffer and puts Data into an ***
// *** internal buffer ( 1k ). ***
// *** Pointer of the internal Buffer will be returned *** ***
// ********* ******
// *** <-- output = Pointer of internal receiving buffer ***
// ***************************************************************************
//
//[<output(EAX)]pointer of receiving buffer $DINT
FUNCTION VIRTUAL GLOBAL Serial::Read
VAR_OUTPUT
output : DINT; // Pointer to Receivinbuffer
END_VAR
IF pHandle > 0 THEN
// checks, how many bytes are new in the ReceivingBuffer
Bufflength := TO_UDINT(SERUSER_GetRecvStatus(pHandle$pVoid));
// puting the received Data into a temporary Buffer
IF Bufflength > 0 THEN
Error_S := SERUSER_RecvBlock(pHandle$pVoid,#temp_buf[0],Bufflength$UINT,NIL);
output := (#temp_buf[0])$DINT;
END_IF;
ELSE
Error_S := SERUSER_GetError(pHandle);
END_IF;
END_FUNCTION //VIRTUAL GLOBAL serial::Read
//[#DEUTSCH]
// *****************************************************************************
// **************** COMMAND SERVER WRITE ******************
// *****************************************************************************
// ** **
// ** Am Server Bufflength ist die Anzahl der zu sendenden Bytes **
// ** zu definieren. **
// ** Wird die WRITE Funktion des Servers "Command" angesto遝n, **
// ** so ist dieser die Adresse der zu sendenden Struktur zu 黚ergeben. **
// ** Als R點kgabewert erh鋖t man einen Errocode(ob erfolgreich oder nicht).**
// **** ****
// ** --> input = Pointer der Sendestruktur **
// ** <-- result = Error Code **
// *****************************************************************************
//[>input(EAX)]Pointer der Sendestruktur !!! $DINT !!!
//[<result(EAX)]Error Code
//
//[#ENGLISH]
// *****************************************************************************
// **************** COMMAND SERVER WRITE ******************
// *****************************************************************************
// ** **
// ** -Server Bufflength defines, how many Bytes should be send. **
// ** -Sends DATA over the initialized COM **
// ** **
// **** ****
// ** --> input = pointer of sendstruct **
// ** <-- result = Error Code **
// *****************************************************************************
//
//[>input(EAX)]pointer of sendstruct !!! $DINT !!!
//[<result(EAX)]Error Code
FUNCTION VIRTUAL GLOBAL Serial::Write
VAR_INPUT
input : DINT;
END_VAR
VAR_OUTPUT
result : DINT;
END_VAR
IF pHandle > 0 THEN
Error_S := result := SERUSER_Send(pHandle$pVoid, (input)$pVoid, Bufflength, NIL);
ELSE
Error_S := SERUSER_GetError(pHandle);
END_IF;
END_FUNCTION //VIRTUAL GLOBAL serial::Write
//[#DEUTSCH]
// ***************************************************************************
// **************** config_interface ****************
// ***************************************************************************
// ** **
// ** Funktion schlie遲 eine Initialisierte Schnittstelle **
// ** und initialisiert eine, mit den 躡ergabeparametern, NEU. **
// ** Anschlie遝nd wird noch 黚erpr黤t, ob initialisierung erfolgreich war**
// ** Ersichtlich in Error_S **
// ** --------------------------------------------------------------------- **
// ** --> Com_in = COM 1-4 **
// ** --> Baud_in= Baudrate **
// ** --> wordl_in = wordlength **
// ** --> Parity_in= NONE, ODD, EVEN, MARK, SPACE **
// ** --> StopB_in = 1 oder 2 **
// ** <-- ret0 = Pointer von Kommunikationshandle der neu initialisierten COM*
// ***************************************************************************
//[<ret0]Pointer von Kommunikationshandle der neu initialisierten COM
//[>Com_in]COM 1-4
//[>Baud_in]0..SERUSERBAUD_300, 1..600, 2..1200, 3..2400, 4..4800, 5..9600, 6..14400, 7..19200, 8..38400, 9..56000, 10..115200
//[>wordl_in]"wordlength" 5, 6, 7 oder 8
//[>Parity_in]0..SERUSERPARITY_NONE / 1..SERUSERPARITY_ODD / 2..SERUSERPARITY_EVEN / 3..SERUSERPARITY_MARK / 4..SERUSERPARITY_SPACE
//[>StopB_in]1 oder 2
//
//[#ENGLISH]
// ***************************************************************************
// **************** config_interface ****************
// ***************************************************************************
// ** **
// ** Closes an initialized COM and initializes a new one **
// ** --------------------------------------------------------------------- **
// ** --> Com_in = COM 1-4 **
// ** --> Baud_in= Baudrate **
// ** --> wordl_in = wordlength **
// ** --> Parity_in= NONE, ODD, EVEN, MARK, SPACE **
// ** --> StopB_in = 1 or 2 **
// ** <-- ret0 = Pointer Handle of new initialized COM **
// ***************************************************************************
//[>Com_in]COM 1-4
//[>Baud_in]0..SERUSERBAUD_300, 1..600, 2..1200, 3..2400, 4..4800, 5..9600, 6..14400, 7..19200, 8..38400, 9..56000, 10..115200
//[>wordl_in]"wordlength" 5, 6, 7 or 8
//[>Parity_in]0..SERUSERPARITY_NONE / 1..SERUSERPARITY_ODD / 2..SERUSERPARITY_EVEN / 3..SERUSERPARITY_MARK(HIGH Parity) / 4..SERUSERPARITY_SPACE(LOW Parity)
//[>StopB_in]1 or 2
//[<ret0]Pointer Handle of new initialized COM: IF handle <=0 -> ERROR
FUNCTION GLOBAL Serial::config_interface
VAR_INPUT
Com_in : DINT; // number of new COM to initialize
Baud_in : DINT; // Baudrate for new init
wordl_in : DINT; // BitFormat for new initialization
Parity_in : DINT; // ParityBits for new init
StopB_in : DINT; // Stopbits
END_VAR
VAR_OUTPUT
ret0 : pVoid; // Handle
END_VAR
IF pHandle > 0 THEN
SERUSER_Close(pHandle); // at first it must be close
END_IF;
ComNr := Com_in; // all Server = inputs
Baudrate := Baud_in;
wordlength:= wordl_in;
SerParity := Parity_in;
StopBit := StopB_in;
// now we are able to initialize the new COM
ret0 := pHandle := SERUSER_Init(to_UINT(ComNr),to_UINT(Baudrate), to_UINT(SerParity), to_UINT(StopBit), to_UINT(wordlength));
// check if there is an Error
Error_S := SERUSER_GetError(pHandle$pVoid);
END_FUNCTION //GLOBAL serial::config_interface
//[#DEUTSCH]
// **********************************************************************************
// ******************* SERIAL CONSTRUCTION ***********************
// **********************************************************************************
// ** **
// * Funktion initialisiert COM mit den Servereinstellungen. **
// ** **
// * Ben鰐igte SERVER: *
// * Es stehen hierf黵 vordefinierte Konstanten zur Verf黦ung: *
// ** -ComNr: SERUSERCOM_1 ~ f黵 COM1 ..1 -Baudrate:SERUSERBAUD_300 .. 0 *
// ** SERUSERCOM_2 ~ f黵 COM2 ..2 SERUSERBAUD_600 .. 1 *
// ** SERUSERCOM_3 ~ f黵 COM3 ..3 SERUSERBAUD_1200 .. 2 *
// ** SERUSERCOM_4 ~ f黵 COM4 ..4 SERUSERBAUD_2400 .. 3 *
// ** SERUSERBAUD_4800 .. 4 *
// ** -SerParity (Parity-Bits): SERUSERBAUD_9600 .. 5 *
// ** SERUSERPARITY_NONE ..0 SERUSERBAUD_14400 .. 6 *
// ** SERUSERPARITY_ODD ..1 SERUSERBAUD_19200 .. 7 *
// ** SERUSERPARITY_EVEN ..2 SERUSERBAUD_38400 .. 8 *
// ** SERUSERPARITY_MARK ..3(HIGH Parity) SERUSERBAUD_56000 .. 9 *
// ** SERUSERPARITY_SPACE..4(LOW Parity) SERUSERBAUD_115200 ..10 *
// ** *
// ** -StopBit : 1 oder 2 *
// ** -wordlength: 5, 6, 7 oder 8. *
// ** ----------------------------------------------------------------------------- * *
// ** <-- Rueckgabe Server: *
// ** - Error_S = Error Code *
// ** ----------------------------------------------------------------------------- * *
// ** -Ob die Initilisierung erfolgreich war, is im Sever "Error_S" ersichtlich *
// ** -Im Fehlerfall, d.h. bei ung黮tigen Parametern, nicht vorhandener *
// ** COM-Schnittstelle, etc. ist der Rueckgabewert im Server "pHandle" : *
// ** 0 bzw. der NIL-Pointer *
// ** -Wird als COM-Nummer die COM1 verwendet, so kann, je nach OS-Version, *
// ** diese bereits vom OS selbst f黵 die Online-Kommunikation zur *
// ** LASAL-Software verwendet werden. *
// ** F黵 diesen Fall liefert Server "Error_S" : OSINUSE(-2) *
// ** *
// ** !!! ACHTUNG: Das Kommunikations-Handle (R點kgabewert) ist f黵 die weiteren *
// ** !!! COM-Funktionen notwendig. *
// ** *
// ** ----------------------------------------------------------------------------- *
// ** erstellt : RM : KW 50/01 *
// **********************************************************************************
//[#ENGLISH]
// **********************************************************************************
// ******************* SERIAL CONSTRUCTION ***********************
// **********************************************************************************
// ** *
// ** initializes a COM with the Clientsettings *
// ** Server "Error_S" returns the Error Code of the initialization *
// ** *
// ** --> NEEDED SERVER's: *
// ** *
// ** -ComNr: SERUSERCOM_1 ~ f黵 COM1 ..1 -Baudrate: SERUSERBAUD_300 .. 0 *
// ** SERUSERCOM_2 ~ f黵 COM2 ..2 SERUSERBAUD_600 .. 1 *
// ** SERUSERCOM_3 ~ f黵 COM3 ..3 SERUSERBAUD_1200 .. 2 *
// ** SERUSERCOM_4 ~ f黵 COM4 ..4 SERUSERBAUD_2400 .. 3 *
// ** SERUSERBAUD_4800 .. 4 *
// ** -SerParity (Parity-Bits): SERUSERBAUD_9600 .. 5 *
// ** SERUSERPARITY_NONE ..0 SERUSERBAUD_14400 .. 6 *
// ** SERUSERPARITY_ODD ..1 SERUSERBAUD_19200 .. 7 *
// ** SERUSERPARITY_EVEN ..2 SERUSERBAUD_38400 .. 8 *
// ** SERUSERPARITY_MARK ..3(HIGH Parity) SERUSERBAUD_56000 .. 9 *
// ** SERUSERPARITY_SPACE..4(LOW Parity) SERUSERBAUD_115200 ..10 *
// ** *
// ** -StopBit : 1 or 2 *
// ** -wordlength: 5, 6, 7 or 8 *
// ** *
// *** ---------------------------------------------------------------------------- *
// ** <-- OUTPUT Server: *
// ** - Error_S = Error Code *
// *** ---------------------------------------------------------------------------- *
// ** *
// ** !!!ATTENTION: Handle will be needed for other functions of SERIAL interface *
// ** ----------------------------------------------------------------------------- *
// ** created : RM : KW 50/01 *
// **********************************************************************************
FUNCTION Serial::Serial
VAR_OUTPUT
ret_code : CONFSTATES;
END_VAR
pHandle := SERUSER_Init(to_UINT(ComNr),to_UINT(Baudrate), to_UINT(SerParity), to_UINT(StopBit), to_UINT(wordlength));
Error_S := SERUSER_GetError(pHandle$pVoid);
ret_code := C_OK;
END_FUNCTION // Serial::Serial
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -