# RobotStudio communication with TiaPortal via socket

**URL:** <https://tech-community.robotics.abb.com/t/robotstudio-communication-with-tiaportal-via-socket/7822>\
**Category:** RobotStudio\
**Tags:** tiaportal, robotstudio, tcp-ip, socketpeek\
**Created:** [July 20, 2017, 12:41pm UTC](https://tech-community.robotics.abb.com/t/robotstudio-communication-with-tiaportal-via-socket/7822 "2017-07-20T12:41:28Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![martintursky](https://avatars.discourse-cdn.com/v4/letter/m/eada6e/32.png) [@martintursky](https://tech-community.robotics.abb.com/u/martintursky)\
**Post date:** [July 20, 2017, 12:41pm UTC](https://tech-community.robotics.abb.com/t/robotstudio-communication-with-tiaportal-via-socket/7822/1 "2017-07-20T12:41:28Z")

</div>

Hello.  
I need some help with project.  
I have to make communication between Tiaportal V14 and RobotStudio using TCP/IP. Does anybody some experiences with this?  
Thanks for help.

---

<div class="post-metadata">

**Author:** ![ko414du4](https://avatars.discourse-cdn.com/v4/letter/k/e19b73/32.png) [@ko414du4](https://tech-community.robotics.abb.com/u/ko414du4)\
**Post date:** [August 1, 2017, 7:35am UTC](https://tech-community.robotics.abb.com/t/robotstudio-communication-with-tiaportal-via-socket/7822/2 "2017-08-01T07:35:02Z")

</div>

Hi,

I have done socket connection with Rockwell PLC once and below is how I did it (in a separate SemiStatic task). I reckon it should be the same since it’s the same protocol. I am not sure on the TIAPortal side but I believe you have to have the GSD file for IRC5 to recognise the controller on the network.

_ **MODULE MainModule** _  
_ **VAR socketdev clientSocket;** _  
_ **VAR socketstatus socketStat;** _  
_ **VAR rawbytes raw\_send;** _  
_ **VAR rawbytes raw\_receive;** _

_**PROC main()**_  
_ **VAR signaldi plcAlive;** _  
_ **AliasIO diComms\_Alive,plcAlive;** _

_ **! Eternal loop to wait until PLC is ON** _  
_ **WHILE plcAlive=0 DO** _  
_ **WaitTime 5;** _

_ **Set doCommsError;** _

_**IF (diForceStop=1) Stop; ! Force stop prog execution from pendant. diForceStop is on Virtual\_1 unit**_  
_ **ENDWHILE** _

_ **! Reset error** _  
_ **Reset doCommsError;** _

_ **! Clear raw bytes** _  
_ **ClearRawBytes raw\_send; ! Clear raw data first** _  
_ **ClearRawBytes raw\_receive; ! Clear raw data first** _

_ **SocketClose clientSocket;** _

_**socketStat:=SocketGetStatus(clientSocket); ! Get status of client socket & act accordingly**_  
_**WHILE NOT(socketStat=SOCKET\_CONNECTED) DO**_  
_ **WaitTime 2; ! Recommended wait time before closing a socket** _  
_ **SocketClose clientSocket;** _  
_ **WaitTime 2; ! Recommended wait time between closing & opening a socket** _

_**IF (plcAlive=0) ExitCycle; ! Go to eternal loop to wait until PLC is back ON**_

_ **connectToServer “192.168.1.1”,1025; ! Connect to server by address and port no. in arguments** _  
_**socketStat:=SocketGetStatus(clientSocket); ! Update status of client socket**_  
_ **ENDWHILE** _

_**WHILE (socketStat=SOCKET\_CONNECTED) DO**_  
_**IF (plcAlive=0) ExitCycle; ! Go to eternal loop to wait until PLC is back ON**_

_ **!WaitTime 1;** _  
_ **sendData;** _  
_ **!WaitTime 1;** _  
_ **receiveData;** _  
_ **ENDWHILE** _  
_ **ENDPROC** _

_**PROC connectToServer(string IPAddress,num portNo)**_  
_ **VAR num retryNo:=0;** _

_ **SocketCreate clientSocket; ! Create client socket** _  
_ **SocketConnect clientSocket,IPAddress,portNo; ! Connect to server with IPAddress and portNo supplied** _  
_ **TPErase;** _  
_ **TPWrite “Connection successful”;** _

_ **ERROR** _  
_ **IF ERRNO=ERR\_SOCK\_TIMEOUT THEN** _  
_ **WaitTime 1;** _  
_ **retryNo:=retryNo+1;** _  
_ **IF retryNo\>=3 THEN** _  
_**ErrWrite\I, “Connection failed”, “Trying to connect to server (PLC) failed.”\RL2:=“PP goes to Main to check if PLC alive.”\RL3:=“Retries is reset.”;**_  
_ **TPWrite “Socket connection failed after 3 retries”;** _  
_ **retryNo:=0;** _  
_ **WaitTime 5;** _  
_ **ExitCycle;** _  
_ **ELSE** _  
_ **RETRY;** _  
_ **ENDIF** _  
_ **ELSEIF ERRNO=ERR\_SOCK\_CLOSED THEN** _  
_ **WaitTime 5;** _  
_ **ExitCycle;** _  
_ **ELSE** _  
_ **TPWrite "ERRNo = "\Num:=ERRNO;** _  
_ **Stop;** _  
_ **ENDIF** _  
_ **ENDPROC** _

_**PROC sendData()**_  
_ **ClearRawBytes raw\_send; ! Clear raw data first** _

_ **! Prep data to send** _  
_ **packet\_send.x:=packet\_receive.x;** _  
_ **packet\_send.y:=packet\_receive.y;** _  
_ **packet\_send.z:=packet\_receive.z;** _  
_ **packet\_send.Rx:=packet\_receive.Rx;** _  
_ **packet\_send.Ry:=packet\_receive.Ry;** _  
_ **packet\_send.Rz:=packet\_receive.Rz;** _  
_ **packet\_send.Status:=packet\_receive.Status;** _

_ **! Pack pieces of data in the packet into raw\_send** _  
_**PackRawBytes packet\_send.x,raw\_send,(RawBytesLen(raw\_send)+1)\Float4;**_  
_**PackRawBytes packet\_send.y,raw\_send,(RawBytesLen(raw\_send)+1)\Float4;**_  
_**PackRawBytes packet\_send.z,raw\_send,(RawBytesLen(raw\_send)+1)\Float4;**_  
_**PackRawBytes packet\_send.Rx,raw\_send,(RawBytesLen(raw\_send)+1)\Float4;**_  
_**PackRawBytes packet\_send.Ry,raw\_send,(RawBytesLen(raw\_send)+1)\Float4;**_  
_**PackRawBytes packet\_send.Rz,raw\_send,(RawBytesLen(raw\_send)+1)\Float4;**_  
_**PackRawBytes packet\_send.Status,raw\_send,(RawBytesLen(raw\_send)+1)\IntX:=1;**_

_ **SocketSend clientSocket \RawData:=raw\_send;** _

_ **ERROR** _  
_ **IF ERRNO=ERR\_SOCK\_CLOSED THEN** _  
_ **TPWrite “Socket closed during sending data”;** _  
_ **ExitCycle;** _  
_ **ENDIF** _  
_ **ENDPROC** _

_**PROC receiveData()**_  
_ **ClearRawBytes raw\_receive; ! Clear raw data first** _

_ **SocketReceive clientSocket \RawData:=raw\_receive\Time:=10;** _

_ **! Unpack raw\_receive and save individual values in packet\_receive** _  
_ **UnpackRawBytes raw\_receive,1,packet\_receive.x\Float4;** _  
_ **UnpackRawBytes raw\_receive,5,packet\_receive.y\Float4;** _  
_ **UnpackRawBytes raw\_receive,9,packet\_receive.z\Float4;** _  
_ **UnpackRawBytes raw\_receive,13,packet\_receive.Rx\Float4;** _  
_ **UnpackRawBytes raw\_receive,17,packet\_receive.Ry\Float4;** _  
_ **UnpackRawBytes raw\_receive,21,packet\_receive.Rz\Float4;** _  
_ **UnpackRawBytes raw\_receive,25,packet\_receive.Status\IntX:=1;** _

_**socketStat:=SocketGetStatus(clientSocket); ! Update status of client socket**_

_ **ERROR** _  
_ **IF ERRNO = ERR\_SOCK\_TIMEOUT OR ERRNO=ERR\_SOCK\_CLOSED THEN** _  
_ **WaitTime 5; ! Wait so server application starts first** _  
_ **TPWrite “Comms time out during receiving data”;** _  
_ **ExitCycle;** _  
_ **ENDIF** _  
_ **ENDPROC** _  
_ **ENDMODULE** _

---

<div class="post-metadata">

**Author:** ![DenisFR](https://avatars.discourse-cdn.com/v4/letter/d/dc4da7/32.png) [@DenisFR](https://tech-community.robotics.abb.com/u/DenisFR)\
**Post date:** [August 16, 2017, 3:52pm UTC](https://tech-community.robotics.abb.com/t/robotstudio-communication-with-tiaportal-via-socket/7822/3 "2017-08-16T15:52:51Z")

</div>

Hello,  
For SIEMENS, You’ve got RSConnectGIOToSnap7 and RSConnectDIOToSnap7  
[https://robotapps.robotstudio.com/#/viewApp/2cab7b4f-754c-415b-a32c-cbe4da9353e9](https://robotapps.robotstudio.com/#/viewApp/2cab7b4f-754c-415b-a32c-cbe4da9353e9)  
[https://robotapps.robotstudio.com/#/viewApp/8f0eb633-db8c-4155-85f5-4910b894c520](https://robotapps.robotstudio.com/#/viewApp/8f0eb633-db8c-4155-85f5-4910b894c520)
