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时,并不检查数据长度。