TCP/IP Networking
TCP/IP support is integrated into VTScada. To use this feature you will need to have a TCP/IP stack, which is supplied by many network vendors. All TCP/IP functions in VTScada are performed using socket streams that act like serial connections between two programs. VTScada can act as both a socket server and a socket client.
Following is an example of a Client and a Server that will create a connection and pass the string "Hello World" followed by a number representing the number of seconds since midnight.
Client:
[
Graphics Module { Contains user graphics };
Calculations Module { Contains user calculations };
WinTitle = "Socket Test - Client Side" { Window title };
RunningOnVIC { TRUE if this is a VIC session };
SocketHandle;
Client;
Server;
Data;
]
Init [
If 1 Main;
[
RunningOnVIC = IsVICSession();
]
]
Main [
Window( 0, 0 { Upper left corner },
800, 600 { View area },
800, 600 { Virtual area },
Graphics() { Start user graphics },
{65432109876543210}
0b00010000000110011,
Concat(WinTitle, RunningOnVIC ? " - %S" : ""),
0, 1);
]
<
{===================== System\Graphics =======================}
{ This module handles all of the graphics for the application }
{=============================================================}
Graphics
Init [
If 1 Screen1;
[
Client = ClientSocket(0, "Richard", 20000, 1024, 1024, 1);
]
]
Screen1 [
If TimeOut(!Valid(Client), 2) Init;
If TimeOut(ValueType(Client) <> 8,2) Error;
If GetStreamLength(Client) > 0 || MatchKeys(2, "r");
[
SRead(Client, Concat("%", Concat(GetStreamLength(Client), "c")), Data);
]
If TimeOut(1, 1);
[
SWrite(Client, "%s", Concat(" Hello World ", Time(Seconds(), 3)));
]
If MatchKeys(1, " ");
[
SWrite(Client, "%s", Concat(" Hello World ", Seconds()));
]
ZText(10, 150, Data, 15, 0);
ZText(200, 100, Cond(Valid(Client),"Connected", "Not Connected"), 10, 0);
ZText(200, 110, Concat("ErrorCode : ", Client), 10, 0);
ZText(200, 120, Concat("Type : ", ValueType(Client)), 10, 0);
If WindowClose(Self());
[
CloseStream(Client);
Slay(Self(), 1);
]
]
Error [
ZText(100, 130, Concat("ErrorCode : ", Client), 10, 0);
]
{ End of System\Graphics }
>
Server:
[
Graphics Module { Contains user graphics };
Calculations Module { Contains user calculations };
WinTitle = "Socket Test - Server Side" { Window title };
RunningOnVIC { TRUE if this is a VIC session };
SocketHandle;
Client;
Server;
Data;
Attribs0;
Attribs1;
]
Init [
If 1 Main;
[
RunningOnVIC = IsVICSession();
]
]
Main [
Window( 0, 0 { Upper left corner },
800, 600 { View area },
800, 600 { Virtual area },
Graphics() { Start user graphics },
{65432109876543210}
0b00010000000110011,
Concat(WinTitle, RunningOnVIC ? " - %S" : ""),
0, 1);
]
<
{===================== System\Graphics =======================}
{ This module handles all of the graphics for the application }
{=============================================================}
Graphics
Init [
If 1 Wait ;
[
SocketHandle = SocketServerStart(0, 20000, 1024, 1024, 1);
]
]
Wait [
If SocketWait(SocketHandle) Main;
[
Server = ServerSocket(SocketHandle);
]
]
Main [
If GetStreamLength(Server) > 0 || MatchKeys(2, "r");
[
SRead(Server, Concat("%", Concat(GetStreamLength(Server), "c")), Data);
SWrite(Server, "%s", Data);
]
If WindowClose(Self);
[
CloseStream(Server);
SocketServerEnd(SocketHandle);
Slay(Self(), 1);
]
ZText(0, 50, Data, 15, 0);
ZText(0, 100, Cond(Valid(Server), "Connected", "Not Connected"), 10, 0);
]
{ End of System\Graphics }
>