我觉得这个程序有问题大家帮忙看看 点击:8675 | 回复:115



邪恶的方丈

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 81回
  • 年度积分:0
  • 历史总积分:31
  • 注册:2008年10月25日
发表于:2009-04-17 20:56:16
楼主

今天在教课书上看到一个编程题目:用跳步指令设计用一个按钮X0控制Y0的电路,第一次按下Y0变位ON第二次按下Y0变为OFF

它给出的答案是这样的

LDP X0

OUT M0

LDI M0

CJ   P0

LDI Y0

OUT Y0

P0

大家看看可行吗?




wanggq

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

引用gaoqiang 的回复内容:

  这个用“跳转”来实现“一键启停”不行 


  每次按按键两下开 两下关

 


 

 

  我不知道“gaoqiang ”网友怎么能得出这样的结论“按键两次开,再按键两次关”?我们可以用实验程序来验证“gaoqiang ”的这个结论的“真”与“假”!

 


zhouduoliang

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 156回
  • 年度积分:0
  • 历史总积分:1219
  • 注册:2007年2月14日
发表于:2009-05-04 21:43:10
22楼
非常同意20楼观点!

wanggq

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

 

  想必大家对下面这个程序片断的“一键启停”功能 没有异议吧!

 

wanggq

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

 

  如果谁有异议,就请把道理讲出来!如果没有异议,那就是认可:用“ALTP指令”来实现“一键启停”功能是没有问题的!当执行条件从OFF跳变到ON的第1个周期里,“操作位元件”Y0的状态就改变一次。

 

  那好!我们就来看下面的一个比较实验:

 

  我们多数人都认可这样一句名言:实践是检验真理的唯一标准。上面的梯形图监视图片是在FX1s、FX1n、FX2n系列PLC上进行的验证。想必大家对上面这个梯形图第1行的“LD  X0  ALTP    Y0  ”功能没有异议!如果梯形图中Y1的翻转次数完全跟Y0的翻转次数一致,就完全能够证明采用“跳转命令”来实现“一键启停”功能的片断是正确的!
  Y0的状态由“0”向“1”翻转的次数累计在C0中,而采用“跳转命令”来实现“一键启停”的Y1,其状态由“0”向“1”翻转的次数累计在C1中。比较两个计数器(C0、C1)的当前值,可以充分证明:采用“跳转命令”来实现“一键启停”完全是和“ALTP命令”等效的!

wanggq

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

 

  “Y000 ”和“Y001 ”分别是用“ALYP指令”和“跳转”的方法来做的“一键启停”功能的程序片断的“输出位”。它们各自的由“0”向“1”翻转,都是受同一个操作按键(X000)同时又是同一“操作”所操纵(这是从两个片断在对比的“公平性”上来考虑的)。

 

 

wanggq

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

 

  用一个计数器(C2)来对操作按键(X000)的按下次数进行累计;用计数器(C0)来对“Y000 ”的由“0”向“1”翻转的次数进行累计;用计数器(C1)来对“Y001 ”的由“0”向“1”翻转的次数进行累计。

 

wanggq

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

 

  若用“跳转”做成的“一键启停”片断如“gaoqiang ”所说要“按键两次开,再按键两次才关”,那么就会是:输出位的状态若为“0”,则“C2 ”的当前值就必定是 4 的整倍数(也包括还未操作时的次数“ 0 ”);若输出位的状态为“1”,则“C2 ”的当前值就必定是 4 的整倍数加 2 (也包括输出位初次由0向1翻转时的操作次数 2)。

 

wanggq

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

 

  从第24楼的实验程序之监视图片上我们看到C2 的当前值为:133    

 

   因为用“跳转”方法所做的“一键启停”之“输出位Y001 ”当前状态为“1”,所以,我们要把“C2的当前值133 ”减去2,再看其“差”是否为4的倍数。显然其“差(131)”不等于4的整倍数!这就充分证明“gaoqiang ”网友的说法(按键两次开,再按键两次才关)与事实不符!

 

  相反,根据C2的当前值133是一个“奇数”,而Y001的当前状态是“ON”这一点就可以证明:只需按键单次就能使“Y001”的状态发生改变!

 

  我们从该监视图片上看到:C1 的当前值为67,C2 的当前值为 133  。根据“(67-1)× 2  = 133 -1”可以充分证明:“按键(X000)1次,Y001 就‘开’,再按键 1 次,Y001  就‘关’是千真万确的!”

 

  再有,从该监视图片可以看到:C1当前值与C0当前值完全相同。既然我们大家对“ALTP指令”的功能不加怀疑,那么,C1当前值与C0当前值完全相同,这就充分证明用“跳转”方法来做的“一键启停”与“ALTP 指令”的功能完全一致!我们还有什么理由可以怀疑的说“用跳转的方法来实现‘一键启停’不行”呢?!!

 

 

wanggq

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

 

  在相关的讨论《一个按钮两种功能》主题下也有网友在实践中遇到类似的疑惑:

 

 

wanggq

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

                                                                                         

  把局部放大一些,方便大家阅读。

 

wanggq

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

 

  如果程序中没有设置“跳转”的环节,这条程序语句:“LDI    Y000     OUT    Y000 ”在程序的每一个扫描周期里都要被执行1次,造成的结果是“输出位Y000 ”每一个周期都要翻转。如果PLC是继电器输出型的单元,那么,这个输出继电器Y000根本就反应不过来!但是,我们在程序中设置了“跳转”的环节,而且,这个“跳转”的条件是除了输入点X000从OFF跃变到ON的最初1个周期之外的全部周期都是成立的。所以,我们每操作1次按键使X000接通一次,输出位Y000的状态只能翻转1次!

 

老菜鸟

  • 精华:22帖
  • 求助:0帖
  • 帖子:301帖 | 8609回
  • 年度积分:0
  • 历史总积分:24924
  • 注册:2003年6月15日
发表于:2009-05-06 20:37:02
32楼

五颜六色的,这样的贴子赏心悦目!顶一下!

44yanzhi

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 57回
  • 年度积分:0
  • 历史总积分:226
  • 注册:2009年4月22日
发表于:2009-05-06 21:06:07
33楼
wanggq 很热心,辛苦了。值得大家前习,我在些表示感谢您的教导。

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2009-05-06 21:14:37
34楼

 

  “常进华”及“gaoqiang ”两位网友在实践中为什么会得出与我在上面对“一键启停”程序的分析结果根本不同的结论来呢!这只有一种可能:那就是他们所用按键的电触点有发生“颤动”的情况!操作者在感觉上只是摁动了一次按键,但事实上,按键的电触点已经接通了若干次!倘若这“颤动”的次数是一个“奇数”那还正好能得到我们所希望的操作结果!但是,倘若这“颤动”的次数是一个“偶数”,那么,操作者就会误认为这一次“操作”没有起什么控制作用!在这种情况下再一次摁动按键,而这一次操作恰巧按键的电触点“颤动”次数是一个“奇数”,使得输出位Y000的状态最后翻转为操作者所希望得到的状态。那么,这个操作者就误以为这个用“跳转”方法来做的“一键启停”程序不行,要“按两下开,再按两下才关”!

 

 

PistoN

  • 精华:0帖
  • 求助:1帖
  • 帖子:23帖 | 13107回
  • 年度积分:18
  • 历史总积分:40065
  • 注册:2009年5月22日
发表于:2009-05-06 21:58:15
35楼
三菱fx-2N系列plc有ALT指令,实现起来更方便

wanggq

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

 

  我们所讨论的这个用“跳转”方法做的“一键启停”程序其控制输入位是“ X000 ”正好是三菱PLC上反应速度较高的输入继电器,它把按键电触点的快速颤动也敏捷的给检测到了。所以,这种反应过于敏捷的输入位是不宜做“一键启停”功能电路的控制“输入位”的。我们可以把“控制输入位”选择在其它输入继电器上。另外,我们还能通过其它的一些措施来避免这种过于的“敏捷”:

 

  ①、在D8020(输入滤波器调整)中把设定值改成最大值。编程手册上记载的最大值为60mS。

 

    ②、在程序中写入延时功能:把输入位的b接点的ON时间达到一个数值以后才能使输入位的a接点起到控制“一键启停”程序的作用。

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2009-05-06 22:24:59
37楼

                                                                                                                                    

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2009-05-07 12:57:32
38楼

 

引用PistoN 在第35楼的内容:

 

   三菱fx-2N系列plc有ALT指令,实现起来更方便


 


 

 

   请问“ PistoN ”网友:   用“ALT指令”实现“一键启停”比第4楼的用“ ALTP ”更方便吗?!

 

    第4楼的程序片断如:

 

LD         X0

ALTP    Y0

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2009-05-07 13:11:44
39楼

 

  请网友们注意: 我在第34楼提到的输入开关的电触点“颤动”的问题,并不是仅单单出现在“用跳转方法实现的‘一键启停’功能程序”的控制问题上!它同样会出现在“用‘ALT指令’或‘ ALTP指令’实现‘一键启停’功能程序”的控制问题上!以及其它如“计数器”电路、“四则运算”、“递增运算”、“递减运算”……等等功能都可能因这种“颤动”而造成运算命令的误执行!!

 

  

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2009-05-07 13:34:06
40楼

 

  譬如:用按钮接通输入继电器“ X000 ”并对“X000”的接通次数进行统计:

 

LD           X000

OUT       C0              K32767

END

 

  如果我们选用高速类型的PLC,把输入继电器“X000”的输入滤波参数设置成“0”,并且用一个“质量档次”较低的按钮来作控制开关。我们一面摁动开关,一面用心记下摁动次数,并把这个“次数”与C0 当前值进行比较,就一定能发现两者之间会出现差异!

 

 


热门招聘
相关主题

官方公众号

智造工程师