西门子 S7-200 SMART 系列十二:实例详解s7-200 smart CPU与CPU之间 TCP通信

原文链接:实例讲解s7-200 smart tcp 通信

image-20240326145354710

TCP 协议通讯介绍

TCP是一个因特网核心协议。在通过以太网通信的主机上运行的应用程序之间,TCP 提供了可靠、有序并能够进行错误校验的消息发送功能。TCP 能保证接收和发送的所有字节内容和顺序完全相同。TCP 协议在主动设备(发起连接的设备)和被动设备(接受连接的设备)之间创建连接。一旦连接建立,任一方均可发起数据传送。

TCP协议是一种"流"协议。这意味着消息中不存在结束标志。所有接收到的消息均被认为是数据流的一部分。

s7-200 smart 与 s7-200 smart之间TCP通讯实例

S7 200 SMART与之间的TCP通讯可以通过两边调用**OUC(开放式用户通讯)**指令库中的TCP_CONNECT、TCP_SEND、TCP_RECV、DISCONNECT指令来实现。

image-20240326112029520

  • 开放式用户通信库需要使用 50 个字节的 V 存储器。
  • 开放式的用户通讯连接资源包括8个主动连接和8个被动连接。
  • 只可从主程序或中断例程中调用库函数,但不可同时从这两个程序中调用。

测试环境:

  1. 软件版本:STEP 7-Micro/WIN SMART V2.8
  2. SMART CPU固件版本:V2.6
  3. 通讯硬件:TP电缆(以太网电缆)

硬件配置:

序号名称IP硬件型号功能说明
1tcp客户端192.168.0.101ST20 V2.06发送VB0~VB3数据至服务器PLC的VB2000~VB20003中
2tcp服务端192.168.0.102ST20 V2.06接收客户端VB0~VB3数据并写入到VB2000~VB2003
S7-200 SMART TCP 客户端编程
  1. 设置本机IP地址,客户端设置为192.168.0.101

    image-20240326113749026

  2. 建立TCP连接 调用TCP_CONNECT指令建立TCP连接。设置连接伙伴地址为192.168.0.102,远端端口为2001,本地端口为5000,连接标识ID为1。利用SM0.0使能Active,设置为主动连接。

    image-20240326132644880

    注:在建立连接时需先触发服务器端的建立连接指令,再触发客户端。

    参数说明

    参数声明数据类型描述
    ENINBOOL使能输入
    ReqINBOOLReq = TRUE,CPU 启动连接操作。
    Req = FALSE,则输出显示连接的当前状态。
    ActiveINBOOLTRUE = 主动连接
    FALSE = 被动连接
    ConnIDINWORDCPU 使用连接 ID (ConnID) 为其它指令标识该连接。可能的 ConnID 范围为 0 到 65534。
    IPaddr1…IPaddr4INBYTE这些是 IP 地址的四个八位字节。例如:192.168.0.101对应IPaddr1=192,IPaddr4=101
    RemPortINWORDRemPort 是远程设备上的端口号。
    LocPortINWORDLocPort 是本地设备上的端口号。
    DoneOUTBOOL当连接操作完成且没有错误时,指令置位 Done 输出。
    BusyOUTBOOL当连接操作正在进行时,指令置位 Busy 输出。
    ErrorOUTBOOL当连接操作完成但发生错误时,指令置位 Error 输出。有关详细信息,请参见“开放式用户通信库指令错误代码”。
    StatusOUTBYTE如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。

    RemPort:远程设备上的端口号

    • 有效端口号范围为 1 到 49151。
    • 建议采用的端口号范围为 2000 到 5000。
    • 对于被动连接,CPU 会忽略远程端口号(可以将其设置为零)。

    LocPort:本地 CPU 上的端口号

    • 有效端口号范围为 1 到 49151。
    • 不能使用端口号 20、21、25、80、102、135、161、162、443 以及 34962 至 34964。这些端口具有特定用途。
    • 建议采用的端口号范围为 2000 到 5000。
    • 对于被动连接,本地端口号必须唯一(不重复)。
  3. 调用发送数据指令TCP_SEND 发送以VB0为起始,数据长度为DataLen长度的数据发送到连接ID为1指定的远程设备。使用1HZ脉冲触发发送请求;

    image-20240326135058370

    参数说明

    参数声明数据类型描述
    ENINBOOL使能输入
    ReqINBOOLReq = TRUE,CPU 启动发送操作。
    Req = FALSE,则输出显示发送操作的当前状态。
    ConnIDINWORD连接 ID (ConnID) 是此发送操作所用连接的编号。
    DataLenINWORDDataLen 是要发送的字节。
    DataPtrINDWORDDataPtr 是指向待发送数据的指针。可以指向 I、Q、M 或 V 存储器
    DoneOUTBOOL当发送操作完成且没有错误时,指令置位 Done 输出。
    BusyOUTBOOL当发送操作正在进行时,指令置位 Busy 输出。
    ErrorOUTBOOL当发送操作完成但发生错误时,指令置位 Error 输出。
    StatusOUTBYTE如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。

    注意事项:

    1. 在一个发送操作中最多可以发送 1024 字节的数据,DataLen 发送的字节数范围(1 到 1024)

    2. 当发送完成后,指令显示调用一次 TCP_SEND 的 Done 或 Error 状态。此后,TCP_SEND 通过错误代码 24 作出响应)。如果 Req 输入设置为 TRUE,则程序会启动另一个发送操作。

  4. 终止通讯连接 可通过DISCONNECT指令终止指定ID的连接。

    image-20240326141043985

    参数说明

    参数声明数据类型描述
    ENINBOOL使能输入
    ReqINBOOL如果 Req = TRUE,CPU 启动断开连接操作。
    ConnIDINWORDCPU 使用连接 ID (ConnID) 标识要终止的连接(连接过程中定义)。
    DoneOUTBOOL当断开连接操作完成且没有错误时,指令置位 Done 输出。
    BusyOUTBOOL当断开连接操作正在进行时,指令置位 Busy 输出。
    ErrorOUTBOOL当断开连接操作完成但发生错误时,指令置位 Error 输出。
    StatusOUTBYTE如果指令置位 Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。
  5. 分配库存储区 开放式用户通信库需要使用 50 个字节的 V 存储器,需手动分配 ,否则编译会报错;完成后,下载程序,TCP 客户端配置完成;

    image-20240326141549207

S7-200 SMART TCP 服务端编程
  1. 设置本机IP地址,客户端设置为192.168.0.102

    image-20240326142014693

  2. 建立TCP连接 调用TCP_CONNECT指令建立TCP连接。设置连接伙伴地址为192.168.0.101,远端端口为5000(对应客户端本地端口),本地端口为2001(对应客户端远程端口),连接标识ID为1。利用SM0.0常闭点使能Active,设置为被动连接。

    image-20240326142215117

  3. 接收数据 调用TCP_RECV指令接收指定ID连接的的数据。接收的缓冲区长度为MaxLen,数据接收缓冲区以VB2000为起始。

    image-20240326142320645

    注:VW1000长度与客户端长度一致,否则会出现“丢包现象”

  4. **同样不要忘了,需要分配库存储器;**库存储器分配完成后,下载程序即配置完成;

    image-20240326142620516

加小编微信,邀您加入“工控技术交流群”
样例程序下载

如果您觉得文章对您有帮助,欢迎评论、点赞、收藏,加关注!您的支持将是小编最大动力!

关注公众号,发送10006,获取样例程序

  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值