标题：定时器
概述
人类最早使用的定时工具是沙漏或水漏，但在钟表诞生发展成熟之后，人们开始尝试使用这种全新的计时工具来改进定时器，达到准确控制时间的目的。 
1876年，英国外科医生索加取得一项定时装置的专利，用来控制煤气街灯的开关。它利用机械钟带动开关来控制煤气阀门。起初每周上一次发条，1918年使用电钟计时[1]后，就不用上发条了。 
定时器确实是一项了不起的发明，使相当多需要人控制时间的工作变得简单了许多。人们甚至将定时器用在了军事方面，制成了定时炸弹，定时雷管。现在的不少家用电器都安装了定时器来控制开关或工  作时间。[2]
电路
  13位定时器如图
种类
1、 接通延时型定时器：接通延时型定时器是各种PLC中最常见最基本的定时器，这种定时器在 SIEMENS的PLC中，称为SD型定时器
2、 断开延时型定时器：这种定时器是当输入条件00000为ON时无延时作用，只有在输入条件00000为OFF时产生延时作用。在SIEMENS的PLC中，称为SF型定时器
3、保持型接通延时定时器：这种定时器是当输入条件00000为ON后，即产生锁存功能，即使输入条件00000又变为OFF，仍视输入条件为ON，当定时器的当前值等于设定值时，定时器动作，这种定时器在SIEMENS的PLC中，称为SS型定时器
4、脉冲型定时器：这种定时器是当输入条件00000为ON后，定时器即时动作，但经过定时器所设定的时间后，即使输入条件00000仍为ON，定时器却变为OFF状态。即这种定时器ON状态的维持时间是由设定值决定的。如果00000为ON的时续时间小于定时器的设定值，定时器的ON状态维持时间为输入条件00000为ON的持续时间。这种定时器在SIEMENS的PLC中，称为SP型定时器。
5、扩张型脉冲定时器：这种定时器与脉冲型定时器的区别是，只要输入条件00000出现了ON状态，不管其持续时间多长，均可使定时器为ON的维持的时间与定时器的设定值一致。这种定时器在SIEMENS的PLC中，称为SE型定时器。
软件
是一个多任务定时提醒的软件,它全面支持WINDOWS 9X/ME/NT/2K/XP按时执行程序、播放声音、关机、待机、拨号、断开连接、关闭显示器等等操作。具有多种设定任务的方法。支持SKIN,可以随意更换界面。
工业用定时器是指输入信号进入后， 按预先设定的时间发送输出信号的控制设备。
■定时器的开始方法 动作模式有2种开始方法。 
例： ON延迟动作 信号ON延迟动作： 预先在定时器电源部施加电压的状态下输入进入输入部开始计时动作。 
电源ON延迟动作： 定时器的电源部上施加电压的话定时器开始动作。
可编程控制器中的定时器是根据时钟脉冲累积计时的，时钟脉冲有 1ms、10ms、100ms等不同规格。（定时器的工作过程实际上是对时钟脉冲计数）因工作需要，定时器除了占有自己编号的存储器位外，还占有一个设定值寄存器（字），一个当前值寄存器（字）。设定值寄存器（字）存储编程时赋值的计时时间设定值。当前值寄存器记录计时当前值。这些寄存器为16位二进制存储器。其最大值乘以定时器的计时单位值即是定时器的最大计时范围值。定时器满足计时条件开始计时，当前值寄存器则开始计数，当当前值与设定值相等时定时器动作，起常开触点接通，常闭触点断开，并通过程序作用于控制对象，达到时间控制的目的。定时器相当于继电器电路中的时间继电器，可在程序中作延时控制。
plc定时器计数器的工作原理
中央处理单元(CPU)是PLC 的控制中枢，它按照PLC 系统程序赋予的功能接收并存储从编程器键入的用户程序和数据、检查电源、存储器I/O以及警戒定时器的状态；并能诊断用户程序中的语法错误。当PLC 投入运行时，首先它以扫描的方式接收现场各输入装置的状态和数据，并分别存入I/O 映象区，然后从用户程序存储器中逐条读取用户程序，经过命令解释后，按指令的规定执行逻辑或算数运算的结果送入I/O 映象区或数据寄存器内，等所有的用户程序执行完毕之后，最后将I/O 映象区的各输出状态或输出寄存器内的数据传送到相应的输出装置，如此循环运行直到停止运行。
为了进一步提高PLC 的可靠性近年来对大型PLC 还采用双CPU 构成冗余系统或采用三CPU 的表决式系统，这样即使某个CPU 出现故障整个系统仍能正常运行。
时间继电器通过脉冲，0.01毫秒，当计数满一，时间继电器清零幷重新计时。 
PLC时间继电器分类：断电延时时间继电器，通电延时时间继电器，
程序
定时器是一个多任务定时提醒软件，安装于电脑上。它全面支持WINDOWS 9X/ME/NT/2K/XP按时执行程序、播放声音、关机、待机、拨号、断开连接、关闭显示器等等操作。具有多种设定任务的方法。支持SKIN，可以随意更换界面。
插座
定时器插座是一个使用芯片控制的可以设置在特定的时间段开关闭电源的插座产品。时间设定范围：每星期或每日按设定的程序循环工作，1分-168小时。  定时器插座产品特点1 液晶屏设定显示
2 专利外观设计
3 铜片结构优化设计，寿命更长
4 最小设定时间为1分钟，每天最多可设定20组开与关，每周可设置140组
5 高导电率铜片，镀镍处理，防铜锈，发热更小
6 夏令时/冬令时功能
7 使用可充电电池技术参数额定电压：220C AC~ 额定电流：10A
额定频率：50Hz 额定功率：2200W
固有功率：≤2W 使用温度范围：-10℃— +55℃
可编程数：20组 电池：可充电镍氢电池使用方法1调整当前时间  操作按钮使用定时器时，须先将定时器的显示时间调整到当前时间。
1.1按住“时钟”键的同时，分别按“星期”、“小时”和“分钟”键，调整到当前的时间。（每按一次增加一小时，长按可快速调整。）
1.2按“时钟”键3秒后，当前时间增加1小时，同时液晶屏显示“夏令时”字样，进入夏令时功能，再按"时钟"键3秒，取消夏令时功能，时间自动减少1小时。
2设置程序
2.1按“设定”键，即可进入定时模式设置，屏幕上显示“1开。”
2.2按“小时”、“分钟”和“星期”，即第一组定时开开始工作的时间。其中，按“星期”键，可选择不同星期组合模式。可根据需求，定时器只在设定的星期数中工作。
2.3再按“设定”键，屏幕上显示“1关”，即第一组定时关闭时间，时间设置参考一开设置方法。依次类推，最多可设置20组开与关。
2.4设置完成后按“时钟”键返回当前时间。  插座细节图片注：1.如果每天不需要设定20组，而其他组已设定，必须按“清除”键，将多余各组的时间程序清除。
2.定时设置完成后，应按“设定”键检查多次定时设定情况是否与实际情况一致。如有异，请按时间需要进行调整或重新设定。注：1.如果每天不需要设定20组，而其他组已设定，必须按“清除”键，将多余各组的时间程序清除。
2.定时设置完成后，应按“设定”键检查多次定时设定情况是否与实际情况一致。如有异，请按时间需要进行调整或重新设定。如设置的时间程序是跨天的，需要逐一将“开”与“关”时间程序相对应的星期模式对应好。
3 定时器工作模式选择
3.1在当前时间状况下，连续按“模式”键，显示屏的左侧将循环显示“自动关”、“开”、“自动开”、“关”四种模式。根据您的需要进行模式选择。
3.2四种模式释意：“开”：定时器一直有电源输出，没有定时功能；“关”：定时器无电源输出，呈关闭状态；“自动开”：定时器接通电源时有电源输出，之后按设定的程序工作；“自动关”：定时器接通电源时无电源输出，之后按设定的程序工作。
注：以当前时间为标准，当前时间处在在设定时间段中间，选择“自动开”的模式；当前时间处在设定时间段之前或之后，选择“自动关”的模式。适用范围1在实行峰谷电价差的地区，可使用大功率电器在低电价阶段自动运行。
2用于控制需定时开与关的家用电器。如：饮水机、热水器、空调、电饭煲、广告照明等；
3用于控制通电时间长短。如：电动自行车电池、手机电池、蓄电池的充电；
4需频繁通断的用电场合。如花圃、草坪的间歇喷灌、鱼缸的周期性增氧过滤、喷泉等；
5家庭防盗系统的自动控制。注意事项1 本产品所接电器功率总和不得超过额定功率，为室内干燥环境中使用；
2本产品可循环工作，设置的程序可循环使用。
3不可把本产品直接插入已运行中的电器上
4当电器用品接入定时器后，开关状态务必是开启状态
5保修期内请勿擅自拆卸定时器，一旦拆卸，将终止保修服务。需维修时请找专业电工或专业人士。
管理模块
定时器是通信协议正常运行的基本要素之一，主要用于各种定时和帧重传的任务。通信协议在单片机系统上实现所使用的定时器，定时精度要求不高，但数量要求比较大。由于硬件资源有限，不可能为每一个单独任务分配一个硬件定时器，只能通过单个硬件定时器模拟多个软件定时器的方法，来满足协议中的定时应用需要。
  图1用一定的数据结构将这些软件定时器组织起来，并提供统一的调用接口，称为“定时器管理”。目前定时器管理主要有2种实现方法：
①静态数组法。将定时器节点存储在数组中。优点是逻辑简单，占用ROM较少。但这种方案有明显的缺点：当硬件定时器中断发生时，要对所有定时器节点进行减法操作，时间开销很大，且时延不确定(与定时器数目相关)。
②delta链表法。按照定时器的定时值升序排列，形成链表。后一个定时器的定时值是前面所有定时器的值加上本节点的值。这样，在每次的时钟中断处理中，只需对第1个定时器节点进行减法操作，大大减少了时间开销。但是，该方案逻辑复杂，ROM用量大，需要频繁分配回收内存，容易形成内存碎片。
1 定时器管理模块的设计
定时器管理模块的设计基于静态数组法。使用一个定时器节点数组来保存所有的定时请求，数组的每一项代表一个可用的定时器节点。每一个定时器节点都有一个状态项，表示该定时器正处于空闲、使用或溢出状态。定时器的定时值和定时器超时后要发送的消息也存储在定时器节点中，从而实现用一个硬件定时器为用户提供多个软件定时器。
为了解决中断处理时间开销大的问题，在模块中引入一个辅助定时器，辅助定时器的值总是等于所有定时器节点中的最小定时值。在硬件定时器中断处理中，仅对辅助定时器进行减法操作，从而大大缩短了中断处理的时间。设计原理如图1所示。
  结构式2定时器管理模块的实现
2.1 数据结构和函数接口
定时器管理模块使用的相关数据结构定义如下：
字段state保存了定时器节点的状态，可能取值为空闲(T_FREE)、使用(T_INUSE)或溢出(T_OVERFLOW)。
字段count保存了定时器节点的定时值，最大取值为65 535。如果设置硬件定时器中断为10 ms，则软件定时器最大定时约为655 s，可以满足大多数应用需要。
字段msg指向定时器的用户消息。在启动定时器时，指向消息的指针被保存在此字段。当定时时间结束后，中断处理函数会自动发出这个消息以通知用户任务。
由于数组的下标是唯一的，可作为识别节点的唯一ID号。下文中提到的节点ID号均表示节点在数组中的下标。
  函数式MAX_TIMER_NUM表示系统允许的最大定时器数，其值取决于具体应用需要。
本模块提供的关键接口函数如下：
2.2定时器的初始化
使用定时器管理模块前，需要进行定时器的初始化。主要是初始化定时器节点数组，将每一个定时器节点设置为空闲状态，同时将辅助定时器置零，辅助ID指向0xFF(表示空)。
2.3定时器的启动
  图2启动一个定时器，主要是将节点数组中一个空闲状态的节点置为使用状态。如果这个新启用的定时器，是所有定时器中定时值最小的，还要更新辅助定时器。函数以指向定时器消息的指针和定时值为参数，启动定时器流程如图2所示。成功启动定时器后，返回该定时器节点的ID号。
2.4定时器的删除
在目标定时器到期之前，由于某种原因用户可能会要求取消定时器。如重发定时器，用户在发送数据帧后启动该定时器，并等待对方返回响应帧。如果在定时时间结束时没有收到响应帧，用户就需要重发原数据帧；如果在定时时间结束之前收到响应帧，用户就需要马上取消该定时器，然后进行下一次通信过程。
删除定时器函数以定时器节点ID号作为输入参数，将定时器节点设为空闲状态，并根据需要更新辅助定时器，流程如图3所示。
2.5定时器的驱动
  图3软件定时器的驱动由硬件定时器提供。在硬件定时器中断中，首先将辅助定时器的值减1。如果辅助定时器值为0，则表示定时值最小的定时器已经超时，应将对应的消息发送给用户任务，将节点置为空闲状态，并重新计算其他节点的定时值，同时查找定时值最小的节点，更新辅助定时器。