S7-300怎么比较2个Word型数据? 点击:3493 | 回复:20



PLC酷客

    
  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-12-02 16:46:39
楼主

S7-300怎么比较2个Word型数据?


S7-300怎么比较2个Word型数据?
我想比较DB0.DBW0和DB1.DBW0进行比较  要是相等就输出一个Q0.0
我用了CMP<>I    显示只能是整数类型的 求高手指点



楼主最近还看过



PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-12-02 16:47:00
1楼

两个办法
1、在DB里把这两个变量定义成整型
2、比较前把word转换成int (反正是比较相等,也不存在正负的问题)


PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-12-02 16:47:16
2楼

这个是怎么实现的?
          比如使用STL语言


          把Word数据类型的值用MOV指令传送到一个未定义数据类型的绝对地址,就可以比较了。


PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-12-02 16:47:36
3楼

取消编辑器对数据类型的核查。
          这个是怎么实现的?
          比如使用STL语言
          把Word数据类型的值用MOV指令传送到一个未定义数据类型的绝对地址,就可以比较了。
          简单的说就传送到M区MW中,不定义MW符号MW可以是整数或是字或是其他16位数据


PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-12-02 16:47:50
4楼

我有一个怪招,使用两个word进行异或结果为零则两个word相等

L   word1
L   word2
XOW
JZ     Lab1//相等
//不相等
Lab1://相等处理

PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-12-02 16:48:05
5楼

先在DB里把这两个变量定义成整型
    L           DB0 DW0
    L            DB1 DW0
        =I          
        =            Q0

PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-12-02 16:48:15
6楼

STL语句并不会检查那么严格
L DB0.DBW0
L DB1.DBW0
==I
就可以了,他只比较累加器里的数据,不管你原来什么类型

PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-12-02 16:48:36
7楼

quote:以下是引用冬日在2013-07-02 10:30:38的发言:
STL语句并不会检查那么严格
L DB0.DBW0
L DB1.DBW0
==I
就可以了,他只比较累加器里的数据,不管你原来什么类型


          正解


PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-12-02 16:49:35
8楼

我的做法是直接传送到MW中去,不要在符号表里定义该MW的类型,就是不用管这个MW,直接比较MW就可以,不过要留心交叉参考表别有地址重叠了

PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-12-02 16:49:44
9楼

quote:以下是引用冬日在2013-07-02 10:30:38的发言:
STL语句并不会检查那么严格
L DB0.DBW0
L DB1.DBW0
==I
就可以了,他只比较累加器里的数据,不管你原来什么类型

PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-12-02 16:49:59
10楼

STL语句并不会检查那么严格
L DB0.DBW0
L DB1.DBW0
==I
就可以了,他只比较累加器里的数据,不管你原来什么类型


          进了累加器,数据类型的外衣就被剥掉了。


PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-12-02 16:50:10
11楼

STL语句并不会检查那么严格
L DB0.DBW0
L DB1.DBW0
==I
就可以了,他只比较累加器里的数据,不管你原来什么类型
          进了累加器,数据类型的外衣就被剥掉了。


          是这样的吗?


PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-12-02 16:50:19
12楼

如果想比较大小可以用
L DB0.DBW0
 L DB1.DBW0
 >D


PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-12-02 16:50:31
13楼

STL语句并不会检查那么严格
L DB0.DBW0
L DB1.DBW0
==I
就可以了,他只比较累加器里的数据,不管你原来什么类型
          进了累加器,数据类型的外衣就被剥掉了。
          是这样的吗?


累加器有数据类型吗?没有。


PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-12-02 16:50:45
14楼

在 符号表 里 定义类型 INT ,就可以比较了!


          没那么简单,例如OB40的局部变量模块的起始地址,软件已定义为Word,不能在符号表里定义它。


PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-12-02 16:50:59
15楼

取消编辑器对数据类型的核查。
          这个是怎么实现的?
          比如使用STL语言
          把Word数据类型的值用MOV指令传送到一个未定义数据类型的绝对地址,就可以比较了。


          请问AUTOMANN侠,未定义的数据类型,我能想到的只有MW和QW,像DB块和L区都必须定义数据类型,word表示2byte,也就是说明数据的长度,类型不确定,INT有正负,数据类型已确定,不知是否正确。


PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-12-02 16:51:10
16楼

word类型为什么就没有比较一意义呢?
把word转换成int显然不是个好方法,这样的话干脆在定义时就定义成int好了,显然楼主想要的是word类型的。
step7用十六进制显示word的数值,也是用十六进制表示一个数据的,我觉得word类型比较最正统的作法是按位比较,前面也有人提出了。

PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-12-02 16:51:20
17楼

取消编辑器对数据类型的核查。
          这个是怎么实现的?
          比如使用STL语言
          把Word数据类型的值用MOV指令传送到一个未定义数据类型的绝对地址,就可以比较了。
          请问AUTOMANN侠,未定义的数据类型,我能想到的只有MW和QW,像DB块和L区都必须定义数据类型,word表示2byte,也就是说明数据的长度,类型不确定,INT有正负,数据类型已确定,不知是否正确。


          使用定义的符号则变量有确定的数据类型,比如DB1.DB_VAR,使用绝对地址则不确定数据类型了,如DB1.DBW0,L区临时变量相同。


PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-12-02 16:51:34
18楼

取消编辑器对数据类型的核查。
          这个是怎么实现的?
          比如使用STL语言
          把Word数据类型的值用MOV指令传送到一个未定义数据类型的绝对地址,就可以比较了。
          请问AUTOMANN侠,未定义的数据类型,我能想到的只有MW和QW,像DB块和L区都必须定义数据类型,word表示2byte,也就是说明数据的长度,类型不确定,INT有正负,数据类型已确定,不知是否正确。


其他数据区也可以使用未定义符号的绝对地址。例如用数组定义数据块的大小后,可以使用DB中的绝对地址。


PLC酷客

  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-12-02 16:51:44
19楼

quote:以下是引用violin在2013-08-17 10:16:49的发言:
word类型为什么就没有比较一意义呢?
把word转换成int显然不是个好方法,这样的话干脆在定义时就定义成int好了,显然楼主想要的是word类型的。
step7用十六进制显示word的数值,也是用十六进制表示一个数据的,我觉得word类型比较最正统的作法是按位比较,前面也有人提出了。


          请看我在28楼的帖子。


lideyi1

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 19回
  • 年度积分:0
  • 历史总积分:84
  • 注册:2011年4月28日
发表于:2015-11-08 20:33:49
20楼

路过学习,各位写得经典,。


热门招聘
相关主题

官方公众号

智造工程师