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 } >