长沙工控帮教育科技有限公司整理 Copy
7 用于传送数据记录的SFC
7.8 使用SFC59 “RD_REC”读一个数据记录
描述
通过SFC59 “RD_REC” (读取记录),可从指定地址的模块中读取编号为RECNUM 的数据记录。通过调用SFC59且将输入参数REQ置1启动读任务。如果读任务可以立 即执行,此SFC在输出参数BUSY中返回值0。如果BUSY值为1,则读任务尚未完成 (参见“通过输出参数RET_VAL判断出错”)。如果数据传送没有出错,读取的数据记录 将被传送到由RECORD参数指定的目标区域中。
注意
如果从1997年2月以前购买的FM或CP(下文称“旧式模块”)中读取编号 > 1 的数据记录,SFC59的响应会有所不同。这一特殊状况在章节“使用旧的 S7-300 FM和CP数据记录编号 >1”中有说明。
注意
如果使用GSD文件(版本3以上的GSD)对DPV1从站进行组态,且DP主站的DP接口
设置为“S7兼容”则一定不能在用户程序中通过SFC59从I/O模块读一个数据记录。
其原因是这种情况下的DP主站将寻址出错的插槽(已组态的插槽+3)。
纠正方法:将DP主站的接口设置为“DPV1”。
参数 声明 数据类型 存储区域 描述 REQ INPUT BOOL I、Q、M、D、L、
常数
REQ = 1:读请求 IOID INPUT BYTE I、Q、M、D、L、
常数
LADDR INPUT WORD I、Q、M、D、L、
常数
模块的逻辑基本地址。对于混合模块,则指定 两个地址中较低的一个。
RECNUM INPUT BYTE I、Q、M、D、L、
常数
参数 声明 数据类型 存储区域 描述
BUSY OUTPUT BOOL I、Q、M、D、L BUSY=1:读操作尚未完成。
RECORD OUTPUT ANY I、Q、M、D、L 读一个数据记录的目标区域。
异步执行SFC59时,要确保每次调用时参数 RECORD的实际值具有相同的长度信息。
只允许数据类型BYTE。
输出参数RET_VAL
• 如果在执行此功能时出错,则返回值包含故障代码。
• 如果未出错,RET_VAL包含下列内容:
- 0:整个目标区域都被所选数据记录填充(数据记录也有可能不完整)。
- 传送的数据记录的实际字节长度(可能值:+1 - + 240) (如果目标区域大于传送的数据记录)。.
注意
如果出现常规出错W#16#8545,这只表明对于至少一个字节包含数据记录的I/O存储 区的访问遭到拒绝。数据记录已被模块正确读取并写入I/O存储区。
设定RECORD
注意
如果要确保每次都读取完整的数据记录,可将目标区长度选为241字节。如果数据传 送无错,RET_VAL包含被传送数据记录的实际字节数。
长沙工控帮教育科技有限公司整理
使用旧的S7-300 FM和CP数据记录号 > > 1
如果要使用SFC59 “RD_REC”从旧的S7-300 FM和S7-300 CP中读取编号大于1的数 据记录,请切记下列要点:
• 如果目标区域长度大于数据记录所需的实际长度,则数据不传入RECORD。
RET_VAL的值为W#16#80B1。
• 如果目标区域小于所请求数据记录的实际长度,CPU从记录的开始处开始读取 指定量的字节(在RECORD长度信息中指定),并将这些字节输入RECORD中。
RET_VAL值为0。
• 如果RECORD中指定的长度与数据记录的所需实际长度相同,CPU读一个数据 记录并将其输入RECORD中。
RET_VAL值为0。
出错信息
下表中的“真实的”出错信息(故障代码W#16#8xyz)可分为两类:
• 暂时故障(故障代码W#16#80A2到80A4、80Cx):
对于此类故障,有可能在不采取任何措施的情况下故障即会消除,换句话说,
再次调用该SFC (必要时多次调用)是可行的。
例如,所需资源当前正在使用(W#16#80C3)时,即会出现暂时故障。
• 永久出错(出错代码W#16#809x、80A1、80Bx、80Dx):
如果不采取动作,此类出错就不会消除。只有消除出错后,重新调用SFC才能成 功。例如,在RECORD中输入出错长度(W#16#80B1)即为一个永久出错。
注意
如果利用SFC58 “WR_REC”向DPV1从站传送数据记录或利用SFC59 “RD_REC”从 DPV1从站读一个数据记录且此从站正以DPV1模式运行,则DP主站会按如下原则判 断所接收的来自从站的出错信息:
如果出错信息处于从W#16#8000到W#16#80FF或从W#16#F000到W#16#FFFF 的区间内,DP主站会将出错信息传送给SFC。如果出错代码代码不在上述区间,
则CPU将数值W#16#80A2传送给SFC,并挂起从站。
对于来自DPV1从站出错信息的说明,请参见使用SFB 54 “RALRM”接收来自DP从 站的中断STATUS[3]。
长沙工控帮教育科技有限公司整理
针对SFC58 “WR_REC”和SFC59 “RD_REC”的出错信息。 8090 指定的逻辑基址无效:SDB1/SDB2x中没有赋值,或者没有
基址。
-
8092 在ANY参考中指定的类型不是BYTE。 只对S7-400 8093 本SFC不允许用于由LADDR和IOID所指定的模块(允许下列
模块:
S7-300模块用于S7-300、S7-400模块用于S7-400、
S7-DP模块用于S7-300和S7-400)。
-
80A0 当从模块读取数据时,收到消极的应答
• 模块在读任务期间被拆除或损坏
• 另外,对于H系统:备用CPU一侧的I/O不可用 (例如,CPU处于STOP状态)
仅限SFC59 “RD_REC”
80A1 向模块发送数据记录时收到消极的应答
• 该模块已在传送期间拆除或损坏
• 另外,对于H系统:备用CPU一侧的I/O不可用 (例如,CPU处于STOP状态)
仅限SFC58 “WR_REC”
80A2 DP协议的第2层出错 分布式I/O
对于SFC58 (WR_REC),不允许数据记录号0和1。
-
80B1 RECORD参数中定义的长度不正确。 • SFC58 “WR_REC”:
长度不正确
• SFC59 “RD_REC”
(仅在使用旧
S7-300 FM和S7-300 CP时):指定长度 >
记录长度
• 对于SFC13
“DPNRM_DG”:
指定长度 > 记录长度
长沙工控帮教育科技有限公司整理
出错代码 (W#16#...)
说明 限制
80B2 组态的插槽未占用。 -
80B3 实际模块类型与SDB1中要求的模块类型不匹配 - 80C0 对SFC59 (RD_REC):模块有数据记录,但是还没有要读
取的数据。
对于SFC13 (DPNRM_DG):诊断数据不存在。
仅限SFC59 “RD_REC”
或SFC13 “DPNRM_DG”
80C1 对于模块的同一数据记录,上一个写任务的数据还未被模块 处理。
-
80C2 模块正在处理对一个CPU所可能的最大数量的任务。 -
80C3 需要的资源(存储区等)当前被占用。 -
80C4 内部暂时故障。无法处理任务。
• 重复执行该任务。如果经常发生此故障,请检查您的系 统是否存在电干扰源。
-
80C5 分布式I/O不存在。 分布式I/O
80C6 由于优先级的中止(热重启或后台),数据记录传送已停止 分布式I/O 8xyy 一般故障代码,请参见使用输出参数RET_VAL判断故障
长沙工控帮教育科技有限公司整理
7.9 SFC 55到59的进一步出错信息
只对S7-400
使用S7-400时SFC 55到59也可返回出错信息W#16#80Fx。在此情况下,将产生无 法定位的故障。此时,请联系维护部门。