ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

西门子S7-1200 PLC定时器详解:从TON到TOF,原理、应用与避坑指南

西门子S7-1200 PLC定时器详解:从TON到TOF,原理、应用与避坑指南 1. 从“等一会儿”到“精准控制”为什么定时器是PLC的基石刚接触西门子S7-1200 PLC编程时很多朋友会从简单的逻辑控制开始比如按下一个按钮灯就亮。这确实很直观。但很快你就会发现现实中的自动化任务几乎没有不需要“时间”参与的。比如一个传送带启动后需要延迟5秒再启动下一个工位一个加热炉需要精确加热30分钟一个包装机需要每隔0.5秒打一个标记。这些“等一会儿”、“持续多久”、“每隔多久”的需求就是定时器要解决的核心问题。你可以把PLC的CPU想象成一个不知疲倦、速度极快的工人它扫描和执行程序的速度是毫秒级的。但让它去“等待”几秒甚至几小时如果只用程序循环空跑不仅极度浪费它的“算力”更会导致整个控制系统响应迟钝无法处理其他任务。定时器就是PLC内部一个专门负责“计时”的独立功能单元。它解放了CPU让CPU在定时器工作的同时可以去处理其他逻辑、通信等任务实现了真正的并行处理和多任务协同。在西门子TIA Portal博图中S7-1200提供了丰富的定时器指令它们封装了底层的计时逻辑我们只需要像搭积木一样调用并设置好时间参数就能轻松实现各种时间控制功能。本章我们就深入S7-1200的定时器世界不仅学会如何使用TON、TP这些指令更要理解它们背后的工作原理、适用场景以及那些手册上不会写的调试“坑点”。无论你是正在学习的学生还是刚转行到工控的工程师掌握定时器都是你构建稳定、可靠自动化程序的第一个关键台阶。2. 定时器的“五脏六腑”S7-1200定时器的核心机制解析在动手写程序之前我们必须先搞清楚S7-1200定时器是怎么工作的。这不同于51单片机或STM32中直接操作寄存器的那种定时器PLC的定时器是一种更高级的、面向工艺的逻辑抽象但底层依然遵循着基本的计时原理。2.1 定时器的基本工作原理它到底在“数”什么S7-1200的所有定时器其本质都是一个递减计数的时基累加器。这里有两个关键概念时基和预设值。时基就是计时的最小时间单位。S7-1200的定时器支持多种时基最常见的是10ms0.01秒、100ms0.1秒和1s1秒。当你选择一个定时器时本质上就选择了一个具有特定时基的计时器。定时器每经过一个时基的时间内部的当前值就变化一次。预设值就是你希望定时器持续的时间。在博图中我们通常以毫秒ms或时间格式如T#5S输入。PLC会自动根据你输入的数值和定时器的时基将其转换为需要计数的“时基个数”。工作流程可以这样理解启动当定时器的启动条件通常是IN引脚从0变1满足时定时器被“激活”。加载定时器将你设定的预设值PT加载到它的当前值ET中。递减定时器开始工作每经过一个时基的时间当前值ET就减少一个时基单位。判断与输出在递减过程中只要当前值大于0定时器的输出状态就可能为1取决于定时器类型。当当前值ET递减到0时表示预设时间到定时器完成计时。此时输出状态会发生变化例如接通延时定时器TON的Q点会变为1。复位当启动条件断开IN0定时器会立即复位当前值被清零输出状态归零等待下一次启动。这里有一个非常重要的细节定时器的更新是异步于主程序扫描周期的。也就是说定时器内部有一个独立的时钟在走时它不会因为你的程序扫描到它才走一步。这保证了计时的准确性即使程序扫描周期有微小波动定时器的时间依然精准。2.2 IEC定时器与SIMATIC定时器的区别一个容易被忽略的选型问题在博图的指令列表里你可能会看到两套定时器“基本指令”下的定时器如TON、TOF等和“扩展指令”下“定时器操作”里的IEC定时器。对于新手这常常造成困惑。SIMATIC定时器如TON、TP这是西门子传统的、基于存储区如背景数据块或M区的定时器。当你拖拽一个TON到程序中博图会提示你分配一个背景数据块Instance DB。这个数据块就存储了这个定时器所有的运行数据当前值、状态等。它的优点是使用直观每个定时器有独立的数据存储互不干扰。IEC定时器这是符合IEC 61131-3国际标准的定时器。它本身不是一个完整的“块”而是一个功能块FB。你需要先定义一个该功能块的数据类型如TON_Time的静态变量然后在程序中调用这个功能块。它的优势是更标准化在跨平台编程时移植性更好并且其时间数据类型TIME可以直接进行运算。对于S7-1200的初学者我的强烈建议是优先使用并熟练掌握“基本指令”下的SIMATIC定时器TON, TP, TOF, TONR。原因很简单学习曲线平缓它们有独立的指令块输入输出引脚明确非常符合图形化编程的思维。调试方便在线监控时你可以直接打开对应的背景数据块清晰地看到IN、Q、ET当前时间等所有参数状态一目了然。资源清晰每个定时器占用一个背景DB在项目树中管理起来很直观。当你对PLC编程和数据类型有更深理解后再去研究IEC定时器会更容易理解其设计哲学。在绝大多数S7-1200的应用项目中SIMATIC定时器完全够用且高效。2.3 关键参数深度解读PT、ET与IN背后的故事每个定时器指令块上都有几个关键的管脚理解它们的精确含义至关重要。IN (启动输入)这是一个BOOL量。对于大多数定时器如TON它需要的是一个上升沿或持续的通电信号来启动计时。这里最大的坑在于很多人认为给一个瞬间的脉冲比如一个按钮按一下就能启动定时器并完成计时。对于TON来说这是错误的如果IN信号在计时完成前就断开了定时器会立即复位。所以你必须确保IN信号在整个计时期间保持为1。这通常需要用一个中间变量或自锁电路来“保持”启动信号。PT (预设时间)输入参数数据类型是TIME。你可以直接输入时间值如T#5S5秒、T#2M30S2分30秒、T#500MS500毫秒。博图会自动将其转换为内部表示。你也可以用一个Time类型的变量来赋值实现时间的可变设定。注意输入的PT值会自动向上取整到定时器时基的整数倍。例如对于100ms时基的定时器你输入T#550ms实际PT值会被当作T#600ms6个100ms使用。ET (流逝时间)输出参数数据类型是TIME。它实时输出定时器启动后已经走过的时间。这是一个非常强大的调试工具。在线模式下你可以监控ET值看它是否在递增从而判断定时器是否被正确启动。当定时器复位时ET值会清零。Q (输出)BOOL量输出。定时时间到或满足其他条件时Q点会置1。这是用来驱动后续逻辑的关键信号。理解这些参数的内在联系是灵活运用定时器的前提。例如通过比较ET值和某个设定值可以实现分段计时通过复位IN信号再重新启动可以实现定时器的重复使用。3. 四大金刚详解S7-1200的四种核心定时器指令S7-1200提供了四种最常用的定时器指令它们像四把不同的“时间尺子”应对不同的工艺需求。我们结合时序图来彻底理解它们。3.1 TON接通延时定时器——最常用的“等一会儿再干”这是使用频率最高的定时器没有之一。它的行为模式非常符合人的直觉当启动信号持续存在一段时间后才产生输出。工作原理当IN引脚从0变为1上升沿并保持为1时定时器开始计时ET从0开始增加。在ET PT的整个计时过程中输出Q始终保持为0。当ET增加到等于PT时计时完成输出Q跳变为1并且ET停止增加保持等于PT。如果在计时完成前IN信号变为0则定时器立即复位ET清零Q变为0。当计时完成后即使IN信号仍然为1Q也保持为1直到IN信号变为0定时器才复位。典型应用场景电机顺序启动启动主电机后延迟10秒再启动冷却风机。设备预热打开加热开关后持续加热3分钟到达时间后指示灯亮表示预热完成。安全门延时打开安全门后延迟2秒设备才允许停止防止误触发。一个关键技巧如何用TON实现一个“单次触发”的延时比如按一下按钮脉冲5秒后灯亮一次。你不能直接把按钮信号接在TON的IN端因为按钮松开IN就断了。正确做法是用按钮的上升沿触发一个中间位M置位用这个中间位作为TON的IN。当TON时间到Q输出时再用这个Q信号去复位那个中间位同时驱动灯。这样就实现了“脉冲启动延时单次输出”。3.2 TP脉冲定时器——生成一个“固定宽度的脉冲”TP定时器用于产生一个固定时间长度的脉冲无论启动信号持续多久。工作原理当IN引脚从0变为1上升沿时定时器立即启动同时输出Q立即置1。定时器开始计时ET从0开始增加。当ET增加到等于PT时计时完成输出Q跳变为0ET保持等于PT。关键点在计时期间即使IN信号提前变为0也不会影响定时器的运行和Q的输出。Q依然会在PT时间到后才变为0。定时器运行期间ET PT如果IN端又来了一个新的上升沿定时器会被重新启动。ET清零后重新开始计时Q保持为1。典型应用场景信号防抖滤波将一个可能抖动如机械按钮的信号通过一个很短的TP定时器如50ms输出一个干净的、确定宽度的脉冲用于后续逻辑的精确触发。固定时长输出例如按下清洗按钮无论按多久清洗阀只打开3秒。心跳信号结合时钟存储器可以生成周期性的固定脉冲用于通信链路检测或周期触发任务。避坑指南TP定时器最常见的错误是期望用它来做“延时断开”。TP是“上升沿触发生成定宽脉冲”它的Q点是在计时开始时立即变1的。如果你需要“信号断开后延迟一段时间再断开输出”那应该使用TOF定时器。3.3 TOF断开延时定时器——“走了还要留一会儿”TOF的行为与TON相反它用于在启动信号消失后让输出再保持一段时间。工作原理当IN引脚为1时输出Q立即为1定时器不工作ET为0。当IN引脚从1变为0下降沿时定时器开始启动计时ET从0开始增加。注意此时输出Q仍然保持为1。在ET PT的计时过程中Q保持为1。当ET增加到等于PT时计时完成输出Q跳变为0定时器停止ET保持等于PT。如果在计时完成前IN信号又变为1则定时器立即复位ET清零Q保持为1。典型应用场景电机冷却停止主电机后冷却风机继续运行2分钟再停止。照明延时走廊的感应灯在人离开信号消失后延时30秒再熄灭。安全保持急停按钮松开后设备安全状态保持5秒确认无危险后再复位。实操心得TOF的IN信号在计时期间变为1会复位定时器这个特性可以用来实现“再触发”功能。比如在走廊灯场景中如果在熄灯倒计时期间又有人经过IN又变1灯会保持亮并且定时器重置重新开始30秒倒计时这非常符合实际需求。3.4 TONR保持型接通延时定时器——“累积计时器”TONR也叫积算定时器。它的特点是计时值可以累积即使中间启动信号断开了已计的时间也会保留下次启动时接着计。工作原理当IN引脚为1时定时器开始计时ET增加。当IN引脚变为0时定时器暂停ET保持当前值不变。当IN引脚再次变为1时定时器从上次保持的ET值开始继续计时。当ET累积值达到PT时输出Q置1。TONR不会自动复位即使IN变为0Q也保持为1ET保持为PT。必须使用专门的复位输入R给它一个上升沿信号才能将其ET清零、Q复位。典型应用场景设备累计运行时间统计电机的总运行时间即使中间有启停。工艺流程累计计时某个加热过程需要总时长达到1小时但允许中间暂停。维护提醒记录设备运行总时长达到设定值后输出报警提示需要保养复位后重新累计。重要注意事项TONR必须配合复位信号使用。在设计程序时一定要规划好何时、何条件下来复位TONR。通常是在一个生产周期结束、或操作员确认报警后。忘记复位是导致TONR逻辑混乱的最常见原因。4. 从理论到机架在TIA Portal中配置与使用定时器的完整流程理解了原理我们就在博图V20环境中真正创建一个使用定时器的项目。我会以一个经典的“两电机顺序启动逆序停止带故障复位延时”的小案例来串联整个过程。4.1 项目创建与硬件组态首先打开TIA Portal V20创建一个新项目命名为“Timer_Demo”。在项目树中“添加新设备”选择正确的S7-1200 CPU型号例如CPU 1214C DC/DC/DC。完成硬件组态后我们进入设备和网络视图这步主要是确认PLC的型号和固件版本对于定时器练习默认配置即可。4.2 编写主程序使用TON和TOF我们在Main[OB1] 中编写程序。假设控制要求如下按下启动按钮I0.0主电机Q0.0立即启动。主电机启动后延迟5秒冷却风机Q0.1自动启动。按下停止按钮I0.1冷却风机Q0.1立即停止。冷却风机停止后延迟10秒主电机Q0.0自动停止让主电机在风机停后继续散热一段时间。有一个故障复位按钮I0.2按下后一个故障指示灯Q0.2会亮起并在3秒后自动熄灭。我们使用一个TON和一个TOF来实现。步骤1主电机启动与风机延时启动// 网络 1主电机启停控制及风机启动延时 I0.0 I0.1 M0.0 // |---| |-------|/|---------( )---| // 启停保持电路M0.0为系统运行标志 M0.0 Q0.0 // |---| |--------------------( )---| // 主电机输出 M0.0 TON_DB // |---| |-------------------(IN)---| // 风机启动延时定时器 T#5S PT // |-------------------------------( )---|这里M0.0是系统的总运行标志。TON_DB是我们插入的一个TON定时器指令博图会自动提示我们为其分配一个背景数据块比如DB1。PT设置为T#5S。步骤2风机控制与主电机延时停止// 网络 2风机控制及主电机停止延时 TON_DB.Q Q0.1 // |---| |--------------------( )---| // 延时5秒后启动风机 I0.1 TOF_DB // |---| |-------------------(IN)---| // 停止按钮触发主电机停止延时 T#10S PT // |-------------------------------( )---| TOF_DB.Q M0.0 // |---| |-----------|---|/|--------( )---| // 主电机停止延时到且系统在运行状态则复位运行标志TOF_DB是插入的TOF定时器背景DB设为DB2。PT设为T#10S。注意停止主电机的逻辑是当TOF时间到Q变1并且系统运行标志M0.0还在时才将其复位。这确保了停止流程的严谨性。步骤3故障复位延时熄灭// 网络 3故障指示灯延时熄灭 I0.2 TON_Fault // |---| |-------------------(IN)---| // 故障复位按钮触发延时 T#3S PT // |-------------------------------( )---| I0.2 TON_Fault.Q Q0.2 // |---| |-------|/|---------( )---| // 按钮按下灯亮3秒后定时到则灯灭TON_Fault是另一个TON定时器DB3。这里用一个简单的启保停电路但停止条件是由定时器的Q点提供的实现了按下按钮I0.2灯Q0.2亮3秒后自动熄灭的功能。4.3 程序下载、监控与在线调试编写完成后点击编译无误后通过网线将程序下载到真实的S7-1200 PLC或PLCSIM Advanced仿真器中。在线监控是理解定时器的最佳途径转到在线模式。右键点击程序中的TON_DB选择“打开背景数据块”。在弹出的DB1监控表中你可以实时看到IN: 当前启动信号状态。PT: 预设时间只读。ET: 当前流逝时间它会从0逐渐增加到T#5S。Q: 输出状态。强制或触发I0.0为1观察TON_DB.ET的变化当它到达5秒时看Q0.1是否变为1。同时观察Q0.0的状态。触发I0.1观察TOF_DB.ET的变化以及10秒后M0.0和Q0.0的变化。触发I0.2观察TON_Fault的ET和Q以及Q0.2的亮灭。通过在线监控ET值你可以非常直观地验证定时器是否按预期工作这是排查定时器相关故障的最有效手段。4.4 使用交叉引用与程序信息如果项目中的定时器很多管理它们的数据块可能会混乱。利用博图的“交叉引用”功能非常有用。在项目树中选中你的PLC设备。点击工具栏上的“交叉引用”图标。在搜索框中输入定时器背景DB的名称如DB1你可以看到它在哪个程序块、哪个网络中被使用。同样你可以搜索定时器的输出点如TON_DB.Q查看它被用于驱动哪些线圈或作为哪些逻辑的输入。这能帮助你理清复杂的逻辑关系尤其是在修改程序时避免遗漏。5. 进阶应用与避坑指南让定时器工作得更稳定可靠掌握了基本用法后我们需要关注一些高级技巧和常见陷阱这些往往决定了程序的稳定性和专业性。5.1 定时器编号、背景DB与存储区的关系每个SIMATIC定时器都关联一个背景数据块。这个DB在定时器被创建时自动生成。你需要关注DB的编号和命名尽量使用有意义的名称如DB_MotorDelay而不是默认的DB1。在大型项目中这能极大提高程序可读性。存储空间每个背景DB都会占用PLC的装载存储和工作存储。虽然单个定时器DB很小但数量成百上千时也需要考虑。S7-1200的存储空间通常足够但养成好习惯总是有益的。保持性背景DB本身可以设置为“非保持”或“在IDB中设置”。对于定时器通常不需要保持。因为PLC断电再上电后定时器的运行状态中间计时值应该从头开始而不是延续断电前的状态。保持性设置错误可能导致难以预料的时序逻辑错误。5.2 长定时与高精度定时的实现方案长定时超过2小时46分钟S7-1200的TIME数据类型最大值为T#24D20H31M23S647MS单个定时器理论上可以定很长时间。但实际应用中对于几小时甚至几天的定时更可靠的做法是使用时钟脉冲计数器。例如需要一个8小时的定时。可以先用一个TON定时器产生一个1分钟的脉冲PTT#1M然后用这个脉冲的Q点去触发一个加计数器CTU。计数器预设值设为4808小时 * 60分钟。当计数器当前值达到480时表示8小时到。这样做的好处是即使PLC中途断电计数器值如果设置为保持性可以记录已计数值需要权衡工艺要求同时逻辑更清晰调试时可以通过计数器值知道已经过了多久。高精度定时小于10msS7-1200定时器的最小时基是10ms。如果需要更高精度的定时如1ms单个定时器指令无法实现。此时需要利用循环中断组织块OB如OB30等可以设置固定的循环中断时间最低可达1ms。在循环中断OB中编写程序用全局变量做软件计数器。例如在1ms的循环中断中对一个INT变量进行累加累加到1000就代表1秒。这种方法对CPU性能有要求且中断处理程序必须非常简短否则会影响系统稳定性。非必要不推荐使用。5.3 定时器使用中的常见“坑”与解决方案坑点一TON定时器不计时或计时不准现象IN信号给了但ET值不增加或者增加的速度不对。排查首先在线监控定时器背景DB确认IN信号是否为持续的1。最常见的原因是用一个瞬间脉冲如I0.0的上升沿直接驱动IN脉冲过后IN就为0了定时器自然复位。检查PT值设置是否正确单位是否匹配。T#5是5毫秒T#5S才是5秒。确认程序扫描周期。如果定时器在一个很少被调用的函数块FB或条件跳转中它可能没有被周期性扫描导致计时不更新。确保定时器在OB1或定期循环的中断OB中。解决确保IN信号有保持。使用置位指令或自锁电路来保持启动条件。坑点二多个定时器互相干扰现象程序中用了很多定时器有时某个定时器会莫名其妙地启动或复位。排查检查是否错误地复用了同一个背景数据块。每个定时器指令必须分配独立的背景DB。如果通过多次调用同一个FB来使用IEC定时器也必须为每次调用分配不同的实例数据块静态变量。解决在插入定时器时务必选择“单个实例”让博图自动生成唯一DB。或者手动管理好DB的分配。坑点三TOF定时器在IN断开后立即复位现象希望信号断开后输出保持一段时间但输出几乎立即断开。排查TOF的启动条件是IN的下降沿。如果用来产生下降沿的信号本身就是一个很短的脉冲例如另一个定时器的Q点那么可能这个脉冲在程序扫描周期内已经消失TOF根本没有检测到完整的“1”状态也就不会启动计时。解决确保驱动TOF的IN信号在断开前有足够长的“1”状态时间至少一个扫描周期。必要时可以用一个位存储器M来延长这个信号。坑点四定时器时间到了但后续动作没执行现象监控看到定时器Q点已经为1但它控制的电机或阀门没有动作。排查这是典型的逻辑问题而非定时器问题。检查定时器Q点之后的控制逻辑。是否被其他条件如互锁、急停断开了输出点Q是否被程序其他地方重复赋值双线圈问题在S7-1200中一个输出位在同一个扫描周期内被多次赋值只有最后一次有效。在线监控定时器Q点以及最终输出点的状态顺着逻辑链一步步查。解决使用“交叉引用”功能检查输出点的使用情况。规范编程避免双线圈。5.4 使用“时钟存储器”实现闪烁与周期触发除了专用的定时器指令S7-1200还提供了一个非常方便的功能时钟存储器。你可以在CPU的属性中启用它。双击项目树中的PLC设备进入“属性”选项卡。选择“系统和时钟存储器”。勾选“启用时钟存储器字节”并分配一个MB字节如MB0。系统会自动用这个字节的各个位产生不同频率的脉冲信号。例如M0.0 10Hz (0.05s on, 0.05s off)M0.1 5Hz (0.1s on, 0.1s off)M0.2 2Hz (0.25s on, 0.25s off)M0.3 1Hz (0.5s on, 0.5s off)… (频率依次减半)应用你可以直接用M0.3来控制一个指示灯的1Hz闪烁而无需自己编写定时器逻辑。也可以用它作为其他定时器或计数器的触发脉冲非常节省程序资源。6. 思维拓展定时器与其他功能的组合应用定时器很少孤立工作它总是和计数器、比较器、数学运算等指令结合实现更复杂的控制逻辑。6.1 定时器与比较指令实现分段控制假设一个烘箱有升温、保温、降温三个阶段每个阶段时间不同。使用一个TONR定时器T_Total来记录总时间。使用比较指令T_Total.ETT#10M时控制加热器全功率输出升温。T#10MT_Total.ETT#40M时控制加热器间歇输出保温。T#40MT_Total.ETT#50M时关闭加热器打开冷却阀降温。T_Total.ETT#50M时整个流程结束复位TONR。 通过一个定时器配合多个比较点就实现了多段时序控制程序结构非常清晰。6.2 定时器与计数器实现长时间/多次循环定时如前所述用定时器产生固定周期脉冲再用计数器对这个脉冲进行计数可以实现“每隔N个周期执行一次”或“总时长M*周期”的超长定时。这在包装、分拣等需要固定节拍的应用中非常常见。6.3 在函数块FB中封装可重用的定时逻辑如果你在项目中多次用到相同的定时控制逻辑比如多个电机都需要相同的延时启动和延时停止那么将其封装成函数块FB是最佳实践。创建一个新的FB如FB_MotorCtrlWithTimer。在接口Interface中定义输入Start,Stop,DelayOnTime,DelayOffTime、输出Motor和静态变量TON_DelayOn,TOF_DelayOff。在FB内部实现包含TON和TOF的延时启停逻辑。在OB1中多次调用这个FB每次调用分配不同的背景DB如DB_Motor1,DB_Motor2。 这样做的好处是程序高度模块化易于维护和修改。修改FB内部的逻辑所有调用它的地方都会同步更新。定时器是PLC程序中最基础、最活跃的元素之一。把它理解透、用熟练你的编程思路会一下子打开很多。最开始可能会觉得各种类型容易混淆多画一画它们的时序图在博图里多建几个小例子在线监控跑一跑感受一下IN、Q、ET三者随时间和信号变化的舞蹈很快就能形成肌肉记忆。记住在线监控和强制表是你最好的老师任何不确定的逻辑放到PLC里跑一下眼见为实。
返回列表