热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

汇川使用笔记6:TCP服务端和客户端通讯

目录一、前言1、设备组态2、创建任务程序文件二、创建服务端程序1、定义变量2、创建服务端程序三、创建客户端程序1、定义变量2、创建客户端程序四、程序测试1、服

目录

一、前言

1、设备组态

2、创建任务程序文件

二、创建服务端程序

1、定义变量

2、创建服务端程序

三、创建客户端程序

1、定义变量

2、创建客户端程序

四、程序测试

1、服务端启动

2、客户端连接

 3、服务端给客户端发送数据

4、客户端给服务端发送数据

五、下载连接




一、前言


1、设备组态


2、创建任务程序文件

在Application中分别添加程序server、client,并添加到MainTask周期任务中

 


二、创建服务端程序


1、定义变量


VARServerPORT : UINT:=2220; //创建服务器端的端口号IP_ADR2 : NBS.IP_ADDR; //服务器的ip地址ip :STRING(20):='192.168.1.88';TCP_Connection : NBS.TCP_Connection;TCP_Server_open : NBS.TCP_Server;server_read : NBS.TCP_Read;WRITEBUF : NBS.TCP_Write; readbuff : ARRAY[0..1000]OF BYTE := [ 1000(0)]; //存储-客户端的数据 writebuff : ARRAY[0..1000] OF BYTE:=[1000(0)]; //给客户端写数据server_en : BOOL; //打开服务器WRITE_EN : BOOL; //向客户端写数据//read功能块状态read_done : BOOL;read_error : BOOL;read_xerror : BOOL;
END_VAR;

2、创建服务端程序


//PLC作为服务器
//IP_ADR2.sAddr:='192.168.1.88'; //PLC ip地址
IP_ADR2.sAddr:=ip;//服务器打开
TCP_Server_open(xEnable:=server_EN , //on:开启服务器xDOne=> , xBusy=> , xError=> , ipAddr:=IP_ADR2 , uiPort:= ServerPORT, //端口号eError=> , hServer=> );//检测有无客户端连接
TCP_Connection(xEnable:= TCP_Server_open.xBusy, xDOne=> , xBusy=> , xError=> , hServer:= TCP_Server_open.hServer, eError=> , xActive=> , hCOnnection=> );//read
server_read(xEnable:=TCP_Connection.xActive , xDOne=>read_done , xBusy=> , xError=>read_xerror , hConnection:=TCP_Connection.hConnection , szSize:=SIZEOF(readbuff) , pData:=ADR(readbuff) , eError=> , xReady=> , szCount=> );//WRITE
WRITEBUF(xExecute:= write_en , udiTimeOut:= 3000,xDOne=> , xBusy=> , xError=> , hConnection:= TCP_Connection.hConnection , szSize:= SIZEOF(writebuff), pData:=ADR(writebuff) , eError=> );IF WRITEBUF.xDone THENWRITE_EN:=FALSE;END_IF

三、创建客户端程序


1、定义变量

VARClientPORT: UINT:=2220;IP_ADR1 :NBS.IP_ADDR;ip :STRING(20):='192.168.1.88';TCP_connect :NBS.TCP_Client; client_tcp_READ :NBS.TCP_Read;client_TCP_write :NBS.TCP_Write;client_READ_BUF :ARRAY[0..1000] OF BYTE; //读取数据缓存区client_Write_BUF :ARRAY[0..1000] OF BYTE; //要写的数据缓存区START :BOOL; //连接服务器client_Write_en :BOOL;//Client相关状态connectxdone :BOOL;connectxerror :BOOL;write_xdone :BOOL;write_xerror :BOOL;read_xdone :BOOL;read_xerror :BOOL;
END_VAR

2、创建客户端程序


//IP_ADR1.sAddr:='192.168.1.88';// 要连接的服务器ip 地址
IP_ADR1.sAddr:=ip;//PLC作为客户端连接服务器
TCP_connect
(xEnable:=START, //start on连接服务器xDOne=>connectxdone , xBusy=> , xError=>connectxerror , udiTimeOut:=30000, ipAddr:=IP_ADR1,uiPort:=ClientPORT , eError=> , xActive=>, hCOnnection=> );//客户端往服务器写数据 client_TCP_write(xExecute:= client_Write_en, //write_en 上升沿 将pl 数组里数据发送到服务器udiTimeOut:=1000 , xDOne=>write_xdone , xBusy=> , xError=> , hConnection:=TCP_connect.hConnection , szSize:=100 , //发送数据大小pData:=ADR(client_Write_BUF) , eError=> );
IF(client_TCP_write.xDone) THEN
client_Write_en:=FALSE ;
END_IFclient_TCP_READ(xEnable:=TCP_connect.xActive , xDOne=>read_xdone , xBusy=> , //接收过程为0n 接收结束offxError=>read_xerror , hConnection:=TCP_connect.hConnection , szSize:= 2000, pData:=ADR(client_READ_BUF) , eError=> , xReady=> , szCount=> ,);//接收的数据个数);

四、程序测试


1、服务端启动

server_EN设置为TRUE,


2、客户端连接

START设置为TRUE,connectxerror为FALSE,表示连接服务器成功


 3、服务端给客户端发送数据

writebuff数组前五个变量赋值

 然后WRITE_EN设置TRUE写操作(程序中检测WRITE_EN为TRUE立即修改为FALSE)

 在客户端中可以看到成功接收到服务端发送的数据(客户端读功能块默认在连接成功的情况下就读取操作)


4、客户端给服务端发送数据

client_Write_BUF前五个变量赋值

 给client_Write_en设置TRUE

 在服务端看到成功读取到的客户端所发送的数据


五、下载连接

https://download.csdn.net/download/panjinliang066333/86750966


推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Firefox火狐浏览器关闭到http://detectportal.firefox.com的流量问题解决办法
    本文介绍了使用Firefox火狐浏览器时出现关闭到http://detectportal.firefox.com的流量问题,并提供了解决办法。问题的本质是因为火狐默认开启了Captive portal技术,当连接需要认证的WiFi时,火狐会跳出认证界面。通过修改about:config中的network.captive-portal-service.en的值为false,可以解决该问题。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
author-avatar
乌鸦bz_371
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有