Acest bloc funcțional de la rulați în sarcina Înapoi, gestionează comunicarea cu protocolul UDP în modul client. Este necesar să se definească în PeerAdd adresa IP și în PeerPort portul UDP al sistemului server la care doriți să vă conectați.
Activarea comenzii Connect conexiunea cu sistemul server este deschisă, în conexiunea UDP nu este posibil să verificați dacă serverul este prezent și acceptă conexiunea, prin urmare este întotdeauna activată Connected iar la ieșire File fluxul care va fi utilizat pentru schimbul de date cu sistemul server este returnat.
In LocalAdd e LocalPort puteți defini adresa IP și portul interfeței de rețea de la care să vă conectați. Dacă conexiunea nu este posibilă, se generează Fault.
Blocarea funcției
CODESYS: Indisponibil
LogicLab: eLLabXUnified12Lib
Descriere
Connect (BOOL) Comanda de activare a conexiunii.
PeerAdd (@STRING) Adresa IP a sistemului server la care se va conecta.
PeerPort (UINT) Numărul portului UDP la care să vă conectați.
LocalAdd (@STRING) Adresa IP a interfeței de rețea de la care să vă conectați. Implicit „0.0.0.0”: interfața este aleasă automat pe baza IP-ului la care se conectează.
LocalPort UINT) Numărul portului UDP de la care începe conexiunea (0 ales automat).
FlushTm (UINT)) Timp de spălare a datelor (mS). Dacă nu sunt încărcate date în flux după timpul definit, datele prezente sunt trimise automat.
LifeTm (UINT) Durata de viață a soclului (S), dacă nu sunt primite sau trimise date după timpul definit, soclul se închide automat. Dacă timpul este definit „0”, priza nu este niciodată închisă.
RxSize (UINT) Dimensiunea tamponului de recepție a datelor.
TxSize (UINT) Dimensiunea tamponului de transmisie a datelor.
Connected (BOOL) Activ dacă s-a stabilit conexiunea cu serverul.
Fault (BOOL) Activ dacă eroare de management.
File (FILEP) Fluxul I/O evaluat la conexiunea stabilită cu sistemul server. Dacă conexiunea nu este activă, este returnat NULL
Exemple
Cum se utilizează exemplele.
FBD_SysUDPClient, ST_SysUDPClient: În exemplu este activată o conexiune la un server UCP care ascultă pe portul 1000. Odată realizată conexiunea, caracterele primite de la server sunt trimise înapoi în ecou. Portul local este ales automat de sistem.
SyslogClient: Implementează un client Syslog cu trimiterea de mesaje către servere.
LogicLab (Ptp116, FBD_SysUDPClient)
PROGRAM FBD_SysUDPClient
VAR
Fp : eFILEP; (* File pointer *)
UDPClient : SysUDPClient; (* UDP client *)
END_VAR
LogicLab (Ptp116, ST_SysUDPClient)
PROGRAM ST_SysUDPClient
VAR
i : UDINT; (* Auxiliary variable *)
Fp : eFILEP; (* File pointer *)
UDPClient : SysUDPClient; (* UDP client *)
END_VAR
// *****************************************************************************
// PROGRAM "FBD_SysUDPClient"
// *****************************************************************************
// A UDP client is instantiated, it connects to the UDP server IP and port
// defined. Data received are echoed.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// First program execution loop initializations.
IF (SysFirstLoop) THEN
UDPClient.PeerAdd:=ADR('192.168.0.77'); //Peer address
UDPClient.PeerPort:=1000; //Peer port
UDPClient.LocalAdd:=ADR('0.0.0.0'); //Local address
UDPClient.LocalPort:=0; //Local port
UDPClient.FlushTm:=50; //Flush time (mS)
UDPClient.LifeTm:=30; //Life time (S)
UDPClient.RxSize:=128; //Rx buffer size
UDPClient.TxSize:=128; //Tx buffer size
END_IF;
// Manage the UDP client.
UDPClient(Connect:=TRUE); //TCPClient management
Fp:=UDPClient.File; //File pointer
// -------------------------------------------------------------------------
// ECHO LOOP
// -------------------------------------------------------------------------
// Execute the echo loop.
IF (SysFIsOpen(Fp)) THEN
IF (TO_BOOL(SysFGetIChars(Fp)) AND TO_BOOL(SysFGetOSpace(Fp))) THEN
i:=Sysfputc(Sysfgetc(Fp), Fp); //Character echo
END_IF;
END_IF;
// [End of file]
LogicLab (SyslogClient
)
PROGRAM SyslogClient
VAR
Cmd : BOOL; (* Send command *)
i : UDINT; (* Auxiliary variable *)
Facility : USINT; (* Facility number *)
Severity : USINT; (* Severity number *)
CaseNr : USINT; (* Program case *)
Months : @STRING; (* Month definitions *)
UDPClient : SysUDPClient; (* UDP client *)
DateTime : SysETimeToDate; (* Date time conversion *)
END_VAR
// *****************************************************************************
// PROGRAM "SyslogClient"
// *****************************************************************************
// This program forward information as syslog messages to a syslog server.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// First program execution loop initializations.
IF (SysFirstLoop) THEN
UDPClient.PeerAdd:=ADR('192.168.0.184'); //Peer address
UDPClient.PeerPort:=514; //Peer port
UDPClient.LocalAdd:=ADR('0.0.0.0'); //Local address
UDPClient.LocalPort:=0; //Local port
UDPClient.FlushTm:=50; //Flush time (mS)
UDPClient.LifeTm:=30; //Life time (S)
UDPClient.RxSize:=128; //Rx buffer size
UDPClient.TxSize:=512; //Tx buffer size
END_IF;
// -------------------------------------------------------------------------
// SENDING SEQUENCES
// -------------------------------------------------------------------------
// Manages the UDP Client and sending sequences.
UDPClient(); //UDPClient management
CASE (CaseNr) OF
// ---------------------------------------------------------------------
// Wait command.
0:
UDPClient.Connect:=FALSE; //TCPClient management
IF NOT(Cmd) THEN RETURN; END_IF;
Cmd:=FALSE; //Send command
CaseNr:=CaseNr+1; //Program case
// ---------------------------------------------------------------------
// Connect to Syslog server.
1:
UDPClient.Connect:=TRUE; //TCPClient management
IF NOT(SysFIsOpen(UDPClient.File)) THEN RETURN; END_IF;
// ---------------------------------------------------------------------
// SEND THE MESSAGE TO SERVER
// ---------------------------------------------------------------------
// Send the message to server, here an message example.
// <19>Feb 26 17:36:42 SlimLine Prova messaggio
// ---------------------------------------------------------[PRI Part]--
// The Priority value is calculated by first multiplying the Facility
// number by 8 and then adding the numerical value of the Severity.
i:=(Facility*8)+Severity; //Priority value
i:=SysVfprintf(UDPClient.File, ADR('<%u>'), UDINT_TYPE, ADR(i));
// ------------------------------------------------------[HEADER Part]--
// Contains two fields called the TIMESTAMP and HOSTNAME.
Months:=ADR('JanFebMarAprMayJunJulAugSepOctNovDec');
DateTime(EpochTime:=SysDateTime); //Date time conversion
i:=SysVfprintf(UDPClient.File, ADR('%.3s '), STRING_TYPE, Months+(DateTime.Month*3));
i:=SysVfprintf(UDPClient.File, ADR('%2u '), USINT_TYPE, ADR(DateTime.Day));
i:=SysVfprintf(UDPClient.File, ADR('%02u:'), USINT_TYPE, ADR(DateTime.Hour));
i:=SysVfprintf(UDPClient.File, ADR('%02u:'), USINT_TYPE, ADR(DateTime.Minute));
i:=SysVfprintf(UDPClient.File, ADR('%02u '), USINT_TYPE, ADR(DateTime.Second));
i:=SysVfprintf(UDPClient.File, ADR('%s '), STRING_TYPE, ADR('SlimLine'));
// ---------------------------------------------------------[MSG Part]--
// The CONTENT contains the details of the message.
i:=SysVfprintf(UDPClient.File, ADR('%s'), STRING_TYPE, ADR('This is a message'));
// Eseguo invio messaggio di Log.
i:=SysFOBfFlush(UDPClient.File); //Flush output characters
CaseNr:=CaseNr+1; //Program case
// ---------------------------------------------------------------------
// Waits until the message is sent.
2:
IF (TO_INT(SysFGetOBfSize(UDPClient.File)) <> SysFGetOSpace(UDPClient.File)) THEN RETURN; END_IF;
CaseNr:=0; //Program case
END_CASE;
// [End of file]