功能与样例:通过TCP协议(利用FC5 “AG_SEND”和FC6“AG_RECV”) 传送具有可变消息长度的数据.doc

上传人:99****p 文档编号:1490452 上传时间:2019-03-03 格式:DOC 页数:15 大小:145.32KB
下载 相关 举报
功能与样例:通过TCP协议(利用FC5 “AG_SEND”和FC6“AG_RECV”) 传送具有可变消息长度的数据.doc_第1页
第1页 / 共15页
功能与样例:通过TCP协议(利用FC5 “AG_SEND”和FC6“AG_RECV”) 传送具有可变消息长度的数据.doc_第2页
第2页 / 共15页
功能与样例:通过TCP协议(利用FC5 “AG_SEND”和FC6“AG_RECV”) 传送具有可变消息长度的数据.doc_第3页
第3页 / 共15页
功能与样例:通过TCP协议(利用FC5 “AG_SEND”和FC6“AG_RECV”) 传送具有可变消息长度的数据.doc_第4页
第4页 / 共15页
功能与样例:通过TCP协议(利用FC5 “AG_SEND”和FC6“AG_RECV”) 传送具有可变消息长度的数据.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、功能与样例:通过 TCP 协议(利用 FC5 “AG_SEND”和 FC6“AG_RECV”) 传送具有可变消息长度的数据显示订货号问题:如何利用通讯功能 FC5“AG_SEND”和 FC6 “AG_RECV”,通 过 TCP 协议传送具有可变消息长度的数据?解答:TCP 协议的性能:当通过 TCP 传送数据时,该传送是基于数据流的形式。在这种情况下,不给出与消息长度、开 始和结束有关的信息。发送消息时,这并不是问题,因为发送者知道要传送多少数据字节。然而,接收者无法分辨消息在数据流中的何处结束,下 一个消息在何处开始。因此,对于通过纯 TCP 建立的链接只有两个选项可选:1. 使用固定消息长

2、度,也就是说,发送者和接收者都使用预定义的数据长度。这意味着要始终明确定义消息限制。2. 使用可变消息长度。在这种情况下,接收端和发送端都需要更多的时间,因为在开始字节中必须输入起始分隔符和要发送数据的数据长度。这样, 接收者就可以正确地解释已接收的消息。下面的实例程序包含一个 TCP 连接,通过该连接,具有可变消息长度的数据可以利用 FC5 发送给一个站,并利用FC6 接收。实例程序:通过 TCP 协议(利用 FC5“AG_SEND”和 FC6“AG_RECV”) 传送具有可变消息长度的数据常规描述:STEP 7 项目包括两个 S7-300 站,它们均具有用于工业以太网通讯的 CPU 315

3、-2DP 和 CP 343-1。这两个站之间的通讯基础是 TCP 连接。如果在 NetPro 中通过“右键单击对象属性”打 开 TCP 连接属性, 则可以查看通讯功能块的块参数“ID”。在调用 FC5 和 FC6 时,要注意该规范,以便可以通过 TCP 连接传送数据。图 1:TCP 连接的属性为了利用 TCP 协议传送数据,要传送的数据必须具有指定的结构。消息必须包括起始分隔符(以便接收者可以识别消息从何处开始),数 据长度规范(定义接收缓冲区)和数据本身。在此实例中,定义了消息的 4 个字节的起始分隔符(预置值为:0x11, 0x12, 0x13, 0x14)和一个 S7 串。该 S7 串包

4、括两个字节的长度信息和实际的数据串。 使用 S7 串可以传送所有的 ASCII 字符。图 2:消息的结构注意事项:该实例程序基于如图 2 所示的消息结构,但也可以自行定义消息结构。如果希望使用不同的消息结构(例如,h 起始分隔符只有 3 个字节),则可以依照用户的特定需求 ,简单地改变该实例程序。因此,希望利用 FC5(AG_SEND)传送的数据,必须在数据块 (DB220)中按照预定义的结构准备好。随后,该 数据可以利用 FC6(AG_RECV)按如下步骤接收:1. 接收起始分隔符(逐字节地)并识别消息2. 接收 S7 串的长度信息3. 接收数据STEP 7 程序描述STEP 7 程序包括如

5、下块:OB100,OB1,FB100,DB100(FB100 的背景 DB),F B101(DB100 中的多重背景),DB220,DB221,FC5,FC6。 OB100OB100 是启动 OB,当 CPU 重启(暖重启)时,运行该 OB。在此 OB 中,发送的首个通讯触发器 的版本为M1.0 和 M0.1。图 3:OB100 OB1周期性调用 OB1。该 OB 包括具有 M1.0 和 M0.1 的 FB100(背景 OB:OB100) 的调用。一 旦运行 FB100,则复位 M1.0。-图 4: OB1 FB100:在 OB1 周期中调用 FB100。该 FB 包括 FC5“AG_SEND

6、”和 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”参数中

7、,输入要发送的字节数(48)。输出参数“ DONE”,“ERROR” 和“STATUS”对于作业评估是必需的,而且只在同一个周期内有效。图 5:FB100调用 FC5如果块运行无错误,则复位“SND_BUSY”,并再次调用 FC5。如果该块因出错而终止,则保存块的状态字用于错误分析,同样复位“ SND_BUSY”。图 6:FB100FC5 调用的评估接收块 FB101“AG_RECV_VARIABLE”当调用 FB101“AG_RECV_VARIABLE”时,必须从 NetPro(图 1)中的连接属性对话框中获取参数“ID”和“LADDR”h 。在“RECV_BUF”中, 需要指定要接收数据的

8、存储位置(P#DB221.DBX0.0 BYTE50)。输出参数“NDR”,“ ERROR”和“STATUS” 对于作业评估是必需的,而且只在同一个周期内有效。图 7:FB100调用 FB101如果块运行无错误,则保存接收到的数据长度。如果该块因出错而终止,则保存块的状态字用于错误分析。图 8:FB100 FB101 调用的评估 FB101(“AG_RECV_VARIABLE”):状态机:通过变量“STATE_CNT”来定义 FB101 中程序的输入点。 根据变量“STATE_CNT” 的状态,跳 过与程序的进一步的处理相关的程序段。按照“STATE_CNTP”的程序处理:“STATE_CNT

9、“ 描述0 已收到起始分隔符的第一个字节(从 NW9 跳至 NW13)1 已收到起始分隔符的第二个字节(从 NW10 跳至 NW14)2 已收到起始分隔符的第三个字节(从 NW11 跳至 NW15)3 已收到起始分隔符的第四个字节(从 NW12 跳至 NW16)4 已识别起始分隔符。正在接收数据信息(从 NW3 跳至 NW17)5 已创建接收缓冲区且数据已接收(从 NW4 跳至 NW20)接收起始分隔符(逐字节)并识别消息(程序段 516)使用 FC6“AG_RECV”,逐字节地接收起始分隔符 (4 字节)。当调用 FC6“AG_RECV”时,参数 “ID” 和“LADDR”来自 FB101 的输入参数。在“RECV”中,需 要指定已接收字节的存储位置(SD 缓冲区:字节变量)。输出参数“NDR”,“ERROR” 和“STATUS”对于作业 评估是必需的,而 且只在同一个周期内有效。如果块运行无错误,则保存接收的字节,用于进一步的处理。如果该块因出错而终止,则保存块的状态字用于错误分析。已接收字节后,检验已定义的起始信息。(Byte0 = 11;Byte1 = 12;Byte2 = 13;Byte3 = 14)。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 课件讲义

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。