您好,关于问题 ID 217835 —– ANY指针

您好,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   
我自己也做了一个模拟

图片说明:

您好,关于问题 ID 217835 ----- ANY指针  您好,关于问题 ID 217835 ----- ANY指针  您好,关于问题 ID 217835 ----- ANY指针  您好,关于问题 ID 217835 ----- ANY指针  

提问者对于答案的评价:
谢谢

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc345621.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月4日 下午10:43
下一篇 2021年7月4日 下午10:43

相关推荐

发表回复

登录后才能评论