En el programa del PLC tenemos 3 funciones que gestionan la comunicación TCP/IP: - IP_CONNECT – Establece una conexión TCP/IP. En el ejemplo se configura el PLC en modo “PASSIVE” de forma que acepta la conexión del primer equipo que intente una conexión a través del puerto configurado ( en este caso el 2222). Si se cortase la comunicación con ese equipo, la variable “ConexionValida” se iría a 0 y aceptaría una nueva comunicación de otro equipo diferente al inicial. - IP_USEND – Envía los datos contenidos en la matriz de 10 bytes “TramaEnvio” IP_URCV – Recibe datos y los almacena en la matriz de 10 bytes “TramaRecepcion” Es posible recibir / enviar hasta un máximo de 1460 bytes en cada llamada a las funciones IP_USEND e IP_URCV. Vemos en primer plano la aplicación de Visual Basic que realiza la comunicación entre el PC. Le pasamos la dirección IP del PLC y enviamos / recibimos 5 bytes. De fondo podemos ver la lista de variables del PLC en modo online. Tras activar el botón “Enviar” vemos que los datos introducidos en Visual Basic, han pasado a la matriz “TramaRecepcion” del PLC. Además se nos han añadido dos bytes con el número de datos recibidos ( 5 ). En la matriz “TramaEnvio” ponemos los datos que queremos pasar desde el PLC a nuestra aplicación en VB. Con un flanco de subida en la variable “ActivarEnvio” , se inicia la transferencia de datos. De la misma forma que en la recepción recibimos 2 bytes con el número de datos recibidos, en el envío somos nosotros los que tenemos que indicar el número de datos a enviar. Por eso al inicio de la matriz de datos de envío contiene el numero 5, que son los datos que enviaremos al PC. La aplicación de Visual Basic emplea los sockets de windows para realizar la comunicación TCP/IP. En el formulario se pega el control ActiveX de Winsock A continuación se incluye el código del programa ejemplo de Visual Basic. Option Explicit Private Sub cmdConnect_Click() If objWinsock.State = sckClosed Then objWinsock.Protocol = sckTCPProtocol objWinsock.RemoteHost = DirIP.Text objWinsock.RemotePort = 2222 objWinsock.Connect cmdConnect.Enabled = False Else objWinsock.Close objWinsock.LocalPort = 0 cmdConnect.Caption = "Connect" cmdSendData.Visible = False End If End Sub Private Sub cmdSendData_Click() Dim arrSendData(5) As Byte If objWinsock.State = sckConnected Then arrSendData(0) = Val(TextBoxSendData0.Text) arrSendData(1) = Val(TextBoxSendData1.Text) arrSendData(2) = Val(TextBoxSendData2.Text) arrSendData(3) = Val(TextBoxSendData3.Text) arrSendData(4) = Val(TextBoxSendData4.Text) objWinsock.SendData (arrSendData) End If End Sub Private Sub objWinsock_Connect() cmdConnect.Caption = "Disconnect" cmdConnect.Enabled = True cmdSendData.Visible = True End Sub Private Sub objWinsock_DataArrival(ByVal bytesTotal As Long) Dim RcvData As Variant objWinsock.GetData RcvData Text5.Text = RcvData(0) Text4.Text = RcvData(1) Text3.Text = RcvData(2) Text2.Text = RcvData(3) Text1.Text = RcvData(4) End Sub Esta aplicación utiliza los sockets de Windows. Pero funciona de igual forma en cualquier otro sistema operativo que emplee comunicación vía sockets.