程序上设置的是先接收,然后在发送数据。

主程序

    PROC main()
        SocketIni;// 调用Socket初始化子程序
        WHILE TRUE DO
            SocketReceiveData;//  调用接收数据子程序
            Start_Stop;
            RobotState;
            SocketSendData;// 调用发送数据子程序
        ENDWHILE

Socket初始化

    PROC SocketIni()
        SocketClose socketServer;!close server 
        SocketClose client_socket;!close client connection 
        Client_Ip := "";
        SocketCreate socketServer;!create socket
        SocketBind socketServer, Sever_IP_Address, Sever_Port;!bind Ip and port 
        SocketListen socketServer;
        SocketAccept socketServer,client_socket\ClientAddress:=Client_Ip\Time:=WAIT_MAX;!accept client connection
    ENDPROC

Socket数据接收

 PROC SocketReceiveData()
        ReceiveData :=[0,0,0,0,0,0,0,0,0,0];
        SocketReceive client_socket \Data:= ReceiveData;!Receive Data 
        arrReceiveData:=ReceiveData;
        arrSendData{3} := arrReceiveData{3};
        arrSendData{4} := arrReceiveData{4};
        !TPWrite ByteToStr(ReceiveData{1});
        !WaitTime 0.1;
        !TPWrite ByteToStr(ReceiveData{3});
        !Start_Stop;
        ProgramName;

        ERROR
            IF ERRNO=ERR_SOCK_CLOSED THEN
                SocketIni;
                RETRY;
            ENDIF
            IF ERRNO=ERR_SOCK_TIMEOUT THEN
                SocketIni;
                WaitTime 0.2;
                RETRY;
            ENDIF
    ENDPROC

Socket数据发送

    PROC SocketSendData()
        IF SendData{1}=0 THEN 
            WaitTime 0.2;
            arrSendData{1}:=1;
        ELSE
            WaitTime 0.2;
            arrSendData{1}:=0;
        ENDIF
        SendData:=arrSendData;
        SocketSend client_socket\Data:=SendData;

     ERROR
        IF ERRNO = ERR_SOCK_CLOSED OR ERRNO = SOCKET_LISTENING THEN
            SocketIni;
        RETRY;
    ENDIF
    ENDPROC