怎样使用通讯功能块FC50和FC60编程全解.docx
《怎样使用通讯功能块FC50和FC60编程全解.docx》由会员分享,可在线阅读,更多相关《怎样使用通讯功能块FC50和FC60编程全解.docx(10页珍藏版)》请在冰豆网上搜索。
怎样使用通讯功能块FC50和FC60编程全解
怎样使用通讯功能块FC50和FC60编程?
显示订货号
说明:
使用下面的连接通信,必须在S7-400的S7程序中调用通信功能块FC50"AG_LSEND" 和FC60"AG_LRECV"。
∙TCP 连接
∙ISO-on-TCP连接(RFC1006)
∙ISO 传输连接
∙UDP连接
∙FDL连接
通讯功能块 FC50“AG_LSEND” 和FC60“AG_LRECV”的特点
∙FC50 和FC60是异步通讯功能块。
∙FC50 和FC60 的运行需要几个OB1 周期。
∙FC50 由输入参数"ACT"使能。
∙通讯任务结束由 “DONE” 或“ERROR”指示。
∙AG_LSEND 和AG_LRECV 可以通过同一个连接同时通讯。
∙最新版本的功能块FC50"AG_LSEND" 和FC60"AG_LRCV" 可以在 SIMATIC_NET_CP 库"CP400>Blocks"里找到。
例程说明
S7程序包含来自SIMATIC_NET_CP库的通讯功能块 FC50“AG_LSEND”和FC60“AG_LRECV”的调用。
FC50“AG_LSEND”用于发送数据到S7或S5站,PC或者第三方系统。
FC60“AG_LRECV” 用于接收来自S7 或S5站,PC站或第三方系统的数据。
例程中通讯功能块 FC50"AG_LSEND" 和FC60"AG_LRCV" 用于ISO-on-TCP连接的通讯。
首先创建S7-400站的硬件配置。
注意:
将MB10配置为时钟标志。
发送任务由该时钟标志触发。
保存并编译S7-400站的硬件组态并装载到CPU。
例程中用到了定时器T10。
然后在NetPro中为CPU配置上面提到的通讯连接。
如果通讯伙伴也在该STEP7项目中一起配置,可以配置一个指定的通讯连接。
如果通讯伙伴没有与S7-400站在同一个STEP7项目下,可以配置一个未指定的通讯连接。
配置通讯连接时,确认IP地址和Profibus地址已经正确分配。
同样,确认PORT,TSAP,LSAP已经正确分配。
这些用于识别通讯伙伴间的通讯连接。
FC50“AG_LSEND”和FC60“AG_LRECV”的输入参数“ID”和“LADDR”必须被指定。
该参数在通讯连接的属性对话框“常规”选项卡中设置。
图.01
STEP7 的程序由块 OB100,OB1,FB200,DB200,DB201,FC50 和FC60组成。
OB100:
OB100是启动组织块,当CPU重新启动(暖启动)时运行。
在这个组织块中通过M1.0使能第一次通讯触发器。
OB1:
OB1循环组织块。
在这个组织块中调用FB200 (背景数据块:
DB200),使用M1.0 作为参数(INIT_COM)。
FB200一旦执行则复位M1.0。
图.02
FB200
FB200在OB1中调用。
在FB200中调用了 FC50“AG_LSEND” 和FC60“AG_LRECV”。
在FC50的输入参数“ACT”得到一个上升沿后触发发送任务。
时钟标志位M10.7和“SND_BUSY”参数控制发送任务的触发。
当发送任务正在执行时,“SND_BUSY”被置位,此时不能触发新的发送任务。
接收请求的触发由变量"RCV_DISABLE"控制,其值等于FALSE,所以FC50"AG_LRCV"总是准备接收数据,这样数据可以在任何时候都被接收。
由于功能块的执行是异步的,并可以持续几个周期,所以“锁定”功能尤其重要。
如果不等待第一个发送工作成功完成或出错终止就不间断的触发新的发送任务会引起通讯过载。
输入参数 “ID” 和“LADDR”的值必须取自NetPro中通讯连接的属性对话框(参见图01)。
需要为FC50的 “SEND”输入参数指定包含将要发送数据的数据区地址和长度(发送缓冲区),例如:
P#DB201.DBX0.0BYTE100。
在“LEN”输入参数中键入要发送的字节数,本例中是100。
输出参数“DONE”,“ERROR” 和“STATUS”用于任务评估,并且只在同一个周期内有效。
图.03
图.04
当发送任务成功完成后,“SND_BUSY” 被复位。
然后可以触发下一个发送任务。
图.05
如果发送任务出错终止,“SND_BUSY” 也会被复位 ,FC50 输出参数 “STATUS”的值被保存用于故障分析。
如果 “STATUS”输出参数的值是0x7000Hex (28672Dec),FC50“AG_LSEND”再次被调用。
图.06
如果输出参数“STATUS”的值是0x8183Hex (32381Dec)或者0x8304Hex (31996Dec), 也就是说通信连接不能建立的时候,那仅每10秒发起一次发送任务。
图.07
输入参数 “ID” 和“LADDR”的值必须取自NetPro中通讯连接的属性对话框(参见 图01)。
需要为FC60的输入参数“RECV”指定包含接收数据的数据区域地址和长度(接收缓冲区),例如:
P#DB201.DBX100.0BYTE100。
图.08
输出参数“NDR "用于表示已经接收到了新数据。
输出参数"LEN"表示接收到的数据长度。
如果没有成功接收到数据,输出参数“STATUS”的值被保存用于故障分析。
图.09
如果输出参数"STATUS"的值是0x8183Hex (32381Dec)或者0x8304Hex (31996Dec),即不能建立连接时,变量"RCV_DISABLE"被置位10秒。
在此期间,没有数据被接收。
只有在过了10秒后才可能再次接收数据。
图.10
成功接收数据的长度保存在静态变量里。
图.11
在FB200中,对FC50"AG_LSEND"和FC60"AG_LRCV"的STATUS各种值出现次数有评估。
这些信息保存在FB200的"Structure"类型的变量"STATISTIC"中,这是FB200统计信息接口参数。
图.12
可以通过变量"#STATISTIC.ON_OFF"打开/关闭 STATUS评估。
图.13
特例
如果通过TCP连接进行数据交换,只有在接收缓冲区满后才会置位“NDR”输出参数。
输出参数“LEN”的数值总是指示接收缓冲区的总长度。
下载STEP7项目:
例程STEP7项目包括一个调用带有状态赋值的FC50和FC60功能的例子。
这个例子在STEP7V5.5SP2中创建。
NET_S7400_LSEND_LRECV.zip (195KB)
提示
从SIMATIC_NET_CP库中复制最新的通信块FC50和FC60并在自己的程序中调用它们。
关键字
发送,接收
条目号:
18513371
日期:
2012-07-23