请教:PLC输入点任意一点变化均触发一次,用什么指令比较精简 点击:6399 | 回复:45



PAULCHAN

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:16帖 | 21回
  • 年度积分:0
  • 历史总积分:137
  • 注册:2003年11月02日
发表于:2012-01-09 18:05:10
楼主

如题!

另外三菱FIFO指令,当输入点部分有信号时,是否能做到依次输出且依次关闭已动作了的。假设X0~X17任意一点先变化,

则先变化的对应输出点Y0~Y17动作。如:X0—>ON接着X13->ON,再接着X4->ON......依次输出Y0,Y13(Y0不动作),Y4(Y0,Y13均不动作)。哪位大侠有精简的指令写法,请说说,谢谢~!



楼主最近还看过



wanggq

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

 

  “ winter938 ”的思路是:

 

  把指定的一个“输入通道”的“当前值”与该通道在前一周期的“数值”做一个“异或”运算,如果该输入通道的某(或某些)“位”有状态变化,则 在“异或”运算的结果中对应“位”的状态就为“1 ”。

 

  状态变化有两种情况:1、由OFF翻转为ON; 2 、由ON翻转为OFF 。我们要求的是当输入通道中的“位”由OFF翻转为ON 的时候才去触发指定“输出通道”的对应的“位”。 

 

  所以,要把这个“异或运算”结果中的因输入通道某些位由ON翻转为OFF所引起的“1”滤除掉!于是用“输入通道”的当前值跟“异或运算”的结果做一个“字逻辑与”的运算,这样就只剩下了“有用”的触发信号了!如果运算结果中有“有用信号”就令其去触发指定“输出通道”中对应的“位”使之为“ ON ”。

 

   在做完“异或”运算之后再把“输入通道”当前值的内容保存到某个“中间通道”里,以便在下一个周期里与新的输入数据做“异或”运算,随时监控指定“输入通道”的最新变化情况。

             

wanggq

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

 

  “ winter938 ”的这个思路多么的巧妙啊!

 

wanggq

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

 

  楼主所求教的是怎样用三菱的指令来实现这个“目标功能”。

 

  下面就用“ winter938 ”的思路,以三菱的指令来写出实现这个“目标功能”的片断:

  

  用三菱的指令写这个功能同样也只用6条指令。

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:60帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2012-02-03 11:17:41
24楼
谢谢楼上帮我做的解释,其实我的做法在开机前后发生状态变化及输入同时变化时可能欠妥,仅供参考.思路比程序本身重要,PLC用什么品牌可以暂时放下.

wanggq

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

 

    输入信号在开机前变化不是问题,你没有开机当然不运算这个变化!在开机前输入信号发生由OFF翻转为ON ,只要这个ON 状态持续到你开机,因为“异或运算”的另一个“源操作数”D0 也是“非保持型”的寄存器,故刚开机时D0 的内容是“ 0 ”所以输入通道在开机前就已经发生的某“位”之ON状态也能通过“异或运算”提取出来!

 

  输入通道内某些“位”同时发生信号上升沿也不是问题!既然是“同时发生”的信号上升沿,那么,这几个同时发生信号前沿的输入点都有“资格”去触发各自所对应的“输出位”!这情况与楼主的题目之要求是不相悖的!

  

wanggq

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

 

  而关机之后输入通道所发生的变化则更不是问题!你都关机不运行程序了,干么还管它运算不运算输入通道发生的变化呢?!

 

wanggq

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

 

  从楼主的题目、顶楼及№2楼的内容来看,没见到有关什么“开机前后”的指定的要求。假如说楼主想有这样的功能:关机或停电之后当再次开机或恢复来电时,原来关机或停电时输出通道中已触发为ON状态的“位”立即恢复为ON状态。那么这答案片断又该怎样来写呢?

 

  我认为可以这样来写:

  把触发内容保存进一个“停电保持”型寄存器D128里,在运算指定“输入通道”内容的“变化”之前就把这个保存的“关机或停电之前”的触发内容恢复到指定“输出通道”。

  

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:60帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2012-02-05 14:31:10
28楼
楼上你觉得MOV D2 D128指令前串个M8003触头如何?

wanggq

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

 

   在“MOV D2 D128指令前串个M8003触头” 干啥? 

wanggq

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

 

  楼主不是要求“精简”吗?在具有相同功能效果的前提下,能够“简”就简呗!

wanggq

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

 

  在“MOV D2 D128指令前串个M8003触头”反而不行!破坏了正确的功能!

 

wanggq

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

                                                                                

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:60帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2012-02-07 10:25:04
33楼
M8003不就第一个扫描周期不通吗?应该影响不大吧?

miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:27帖 | 3065回
  • 年度积分:0
  • 历史总积分:12427
  • 注册:2008年9月18日
发表于:2012-02-07 12:21:02
34楼
这个题 或许楼主的不知道自己在 问仕么?   我怀疑你这个问题 绕了一个圈, 最终有回到了 一个按钮 DI 点对应一个 灯DO 点 这么简单定位问题上了!

wanggq

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

 

对 winter938 关于:M8003不就第一个扫描周期不通吗?应该影响不大吧? 这一问题的答复:

  



  wanggq 回复:

  你在“ MOV  D2   D128 ”指令的前面串个M8003 触点,这就屏蔽了该指令在第一个运算周期里向D128传送D2中可能出现的“有用信号”!当输入通道中有的“位”在第1个扫描周期里已出现的ON就一定被这个屏蔽作用所阻隔而传递不到对应的“输出位” !

  

wanggq

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

 

   在“ MOV D2 D128指令前串个M8003 触头”所引起的问题不只是简单的一个扫描周期不通的问题!

   

guaimao

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 5回
  • 年度积分:0
  • 历史总积分:19
  • 注册:2006年11月23日
发表于:2012-02-08 08:03:15
37楼

没看懂!是x0对应 y0  x1对应y1~~~~~~~吗 然后要按顺序执行??? 如果这样很简单 用SFC做!

nike717

  • 精华:0帖
  • 求助:2帖
  • 帖子:12帖 | 359回
  • 年度积分:0
  • 历史总积分:493
  • 注册:2007年12月12日
发表于:2012-02-08 11:24:53
38楼

 938最好,LZ应把题目在说得明白些,变化和接通是不一样的

wanggq

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

 

  举例说明“在‘MOV D2 D128指令前串个M8003 触头’所引起的问题不只是简单的一个扫描周期的问题!”

 

  例:输入通道中的某个“位”(譬如:X1)其 ON 状态在PLC 运行的第1个周期就开始存在,且ON 状态存续期间没有发生其它“输入位”的“上升沿”变化。

 

  以№27楼的片断(“ MOV  D2  D128 ”指令前未串 M8003 触头)来分析:

     

  X1在第1个扫描周期就出现的ON 可以触发其对应的“输出位”Y1 。

 

 

  如果照<winter938>提议的在“ MOV D2 D128指令前串个M8003 触头”,则出现:在前述相同情况下这个X1的ON状态未能触发其对应的“输出位”Y1  !

 

  可见:“MOV  D2  D128 指令前串个M8003触头”所引起的问题并不仅仅是“1个扫描周期不通”的问题!

 

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:60帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2012-02-09 14:24:19
40楼
如果MOV K4X000 D0执行前D0之b1为1的第一个扫描周期即使X1为1,Y1也不会ON.这涉及运算的初始值问题,所以我用M8003躲避,就象边沿指令在运行就ON的位不会产生上沿(当然你也可以让它产生,三菱的好象就有两种边沿检测),鉴于楼上特意用D128保存了以前的状态所以我选择了躲避的方式.

热门招聘
相关主题

官方公众号

智造工程师