栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

codesys TCP客户端程序

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

codesys TCP客户端程序

CASE nClientStep OF
	ENUM_tcp_client.nInitial://复位信号
		TCP_Client.xEnable:=FALSE;
		TCP_Read.xEnable:=FALSE;
		TCP_Write.xExecute:=FALSE;

		TcpClientStatus.bConnectDone:=FALSE;
		TcpClientStatus.bReceiveDone:=FALSE;
		TcpClientStatus.bSendDone:=FALSE;
		TcpClientStatus.bCloseDone:=FALSE;

		IF TcpClientControl.bConnect THEN
			nClientStep:=ENUM_tcp_client.nConnect;
		END_IF
		
	ENUM_tcp_client.nConnect://连接服务器
		TCP_Client.xEnable:=TRUE;
		nClientStep:=ENUM_tcp_client.nWhetherConnect;

	ENUM_tcp_client.nWhetherConnect://判断是否连接成功
		IF TCP_Client.xError THEN
			nClientStep:=ENUM_tcp_client.nInitial;
		END_IF
		
		IF TCP_Client.xActive AND NOT TCP_Client.xError THEN
			TcpClientStatus.bConnectDone:=TRUE;
			nClientStep:=ENUM_tcp_client.nDetermineAction;
		END_IF
		
	ENUM_tcp_client.nDetermineAction://判断动作
		TcpClientStatus.bSendDone:=FALSE;
		TcpClientStatus.bReceiveDone:=FALSE;
		
		IF TcpClientControl.bClose THEN
			nClientStep:=ENUM_tcp_client.nInitial;
		ELSIF TcpClientControl.bSend THEN
			nClientStep:=ENUM_tcp_client.nSend;
		ELSE
			nClientStep:=ENUM_tcp_client.nReceive;
		END_IF
		
	ENUM_tcp_client.nReceive://接收数据
		TCP_Read.xEnable:=TRUE;
		nClientStep:=ENUM_tcp_client.nWhetherReceive;

	ENUM_tcp_client.nWhetherReceive://判断是否接收成功
		TCP_Read.xEnable:=FALSE;
		IF TCP_Read.xError THEN
			nClientStep:=ENUM_tcp_client.nInitial;
		END_IF
		
		IF NOT TCP_Read.xBusy AND NOT TCP_Read.xError THEN
			IF nReceiveBytes>0 THEN
				TcpClientStatus.bReceiveDone:=TRUE;
				nClientStep:=ENUM_tcp_client.nDetermineAction;
			ELSE
				nClientStep:=ENUM_tcp_client.nDetermineAction;
			END_IF
		END_IF
		
	ENUM_tcp_client.nSend://发送数据
		TCP_Write.xExecute:=TRUE;
		nClientStep:=ENUM_tcp_client.nWhetherSend;

	ENUM_tcp_client.nWhetherSend://判断是否发送成功
		TCP_Write.xExecute:=FALSE;
		IF TCP_Write.xError THEN
			nClientStep:=ENUM_tcp_client.nClose;
		END_IF
		
		IF NOT TCP_Write.xBusy AND NOT TCP_Write.xError THEN
			TcpClientStatus.bSendDone:=TRUE;
			nClientStep:=ENUM_tcp_client.nDetermineAction;
		END_IF
END_CASE

//功能块
TCP_Client(
	xEnable:= , 
	xDone=> , 
	xBusy=> , 
	xError=> , 
	udiTimeOut:= , 
	ipAddr:=TcpClientParameter.sIp , 
	uiPort:=TcpClientParameter.nPort , 
	eError=> , 
	xActive=> , 
	hConnection=>hSocket );

TCP_Read(
	xEnable:= , 
	xDone=> , 
	xBusy=> , 
	xError=> , 
	hConnection:=hSocket , 
	szSize:=TcpClientParameter.nReceiveDataLength , 
	pData:=ADR(TcpClientParameter.ReceiveData) , 
	eError=> , 
	xReady=> , 
	szCount=>nReceiveBytes );

IF nReceiveBytes>0 THEN
	TcpClientParameter.ReceiveData.sString:=LEFt(TcpClientParameter.ReceiveData.sString,ULINT_TO_INT(nReceiveBytes));
	FOR i:=INT_TO_UINT(LEN(TcpClientParameter.ReceiveData.sString)) TO 255 BY 1 DO
		TcpClientParameter.ReceiveData.nByte[i]:=0;
	END_FOR
END_IF

IF TCP_Write.xExecute THEN
	FOR i:=TcpClientParameter.nSendDataLength TO 255 BY 1 DO
		TcpClientParameter.SendData.nByte[i]:=0;
	END_FOR
END_IF

TCP_Write(
	xExecute:= , 
	udiTimeOut:= , 
	xDone=> , 
	xBusy=> , 
	xError=> , 
	hConnection:=hSocket , 
	szSize:=TcpClientParameter.nSendDataLength , 
	pData:=ADR(TcpClientParameter.SendData) , 
	eError=> );
//远程IP和端口号
IF tcpClient.parameter.sIp.sAddr='' THEN
	tcpClient.parameter.sIp.sAddr:='192.168.150.204';
	tcpClient.parameter.nPort:=55;
END_IF

tcpClient.parameter.nSendDataLength:=INT_TO_UINT(LEN(tcpClient.parameter.SendData.sString));

//功能块
tcpClient.FB(
	TcpClientControl:=tcpClient.control , 
	TcpClientParameter:=tcpClient.parameter , 
	TcpClientStatus=>tcpClient.status );

//复位
IF tcpClient.status.bSendDone THEN
	tcpClient.control.bSend:=FALSE;
END_IF
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1035729.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号