北岛夜话
原创工业智能控制领域(PLC、单片机/嵌入式、机器人、通信、机器视觉)的技术及经验分享。
文章528 浏览8042648

西门子PLC以太网开放式用户通信连载(3)-TURCV

前面的文章我们介绍了西门子PLC开放式用户通信(open user communication)中用于TCP协议的数据接收指令—TRCV,今天这篇文章,我们来介绍下用于UDP协议的数据接收指令—TURCV。

cover.png

TURCV指令用来接收基于UDP协议的数据。在使用TURCV之前,也同样需要调用TCON指令来建立“连接”。当然,对于UDP协议,这个“连接”并非通信伙伴之间的真实连接,而更多的是用户程序对于通信参数的一种配置(比如,通信伙伴的IP和端口等,可以参考文章:UDP协议通信需要建立连接吗?)。当数据接收成功后,在参数ADDR中可以看到通信伙伴(发送方)的IP地址、端口号等信息。

下面我们来介绍如何在博途(Portal)环境中使用TURCV指令。

首先在指令列表中找到TURCV指令,如下图:

TURCV_List.PNG

将其拖拽到程序块中,系统会自动生成一个背景数据块(Instance DB),如下图:

TURCV_DB.png

这些步骤跟之前的TRCV指令是类似的,详细信息可以参考:西门子PLC以太网开放式用户通信连载(2)-TRCV

在程序块中新添加的TURCV指令如下图:

TURCV_init.png

TURCV各参数的含义如下:

  • EN_R:使能接收。当EN_R的值为1时,TURCV可以接收数据;

  • ID:调用TCON时分配的通信连接ID;

  • LEN:接收数据的长度,范围0~1472个字节;

  • DATA:用来指向接收缓存区的指针,可以是输入/输入缓存区、位存储区或者数据块;

  • ADDR:指向TADDR_Param类型的数据块的指针;

  • NDR:接收到新数据(New Data Received)。1=接收到新数据,0=没有接收到新数据;

  • BUSY:接收是否完成。1=正在接收数据;

  • ERROR:接收过程是否有错误。1=有错误发生;

  • STATUS:接收数据的状态;

  • RCVD_LEN:接收数据的长度,以字节为单位;

ADDR参数中存放的是远程通信伙伴(发送方)的信息,其数据类型为TADDR_Param,总共占用8个字节:

  • 字节0~3(rem_ip_addr)表示远程通信伙伴的IP地址(IPv4);

  • 字节4,5(rem_port_nr)表示远程通信伙伴的端口号(Port number);

  • 字节6,7(reserved)为备用字节;

需要为TURCV指令的ADDR参数分配一个数据类型为TADDR_Param的数据块,方法如下:

点击【添加块】,在弹出的对话框中选择【数据块】,在类型中选择【TADDR_Param】,给该数据块起个名字,比如:DB_ADDR_Param,如下图:

DB_ADDR_Param.png

新创建的DB块包含了前面介绍的【TADDR_Param】的参数:REM_IP_ADDR,REM_PORT_NR和RESERVED,如下图:

type_ADDR_Param.png

完整的TURCV指令如下图:

TURCV_complete.png

好了,关于开放式用户通信UDP数据接收指令-TURCV就先介绍到这里,欢迎扫描下方的二维码关注我们的微信公众号。

小程序【李工谈工控】可提供文章搜索功能,欢迎扫描右侧的二维码体验


已经过安全软件检测无毒,请您放心下载。

取消

感谢您的支持,欢迎常来看看!

扫码支持
一点动力,多少随意

打开支付宝扫一扫,即可进行扫码打赏哦

发表评论

  • 你好 李工,想问一个问题,S7-1200的TRCV_C模块,连接好了之后,为什么busy一直为true,status一直为7006?这是什么原因呢?

    • 你尽量全面的把在线代码状态截图发到founderchip@163.com,需要分析一下。

  • 李工有没有开放式通讯调试软件

  • 你好李工,为什么我配好后一直显示状态码7000,没有显示连接完成?