回复:用以太网方式,如何读写第三方报文

fankturkey

  • 帖子

    39
  • 精华

    0
  • 被关注

    5

论坛等级:游民

注册时间:2008-11-27

普通 普通 如何晋级?

发布于 2010-11-01 10:48:48

1楼

通过工业以太网的开放通讯

在STEP 7"通讯块"的"标准库"中提供了下列FB和UDT,用于通过用户程序与其它以太网兼容的通讯伙伴进行数据交换:

?连接导向协议:依据RFC?93的TCP,依据RFC?006的ISO on TCP:

?用于分配连接参数的UDT 65 "TCON_PAR"及其数据结构

?具有协议特定缺省值的UDT 651至UDT 656

?用于建立连接的FB 65 "TCON"

?用于终止连接的FB 66 "TDISCON"

?用于发送数据的FB 63 "TSEND"

?用于接收数据的FB 64 "TRCV"

?无连接协议:依据RFC?68的UDP

?UDT 65"TCON_PAR",具有分配本地通讯接入点参数的数据结构

?具有协议特定缺省值的UDT 657

?UDT 66"TCON_ADR",具有分配远程伙伴寻址参数的数据结构

?具有协议特定缺省值的UDT 661

?FB 65 "TCON",用于组态本地通讯接入点

?FB 66 "TDISCON",用于关闭本地通讯接入点

?用于发送数据的FB 67 "TUSEND"

?用于接收数据的FB 68 "TURCV"
//---------------------------------------------
用于工业以太网上开放通讯的FB的功能

连接导向和无连接协议

在数据通讯中主要有下列协议类型:

?连接导向协议类型:
用于在数据传送开始之前建立一个到通讯伙伴的逻辑连接。如必要,将在数据发送完成之后终止连接。连接导向协议用于对数据发送的可靠和安全性要求特别高的场合。通常,一条物理线路上可以存在许多逻辑连接。

用于工业以太网上开放通讯的FB支持下列连接导向协议:

?依据RFC?93的TCP/IP

?按照RFC 1006的ISO-on-TCP

?无连接协议类型:
它们工作时不需要连接。因此,也就没有与远程伙伴间的连接建立和终止发生。无连接协议传送未确认数据,向远程伙伴不可靠、不保证地传送,换句话说,数据可能在块不指示的情况下丢失。

用于工业以太网上开放通讯的FB支持下列连接导向协议:

?依据RFC?68的UDP

功能块实际如何工作取决于所使用的协议类型。这将在下一节中详细论述。

接收区

本术语将在下列部分反复使用。它指的是功能块输入所接收数据的区域。

接收区由下列两个变量指定:

?指向区域起始地址的指针

?区域长度

区域长度由LEN参数使用的协议类型指定(如果LEN <>?)或DATA参数长度信息指定(如果LEN = 0)。

TCP

在数据传输期间,不会传输关于消息的长度信息或有关消息的起始和结束信息。这在发送过程中不算什么问题,因为发送器知道它将发送多少数据字节。但是接收器无法检测数据流中的某条消息在何处结束以及下一条消息在何处开始。因此,建议在通讯伙伴上将接收区FB64 "TRCV"精确地设置为LEN参数FB63 "TSEND"(要发送的字节数)。

?Ad-hoc模式:
接收区与FB64 "TRCV"的DATA参数指定的区域相同

在收到数据块后,FB?4 "TRCV"立即将其传送给接收区,并将NDR设置为1。

如果所选择的接收区长度大于所发送的数据的长度,则FB?4 "TRCV"将所接收的数据全部输入接收区。然后将NDR设置为
TRUE,并将所接收的数据的长度写入RCVD_LEN。

如果您选择了一个接收区,但接收区的长度小于所发送数据的长度,FB64将尽量复制数据,直到接收区满。然后将NDR
设置为TRUE,并将接收区的长度写入RCVD_LEN。每次进一步调用时,都将收到另一个发送数据块。


?非Ad-hoc模式:
接收区由DATA参数(接收区的开始地址)和FB64的LEN参数(接收区的长度)定义。

如果所接收的数据无法完全填满接收区,该数据一开始时无法使用。只有当后续数据完全填满接收区时,该数据才可用。请注意,在这种情况下,来自两个不同发送作业的数据将位于同一个接收区内。如果您无法识别第一个消息的末尾或第二个消息的起始,您将无法检测到第一个或第二个消息。

如果您选择了一个接收区,但接收区的长度小于所发送数据的长度,FB64将尽量复制字节,直到接收区满。

当FB64完全填满接收区后,会将NDR设置为TRUE,并将数值LEN写入RCVD_LEN。每次进一步调用时,都将收到另一个发送数据块。

?

ISO-on-TCP

在数据传输期间,同时传送长度和消息末尾信息。

如果您已经选择了长于发送数据的接收区,则FB64 "TRCV"输入所有接收区中的数据。然后将NDR设置为TRUE,并将发送数据的长度写入RCVD_LEN。

如果选择了比发送数据短的接收区,则FB64不向接收区复制任何数据,并返回下列错误信息:ERROR=1,STATUS=W#16#8088


UDP

没有按照TCP和ISO-on-TCP协议建立连接。因此当调用发送块FB?7 "TUSEND" 时,必须指定接收器(IP地址和端口编号)地址参数的参考值。同样地,在接收块FB?8 "TURCV"结束之后,将会接收到发送器(IP地址和端口号)地址参数的参考值。

为了使用FB 67 "TUSEND"和68 "TURCV",首先需要同时在发送端和接收端调用FB 65 "TCON",以设置本地通讯接入点。

在每次调用FB?7 "TUSEND"时,可以通过指定IP地址和端口号重新引用远程伙伴。

在数据传输期间,同时传送长度和消息末尾信息。

如果您已经选择了长于发送数据的接收区,则FB64 "TURCV"将所有数据输入接收区中。然后将NDR设置为TRUE,并将发送数据的长度写入RCVD_LEN。

如果选择了比发送数据短的接收区,则FB64不向接收区复制任何数据,并返回下列错误信息:ERROR=1,STATUS=W#16#8088
学习的人是快乐的。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54699条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。