引用<王林海>的内容: (图片摘自《手把手教您写“让PLC唱歌”的程序》第4页)
第2个“错误”的结果最终导致了“PLSY指令”的“源操作数1”的数值违背了该指令的“规矩”:
“PLSY指令”的“源操作数1”的取值范围是:
16位运算时,S1 的取值为:K 1 ~ K 32767 ;
32位运算时,S1 的取值为:K 1 ~ K 100000 ;
而王林海网友的“ D127V0 ”中的数值却一直是“0”! 因为在FX1s中的“D127”是一个“非保持型”的数据寄存器,当PLC在STOP状态或停电时,“D127”的数值就恢复成“0”,所以当PLC从STOP进入RUN时,这个数据寄存器的数值就一定是“0”!而V0的数值也一直是“0”,故“D127VO”的数值就是“D127”中的数值“0”,这样当然就不可能运行“PLSY指令”了!
本人曾经在《手把手教您写“让PLC唱歌”的程序》主题帖下回复刘存刚网友时,给他写过一个演奏《生日快乐》的程序。我把它写得非常简单,其目的就是让初学的网友们很容易照此范例去实践并在实践中获得成功!
下面是我在回复中写的例程(运行监视图片):
再引用一张<王林海>的相关图片: (摘自《回复网友关于PLSY指令的问题》主题下第20个跟帖)
5555555555555555555555
-------------------------------------------------------------------------------------------------------------------------------------------
有时候,这个《工控论坛》也会换个方法来显示网友们贴出的图片,以表示他们没有把网友的图片内容的字迹压缩掉。他们用的什么方法呢?用的是“裁剪”掉图片右边一部分内容的方法。不管是压缩字迹,还是剪裁图片右边内容,都不可能让阅读图片的网友直接看清楚图片作者所表达的全部思想!
下面出示他们的另一种显示图片的方法----剪裁图片右边内容
<koningq >网友的程序的确是和我于《手把手教您写“让PLC唱歌”的程序》一帖的第4页中为刘存刚写的范例是一模一样的!我给刘存刚写范例的目的是让他在实际的PLC(FX1s 晶体管输出型)上动手练习,而不是让他只做做“仿真”!学习PLC技术很重要的一环就是实际动手能力的练习。(刘存刚网友为了学习PLC的高速指令,特意购买了一只晶体管输出型的FX1s。他的认真精神是值得大家学习的!)
我没用过你们所使用的这个“仿真软件”。只能谈一点我个人的观点谨供你们参考:“仿真”、“仿真”其实质只是“仿”,而不决不是“真”!仿真软件与实际的PLC是肯定有一些差别的!
我认为,仿真软件不外是也写进了相关PLC的“系统解释程序”使软件也具有PLC的运算功能,可以进行PLC指令的运算,并把运算结果显示出来。但是,它只是软件,决不可能具有实际PLC的硬件特性!在PLC中,“PLSY指令”(FNC57)的脉冲输出是靠专门的“脉冲输出硬件电路”来执行的。实际的脉冲输出元件的ON / OFF状态不是随“输出锁存器”刷新而发生改变的。它是完全独立于程序刷新过程之外的控制过程!所以我们讲:实际脉冲输出元件的ON / OFF状态与“元件映像寄存器”以及“输出锁存器”中对应元件的映像是不同的概念。
我不知道<王林海>、<koningq >两位网友为什么要选用“仿真”来学习PLC的高速指令?难道你们是想通过你们的“视觉”去观察了解PLC高速输出脉冲的输出元件的连续翻转过程?!
从 <koningq > 网友提供的图片信息来看,该图片上的信息是 当程序运行到 V 0= 7 这一期间的状态。这时指针指向的“D127V0”(即“D134”)的内容为“K 1046”(如下图“数据块”中染为红色的内容)。1046Hz方波的“半周期”约为:0.48 mS ,也就是说每隔 0.48 mS 的时间“PLSY指令”的目标元件“Y00”的状态就要翻转一次。而“仿真结果”可能也是和“程序运行监视图像”一样,在一个程序扫描周期里只“刷新”一次。FX系列PLC的程序扫描周期一般都不低于 1 mS 。所以,靠“仿真”或“运行监视”来观察高速的连续翻转着的目标元件的状态是不现实的!除非你们用“示波器”来观察脉冲的时序函数图像,可惜“仿真软件”不是“示波器”!即便是再怎么快的电脑、再怎么快的PLC运行速度,用“仿真”或“运行监视”的功能也未必跟得上这种高速的ON/OFF显示变化!所以你们不应当试图在“仿真”或“运行监视”中用眼睛去观察“PLSY指令”目标元件在执行输出高速脉冲时的 ON/OFF 情况。
在该练习题目(写个程序使PLC演奏乐曲)中,其“PLSY指令”(FNC57)的“源操作数1”所指定的频率(除“K0”之外)的各个频率都是处于人类的听觉范围内的数值,与其用眼观之,还不如以耳聆之!