您好,UDT Phase 数据类型的截图我已经贴在 问题 217835后面的,FC块内的还有很多其他的程序,其他程序只是用的 "#Temp_EP.xxxxx" 逻辑比较编程的的FBD指令,和DB块内数据段传送没有关系,我的疑问就是如何把外部的UDT Phase 全部传送到 #T_pointerEP 里面的?然后再用SFC20进行块传送。
最佳答案
我的疑问就是如何把外部的UDT Phase 全部传送到 #T_pointerEP 里面的?然后再用SFC20进行块传送???
首先从SFC20看,是从#T_pointerEP到#Temp_EP的;#T_pointerEP 对应的是#EP_Module 而#EP_Module 对应的是P#DB730.DBX200.0 估计这个也是UDT Phase 数据类型;你可以找到这个DB块看看;
其他程序只是用的 "#Temp_EP.xxxxx" 逻辑比较编程的的FBD指令:就是去外部的数据在程序里进行比较计算的,这也是可以的;
首先,要知道这些复杂的数据类型是用指针的形式在PLC进行传递,至于是用PIONTER还是用ANY,我也比较头疼;这里就默认是用ANY的吧;既然用到了ANY指针就要理解ANY指针的使用,ANY数据内部的定义,你的程序块里定义了一个IN_OUT数据#EP_Module ,在调用块时这个#EP_Module 对应的是P#DB730.DBX200.0应该是一个UDT Phase数据;
然后,程序里,如下:
L P##EP_Module // Any datapointer for EP
LAR1
L D [AR1,P#0.0]
T LD 0 // 注意这个
L D [AR1,P#4.0]
T LD 4
L W [AR1,P#8.0]
T LW 8
这段程序就是将#EP_Module 对应的外部的 UDT Phase的信息传给 #T_pointerEP,因为在临时变量里这个ANY数据是从L0.0开始的,这个数据就对应上了;
建议你看下如下链接的资料中关于ANY的部分
S7-300和S7-400寻址:
https://support.industry.siemens.com/cs/document/79632832/s7-300%E5%92%8Cs7-400%E5%AF%BB%E5%9D%80?dti=0&lc=zh-CN
我自己也做了一个模拟
图片说明:
提问者对于答案的评价:
谢谢
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc345621.html