回复:关于变量比较以及Variant使用的一点疑惑。

樱桃大丸子

  • 帖子

    82
  • 精华

    0
  • 被关注

    38

论坛等级:侠客

注册时间:2017-01-10

普通 普通 如何晋级?

发布于 2017-03-15 15:49:50

11楼

展开查看
以下是引用樱桃大丸子在2017-03-15 14:21:18的发言 >10楼

所以回到了我最前面的问题,程序段2“变量”指向的是“字节8”,它和与之比较的“字节6”都是BYTE型的,为什么比较结果为0?

以下是引用pkh2006在2017-03-15 13:52:43的发言 >9楼:不好意思啊,看了下...

引用9楼详细内容:

不好意思啊,看了下帮助,上面操作数必须是VARIANT,也就是说只能是接口变量

以下是引用樱桃大丸子在2017-03-15 12:42:40的发言 >8楼:不可以直接填符号地...

引用8楼详细内容:

不可以直接填符号地址。

以下是引用pkh2006在2017-03-14 16:13:14的发言 >5楼:1. 比较的数组的元...

引用5楼详细内容:

1. 比较的数组的元素和其他变量的类型是否相同

2. 可以

3. 如果想实现比较,最灵活的是SCL中的TypeOf,它可以比较变量和类型,例如


IF TypeOf(变量)= BYTE

THEN ...

以下是引用樱桃大丸子在2017-03-14 15:55:01的发言 >:程序段1的指令叫...

引用详细内容:

程序段1的指令叫“比较ARRAY元素数据类型和变量数据类型是否相等”,实际上该指令可以比较任意两个变量的数据类型是否相等,对吗?

EQ_TYPE指令的操作数1数据格式是Variant,可以直接填“测试块1”.字节8吗?

比较指令直接填变量我知道是可以的,也是最基本的用法,我只是想测试看可不可以用绝对寻址的方法来引入变量比较。

琢磨了这么久,把这个问题想明白了,我写P#DB3.DBX3.0 BYTE 1,这是一个ANY型指针,我网上看到了这么一句话:

“S7-1200中任意非优化变量写成任意ANY指针格式,指令都会将其认作数组。例如一个REAL数组,写成P#INT就会被认为为2倍元素个数的INT数组,例如一个TIME类型,写成P#DWORD,会认为是一个元素的DWORD数组。

所以程序段2的比较结果为0。”

要比较两个变量的数据类型是否相同,正确的做法是,把比较指令放在子程序里面,变量用variant型的接口来传输,这样传输过来的数据才是变量本身,而不会被认作数组。

说一段我的理解,帮我看看是否正确:

ANY是一个指针,它可以绝对寻址提取数据,并且是根据其指定的起点和长度来决定,不受被提取的数据的数据类型影响。

variant是一个接口,主要用于子程序接口传输数据,它是一个万能接口,任何数据类型都可以从中传输。

精通吃饭,擅长睡觉
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15112条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。