在Codesys中如何实现Tcp协议通讯

一、环境和所需功能库

1. codesys X64 环境下
image

2. 所需TCP通讯功能库的安装
进入库管理器中,点击添加库后搜索“CAA NET Base Services”关键字,点击安装后
image
image
安装完之后,就有所需的TCP功能块(Tcp_Client&Tcp_Server&Tcp_Read&Tcp_Write等)
image

3.tcp测试软件选择“NetAssistant”
下载链接网页地址:https://netassistant.trydo.top/en/
image

二、codesys作为Tcp Client

1.代码展示

点击查看代码
 `PROGRAM POU_TCP_Client
VAR
	(*客户端功能块实例化*)
	fbTcpClient : NBS.TCP_Client;		//tcp客户端实例化
	fbTcpClientRead : NBS.TCP_Read;		//tcp客户端数据读取
	fbTcpClientWrite : NBS.TCP_Write;	//tcp客户端数据发送
	(*连接参数*)
	ipAddress : NBS.IP_ADDR ;			//服务器ip
	ip : STRING(20):= '127.0.0.1';
	iPort     : UINT := 5000;			//服务器端口号
	
	bConnectEn : BOOL ;					//客户端通讯连接触发
	bConnectDone : BOOL;				//客户端通讯连接完成
	
	bTcpReadEn : BOOL;					//客户端数据读取触发
	bTcpReadDone : BOOL;				//客户端数据读取完成
	bTcpReadErrID : INT;				//客户端数据读取错误ID
	sTcpReadBuffer :STRING ;			//tcp读取数据缓存区
	
	bTcpWriteEn : BOOL;					//客户端数据写入触发
	bTcpWriteDone : BOOL;				//客户端数据写入完成
	bTcpWriteErrID : INT;				//客户端数据写入错误ID
	sTcpWriteBuffer :STRING;			//tcp写入数据缓存区
END_VAR`
点击查看代码
`//IP等于“127.0.0.1”
ipAddress.sAddr := ip;
//客户端连接
fbTcpClient(
	xEnable:= bConnectEn, 
	xDone=> bConnectDone, 
	xBusy=> , 
	xError=> , 
	udiTimeOut:= 3000, 
	ipAddr:= ipAddress, 
	uiPort:= iPort, 
	eError=> , 
	xActive=> , 
	hConnection=> );
//客户端数据读取
fbTcpClientRead(
	xEnable:= bTcpReadEn AND fbTcpClient.xActive, 			//客户端真是连接正常下
	xDone=> bTcpReadDone, 
	xBusy=> , 
	xError=> , 
	hConnection:= fbTcpClient.hConnection, 
	szSize:= SIZEOF(sTcpReadBuffer), 
	pData:= ADR(sTcpReadBuffer), 
	eError=> bTcpReadErrID, 
	xReady=> , 
	szCount=> );
//读取完成将触发信号复位
IF bTcpReadDone THEN 
	bTcpReadEn := FALSE;
END_IF
	
//客户端数据发送
fbTcpClientWrite(
	xExecute:= bTcpWriteEn AND fbTcpClient.xActive, 		//客户端真是连接正常下
	udiTimeOut:= 3000, 
	xDone=> bTcpWriteDone, 
	xBusy=> , 
	xError=> , 
	hConnection:= fbTcpClient.hConnection, 
	szSize:= SIZEOF(sTcpWriteBuffer), 
	pData:= ADR(sTcpWriteBuffer), 
	eError=> bTcpWriteErrID);	
//发送完成将触发信号复位
IF bTcpWriteDone THEN 
	bTcpWriteEn := FALSE;
END_IF
`

2. NetAssistant服务器建立
ip为本地环网'127.0.0.1',端口与codesys中'5000'保持一致
image

3. 发送数据测试效果
codesys侧发送数据'HELLO'
image
“NetAssistant”侧接受到的数据
image

4. 读取数据测试效果
在“NetAssistant”发送数据'HELLO'
image
codesys侧接受到的数据
image

三、codesys作为Tcp Server

  1. 代码展示
点击查看代码
`
PROGRAM POU_TCP_Server
VAR
	(*服务器功能块实例化*)
	fbTcpConnection : NBS.TCP_Connection;				//tcp客户端连接检测
	fbTcpServer : NBS.TCP_Server;						//tcp服务器建立
	fbTcpRead : NBS.TCP_READ;							//tcp服务器数据读取
	fbTcpWrite : NBS.TCP_Write;							//tcp服务器数据发送		

	(*连接参数*)
	ip : STRING(20) := '127.0.0.1';	//客户端ip
	ipAddress : NBS.IP_ADDR;
	uiPort : UINT := 5001;			//服务器端口为5001
		
	bTcpServerEn : BOOL; 			//tcp服务器开启触发
	bTcpServerDone : BOOL; 			//tcp服务器开启完成
	iTcpServerErrorID : INT; 		//tcp服务器错误ID
	
	bTcpServerWriteEn : BOOL;		//tcp服务器发送触发
	sTcpServerReadBuffer : STRING;	//tcp服务器读取缓存区
	sTcpServerWriteBuffer : STRING;	//tcp服务器发送缓存区
END_VAR
`
点击查看代码

`
//客户端ip为127.0.0.1
ipAddress.sAddr := ip;

//tcp服务器建立开启
fbTcpServer(
	xEnable:= bTcpServerEn, 
	xDone=> bTcpServerDone, 
	xBusy=> , 
	xError=> , 
	ipAddr:= ipAddress, 
	uiPort:= uiPort, 
	eError=> iTcpServerErrorID, 
	hServer=> );

//检测是否有客户端连接
fbTcpConnection(
	xEnable:= fbTcpServer.xBusy, 
	xDone=> , 
	xBusy=> , 
	xError=> , 
	hServer:= fbTcpServer.hServer, 
	eError=> , 
	xActive=> , 
	hConnection=> );
	
//服务器数据读取
	fbTcpRead(
	xEnable:= fbTcpConnection.xActive, 
	xDone=> , 
	xBusy=> , 
	xError=> , 
	hConnection:= fbTcpConnection.hConnection, 
	szSize:= SIZEOF(sTcpServerReadBuffer), 
	pData:= ADR(sTcpServerReadBuffer), 
	eError=> , 
	xReady=> , 
	szCount=> );
	
//服务器数据发送
	fbTcpWrite(
	xExecute:= bTcpServerWriteEn AND fbTcpConnection.xActive, 
	udiTimeOut:= 3000, 
	xDone=> , 
	xBusy=> , 
	xError=> , 
	hConnection:= fbTcpConnection.hConnection, 
	szSize:= SIZEOF(sTcpServerWriteBuffer), 
	pData:= ADR(sTcpServerWriteBuffer), 
	eError=> );
//发送完成后服务触发信号
IF fbTcpWrite.xDone THEN 
	bTcpServerWriteEn := FALSE;
END_IF
`

2. NetAssistant客户端建立
ip为本地环网'127.0.0.1',端口与codesys中'5001'保持一致
image

3. 发送数据测试效果
codesys侧发送数据'HELLO'
image
“NetAssistant”侧接受到的数据
image

4. 读取数据测试效果
NetAssistant”侧发送数据'HELLO'
image
codesys侧接受到的数据
image

posted @ 2026-11-07 04:37  不会通讯的凡果  阅读(3)  评论(0)    收藏  举报