|
从PLC工作原理分析SM0.1与上升沿指令组合失败的根本原因 一、PLC扫描机制原理 合信PLC采用循环扫描工作方式,每个扫描周期分为三个阶段: 输入采样:读取所有输入状态并存储到输入映像区 程序执行:按顺序执行用户程序,访问映像区中的数据 输出刷新:将输出映像区的数据写入实际输出端口 二、SM0.1的内部实现机制 SM0.1是一个特殊的系统标志位,其内部实现基于扫描周期计数: 第一个扫描周期:系统检测到这是从STOP到RUN的第一个周期,将SM0.1置为1 后续所有扫描周期:系统将SM0.1置为0 这种机制保证了SM0.1只在PLC启动后的第一个扫描周期为1 三、上升沿检测指令的工作原理 上升沿检测指令(P指令)的内部实现需要两个关键要素: 当前状态:当前扫描周期的输入值 前一状态:前一个扫描周期的输入值 比较逻辑:只有当"当前为1且前一状态为0"时,输出一个扫描周期的脉冲 四、组合使用时的内部执行过程 第一个扫描周期(PLC刚进入RUN模式) 系统将SM0.1置为1(因为这是第一个扫描周期) 上升沿检测指令检查:当前SM0.1=1,但前一状态是系统上电时的默认值(通常为0) 关键问题:虽然当前为1、前一为0,看似满足上升沿条件,但由于系统标志位的设置与上升沿检测在同一个扫描周期内完成,存在时序上的细微差异,导致上升沿检测可能无法正确捕获这个状态变化 第二个扫描周期 系统将SM0.1置为0 上升沿检测指令检查:当前SM0.1=0,前一状态=1 判断结果:0→1为上升沿,1→0为下降沿,所以这次检测到的是下降沿,输出为0 后续扫描周期 SM0.1始终保持为0 上升沿检测指令检查:当前0,前一也是0 判断结果:0→0没有状态变化,输出为0 五、根本失败原因 功能重复:SM0.1本身就是在第一个扫描周期产生一个单次脉冲,这与上升沿指令要实现的功能完全重叠 时序错配:SM0.1的脉冲特性发生在扫描周期的早期阶段,而上升沿检测指令在程序执行阶段运行,两者的时间配合不匹配 状态存储冲突:上升沿指令需要存储前一周期的状态,但SM0.1的状态变化是一次性的,无法提供有意义的前后状态对比 逻辑设计矛盾:SM0.1的设计初衷就是作为初始化脉冲源,直接使用即可,不需要额外的边沿检测 六、正确的使用方式 由于SM0.1本身就具备"仅在第一个扫描周期为真"的特性,它本身就是最纯净的上升沿信号,直接使用SM0.1驱动后续逻辑即可,无需也不应该再加任何边沿检测指令。 |