引用<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>回复:
需要提醒一下没看懂问题的网友:高速计数器的整体“当前值状态”是不能作为“随机脉冲源”的!因为它是由一个有确定规律(逢二进一)记数进位的寄存器来承载的信息。而且,16位计数器的高位bit 状态的变化是比较慢的,反应灵光敏捷的人很容易把握它的变化节奏。所以我们应该只取用它最低的一、两个bit 的快速跳变信息,并且要设法将这些信息打乱撒布到题目所指定的16个“格子”(Y0 ~ y17)中。
引用<四两拨千斤> 的内容:
“仔细分析和验证,发现还是有些问题。
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滚动”。
解老师在主题帖中把题目的“目标功能”表述得比较粗略,所以我们之前并不真正了解这一“目标功能”在实际运用中的具体细节。很多人(包括我)都误以为是用于“博彩”。因而我在设计答案程序时,故意把“字(K4Y0)”设计成操作按钮被摁下之后便即时显示“随机变化的0 / 1 信息”的快速移动;放开按钮之后,当“字(K4Y0)”的随机状态满足:有(且仅有)6个输出位为 1 时才定格下来。
跟解老师通了电话之后我才知道解老师这个题目的Y0 ~ Y17 这16个输出位是分别用于驱动产生各种“故障原因”的,所以,解老师和我通电话时说他们并不希望在“抽签”操作按钮被摁下期间16个输出位有快速闪通的。
既然这16个输出位的任务是给出“故障源”,理所当然就不该把它们设计成有快速闪通的!解决的办法可以采用中间继电器M来中转一下。对于这一点,解老师他们的课题组是自己解决的。
我现在也把这一解决办法以梯形图程序表达给网友们参考:
我谈一点看法,也仅供参考!
如果D8099与T218两者都是硬件电路做成的计时器,则,上面<winter938>的说法是完全正确的!
但是,从微观的层面讲,D8099与T218两者的“计时”时刻是不“合拍”的。D8099是由专用的硬件电路来计时的,与程序的扫描周期不相干。而T218是由PLC系统程序来虚拟的计时器,它的“计时”时刻受用户程序运行情况(含PLC通讯情况)的影响。
D8099当前值的读取是在程序中运算含有D8099为“操作数”的指令时读取的,在运算该指令的时刻,D8099最新当前值就被读取出来。而T218当前值的读取是程序中运算T218线圈指令时读取的。在同一条分别含有D8099、T218为“操作数”的应用指令被程序运算的时刻D8099的当前值时态为“现在时”,T218当前值时态为“过去时”!
当然,这种影响是很微小的。但是,再微小的差异也会对运算结果造成差别。而这种差别对于“抽签者”来说也是不可掌控的。即这种差异就是一种“随机因素”。就象炮兵炮击某个目标,虽然可以掌握炮弹的基本因素 也是人们所能控制的是它的初始条件--初速、发射角等,这些可以通过弹道方程(必然规律)计算出炮弹的落地点,但炮弹在飞行过程中会受到空气的阻力--风速、风向、空气的湿度、温度等(次要因素)的影响,它们使得炮弹很可能不落在“计算出来”的准确的目标焦点上。
话又说回来,<winter938>说的“最小公倍数周期”的必然规律在72楼是存在的!当我们按照 <四两拨千斤> 在72楼的文字说明:“D8099当前值乘上T218当前值,取其乘积的高16位。” 那么,这种必然规律就会很明显,使得按72楼的方法做出来的答案程序离题目“随机产生6个ON位”的这一要求太远、太远! 正如 <四两拨千斤> 所说的:“如果用来博彩,此时可以大量购买某一区域,达到中奖。”
注:
本楼的说法是在这样的前提下:这里的T218 的设定值一定要远大于“ K168 ”,而不该是 <四两拨千斤> 所设置的“ K168 ”!
三天前,我在№85楼就想要说的问题留到今天才说出来:
如果按照 <四两拨千斤>贴于72楼的文字内容“将D8099上电不停地滚动,再乘上T218 K168(0.01S快速滚动),并且取乘数的高16位。” 那么,如果是用来“博彩”,还用不着 <四两拨千斤>“大量购买某一区域”,仅需购买唯一的一个号码即能确保你中奖!这个号码就是十进制的“ 63 ” (对应于十六进制为“ 3F ”)
因为按照72楼文字内容所描述的方法做出的答案程序经“抽签操作”之后所得到的结果完完全全是一个“必然现象”即:高16位的数据一定是3F(十六进制)。这哪里还是一个关于“随机现象”题目的答案呢?!