技术论坛

 Variant使用的不解

返回主题列表
作者 主题
小oo鱼
侠客

经验值: 707
发帖数: 76
精华帖: 3
楼主    2020-04-01 14:28:21
主题:Variant使用的不解 精编帖 

看了很多大师关于参数类型Variant使用的帖子,受益良多,感谢了。

有人说Variant比ANY好用和灵活,我始终不能理解,

ANY能读取实参的首地址,数据类型和长度后,可以访问实参的所有元素,在函数(块)中做自己想要的功能,

而大神的Modbus轮询程序从本质上讲,就是在对从Variant接口复制来的Struct在处理,Variant的实际参数也是ARRAY 的 相同的Struct,然后用Move_BLk_Variant或者VariantGet和VariantOut复制实际值到函数(块)中的背景Struct,这样的方法与建个Struct的参数本质是一致的。

还有大神做了个Variant简单的程序(int,dint,real.../2的程序),无非是不在关注实参的数据类型了,而是在函数中关注。

那么这样的办法比ANY的优势在哪里呢?也许我还没有理解Variant和其相关的指令的灵活运用,希望继续探讨。@各大版主和大神……^^


小oo鱼
侠客

经验值: 707
发帖数: 76
精华帖: 3
1楼    2020-04-01 18:43:57
精编帖  主题:回复:Variant使用的不解

https://www.ad.siemens.com.cn/service/answer/solution.aspx?Q_ID=135233&cid=1077

将MWX开始的10个Word move到MWX+100开始的10个Word,用ANY很容易实现,请问用Variant及相关指令怎么实现(不能用PEEK/POKE).

MOVE_BLK_VARIANT的scr指向数组和数组的元素,如果指向M区,同时要求

         COUNT      :=1

         SRC_INDEX  :=0

         DEST_INDEX :=0才能正确执行,而且Move的是一个元素,这个比如是不是比如的有问题?

程序如下:

  L     P##PointerAddr

      LAR1

      L D [ AR1 , P#6.0 ]

      T     #StartAddr

      L     10                   //Count

_001: T     #LENs

      L     #StartAddr

      L     P#100.0              //offset

      +D

      T     #DstAddr

      L MW [ #StartAddr]

      T MW [ #DstAddr]

      L     #StartAddr

      L     P#2.0

      +D

      T     #StartAddr

      L     #LENs

      LOOP  _001


Zane
至圣

经验值: 75766
发帖数: 19245
精华帖: 376
2楼    2020-04-01 22:57:24
精编帖  主题:回复:Variant使用的不解

最大优势就是优化编程

Zane 注册自动化系统工程师 Always save before download
YiMoon
至圣

经验值: 11038
发帖数: 1221
精华帖: 35
3楼    2020-04-01 23:25:04
精华帖  精编帖  主题:回复:Variant使用的不解

MOVE_BLK_VARIANT

         COUNT      :=1

         SRC_INDEX  :=0

         DEST_INDEX :=0

如果SRC/DEST是非数组,只能是这样设置才能正确执行程序。


楼主非要按照300/400的编程思想,来使用PORTAL,还不让用PEEK/POKE。PORTAL都去指针化,推荐符号编程了,使用POK_BLK不正好可以很方便的达到楼主的要求吗?

想更好的使用PORTAL,请楼主忘记300/400的编程方式吧。




Keep calm and carry on!!!
不断攀登
至圣

经验值: 12543
发帖数: 1843
精华帖: 0
4楼    2020-04-02 09:20:14
主题:回复:Variant使用的不解

说的很好。

邮箱 yongquancun@126.com
YiMoon
至圣

经验值: 11038
发帖数: 1221
精华帖: 35
6楼    2020-04-02 19:24:13
精编帖  主题:回复:Variant使用的不解

不要为了使用VARIANT而VARIANT,有些场合是不适合的。像这种地址的操作,本来VARIANT的设计就是用来处理符号编程方式 的。为什么PORTAL要设计PEEK/POKE指令,就是来处理地址操作的。

楼主可以看下专家的讲解:崔工说事连载

https://www.ad.siemens.com.cn/club/bbs/PostStory.aspx?a_id=1615579&b_id=84&s_id=&num=3#anch



Keep calm and carry on!!!
CoolCool的猪
至圣

经验值: 16693
发帖数: 1307
精华帖: 2
12楼    2020-04-03 23:10:32
主题:回复:Variant使用的不解

对我来说太难了

同一个问题ID下,已经先回答此问题的人,如再参考我答案而修改自己答案的,就是王八蛋!
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。