[西门子] 西门子 S7-200 SMART 系列十二:实例详解s7-200 smart CPU与CPU之...

[复制链接]
查看45167 | 回复0 | 2024-4-10 08:28:16 | 显示全部楼层 |阅读模式

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个被动连接。只可从主程序或中断例程中调用库函数,但不可同时从这两个程序中调用。

测试环境:

    软件版本:STEP 7-Micro/WIN SMART V2.8SMART CPU固件版本:V2.6通讯硬件: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 客户端编程


    设置本机IP地址,客户端设置为192.168.0.101


    image-20240326113749026
    建立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:远程设备上的端口号

    LocPort:本地 CPU 上的端口号

      有效端口号范围为 1 到 49151。不能使用端口号 20、21、25、80、102、135、161、162、443 以及 34962 至 34964。这些端口具有特定用途。建议采用的端口号范围为 2000 到 5000。对于被动连接,本地端口号必须唯一(不重复)。有效端口号范围为 1 到 49151。建议采用的端口号范围为 2000 到 5000。对于被动连接,CPU 会忽略远程端口号(可以将其设置为零)。

    调用发送数据指令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 为零(无错误)。

    注意事项:


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

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

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


    image-20240326141043985
    参数说明
    参数声明数据类型描述
    ENINBOOL使能输入
    ReqINBOOL如果  Req = TRUE,CPU 启动断开连接操作。
    ConnIDINWORDCPU  使用连接 ID (ConnID) 标识要终止的连接(连接过程中定义)。
    DoneOUTBOOL当断开连接操作完成且没有错误时,指令置位  Done 输出。
    BusyOUTBOOL当断开连接操作正在进行时,指令置位  Busy 输出。
    ErrorOUTBOOL当断开连接操作完成但发生错误时,指令置位  Error 输出。
    StatusOUTBYTE如果指令置位  Error 输出,Status 输出会显示错误代码。如果指令置位 Busy 或 Done 输出,Status 为零(无错误)。

    分配库存储区 开放式用户通信库需要使用 50 个字节的 V 存储器,需手动分配 ,否则编译会报错;完成后,下载程序,TCP 客户端配置完成;


    image-20240326141549207
S7-200 SMART TCP 服务端编程


    设置本机IP地址,客户端设置为192.168.0.102


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


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


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

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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则