目录
一、TwinCAT3以太网TCP/IP客户端创建
1、系统连接示意图
1、程序创建
(1)工程创建和授权添加
(2)库文件添加
(3)变量创建
(4)程序
2、测试
(1)网络调试助手创建服务端监听
(2)PLC端的Client连接服务端
(3)PLC端给服务端发送数据
(4)服务端给PLC发送数据
二、TwinCAT3以太网TCP/IP服务端创建
1、系统连接示意图
2、程序创建
(1)变量创建
(2)程序
3、测试
(1)Listen、客户端连接
(2)服务端中Accept接收请求
(3)服务端和客户端之间相互发送数据
三、工程下载连接
1、 TwinCAT3以太网TCP/IP客户端测试程序
2、 TwinCAT3以太网TCP/IP服务端测试程序
测试之前需要在PLC的window系统里安装TCP/IP软件吧包,安装完成关电重启。安装包在提供的工程下载连接中。
一、TwinCAT3以太网TCP/IP客户端创建
1、系统连接示意图
PLC作为客户端去连接TCP服务端。
1、程序创建
(1)工程创建和授权添加
创建TwinCAT3工程,创建PLC程序,在配置模式下进行IO扫描。License中勾选TCP/IP授权,7天免费试用。
(2)库文件添加
实验需要用到4个功能块,分别是FB_SocketConnect(用于建立连接),FB_SocketSend(用于发送),FB_SocketReceive(用于接收),FB_SocketClose(用于关闭连接)
(3)变量创建
PROGRAM SocketClient
VAR_FB_SocketConnect: FB_SocketConnect; //用于建立连接_FB_SocketSend: FB_SocketSend; //用于发送_FB_SocketReceive: FB_SocketReceive; //用于接收_FB_SocketClose: FB_SocketClose; //用于关闭连接_hSocket: T_HSOCKET; //Socket连接句柄_ServerIpAddress: T_IPv4Addr:='192.168.1.33'; //要连接Socket Server的ip地址_ServerPort: UDINT:=6666;bConnect: BOOL;bSend: BOOL;//bRecevie: BOOL;bClose: BOOL;boConnectErr: BOOL;nSendByteLength: UDINT:=9; //需要发送的字节数 //nReceiveByteLength: UDINT:=20;arrSendData: ARRAY[1..10] OF BYTE;arrrReceiveData: ARRAY[1..100] OF BYTE;Timer1: TON;Send_R_TRIG: R_TRIG;END_VAR
(4)程序
arrSendData[1] := 16#11;
arrSendData[2] := 16#22;
arrSendData[3] := 16#33;
arrSendData[4] := 16#44;
arrSendData[5] := 16#55;
arrSendData[6] := 16#66;
arrSendData[7] := 16#77;
arrSendData[8] := 16#88;
arrSendData[9] := 16#99;
arrSendData[10] := 16#A0;//
_FB_SocketConnect(sSrvNetId:= , sRemoteHost:= _ServerIpAddress, //要连接Socket Server的ip地址nRemotePort:= _ServerPort, //要连接Socket Server的端口号bExecute:= bConnect, tTimeout:= T#1S, bBusy=> , bError=> boConnectErr, nErrId=> , hSocket=> _hSocket);//
Send_R_TRIG(CLK:= bSend, Q=> );
_FB_SocketSend(sSrvNetId:= , hSocket:= _hSocket, //cbLen:= SIZEOF(arrSendData), //1、将整个数组发送过去cbLen:= nSendByteLength, //2、将指定的字节数发送过去pSrc:= ADR(arrSendData), bExecute:= Send_R_TRIG.Q, tTimeout:= T#1S, bBusy=> , bError=> , nErrId=> );//500ms接收一次
Timer1(IN:= NOT timer1.q, PT:=T#500MS , Q=> , ET=> );
_FB_SocketReceive(sSrvNetId:= , hSocket:= _hSocket, cbLen:= SIZEOF(arrrReceiveData), pDest:= ADR(arrrReceiveData), //bExecute:= bRecevie, bExecute:= bConnect AND NOT boConnectErr AND Timer1.Q, tTimeout:= T#1S, bBusy=> , bError=> , nErrId=> , nRecBytes=> );//
_FB_SocketClose(sSrvNetId:= , hSocket:= _hSocket, bExecute:= bClose, tTimeout:= T#1S, bBusy=> , bError=> , nErrId=> );
2、测试
(1)网络调试助手创建服务端监听
(2)PLC端的Client连接服务端
PLC程序中输入IP地址和端口号进行连接,连接正常没有报错、服务端监测到PLC的连接。
(3)PLC端给服务端发送数据
PLC程序中设置发送的字节数为9,只发送9个byte的数据。bSend上升沿信号触发有效。
(4)服务端给PLC发送数据
设置最大接收的数据量100byte(根据实际需要可设置不同大小),服务端发送的时候数据量不要超过100byte。接收扫描实时间500ms(接收时间也可以调)
二、TwinCAT3以太网TCP/IP服务端创建
1、系统连接示意图
PLC作为服务端,创建Listen等待客户端连接,客户端连接后服务端再进行Accept接收请求。
2、程序创建
实验需要用到5个功能块,分别是FB_SocketListen,FB_ SocketAccept, FB_SocketSend,FB_SocketReceive,FB_SocketClose
(1)变量创建
PROGRAM SocketServer
VAR_FB_SocketListen: FB_SocketListen;_FB_SocketAccept: FB_SocketAccept;_FB_SocketSend: FB_SocketSend;_FB_SocketReceive: FB_SocketReceive;_FB_SocketClose: FB_SocketClose;_hListen: T_HSOCKET; //Socket监听句柄_hSocket: T_HSOCKET; //Socket连接句柄_LocalIpAddress: T_IPv4Addr:='192.168.1.31'; //要连接Socket Server的ip地址_LocalPort: UDINT:=9977;bListen: BOOL;bAccept: BOOL;bSend: BOOL;//bRecevie: BOOL;bClose: BOOL;nSendByteLength: UDINT:=9; //需要发送的字节数 //nReceiveByteLength: UDINT:=20;arrSendData: ARRAY[1..10] OF BYTE;arrrReceiveData: ARRAY[1..100] OF BYTE;Timer1: TON;Send_R_TRIG: R_TRIG;END_VAR
(2)程序
arrSendData[1] := 16#11;
arrSendData[2] := 16#22;
arrSendData[3] := 16#33;
arrSendData[4] := 16#44;
arrSendData[5] := 16#55;
arrSendData[6] := 16#66;
arrSendData[7] := 16#77;
arrSendData[8] := 16#88;
arrSendData[9] := 16#99;
arrSendData[10] := 16#A0;//Server端-监听
_FB_SocketListen(sSrvNetId:= , sLocalHost:= _LocalIpAddress, nLocalPort:= _LocalPort, bExecute:= bListen, tTimeout:=T#1S , bBusy=> , bError=> , nErrId=> , hListener=> _hListen);//Server端-接受请求
_FB_SocketAccept(sSrvNetId:= , hListener:= _hListen, bExecute:= bAccept, tTimeout:= T#1S, bAccepted=> , bBusy=> , bError=> , nErrId=> , hSocket=> _hSocket);//Server端-发送
Send_R_TRIG(CLK:= bSend, Q=> );
_FB_SocketSend(sSrvNetId:= , hSocket:= _hSocket, cbLen:= nSendByteLength, pSrc:= ADR(arrSendData), bExecute:= Send_R_TRIG.Q, tTimeout:= T#1S, bBusy=> , bError=> , nErrId=> ); //Server端-接收
//500ms接收一次
Timer1(IN:= NOT timer1.q, PT:=T#500MS , Q=> , ET=> );
_FB_SocketReceive(sSrvNetId:= , hSocket:= _hSocket, cbLen:= SIZEOF(arrrReceiveData), pDest:= ADR(arrrReceiveData), //bExecute:= bRecevie, bExecute:= bListen AND bAccept AND Timer1.Q, tTimeout:= T#1S, bBusy=> , bError=> , nErrId=> , nRecBytes=> ); //Server端-Socket关闭
_FB_SocketClose(sSrvNetId:= , hSocket:= _hSocket, bExecute:= bClose, tTimeout:= T#1S, bBusy=> , bError=> , nErrId=> );
3、测试
(1)Listen、客户端连接
(2)服务端中Accept接收请求
(3)服务端和客户端之间相互发送数据
三、工程下载连接
1、 TwinCAT3以太网TCP/IP客户端测试程序
TwinCAT3以太网通讯测试-Client.rar-嵌入式文档类资源-CSDN下载
2、 TwinCAT3以太网TCP/IP服务端测试程序
https://download.csdn.net/download/panjinliang066333/87421905