首页 上一页 1 2 下一页 尾页

在FX系列上怎样查找出D10-D49中的最大数和最小数 点击:3448 | 回复:40



wanggq

    
  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-04-26 16:22:34
楼主

 

  在FX系列的PLC上怎样查找出D10-D49中的最大数和最小数?  这个类似的问题前面已有网友在PLC每周一题栏目贴出过,而且也有答案出来。但是,我认为答案不够简洁,而且不够正确。现在将我以FX系列PLC为平台做的实验结果贴出来谨供网友们参考。

 

  答案1:

 

 

  这个答案适合FX1S / FX1N / FX2N



楼主最近还看过



wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-04-26 16:43:37
1楼

 

    题目是查找40个数据中的最大值和最小值,在这个具体的答案中“修饰指针”就应该控制在“K39”之内:

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-04-26 16:52:27
2楼

 

  对于答案一的具体片断,40个数据中的“最大值”寄存在D9中;“最小值”寄存在D8中。

   

wll502

  • 精华:0帖
  • 求助:6帖
  • 帖子:29帖 | 231回
  • 年度积分:0
  • 历史总积分:6132
  • 注册:2011年5月24日
发表于:2012-04-26 17:18:31
3楼
学习了,果断留名。。。。

阿水--王者之师

  • 精华:31帖
  • 求助:399帖
  • 帖子:1801帖 | 22295回
  • 年度积分:2
  • 历史总积分:98539
  • 注册:2007年3月22日
发表于:2012-04-26 17:25:33
4楼

路过学习,三菱的还不会玩

jian.du

  • 精华:0帖
  • 求助:6帖
  • 帖子:17帖 | 80回
  • 年度积分:0
  • 历史总积分:609
  • 注册:2008年3月11日
发表于:2012-04-27 13:25:55
5楼

上电的时候怎么知道传进去的就是最大值和最小值呢?

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-04-27 15:00:00
6楼

 

  答案1 只是原理性的表达,并不实用。下面给出答案2

 

  

  答案2:

 

  指定范围内40个数据的最大值最终寄存在D8;最小值最终寄存在D7

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-05-02 13:10:14
7楼

 

   按莫其麟网友所说:“可再回复一下,看是什么现象

  

             

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-05-02 13:55:59
8楼

回复内容:
对:jian.du关于上电的时候怎么知道传进去的就是最大值和最小值呢?内容的回复:


  本来是作为在需要考察40个从现场采集来的数据中“最大值和最小值分别是什么数值”这一功能要求提出的题目。我们可以认为 D10-D49 中的数据是 K-32768 到 K32767 之间的任意数值!

 

    答案1 只是原理性的表达。用一个“开机脉冲”来启动“逐次比较”的功能片断是不实用的。因为在实际应用中,PLC 刚上电时 D10-D49 中的数据都是0,这时启动“逐次比较”的功能片断经 40 个扫描周期后“数据比较”的结果出来:D8 和 D9 中的内容都是“0” !但是,作为试验,我们可以在开机前用PLC的外设人为的给D10-D49 随便输入40个杂乱无序的数据,然后让PLC 进入RUN 。PLC 经 40 个扫描周期后就自动比较出这 40 个杂乱无序的数据中的“最大值”和“最小值”,并将最大值寄存于 D9 ,将最小值寄存于 D8 中(针对答案1)


wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-05-02 14:15:40
9楼

回复内容:
对:jian.du关于上电的时候怎么知道传进去的就是最大值和最小值呢?内容的回复:



  传送进去的数据可以随便杂乱无序,PLC 是自动的经过40次(逐次)比较而完成查找D10-D49 这40个数据中的最大值和最小值的。

 

  对于答案1,查找出的最大值寄存于 D9 、最小值寄存于 D8 。

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-05-02 15:02:23
10楼

 

  通常情况下,我们会不止一次的需要了解一下当前的 D10-D49 范围内的最大值和最小值。D10-D49 中的内容是控制程序在设备运行中自动采集的。(这个采集过程不在我们的题目内容中,我们可以不管这40个数据之具体的采集方法及它们的变化动态)

 

  我们可以将答案1 做一点小的改进:用一个“查找操作键”来随意在某个需要的时候查找这 40 个数据的最大值和最小值。

 

  我们假设在某一时候 D10-D49 中的内容是如下表所示的一组数据(单独实验这个查找功能片断时,可以用编程工具传送这一组数据到指定的D10-D49 中)

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-05-02 15:13:08
11楼

 

  答案1 的梯形图片断改进成用X3 来控制查找最大值/最小值之操作的输入点:

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-05-02 15:23:23
12楼

 

  摁住X3 ,就进行查找之动作,经PLC 的40个扫描周期(实际上是很短暂的一段时间)这指定数据范围内的最大值就出现在D9 中、最小值就出现在 D8 中:

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-05-03 22:33:49
13楼

 

  我们现在再讨论“答案2”:

 

  如果我们定义D10-D49 的内容是控制过程中现场采集来的数据,则答案2也不够实用!因为答案2中D10-D49 这一组数据在执行“移位读出”指令的过程中不断地被改写。它们并不是在指令中被当作“源数据块”来运用的。虽然三菱FX编程手册上对“移位读出”指令的解释是说该指令中对应的数据块是“源(S)”,但是,这只是编程手册的错误解释!

 

  不过,我们将答案2的功能片断作为该“功能”的演示用也还是蛮可以的!

        

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:60帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2012-05-03 23:02:25
14楼

数据没在一个扫描周期内比较完那么应该要求数据相对稳定不变,用SFRD指令破坏原比较数据好象不太合理

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-05-04 15:29:24
15楼

引用 winter938 的回复内容:

 

  数据没在一个扫描周期内比较完那么应该要求数据相对稳定不变,用SFRD指令破坏原比较数据好象不太合理



  同意楼上的看法!所以应该将“源数据块内容”传送到另一组数据寄存器,然后对这另一组寄存器内容进行移位读出。

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-05-04 21:03:10
16楼

 

  在实用中,D10-D49 范围内的数据是控制过程中现场采集的,我们把这段范围的数据当作“源数据”。但是这里我们为了避开“数据采集”的细节,   单独实验这个“寻找最大值和最小值”的功能片断,也为了避免每次实验都要花费时间去传输几十个数据,我们可以假定自动采集的 40个数据是寄存在FX1S 的保持型寄存器之中的 D130-D169 这段范围,在每次查找之前把这 40 个数据传送到 D10-D49 作“移位读出”指令的“目标操作数1”(请原谅我称呼“移位读出指令”的第1个操作数为“目标操作数1”而编程手册上却是称其为“源 S ”);而 D129 中寄存一个常数 K40 ,以便用来在每次查找之前把移位读出指令的“指针”预先设置成“查找数据的个数 40”

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-05-04 21:26:13
17楼

 

    查找之前预先传送40个源数据和指针预置数据共计传送41个数据( D129-D169 )到 D9-D49 这41个数据寄存器。

 

   功能目标是查找40个数据的最大值及最小值,所以“移位读出”指令的第3 个操作数 n 的数值就应该是“K41” (40个数据+1个指针嘛)  

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-05-04 21:40:31
18楼

 

  这写在保持型寄存器 D129-D169 中的数据除 D129 的内容 “ K40 ” 以外,其余的40个数据采用 №10 楼那个“数据表1” 一样的内容,只是我们把这一组数据写到保持型寄存器里,目的是不要轻易的丢掉辛苦写出的数据块内容。

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-05-05 13:21:49
19楼

 

  我认为:编程手册(版本号Y992D87701A)第198页对“移位读出”指令的讲解是有错误的。

 

  根据编程手册对<应用指令>的操作数“源”的定义:其内容不随指令执行而变化的操作数称为“源”,用(S)表示,可以利用变址修饰的“源”用(S.)表示。当“源”有多个时,分别以(S1.)、(S2.)···表示。

  又根据编程手册对<应用指令>的操作数“目标”的定义:其内容随指令执行而变化的操作数称为“目标”,用(D)表示,可以利用变址修饰的“目标”用(D.)表示。当“目标”有多个时,分别以(D1.)、(D2.)···表示。

 

  所以,我认为编程手册第198页对“移位读出”指令的讲解应当作如下的修改:

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:33帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2012-05-05 13:29:00
20楼

 

  续楼上的内容,还有一处也应当改动:

 


热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 下一页 尾页