S7-300/400/1500 plc中,SFC14/15用于将分站的IO数据批量读取到DB块中。MOVE(L T)指令只能最多传送4byte。因此,使用SFC14/15能够简化程序段。
LADDR 硬件地址,16进制
RET_VAL 返回值,0表示无故障,其它值表示故障
RECORD 数据块指针,例如( P#DB13.DBX0.0 byte 100),注意byte和数据长度之间有空格。
80B1故障
在使用中,碰到了80B1故障,帮助文件的描述为
The length of the specified destination area is not identical to the user data
length configured with STEP 7.
即,DB块中的数据长度,和分站的数据长度不一致。
网络结构
我使用的网络是315-2PN/DP和SIMOTION D435-2PN/DP进行的iDevice通讯。Simotion作为iDevice从站,分配了I/O各100个byte。PLC作为主站,以下是PLC侧的硬件配置。Simotion的地址为300(16#12C)
故障现象
100个byte的通讯量比较大,我实际需要的大约为80个,因此我定义了DB3,包含80个byte。在OB1中调用SFC14之后,出现了801B报警。
解决方法
DB块中的数据长度,需要和硬件组态中定义的分站数据长度一致。将DB3改为100个byte。故障消失。
解决的方法很简单,就是DB块的数据长度,要和分站长度一致。但解决这个问题的过程中也被一些因素误导,花了一些时间。例如,分站的数据长度,对于iDevice,并没有32byte/64byte这样的限制。另外,SFC14/15在小于4byte时,并不检查数据长度。