两个问题
1.看附图1,SFC13的管脚配置形式参数,数据类型是ANY的,但是 IN OUT IN_OUT 中设置ANY参数不能用,求解决方案,最好能有具体程序例子,最后做到这个指针类型可以再FB的管脚上输入。
2.看附图2,我在管脚配置的是Array的类型,在RECORD管脚设置为P#L18.0 BYTE 95 这样程序时可以运行,但是SFC13功能块读到的数据并不在我的背景数据块中,没有读到数据,我直接用SFC13读取时没有问题的,帮我解释下这是为什么?
先谢谢各位了
图片说明:
最佳答案
有两种方法:
1.比较简便的方法为:在FB的TEMP类型变量中建立WORD数据类型的的临时变量,总长度和你要接收的数据字节长度相同,(如接收为P#L18.0 BYTE 20 的话就建立10各WORD类型的变量,接收的字节只要满足接口要求即可,越长越浪费扫描时间)在FB中调用的SFC13的RECORD管脚用指针调用刚刚建立的WORD类型变量局域变量L的首地址和相应长度即可,这样数据就读到了.接下来,可以在FB中定义相关的OUT类型变量,把你要的数据从TEMP类型的临时变量中传出来就好了,建议用FC即可,这样可以节省扫描时间。
2.还有一种比较方便,难度就大了点。我们可以根据ANY类型变量的数据结构来变址的组态这个结果即可(见下图ANY类型变量数据结构)。先举个例子,就明白了:
P#DB22.DBX12.0 BYTE 20 的接口以变址的形式也可以写为
LAR1 P#Target //Target 为FB或FC中定义的ANY类型TEMP变量
L B#16#10
T LB[AR1,P#0.0] //ANY 类型变量的ID,固定不变
L B#16#02 //ANY 类型变量的数据类型01为BOOL;02为BYTE.....
T LB[AR1,P#1.0]
L 10 //ANY 类型要传送的字节长度
T LW[AR1,P#2.0]
L 22 //ANY参数的DB号
T LW[AR1,P#4.0]
L b#16#84 //ANY参数为DB类型及P#DBXX.DBX....,84为DB;T LB[AR1,P#6.0] //83为M
L 12 //ANY参数要传送的地址,即为DBX12.0
T LB[AR1,P#7.2]
通过上例你可以把其中你需要的参数制作成管脚,让参数从FB或FC的管脚输入即可
图片说明:
提问者对于答案的评价:
解释非常好,对我帮助很大
最佳答案作者回复:
谢谢!相互学习
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc253911.html