首页 上一页 1 2 3 4 5 6 下一页 尾页

超难的PLC编程 点击:6095 | 回复:119



解永辉

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 24回
  • 年度积分:0
  • 历史总积分:139
  • 注册:2004年6月06日
发表于:2010-12-21 16:42:12
楼主
使用PLC(FX2n-48MT)中的16个输出端子Y0-Y17,,编写产生随机6个输出端子置高电平的程序,欢迎各位大虾指点!谢谢!



wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2011-07-01 22:22:20
101楼

 

  在T218的设定值被设置成(K)168 的情形下,T218的最大当前值就是(K)168 。它与D8099的最大值(K)32767相乘所得之积为(K)5504856,对应于十六进制为(H)53FF58 。低16位的数据为(H)FF58;高16位的数据为(H)53 。

 

  也就是说:把T218的设定值设置成(K)168 时,则 你取乘积的高16位的数据 顶多只能达到 7位 二进制数     (B)101 0011 况且这个最大数据中为1 的位数 没有达到 6 位。很显然,不大于这个数据的 且有6 位 1 的数据是 11 1111 。所以程序中那个“统计输出点数的指令”对高16位数据统计出有6个 1 时,所定格下来的输出状态必然是 Y0、Y1、Y2、Y3、Y4、Y5 这 6个位ON,其余10个位OFF 。这个状态数据就是(K)63, 对应于(H)3F 。

 

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2011-07-01 23:14:35
102楼
楼上:你确认送到Y的是乘积的高16位?

wanggq

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

 

引用<winter938 >的内容:

  

  “楼上:你确认送到Y的是乘积的高16位? ”

      

 


 

 
   我在№95楼说过:“<四两拨千斤>在72楼的梯形图程序是没有问题的。而且还对我们有新的启发! 但是,72楼的‘文字说明’却是有问题的!是什么问题,先让网友们自己分析”

 

  <四两拨千斤>在72楼的文字内容中有这样的说明“将D8099上电不停地滚动,再乘上T218 K168(0.01S快速滚动),并且取乘数的高16位。”

 

 

 

  我所讲的“72楼的梯形程序程序是没有问题的”是指72楼的梯形图中“字(K4Y0)”的内容为乘积的“低16位内容”。

   

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2011-07-02 13:57:48
104楼

 

  为了讨论的方便,我们把72楼的梯形图清晰化:

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2011-07-02 14:25:40
105楼
 72楼的梯形程序程序“是没有问题的”是指72楼的梯形图中“字(K4Y0)”的内容为乘积的“低16位内容”。
 
 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2011-07-02 14:30:02
106楼

 

  编程手册上对乘法指令的解释:

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2011-07-02 14:45:48
107楼

 

  72楼的梯形图中乘法运算结果中的“高16位内容”存放在寄存器 D9 之中。 

 

  可见72楼之例程中,两个因数在均为最大值的情况下,其积之“高16位”内容顶多也只能占到 7 个bit !

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2011-07-03 13:50:30
108楼

 

  楼上这个二进制算式说明:若按照<四两拨千斤>72楼的文字说明把72楼“乘法指令运算”结果的“高16位”数据传送给“字(K4Y0)”,那么就等于说“四两拨千斤”把原本的题目“ 从16中随机选6 ”错弄成“7选6”了!

 

wanggq

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

 

  而且,72楼一例中“高16位”能够被1占到的7个bit 的数据受到乘积的最大值的限制,必须是不大于(二进制) 1010011 这个数的。

 

  很明显: 既满足不大于 1010011 又满足有6个 bit 为 1  的数据只能是 0111111   即(十六进制)3F

                     

  在“统计输出点数的指令”控制下,这(还算不上快速的)变动的 Y0 ~ Y6 这7个 bit 最终定格下来的数据状态必然是唯一的:111111

  

          

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2011-07-03 16:44:43
110楼

 

  以上的分析可以用实验来验证:   

 

wanggq

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

 

  现在可以做结论了。D8099的最低两个bit 信息的变化是很快的。b0 每隔 0.1 mS 就改变一次状态、b1 每隔 0.2 mS 改变一次状态。虽然把这两个bit 组合起来它们的变化也是有规律的:00 - 01 - 10 - 11 - 00 循环出现(周期为0.4 mS),但是对于任何人的反应速度来说这个 0.4 mS 都是太短暂了,任何人都根本不可能把握得住!再加上用“移位寄存器”把这个高速变化的信息打乱撒向16个bit 。(PLC在每一个扫描周期里都要移动这16个bit 的内容)这样做出的结果对于任何“抽签者”来说必然是“随机的结果”!

   

青青丁

  • 精华:1帖
  • 求助:0帖
  • 帖子:2帖 | 3回
  • 年度积分:0
  • 历史总积分:29
  • 注册:2011年6月26日
发表于:2011-07-08 18:06:05
112楼
00000真赞合格 后固公果根古古怪怪

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2011-07-10 20:37:43
113楼

 

  这个青青丁说的什么“后固公果根”这样的火星语才叫“古古怪怪”的呢!

 

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2011-07-10 20:39:45
114楼

 

  要是哪个娃儿用这样的火星语在学校交语文作业,就说明这娃儿是个白痴!!

    

1292913657zy

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 30回
  • 年度积分:0
  • 历史总积分:301
  • 注册:2011年4月13日
发表于:2011-07-11 15:35:19
115楼
又学到了很多 ,谢谢wanggq!

yangxio

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 46回
  • 年度积分:0
  • 历史总积分:171
  • 注册:2007年11月30日
发表于:2011-07-21 22:15:17
116楼
呵呵,老王头果然是个人才,是块搞研究的料!虽然说解决这种问题的人肯定大有人在,但是能花这么多的精力把这个问题图文并茂地表达出来让人清清楚楚明明白白的恐怕找不出第二个,不服不行!

zzy100

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 8回
  • 年度积分:0
  • 历史总积分:38
  • 注册:2010年10月17日
发表于:2011-07-26 23:37:57
117楼
好晕啊 刚学的

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2011-08-07 09:29:17
118楼
引用<wanggq>在94楼 的内容:

 

『  如果我们已经知道解老师他们的实际应用需要,我可以直接奔这个实际要求的“目标功能”去写出程序:

 

  当考生按下“抽签”按钮X5,PLC(FX2n-48MT)的Y0 ~ Y17 这16个输出位就随机的出现6个位ON 。 』

         





  对于解永辉老师他们的应用实际情况,94楼的答案是最恰当、最适用的!

 

 

  “K1M0”的内容是“D8099”最低4个bit 内容之复制品。虽然这4个bit 是“D8099”内容的(十六进制)最低一位的数据当然的与“D8099”时钟脉冲是取自同一块晶体,但是我认为在94楼的答案中“D8099当前值”与“K1M0当前值”的乘积也不会形成<winter938>所说的那个“最小公倍数周期”(3.2768秒与1.6毫秒的最小公倍数周期为3.2768秒)。因为一个PLC程序的扫描运行周期并不是“精确固定”的,对它来讲还有“最大扫描周期”、“最小扫描周期”及“当前扫描周期”之分。某一“扫描周期”与另一“扫描周期”相差个零点几个毫秒到1点几个毫秒那是再平常不过的事了!仅凭这零点几个毫秒到1点几个毫秒的差异就足以使两者乘积的状态产生成千上万的不同组合。而仅凭人工操作按键,任何人都无法预知他操作按键之后“K4Y0”字中将要出现哪6个输出位为ON!

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2011-08-07 10:36:27
119楼

 

  根据排列组合的计算公式可以计算出:在16个指定输出位中取6个位为ON 的所有组合状态的总数=8008  。

 

  那些试图要集中购买这8008 个组合中某一段来实现“中奖”的网友说一说你们能瞄准哪一个范围、多大的范围来达到“中奖”?!!

  


热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 3 4 5 6 下一页 尾页