资讯详情

资讯详情

Smart200中Bool信号延时控制的底层原理与工程实践

1. 项目概述为什么一个Bool信号的延时控制值得单独写一篇长文Smart200 PLC是西门子在中小型自动化场景里铺得最广的“基建级”控制器它不像S7-1200/1500那样堆满高级功能但胜在稳定、便宜、上手快——工厂里一条包装线、一台恒压供水泵、一个简易输送带八成用的都是它。可恰恰是这种“够用就好”的定位让很多刚从学校出来、或者从其他品牌PLC转过来的工程师一上来就栽在几个看似简单却极易出错的地方Bool信号的延时控制就是其中之一。你可能觉得“不就是加个TON接通延时定时器或TOF断开延时定时器吗梯形图里拖两个块填个时间值完事。”——我试过也这么以为过。直到去年调试一台灌装机客户要求“按下启动按钮后气缸必须等800ms再动作防止瓶盖没到位就压下去松开按钮后主电机要缓停3秒避免惯性冲料”。逻辑很清晰但现场反复出现两种情况一种是气缸偶尔提前动作另一种是松开按钮后电机直接停转根本不缓停。最后查了三天发现根本不是硬件问题而是TON/TOF的使能端IN和复位端R在信号抖动、扫描周期切换、以及多个网络共用同一Bool变量时产生的隐性竞争——这些细节TIA Portal的帮助文档里一笔带过教材里只画标准符号没人告诉你“为什么这里必须加滤波”、“为什么复位不能直接连常闭触点”、“为什么同一个Bool变量在不同OB里读取会差一个扫描周期”。这篇文章就是把这“一个Bool信号的延时”掰开揉碎从底层扫描机制讲起到梯形图实现、仿真验证、现场抗干扰处理再到常见误用陷阱和替代方案对比。它不讲大而空的PLC原理只聚焦Smart200这一款设备只解决“Bool信号延时”这一个具体动作。如果你正在写恒压供水程序热词里高频出现里面水泵启停的软启软停逻辑如果你在设计控制32台变频器的主站程序另一个热搜词每台变频器的运行允许信号都需要精确的时序配合甚至你只是在做毕业设计、课程设计需要一个可靠、可复现、能过答辩的延时模块——那这篇内容就是你该抄的作业底稿。核心关键词Smart200、PLC、Bool、延时、时间继电器全部落在实操层面Smart200指明硬件平台PLC框定技术范畴Bool强调数据类型限制非Int、非Real就是True/False延时是功能目标时间继电器则是工业现场对这个功能的惯常叫法——我们不是在模拟一个虚拟概念而是在复刻一个真实产线上每天被调用数百次的底层逻辑单元。2. Smart200延时控制的本质不是“加个定时器”而是管理扫描周期与信号沿2.1 为什么不能把TON/TOF当普通继电器用很多初学者把TON接通延时定时器当成一个“带时间参数的开关”输入为True等T时间后输出变True输入变False输出立刻变False。这是对TON最危险的误解。TON的真实行为是当IN端检测到上升沿False→True时内部计时器开始累加当IN持续为True计时器继续累加直至达到预设时间PT此时Q输出变为True一旦IN变为False计时器立即清零Q也立刻变为False。关键点在于“上升沿触发”和“IN为False时清零”。这意味着如果IN信号本身不稳定——比如机械按钮抖动、光电开关受粉尘干扰、或者网络通信中Bool变量因刷新延迟出现短暂闪断——TON就会被反复启动、清零导致Q输出无法稳定到达设定时间。我遇到过最典型的案例是某饮料厂的液位传感器信号接入Smart200传感器本身没问题但信号线没屏蔽车间变频器群启动时IN信号在10ms内出现3次0→1→0跳变结果TON永远计不到设定的2.5秒Q输出像心跳一样忽闪。TOF断开延时定时器同理但它响应的是下降沿True→False。当IN由True变False时TOF开始计时在计时期间IN若重新变True则计时器清零Q保持True。这个特性在“缓停”场景中非常有用但也极易被误用。比如有人把TOF的IN直接连到停止按钮的常闭触点上认为“按下去常闭断开就开始缓停”但实际按钮按下瞬间常闭触点断开IN由True变FalseTOF启动可如果按钮回弹稍慢触点出现微小粘连IN又短暂恢复TrueTOF立刻清零缓停失效。这不是PLC坏了是信号接入方式错了。2.2 Smart200的扫描周期如何影响延时精度Smart200的典型扫描周期在几十毫秒量级CPU SR20约10~15msSR40约20~30ms取决于程序大小和I/O点数。TON/TOF的计时单位是毫秒ms但它的计时动作并非连续进行而是在每个扫描周期开始时读取当前IN状态并根据上一周期的计时值累加一个“本周期应计时长”。这个“应计时长”默认等于当前扫描周期时间。也就是说如果扫描周期是12ms那么TON每扫描一次计时器最多增加12ms。这就带来两个现实约束最小可设延时受限于扫描周期你设PT1ms但扫描周期是12msTON第一次扫描IN为True计时器值12ms已超设定值Q立刻置位。实际最小有效延时≈扫描周期。因此Smart200上设PT5ms毫无意义它必然在第一个扫描周期就完成。延时误差存在±1个扫描周期的波动假设设定PT100ms扫描周期稳定为12ms。理想情况下100÷12≈8.33即第9个扫描周期结束时Q置位。但由于计时器只在扫描开始时更新实际Q置位时刻在第8个周期末到第9个周期末之间浮动最大误差可达12ms。对于要求±5ms精度的场合如精密灌装这个误差不可接受。解决方案不是换PLC而是理解并利用这个机制。例如在恒压供水程序中压力PID调节周期通常设为100ms或200ms远大于扫描周期此时延时误差可忽略但在需要精确同步的多轴联动中就必须用更稳定的硬件定时器如高速计数器配合中断或改用脉冲宽度调制PWM方式模拟延时。2.3 Bool类型在Smart200中的存储与访问特性Smart200的Bool变量如M0.0、Q0.0、I0.0存储在过程映像区Process Image其读写遵循“先集中读入再执行用户程序最后集中写出”的三阶段模型。这意味着在OB1主循环组织块中读取I0.0得到的是上一个扫描周期结束时锁存的物理输入状态而非实时电平。对M0.0的写操作会在本周期程序执行完毕后统一写入过程映像区下一个周期才生效。同一周期内多次读写同一Bool地址后续读取得到的是本周期内最后一次写入的值即“内部寄存器”行为。这个特性直接影响延时逻辑的设计。例如一个常见的错误写法是Network 1: |----[ I0.0 ]-------------------( M0.0 )----| // 按钮直接置位M0.0 Network 2: |----[ M0.0 ]----[ TON T37, 2000ms ]----( Q0.0 )----|表面看按下I0.0M0.0置位TON启动2秒后Q0.0动作。但问题在于Network 1和Network 2在同一扫描周期内执行。当I0.0在本周期为True时M0.0在Network 1被置位紧接着Network 2读取M0.0此时读到的是本周期刚写入的值TON的IN端立刻为True开始计时。这看似正确但若I0.0是一个瞬时脉冲如编码器Z相其高电平宽度小于一个扫描周期那么I0.0在本周期可能只在前半段为TrueNetwork 1能捕获到并置位M0.0但到了Network 2执行时I0.0已变False而M0.0因Network 1已置位TON仍会启动。这其实是符合预期的——我们就是要用M0.0锁存这个脉冲。但如果M0.0被其他网络复位且复位逻辑写在TON之后就会产生竞争。正确的做法是明确区分“信号采集”和“逻辑处理”。将按钮去抖、锁存放在独立网络确保M0.0的状态稳定TON的IN端只接这个稳定后的M地址而非原始I地址。这才是Bool延时可靠的基础。3. 核心实现从梯形图到仿真验证的完整闭环3.1 标准TON接通延时梯形图设计含抗抖动处理下面是一个经过现场验证的、用于Smart200的接通延时梯形图模块它解决了按钮抖动、扫描周期影响、以及复位可靠性三大痛点Network 1: 按钮信号采集与硬件去抖推荐 |----[ I0.0 ]----[ SR ]----( M10.0 )----| // I0.0接SR置位端M10.1接复位端 |----[ M10.1 ]---------------------------| // SR复位端由M10.1控制见Network 3 Network 2: 软件去抖与边沿检测双重保险 |----[ M10.0 ]----[ TON T37, 20ms ]----( M10.2 )----| // 20ms滤波消除20ms抖动 |----[ M10.2 ]----[ EU ]----( M10.3 )----| // EU指令检测M10.2的上升沿生成单脉冲 Network 3: 延时逻辑主体与复位管理 |----[ M10.3 ]-------------------( M10.4 )----| // M10.3脉冲置位M10.4延时启动标志 |----[ M10.4 ]----[ TON T38, 800ms ]----( Q0.0 )----| // 主TON800ms延时 |----[ I0.1 ]-------------------( M10.1 )----| // 急停按钮常闭直接复位SR切断源头 Network 4: 复位连锁安全冗余 |----[ I0.1 ]----[ NOT ]----[ M10.4 ]----| // 急停触发时强制清除M10.4确保TON复位逐行解析与设计理由Network 1使用SR置位复位触发器这是Smart200处理瞬时输入最稳妥的方式。I0.0启动按钮只作为SR的置位信号其抖动只会让SR在极短时间内反复置位/复位但SR的输出M10.0只有在复位信号到来时才会改变。这从根本上隔离了物理输入的噪声。Network 2的20ms TON滤波20ms是工业现场按钮抖动的典型持续时间上限。TON T37的PT设为20ms其Q输出M10.2只有在I0.0持续为True达20ms后才置位有效过滤掉所有短于20ms的毛刺。随后的EUEdge Detection Up指令将M10.2的上升沿转换为一个仅持续一个扫描周期的脉冲M10.3这个脉冲才是启动主延时的“干净”信号。Network 3的M10.4作为延时使能标志不直接用M10.3驱动TON而是先置位一个中间标志M10.4。这样做的好处是TON的IN端M10.4状态稳定不会因M10.3脉冲消失而中断计时。TON T38的PT800msQ0.0在800ms后稳定输出。Network 4的双重复位急停按钮I0.1常闭在正常时为TrueNetwork 4中对其取反后与M10.4串联意味着只要急停被按下I0.1变FalseM10.4立刻被清零TON T38的IN变FalseQ输出立即关闭。这比单纯依赖TON的R端更可靠因为R端需要额外逻辑而此处是直接切断源头。提示在TIA Portal中TON指令的背景数据块DB必须正确关联。Smart200的TON没有自动分配DB的功能需手动创建一个DB如DB1并在TON指令属性中指定。DB1中至少包含TimerTIMER、INBOOL、PTTIME、QBOOL、ETTIME五个变量。ETElapsed Time可用于监控实际计时进度调试时非常有用。3.2 标准TOF断开延时梯形图设计防误触发优化断开延时常用于电机缓停、阀门渐关等场景。一个易被忽视的风险是如果IN信号在断开过程中出现反弹机械触点弹跳TOF会被反复启动和清零。以下是优化后的TOF应用Network 1: 运行信号锁存与去抖 |----[ I0.2 ]----[ SR ]----( M20.0 )----| // I0.2为启动信号M20.1为复位信号 |----[ I0.3 ]---------------------------| // I0.3为停止信号常开接SR复位端 Network 2: TOF输入信号整形 |----[ M20.0 ]----[ TON T39, 50ms ]----( M20.1 )----| // 50ms滤波确保M20.0稳定 |----[ M20.1 ]----[ NOT ]----( M20.2 )----| // 取反后作为TOF的IN端 Network 3: TOF主体与输出控制 |----[ M20.2 ]----[ TOF T40, 3000ms ]----( Q0.1 )----| // 3秒缓停 |----[ Q0.1 ]----[ NOT ]----( Q0.2 )----| // Q0.1为缓停输出Q0.2可作主电机运行指示 Network 4: 紧急复位与状态同步 |----[ I0.4 ]----[ M20.0 ]----| // I0.4为急停直接复位M20.0切断TOF输入关键优化点说明Network 2中对M20.0进行50ms滤波后再取反M20.0是运行锁存信号正常为True。当I0.3停止按钮按下M20.0在下一个扫描周期变False。但按钮弹跳可能导致M20.0在False/True间反复切换。TON T39的50ms滤波确保M20.1只有在M20.0持续为False达50ms后才变False此时M20.2即TOF的IN才由False变TrueTOF正式启动。这避免了因弹跳导致的TOF无效启动。TOF的IN端接M20.2滤波后取反M20.2在运行期间为FalseTOF不工作当M20.0被可靠复位M20.1变FalseM20.2变TrueTOF检测到下降沿M20.2由False→True不对TOF响应下降沿所以IN应由True→False。这里需要修正M20.2应直接接TOF的IN而M20.0的“停止”事件应体现为M20.0由True→False。因此更正如下Network 2修正: |----[ M20.0 ]----[ TON T39, 50ms ]----( M20.1 )----| // M20.1 True when M20.0 stable True |----[ M20.1 ]----[ ED ]----( M20.2 )----| // ED (Edge Down) detects M20.1s falling edge, i.e., M20.0 has just become unstable False Network 3修正: |----[ M20.2 ]----[ TOF T40, 3000ms ]----( Q0.1 )----| // M20.2 pulse triggers TOF startED指令检测M20.1的下降沿即M20.0从稳定True变为不稳定False的瞬间这个脉冲M20.2作为TOF的启动信号精准对应“停止命令发出”的时刻完全规避了弹跳干扰。3.3 Smart200仿真环境搭建与延时验证步骤“smart200仿真”是热搜词但很多人装了PLCSIM Advanced或S7-PLCSIM却发现无法直接仿真Smart200——因为Smart200使用的是S7-200 SMART CPU其仿真需特定工具。正确路径如下软件准备安装TIA Portal V13 SP1或更高版本V15/V16均可并确保已安装“S7-200 SMART”PLC支持包。TIA Portal自带的PLCSIM不支持Smart200必须使用第三方仿真器或硬件。推荐仿真方案PLCSIM Advanced S7-1200作为代理此方案利用PLCSIM Advanced仿真S7-1200再通过S7通信协议与Smart200的虚拟IP进行交互。但此法复杂且非官方不推荐新手。最实用方案使用真实的Smart200 CPU PC Adapter USB成本最低效果最真。购买一个Smart200 CPU ST20约¥500和PC Adapter USB编程电缆约¥150在实验室搭建最小系统。无硬件仿真替代使用“S7-200 Simulator”老工具慎用这是一个独立的、非西门子官方的仿真器支持S7-200指令集Smart200大部分指令与其兼容。下载地址需自行搜索注意安全性安装后新建项目选择CPU型号为“CPU ST40”。导入上述梯形图程序配置I/O地址I0.0, I0.1, Q0.0等。启动仿真用鼠标点击I0.0模拟按钮按下观察Q0.0是否在800ms后置位再点击I0.1模拟急停Q0.0是否立即复位。仿真验证要点时间精度验证在TON网络中右键TON指令 - “Monitor Timing”可查看ETElapsed Time值随时间的变化。启动后ET应以约12ms/步递增对应扫描周期直至达到PT。抖动注入测试在仿真器中手动快速切换I0.0状态模拟抖动观察M10.2滤波后信号是否稳定Q0.0是否只在I0.0持续按下后才动作。复位连锁测试在TON计时期间触发I0.1急停确认Q0.0是否立刻变为False且TON的ET被清零。注意任何仿真都无法100%复现真实电磁干扰和I/O响应延迟。仿真通过后必须在真实硬件上进行“极限工况测试”用信号发生器给I0.0注入10Hz方波模拟严重抖动用示波器测量Q0.0的实际延时和抖动抑制效果。这才是交付前的最终验证。4. 实战进阶从单一延时到复杂时序控制的工程化扩展4.1 多级延时与条件分支构建“启动-运行-停止”全流程单一TON/TOF只能处理线性延时但真实设备往往需要多阶段时序。例如一台恒压供水泵组其控制逻辑包含启动阶段先开补水阀延时2s再启泵延时5s最后开主管阀延时8s运行阶段压力低于阈值时延时3s确认后才启动备用泵停止阶段先关主管阀延时1s再停泵延时3s最后关补水阀延时2s。这种逻辑若用多个独立TON/TOF硬拼网络会极度臃肿且难以维护。Smart200的解决方案是状态机State Machine 计时器复用// 全局状态字 MW100: 0STOP, 1STARTING, 2RUNNING, 3STOPPING // 计时器 T37 用于所有阶段PT根据当前状态动态设置 Network 1: 状态转移触发 |----[ I0.5 ]----[ M100.0 ]----( M100.1 )----| // I0.5启动按钮M100.0为运行标志 |----[ I0.6 ]----[ M100.1 ]----( M100.0 )----| // I0.6停止按钮 Network 2: 状态机主循环 |----[ M100.0 ]----[ NOT M100.1 ]----( MW100 : 1 )----| // 启动请求进入STARTING |----[ MW100 1 ]----[ TON T37, 2000ms ]----( MW100 : 2 )----| // STARTING阶段2s后转RUNNING |----[ MW100 2 ]----[ I0.7 45.0 ]----[ TON T37, 3000ms ]----( MW100 : 2 )----| // RUN中压力低启动备用泵延时 |----[ NOT M100.0 ]----[ MW100 2 ]----( MW100 : 3 )----| // 停止请求进入STOPPING |----[ MW100 3 ]----[ TON T37, 1000ms ]----( MW100 : 0 )----| // STOPPING阶段1s后回STOP Network 3: 输出动作映射 |----[ MW100 1 ]----( Q0.3 )----| // STARTING: 开补水阀 |----[ MW100 1 ]----[ T37.Q ]----( Q0.4 )----| // STARTING: 2s后启泵T37.Q在此阶段为True |----[ MW100 2 ]----( Q0.5 )----| // RUNNING: 主泵运行 |----[ MW100 3 ]----( Q0.6 )----| // STOPPING: 关主管阀 |----[ MW100 3 ]----[ T37.Q ]----( Q0.7 )----| // STOPPING: 1s后停泵此方案的核心是用一个TON T37服务所有延时需求通过MW100状态字决定其PT值和Q输出的含义。T37的PT在Network 2中根据MW100的值动态赋值需用MOVE指令配合比较指令实现此处为简化示意。这样程序结构清晰易于扩展新状态且资源占用少。Smart200的TON指令数量有限ST20有256个复用是大型项目的必然选择。4.2 Bool延时在“一台PLC控制3台变频器”中的协同应用热搜词“一台plc控制3台变频器”和“plc控制32台变频器程序设计”指向多设备协同。延时在此类场景中不是孤立功能而是协调时序的“胶水”。例如三台变频器驱动传送带要求“启动时#1先动延时1s后#2启动再延时1s后#3启动停止时#3先停延时1s后#2停再延时1s后#1停”以避免物料堆积或拉断。实现的关键是避免为每台变频器单独配TON而是用移位寄存器SHL生成时序脉冲链// 定义启动脉冲链M30.0 - M30.1 - M30.2每1s移一位 Network 1: 启动脉冲生成 |----[ I0.8 ]----[ SR ]----( M30.0 )----| // I0.8启动按钮 Network 2: 1s时钟脉冲用TON生成 |----[ M30.3 ]----[ TON T37, 1000ms ]----( M30.3 )----| // 自振荡TONQ输出即1s脉冲 |----[ T37.Q ]----( M30.4 )----| // M30.4为1s时钟 Network 3: 移位逻辑 |----[ M30.4 ]----[ SHL ]----( M30.0 )----| // SHL指令当M30.4上升沿时M30.0左移1位 |----[ M30.0 ]----( Q1.0 )----| // #1变频器运行信号 |----[ M30.1 ]----( Q1.1 )----| // #2变频器运行信号 |----[ M30.2 ]----( Q1.2 )----| // #3变频器运行信号 Network 4: 停止脉冲链反向移位 |----[ I0.9 ]----[ SR ]----( M31.0 )----| // I0.9停止按钮 |----[ M31.0 ]----[ SHL ]----( M31.2 )----| // 从M31.2开始左移实现#3-#2-#1停 |----[ M31.2 ]----( Q1.2 )----| // #3停 |----[ M31.1 ]----( Q1.1 )----| // #2停 |----[ M31.0 ]----( Q1.0 )----| // #1停SHLShift Left指令在Smart200中可对字节、字、双字进行移位。此处用M30.0-M30.2三个Bit构成一个3位移位寄存器。当1s时钟M30.4上升沿到来SHL将M30.0左移原M30.0值移到M30.1M30.1值移到M30.2M30.2值移出丢弃。这样M30.0置位后1s后M30.1置位再1s后M30.2置位完美实现启动时序。停止逻辑同理用M31.0-M31.2反向移位。这种方法比为每台设备配TON更节省资源且时序精度由同一个1s时钟保证无累积误差。4.3 延时功能块FC封装提升代码复用性与可维护性当项目中延时逻辑重复出现如多个电机缓停、多个阀门延时开关每次都重画梯形图既低效又易错。Smart200支持用户自定义功能块FC将延时逻辑封装为可复用的“黑盒子”FC10: Delay_ON_OFF Input: IN_START: BOOL // 启动信号 IN_STOP: BOOL // 停止信号急停 T_ON: TIME // 接通延时时间 T_OFF: TIME // 断开延时时间 Output: Q: BOOL // 最终输出 Q_TIMING: BOOL // 计时期间为True用于指示 Static: M_START: BOOL // 内部启动锁存 M_STOP: BOOL // 内部停止锁存 TON1: TON // 内部TON实例 TOF1: TOF // 内部TOF实例 // FC10内部逻辑简化版 Network 1: |----[ #IN_START ]----( #M_START )----| |----[ #IN_STOP ]----( #M_STOP )----| Network 2: |----[ #M_START ]----[ NOT #M_STOP ]----[ TON #TON1, #T_ON ]----( #Q )----| Network 3: |----[ #Q ]----[ #M_STOP ]----[ TOF #TOF1, #T_OFF ]----( #Q )----|在主程序中调用FC10// 调用实例1水泵缓停 CALL FC10 IN_START : I0.10 IN_STOP : I0.11 T_ON : T#2S T_OFF : T#3S Q : Q0.3 // 调用实例2风机软启 CALL FC10 IN_START : I0.12 IN_STOP : I0.13 T_ON : T#5S T_OFF : T#2S Q : Q0.4封装后每个调用只需配置参数逻辑完全隔离。修改延时算法如增加滤波只需改FC10一次所有调用自动更新。这是工程化开发的基石也是从“能用”迈向“好用”的关键一步。5. 常见问题与排查技巧实录那些手册里不会写的坑5.1 “延时不准”问题的三层排查法现象TON设定1000ms但Q输出有时950ms就动作有时1050ms才动作波动超过±50ms。排查步骤第一层确认扫描周期在TIA Portal在线监控中打开“PLC Information” - “Cycle Time”记录OB1的典型扫描时间。若显示为15ms而你期望1ms精度这本身就是不可能的任务。此时应调整PT为1000ms即1000÷15≈66.7取整为67个周期并接受±15ms误差。第二层检查TON背景数据块DB是否被意外修改Smart200的TON指令必须关联DB。如果多个TON共用同一个DB或DB中其他变量被其他逻辑写入可能覆盖TON的内部计时值。解决方案为每个TON分配独立DB或在DB中为每个TON预留专属区域并在DB声明中明确标注。第三层检测IN信号的电平稳定性用万用表或示波器测量I0.0的电压波形。若发现信号在高电平24V和低电平0V之间有缓慢爬升/下降如因线路电容导致TON的IN端可能在阈值电压约15V附近徘徊导致计时器在每个扫描周期内读取到不稳定的逻辑值。此时必须加硬件RC滤波电路如1kΩ电阻100nF电容或在软件中增加更长的滤波TON如50ms。实操心得我曾在一个老旧厂房遇到类似问题排查两天无果。最后发现是PLC电源地与现场传感器地未共地形成共模干扰I0.0信号上叠加了100Hz的纹波。解决方法是加装信号隔离器并严格规范接地。这提醒我们PLC问题的根源常在“PLC之外”。5.2 “TON不启动”或“TOF不动作”的五大误用场景问题现象根本原因解决方案TON的Q始终为False即使IN为True且时间已到TON的背景数据块DB未正确下载或未激活在TIA Portal中右键TON指令 - “Open DB”确认DB已编译下载检查DB的“Optimized Access”是否启用Smart200必须禁用TOF启动后Q输出立刻为True不等待TOF的IN端在程序中被其他逻辑提前置位为True导致TOF在初始化时就检测到“已为True”故无下降沿可触发确保TOF的IN端只由单一、受控的逻辑驱动在OB1开头用“SET”指令将所有TOF的IN端初始化为False多个TON共用同一Timer编号如都用T37相互干扰Smart
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →