超难的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-06-27 14:04:11
81楼

 

引用<wanggq >在第22楼的内容:

 

  M8099是FX2n/ FX2NC上的(0.1mS)高速环形计数器D8099的驱动位。D8099的最低2个位高速的翻转着它们的状态(0 / 1),把它们作为“移位寄存器K4Y0”的信息源,每个扫描周期里,源信息都有可能是 00 / 01 / 10 /  11 这4种组合中的一种。这是我们无法预知,也无法掌控用操作开关X05的摁下时刻去选择其中哪一种状态组合的;同时,移位寄存器“K4Y0”各个位也高速的从低位向高位方向滚动着。所以从Y0至Y17的16个位在我们摁住X05的开关时,我们无法掌控这16个输出位的当前状态!我们放开X05的开关后,只要字“K4Y0”中有6个“1”状态时,字“K4Y0”中16个输出位便将当前状态定格下来。按照№18楼对“随机”所下的定义,这“K4Y0”定格下来的状态就必定是一个“随机”的状态,且满足楼主要求“有6个输出位状态为高电平”的目标功能!

     



   

  没有看懂<Wanggq>在答案程序中运用“移位寄存器指令”之意图的网友可以参考第22楼帖子的内容。

wanggq

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

 

  本例中运用MOV指令的目的是为了取用D8099中翻转最快的 b0及b1这两个bit 的状态(0 / 1)信息。在这条指令中b0及b1这两个bit 的状态信息分别传递给对应的M0及M1。我把这两个bit  的状态信息拿来作“移位寄存器(K4Y0)”的输入信息源。

 

  本例中运用SFTL指令的目的是把D8099的b0及b1这两个bit 的状态(0 / 1)信息快速的撒向“字(K4Y0)”的16个“输出位(Y0 ~ Y17)”。

 

wanggq

  • 精华:2帖
  • 求助:0帖
  • 帖子:24帖 | 5342回
  • 年度积分:0
  • 历史总积分:10407
  • 注册:2004年8月21日
发表于:2011-06-27 15:25:11
83楼

 

  而这个“统计输出点数的指令”并不能实现楼主题目要求的全部内容!楼主要求的程序需要具有两种“成份”即“随机现象”的成份和“确定现象”的成份。

 

wanggq

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

 

  下面引用 伍琪生 的内容:

 

---------------------------------------------------

     

  <Wanggq>回复:

 

  需要提醒一下没看懂问题的网友:高速计数器的整体“当前值状态”是不能作为“随机脉冲源”的!因为它是由一个有确定规律(逢二进一)记数进位的寄存器来承载的信息。而且,16位计数器的高位bit 状态的变化是比较慢的,反应灵光敏捷的人很容易把握它的变化节奏。所以我们应该只取用它最低的一、两个bit 的快速跳变信息,并且要设法将这些信息打乱撒布到题目所指定的16个“格子”(Y0 ~ y17)中。

 

wanggq

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

引用<四两拨千斤> 的内容:

 

  “仔细分析和验证,发现还是有些问题。
   D8099每次从0开始到32627滚动,通过训练可以达到控制时间,从而控制在某一区域。
   如果用来博彩,此时可以大量购买某一区域,达到中奖。
   我将D8099上电不停地滚动,再乘上T218 K168(0.01S快速滚动),并且取乘数的高16位。”

 


    
  <四两拨千斤>网友在70楼的程序中把39楼答案的“MOV  D8099  K1M0 ”改写成:“ MOV  D8099  K4Y0 ”就是一个明显的错误!

  D8099的最高位 b15 是符号位,它是恒为0状态的,所以它为高电平的几率等于零!剩下15个bit 的有确定规律的信息整体MOV 给K4Y0,则 Y0 至 Y16 这15个“输出位”就透明的把D8099的内容反映出来了。加上Y16、Y15、Y14、Y13 这几个输出位的变化较慢,反应敏捷的人凭肉眼都能看到它们的节奏规律!这还叫什么“随机的状态”呢?!
        
  <四两拨千斤>网友自己弄出来的“毛病”就应该自己把它说清楚,不要含糊的说“仔细分析和验证,发现还是有些问题。D8099每次从0开始到32627滚动,通过训练可以达到控制时间,从而控制在某一区域。 如果用来博彩,此时可以大量购买某一区域,达到中奖。” 
 

  需要指出两点:其一、D8099 的内容范围是0 ~ 32767 。其二、D8099 的“当前值”在M8099为ON期间(循环)递增,在M8099为OFF期间保持当前值。在执行“ RST   D8099  ”或者“ MOV   K0    D8099 ”等运算时D8099清零。另外,在PLC初上电瞬间 D8099 也清零。

 

  所以,如果程序中没有写入给D8099清零的指令,且PLC又不是初上电、从16中随机选6的操作也不是初次。则,以摁压按钮的时刻为“起点”,就不是“D8099每次从0开始到32627滚动”。

 

wanggq

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

 

  把D8099当前值的“确定变化规律”打乱的方法是可以有多种形式的。<四两拨千斤>网友在72楼的梯形图程序中用一个变化着的 T218 当前值与D8099当前值相乘来打乱D8099当前值变化的“确定规律”就是一个在我们之前没有提到过的新方法!

 

  “乘法指令”确实比“移位寄存器指令”要简练些!受<四两拨千斤>网友这个方法的启发,我重新编写了一个“从16 中 随机选 6 ”的简练程序:

 

wushaoping7

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 288回
  • 年度积分:199
  • 历史总积分:4086
  • 注册:2020年3月27日
发表于:2011-06-27 23:03:14
87楼
wanggq  的程序相当好!别都在这里瞎较劲了,我们关心的还有钱有没有拿到阿  哈哈!!!!

wanggq

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

 

  回复上面87楼关心的问题:

 

  解永辉老师是一位说话算数的好老师!他允诺的1000元RMB一个子儿都不少的兑现了!

 

  他是分为两次先后兑现的。一次汇500RMB。

 

wanggq

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

 

  解永辉老师任职于山东潍坊职业学院

 

  解永辉老师可能是主管潍坊职业学院电气智能实验室的负责人

     

wanggq

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

 

  解永辉老师的这个题目不是用于“博彩项目”,而是用在一种教学设备上的一个“子功能”。(可能是用于由学生自主抽签决定考试内容)

 

  解老师跟我通过几次电话。说是他们学院进口了一台什么设备效果很好,院方决定要再仿制一台这样的设备,其自动控制程序中需要一个“在16中随机选6 ”这样的子功能。我揣摩该子功能可能是用于“让学生自主抽签决定考试内容”。在设备上随机自动的产生6个“故障原因”组合作用于某台“待修机器”以构成各种各样的“故障症状”让学生去“判定故障原因”和“排除故障”。

 

wanggq

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

 

  解老师在主题帖中把题目的“目标功能”表述得比较粗略,所以我们之前并不真正了解这一“目标功能”在实际运用中的具体细节。很多人(包括我)都误以为是用于“博彩”。因而我在设计答案程序时,故意把“字(K4Y0)”设计成操作按钮被摁下之后便即时显示“随机变化的0 / 1 信息”的快速移动;放开按钮之后,当“字(K4Y0)”的随机状态满足:有(且仅有)6个输出位为 1 时才定格下来。

    

  跟解老师通了电话之后我才知道解老师这个题目的Y0 ~ Y17 这16个输出位是分别用于驱动产生各种“故障原因”的,所以,解老师和我通电话时说他们并不希望在“抽签”操作按钮被摁下期间16个输出位有快速闪通的。

 

  既然这16个输出位的任务是给出“故障源”,理所当然就不该把它们设计成有快速闪通的!解决的办法可以采用中间继电器M来中转一下。对于这一点,解老师他们的课题组是自己解决的。

 

  我现在也把这一解决办法以梯形图程序表达给网友们参考:

 

虫子

  • 精华:0帖
  • 求助:1帖
  • 帖子:20帖 | 1062回
  • 年度积分:0
  • 历史总积分:3730
  • 注册:2009年8月01日
发表于:2011-06-29 10:45:24
92楼
回复内容:
对:wanggq 关于

 

  请教<老菜鸟>网友:“伪随机”与“绝对随机”分别应该怎样来定义?

 

  下面我给出两组以39楼的答案片断所实验得出的字“K4Y0”(即Y0~Y17这16个输出位)的“状态数据”,每组60个数据,记录在D1至D60寄存器中。请大家研究一下它们是不是属于“随机状态”?并请说出这120个“状态数据”是“绝对随机”还是“伪随机”?要用道理来说服人!

内容的回复:
不知道楼主有没有实现诺言!

wanggq

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

 

 引用<虫子> 的内容:

 

    “不知道楼主有没有实现诺言!”

      

 


 

 

  楼主是解永辉,不是 wanggq 。楼主的诺言是:“ 若能及时解决该问题!支付1000RMB,绝对守信! ”

   

 

  解永辉老师已经全额的兑现了“付给1000元RMB ”的诺言! 

 

    是<老菜鸟>在疑虑39楼那个太简单的程序让Y0 ~ Y17 所产生的“随机状态”是“伪随机”!<虫子>应该问问<老菜鸟> :“伪随机”与“绝对随机”分别应该怎样来定义?!

         

 

wanggq

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

 

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

 

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

         

wanggq

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

 

  <四两拨千斤>在72楼的梯形图程序是没有问题的。而且还对我们有新的启发!

 

  但是,72楼的“文字说明”却是有问题的!是什么问题,先让网友们自己分析,如果明天我有空,我再把其中的道理给大家讨论。

  

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2011-06-29 22:38:25
96楼
上面的图片中的程序我们假设在执行MUL D8099 T218 D8时D8099是0-32767-0变化且精确的以32768*0.1毫秒为周期,而T218是0-167-0变化且精确的以168*10毫秒为周期,那么这两个周期的最小公倍数周期后理论上说D8又开始重复上一轮循环的变化,这意味着抽签有规律性.最小公倍数周期好象是2^5*1024*525*0.1毫秒=1720320毫秒即28.672分钟后D8将复现前一轮的变化.因此我觉得所谓"随机"性就是看那个变化的周期是否够长,以上仅是我的臆想不一定正确,仅供参考

wanggq

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

 

  我谈一点看法,也仅供参考!

 

  如果D8099与T218两者都是硬件电路做成的计时器,则,上面<winter938>的说法是完全正确的!

 

  但是,从微观的层面讲,D8099与T218两者的“计时”时刻是不“合拍”的。D8099是由专用的硬件电路来计时的,与程序的扫描周期不相干。而T218是由PLC系统程序来虚拟的计时器,它的“计时”时刻受用户程序运行情况(含PLC通讯情况)的影响。

 

  D8099当前值的读取是在程序中运算含有D8099为“操作数”的指令时读取的,在运算该指令的时刻,D8099最新当前值就被读取出来。而T218当前值的读取是程序中运算T218线圈指令时读取的。在同一条分别含有D8099、T218为“操作数”的应用指令被程序运算的时刻D8099的当前值时态为“现在时”,T218当前值时态为“过去时”!

   

  当然,这种影响是很微小的。但是,再微小的差异也会对运算结果造成差别。而这种差别对于“抽签者”来说也是不可掌控的。即这种差异就是一种“随机因素”。就象炮兵炮击某个目标,虽然可以掌握炮弹的基本因素 也是人们所能控制的是它的初始条件--初速、发射角等,这些可以通过弹道方程(必然规律)计算出炮弹的落地点,但炮弹在飞行过程中会受到空气的阻力--风速、风向、空气的湿度、温度等(次要因素)的影响,它们使得炮弹很可能不落在“计算出来”的准确的目标焦点上。

   

wanggq

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

 

  话又说回来,<winter938>说的“最小公倍数周期”的必然规律在72楼是存在的!当我们按照 <四两拨千斤> 在72楼的文字说明:“D8099当前值乘上T218当前值,取其乘积的高16位。” 那么,这种必然规律就会很明显,使得按72楼的方法做出来的答案程序离题目“随机产生6个ON位”的这一要求太远、太远! 正如 <四两拨千斤> 所说的:“如果用来博彩,此时可以大量购买某一区域,达到中奖。”

 

  注:

 

  本楼的说法是在这样的前提下:这里的T218 的设定值一定要远大于“ K168 ”,而不该是 <四两拨千斤> 所设置的“ K168 ”! 

      

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2011-06-30 16:54:21
99楼
所以买彩票的话就盯准大致的着弹范围下注中奖的机会就很高.如果扫描周期不超过2.5毫秒的话T218是不会漏计时的,再如果T218的时基与D8099的时基来自同一个晶体,我所说的那种周期性重复应该是必然的,但鉴于扫描周期的波动和楼上所说的D8099的实时读取与T218的滞后会造成D8不会一次不变的重现上一个周期的变化,但变化的大方向是一样的

wanggq

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

 

   三天前,我在№85楼就想要说的问题留到今天才说出来:

    

  如果按照 <四两拨千斤>贴于72楼的文字内容“将D8099上电不停地滚动,再乘上T218 K168(0.01S快速滚动),并且取乘数的高16位。”  那么,如果是用来“博彩”,还用不着 <四两拨千斤>“大量购买某一区域”,仅需购买唯一的一个号码即能确保你中奖!这个号码就是十进制的“ 63 ” (对应于十六进制为“ 3F ”)

 

  因为按照72楼文字内容所描述的方法做出的答案程序经“抽签操作”之后所得到的结果完完全全是一个“必然现象”即:高16位的数据一定是3F(十六进制)。这哪里还是一个关于“随机现象”题目的答案呢?!

  


热门招聘
相关主题

官方公众号

智造工程师