资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
功能与样例:通过TCP 协议 (利用 FC5 “ AG_SEND ”和FC6 “ AG_RECV ” ) 传送具有可变消息长度的数据显示订货号问题 : 如何利用通讯功能FC5 “ AG_SEND ”和 FC6 “ AG_RECV ”,通过 TCP 协议传送具有可变消息长度的数据?解答 :TCP 协议的性能:当通过 TCP 传送数据时,该传送是基于数据流的形式。在这种情况下,不给出与消息长度、开始和结束有关的信息。发送消息时,这并不是问题,因为发送者知道要传送多少数据字节。然而,接收者无法分辨消息在数据流中的何处结束,下一个消息在何处开始。因此,对于通过纯TCP 建立的链接只有两个选项可选:1.使用固定消息长度,也就是说,发送者和接收者都使用预定义的数据长度。这意味着要始终明确定义消息限制。2.使用可变消息长度。在这种情况下,接收端和发送端都需要更多的时间,因为在开始字节中必须输入起始分隔符和要发送数据的数据长度。这样, 接收者就可以正确地解释已接收的消息。下面的实例程序包含一个TCP 连接,通过该连接,具有可变消息长度的数据可以利用FC5 发送给一个站,并利用FC6 接收。实例程序:通过TCP 协议 (利用 FC5 “ AG_SEND ”和FC6 “ AG_RECV ” ) 传送具有可变消息长度的数据常规描述:STEP 7工程包括两个S7-300站,它们均具有用于工业以太网通讯的CPU 315-2DP和 CP 343-1 。这两个站之间的通讯基础是TCP 连接。如果在NetPro 中通过“右键单击 对象属性”打 开 TCP 连接属性,则可以查看通讯功能块的块参数“ ID ”。在调用 FC5 和 FC6 时,要注意该规范,以便可以通过TCP 连接传送数据。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 12 页图 1:TCP 连接的属性为了利用TCP 协议传送数据,要传送的数据必须具有指定的结构。消息必须包括起始分隔符(以便接收者可以识别消息从何处开始),数 据长度规范 (定义接收缓冲区)和数据本身。在此实例中,定义了消息的4 个字节的起始分隔符(预置值为: 0x11, 0x12, 0x13, 0x14)和一个 S7 串。该 S7 串包括两个字节的长度信息和实际的数据串。使用 S7 串可以传送所有的ASCII 字符。图 2:消息的结构注意事项:该实例程序基于如图2 所示的消息结构,但也可以自行定义消息结构。如果希望使用不同的消息结构(例如, h 起始分精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 12 页隔符只有3 个字节 ),则可以依照用户的特定需求,简单地改变该实例程序。因此,希望利用FC5(AG_SEND)传送的数据,必须在数据块(DB220) 中按照预定义的结构准备好。随后,该数据可以利用 FC6(AG_RECV)按如下步骤接收:1.接收起始分隔符(逐字节地 )并识别消息2.接收 S7 串的长度信息3.接收数据STEP 7程序描述STEP 7程序包括如下块:OB100 ,OB1 , FB100 ,DB100(FB100的背景 DB) , F B101(DB100中的多重背景),DB220 ,DB221 ,FC5 ,FC6 。OB100 OB100是启动OB,当CPU重启 (暖重启 )时,运行该OB 。在此OB 中,发送的首个通讯触发器的版本为M1.0 和 M0.1 。图 3:OB100 OB1 周期性调用OB1 。该 OB 包括具有M1.0 和 M0.1 的 FB100( 背景 OB :OB100) 的调用。一旦运行 FB100 ,则复位 M1.0 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 12 页- 图 4: OB1 FB100: 在OB1周期中调用FB100 。该FB包括FC5 “ AG_SEND ”和 FB101 “AG_RECV_VARIABLE”的调用。发送块FC5“AG_SEND”当时钟标记M10.7 为上升沿,且未置位“ SND_BUSY ”时,输入参数“ ACT ” h 可以激活FC5 。当作业运行时,置位“ SND_BUSY” ,并且,在此期间不能触发任何功能。该功能块特别重要,因为该功能是异步的,且占有多个周期。如果对该功能持续激活,而不是等待其中止,则会导致通讯过载。输入参数“ID”和“LADDR ”只能从 NetPro( 图 1)中的 TCP 连接属性对话框中获取。在“SEND ”参数中,需 要指定要发送数据的地址(P#DB220.DBX0.0 BYTE 48) 。在“LEN ”参数中,输入要发送的字节数(48) 。输出参数“ DONE ”,“ERROR ”和“STATUS ”对于作业评估是必需的,而且只在同一个周期内有效。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 12 页图 5:FB100 调用 FC5 如果块运行无错误,则复位“SND_BUSY ”,并再次调用 FC5 。如果该块因出错而终止,则保存块的状态字用于错误分析,同样复位“ SND_BUSY”。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 12 页图 6:FB100 FC5 调用的评估接收块 FB101 “ AG_RECV_VARIABLE”当调用 FB101 “ AG_RECV_VARIABLE”时,必须从 NetPro( 图 1)中的连接属性对话框中获取参数“ID”和“ LADDR ” h 。在“ RECV_BUF ”中,需要指定要接收数据的存储位置(P#DB221.DBX0.0 BYTE50)。输出参数“NDR ”,“ ERROR ”和“STATUS ”对于作业评估是必需的,而且只在同一个周期内有效。图 7:FB100 调用 FB101 如果块运行无错误,则保存接收到的数据长度。如果该块因出错而终止,则保存块的状态字用于错误分析。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 12 页图 8:FB100 FB101 调用的评估FB101(“AG_RECV_VARIABLE”):状态机:通过变量“STATE_CNT”来定义FB101 中程序的输入点。根据变量“STATE_CNT”的状态,跳 过与程序的进一步的处理相关的程序段。按照“ STATE_CNTP”的程序处理:STATE_CNT描述0 已收到起始分隔符的第一个字节(从 NW9 跳至 NW13) 1 已收到起始分隔符的第二个字节(从 NW10 跳至 NW14) 2 已收到起始分隔符的第三个字节(从 NW11 跳至 NW15) 3 已收到起始分隔符的第四个字节(从 NW12 跳至 NW16) 4 已识别起始分隔符。正在接收数据信息 (从 NW3 跳至 NW17) 5 已创建接收缓冲区且数据已接收(从 NW4 跳至 NW20) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 12 页接收起始分隔符(逐字节 )并识别消息 (程序段 516) 使用 FC6 “ AG_RECV ”,逐字节地接收起始分隔符(4 字节 )。当调用 FC6 “ AG_RECV ”时,参数“ ID” 和“ LADDR ”来自FB101 的输入参数。在“ RECV ”中,需要指定已接收字节的存储位置(SD 缓冲区:字节变量)。输出参数“NDR ”,“ERROR ”和“STATUS ”对于作业 评估是必需的,而且只在同一个周期内有效。如果块运行无错误,则保存接收的字节,用于进一步的处理。如果该块因出错而终止,则保存块的状态字用于错误分析。已接收字节后,检验已定义的起始信息。(Byte0 = 11 ;Byte1 = 12 ;Byte2 = 13 ;Byte3 = 14) 。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 12 页图 9:通过起始分隔符识别消息接收 S7 串的长度信息(程序段 3,17 20)如果已接收的信息被识别为起始分隔符,那么利用FC6 “ AG_RECV ”接收S7 串的长度信息(两个字节 )。当调用 FC6 “ AG_RECV ”时,参数“ ID” 和“ LADDR ”来自FB101 的输入参数。在“ RECV ”中,需要指定两个长度信息字节的存储位置 (VAR_LEN :由两个字节构成)。输出参数“NDR ”,“ERROR ”和“STATUS ”对于作业 评估是必需的,而且只在同一个周期内有效。如果块运行无错误,则已接收数据的实际长度用于接收缓冲区(ANY 指针 )。如果该块因出错而终止,则块的状态字作为 FB101 的输出参数显示。图 10:接收长度信息精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 12 页在创建接收缓冲区(ANY 指针 )时,有关串 (VAR_LEN.ACT_LEN)的实际长度的信息是必需的。在此,当调用FB101时,使用数据的实际长度来检验已指定的接收缓冲区(ANY 指针 ),并将其存储在临时的ANY 指针 (VAR_BUF) 。图 11 :创建接收缓冲区接收数据 (程序段 4,21 23)随后,利用FC6 接收数据。当调用 FC6 “ AG_RECV ”时,参数“ ID” 和“ LADDR ”来自FB101 的输入参数。在“ RECV ”中,需要指定数据的存储位置(VAR_BUF :临时 ANY 指针 )。输出参数“NDR ”,“ERROR ”和“STATUS ”对于作业 评估是必需的,而且只在同一个周精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 12 页期内有效。如果块运行无错误,则保存已接收数据的长度,并将其作为输出参数发送给FB101 。如果该块因出错而终止,则块的状态字作为FB101 的输出参数显示。图 12 :接收数据DB220: 与 FC5 一起使用的数据结构位于DB220 。图 13 :DB220 发送数据结构DB221: 与 FC6 一起接收的数据存储在DB221 。该下载包括已描述的实例程序,通过 STEP 7 V5.3和 SIMATIC NET V6.2创建。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 12 页T_cp_data.exe将“ Tcp_data.exe”文件复制到一个单独的目录中,然后通过双击来启动该文件。STEP 7 工程将自动解压所有的子目录。随后, p 可以使用SIMATIC管理器来打开并处理该工程。过滤标准 :硬件平台 : Industrial Ethernet, SIMATIC S7-300/S7-400 软件 : STEP 7 up to V5.x 帖子内容 : 功能组件 /工具条目号 :8707570 日期 :2005-06-23 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 12 页
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号