3.4. Clock_Integer 指令库编程应用 - 读取系统时钟 定时器 关键字 分辨率刷新子程序 例程 定时中断:定时中断 T32/T96 SMB34/35 实时时钟:精度 设置 读写时钟 指令库 保持性 同步 例程 常问问题 简介: S7-200提供了256个定时器,依据分辨率分三种类型:1ms,10ms和100ms;依据功能分为延时型定时器和时间间隔定时器。 S7-200可以实现了时钟50/100小时的断电保持,并为客户提供长达200天的电池卡作为更长时间时钟保持的选择。支持MicroWin软件在线同步时钟,也可通过软件编程实现HMI上更改时钟;此外还支持与HMI之间的时钟同步功能。 目录 1 定时器 1.1 延时定时器号和分辨率 1.2 延时定时器的功能 1.3 延时定时器在子程序中的表现 1.4 时间间隔定时器“BGN_ITIME”和“CAL_ITIME” 1.5 长时间计时 2 定时中断 2.1 定时器T32/T96 2.2 定时中断SMB34/35 3 实时时钟 3.1 用 Micro/WIN 设置时钟 3.2 读写时钟指令-BCD格式 3.3 Clock Integer 指令库-十进制格式 3.4 Clock_Integer 指令库编程应用 - 读取系统时钟 3.5 Clock_Integer 指令库编程应用 - 设置系统时钟 3.6 时钟保持性,电池卡 3.7 同步操作面板与S7-200控制器的日期和时间 3.8 面板上在线修改S7-200 实时时钟 3.9 时钟指令常问问题 4 STEP 7-Micro/WIN32的指令库 4.1 分配库指令数据区 4.2 添加指令库 4.3 删除库指令 5 扩展阅读 5.1 扩展阅读 1定时器 S7-200指令提供了下述三种类型的延时定时器和时间间隔定时器。 接通延时定时器(TON):用于单一间隔的定时 有记忆的接通延时定时器(TONR):用于累计许多时间间隔 断开延时定时器(TOF): 用于关断或者故障事件后的延时 开始时间间隔(BGN_ITIME):用于读取内置1毫秒计数器的当前值 计算间隔时间(CAL_ITIME):用于计算间隔时间 
定时器号决定了定时器的分辨率(时基)。 SIMATIC定时器有三种分辨率:1ms、10ms和100ms。 S7-200提供了256个可供使用的定时器,即用户可用的定时器号为T0-T255,一旦用户选择了定时器号,就意味着定时器的分辨率(时基)已经确定了。定时器号的分辨率(时基)及最大计时时间,如下表: 表1. 定时器号和分辨率 定时器类型 分辨率 最大定时值 定时器值 TONR (可保持) 1 ms 32.767s (0.546min.) T0, T64 10 ms 327.67s (5.46min.) T1-T4, T65-T68 100 ms 3276.7s (54.6min.) T5-T31, T69-T95 TON,TOF (不保持) 1 ms 32.767s (0.546min.) T32, T96 10 ms 327.67s (5.46min.) T33-T36, T97-T100 100 ms 3276.7s (54.6min.) T37-T63, T101-T255
编程实现带有定时器功能的程序,在编译时已经通过,为何下载到CPU中时提示出错? 这种情况往往是调用的定时器号与定时器类型不配合造成的。参见上面的表格,如T7只能用作TONR,而不能用于TON或TOF。 不同分辨率的定时器按以下规律刷新: 1ms:1ms分辨率的定时器,定时器位和当前值的更新不与扫描周期同步。对于大于1ms的程序扫描周期,在一个扫描周期内,定时器位和当前值刷新多次。 10ms:10ms分辨率的定时器,定时器位和当前值在每个程序扫描周期的开始刷新。定时器位和当前值在整个扫描周期过程中为常数。在每个扫描周期的开始会将一个扫描累计的时间间隔加到定时器的当前值上。 100ms:100ms分辨率的定时器,定时器位和当前值在指令执行时刷新。因此为了保证正确的定时值,要确保在一个程序扫描周期中,只执行一次100ms定时器指令。
注意:不能将同一个定时器号同时用作TOF和TON。例如,不能既有TON T32又有TOF T32。也不能重复使用同一定时器号定时。
使用定时器加自复位做一个不断重复的计时,调用其他功能或子程序时,为何看起来工作不规律? 请注意《S7-200系统手册》中,或者前文关于三种定时器刷新规律的描述。 按这种方法使用定时器时,定时器的置位、复位可能与程序扫描周期不配合,存在造成上述问题的机制。 定时比较短的定时任务应使用“定时中断”功能,这样更为可靠。 1.2. 延时定时器的功能 接通延时定时器(TON): 当使能输入接通时,定时器开始计时,在当前值(TXXX)与预置值(PT)相等时,定时器位接通。使能输入断开后,定时器当前值清零。在定时器到达预置值后,它会继续计时直到计到最大值32767才停止。 有记忆接通延时定时器(TONR): 当使能输入接通时,定时器开始计时;在当前值(TXXX)大于等于预置值时,定时器位接通。当使能输入断开时,定时器当前值保留。若要将定时器当前值清零,必须执行复位命令。在定时器到达预置值后,它会继续计时直到计到最大值32767才停止。 断开延时定时器(TOF): 在输入端接通时,定时器位立即接通,当前值置为零;当输入端由接通转为断开时,定时器开始计时,直到预置时间。当定时器到达预置时间时,则定时器位断开,定时器当前值停止计时。当输入断开的时间小于预设值时,定时器位保持接通。下一次输入断开后,定时器从零开始重新计时直到达到预置值。 只有有记忆接通延时定时器 (TONR)具有断电保持功能。如图2,断电保持性在系统块中设置,系统默认设置T0-T31,T64-T95已保持。
注意:定时器TONR的保持性仅对当前值有效,定时器位不具有保持性。

如果用 SM0.0 调用子程序;或者在控制逻辑的时序上做到能够保证定时功能完整执行,定时器会正常运行。使用条件调用含有定时器的子程序时,一定要注意时序逻辑,以免造成程序运行错误。
能否在子程序的局部变量中添加定时器类型? S7-200的子程序不支持添加定时器或计数器的数据类型。
为什么子程序中的定时器和计数器不工作或者工作不正常? 如果有下面情况产生: 一个在内部使用了定时器或计数器的子程序,在同一时刻被调用了多次 相同编号的定时器或计数器被多个子程序使用,且同一时刻这些子程序有两个或者以上被调用 则定时器或者计数器资源会因重叠使用而相互影响,造成程序逻辑等方面的错误。 1.4 时间间隔定时器“BGN_ITIME”和“CAL_ITIME” 从 STEP 7 Micro/WIN 版本 4 开始,功能块“BGN_ITIME”和“CAL_ITIME” 可用于版本 2 开始的 S7-200 CPUs 。注意:由于输出是双字格式,最大定时时间是49.7天。 接通延时定时器 输入点 I0.0 接通(上升沿) 3 秒后(3000 ms), 输出点 Q0.0 置位。




为什么定时器选项中的BGN_ITIME和CAL_ITIME有红叉? 需要PLC版本02.00及以上支持使用。



注意:建议根据项目要求确定,INC_DW填写的存储区是否设置断电保持。 2. 系统时钟 SM0.4,SM0.5 如图所示,使用系统时钟SM0.4和SM0.5,可分别计时长达4085和68年。
适用于对时钟精度不敏感,但需要长时间计时的应用场合。

这种方式也是精度最高的(时基1ms),适用于要求时钟精度较高的场合。

2.1. 定时器T32/T96 2定时中断 定时中断为采用定时进入中断的模式,进行精确到ms的计时或数据采样等程序处理。 S7-200有四个定时中断定时器可以触发中断进程,包含两个特殊寄存器(SMB34/SMB35)和两个定时器(T32/T96)中断。中断定时计时精确,可以用来执行模拟量定时采样等任务。
定时中断使用要点: 1、定时中断程序的执行时间必须小于设定的间隔时间,如图1:




定时器T32及其中断的使用例程: 实现:每1s定时进入中断一次,并作加1累加计数。 主程序例程:


注意:必须调用中间变量(如M0.0)来进行自动重新触发定时器,而不能使用T32的常闭点作为其自动触发条件。


注意:在中断程序中加入累加计数ADD,确认进入中断次数并可由此实现长时间计时。 参考例程:
T32定时中断例程 2.2 定时中断SMB34/35 特殊寄存器SMB34/SMB35 可设置1~255ms,对应中断事件号10、11; 与T32/T96相类似,同样是设定分辨率为1ms的定时时间,以便进入定时中断。
定时中断SMB34的使用例程: 实现:每255ms定时进入中断一次,并作加1累加计数。


定时中断(SMB34/SMB35)最长定时为255ms,如何实现更长时间的定时? 可以采用T32/T96中断,最长时间可到32.767s。在定时中断服务程序中对进入中断的次数进行计数,也能实现更长时间的中断延时。
定时中断个数不够怎么办? 每个定时中断服务程序不一定只能处理一项定时任务,可以把几个任务放在一个定时中断服务程序中。 对于定时间隔不同的任务,可以计算出它们的定时长度的最大公约数,以此作为定时中断的时间设置。在中断服务程序内部对中断事件进行计数,据此编程别处理不同的任务。
S7-200中可以定义8个PID回路,PID计算就是在定时中断程序执行的。PID编程向导会自动按以上方法处理。 参考例程:
SMB34定时中断例程 3 实时时钟 S7-200的硬件实时时钟可以提供年、月、时、分、秒的日期/时间数据。 CPU221、CPU222没有内置的实时时钟,需要外插“时钟/电池卡”才能获得此功能。CPU224、CPU226和CPU226 XM都有内置的实时时钟。 S7-200的时钟精度典型值是2分钟/月(25°C),最大误差7分钟/月(0 – 55°C)。
为了提高运算效率,应当避免每个程序周期都读取实时时钟。实际上可读取的最小时间单位是1秒,可每秒读取一次(使用SM0.5上升沿触发读取指令)。
使用程序读取的实时时钟数据为BCD格式,可在状态图中使用十六进制格式查看。 CPU靠内置超级电容(+外插电池卡)在失去供电后为实时时钟提供电源缓冲;缓冲电源放电完毕后,再次上电后时钟将停止在缺省值,并不开始走动。 要设置日期、时间值,使之开始走动,可以: 用编程软件(Micro/WIN)的菜单命令PLC > Time of Day Clock…,通过与CPU的在线连接设置,完成后时钟开始走动 编用户程序使用Set_RTC(设置时钟)指令设置 Micro/WIN可以通过任何编程连接实现实时时钟的设置。 3.1. 用 Micro/WIN设置时钟 通过编程软件 Micro/WIN 设置 CPU 的时钟,必须先建立编程通信连接。 在 Micro/WIN 菜单中选择“PLC > 实时时钟”命令,打开“PLC 时钟操作”对话框:

S7-200 时间设置与读取 本例程需要 Micro/WIN V3.2 SP4 以上版本打开。
注意:此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和热线支持,用户不必为此联系西门子技术支持与服务部门。 3.3. Clock Integer 指令库-十进制格式 使用 STEP 7-Micro/WIN中标准的READ_RTC(读取实时时钟)和 SET_RTC(设置实时时钟)指令时, 读取和设置的数据格式都是 BCD 码的。如果觉得不便计算、处理,可使用 Clock Integer 指令库。 Clock_Integer 指令库用于将 BCD 码格式的 S7-200 日期、时间转换为十进制整数格式,以及将十进制整数格式的日期、时间值设定为 S7-200 时钟。
注意:此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和热线支持,用户不必为此联系西门子技术支持与服务部门。 要使用 Clock_Integer 指令库,须遵循下列步骤: 取得 Clock_Integer 指令库文件,并添加到编程软件 STEP 7-Micro/WIN 中; 按照要求编写用户程序调用 Clock_Integer 指令库。
Clock_Integer 指令库 上面的链接下载 Clock_Integer 指令库到本地计算机硬盘,建议保存在 Micro/WIN 安装目录的 Lib 文件夹中。以下是一个完整路径的例子: C:Program FilesSiemensSTEP 7-Micro/WIN V4.0Lib 然后将指令库库手动添加到 Micro/WIN 软件中。 成功添加指令库后,用户可以在STEP7 Micro/win的指令树中找到‘Clock_Integer (v1.0)’



注意:此指令库读取的整数格式时钟数据以连续字节的形式保存,而后续的整数运算需要一个字(两个字节)长度的数据。编程时要注意这一点。 3.5. Clock_Integer 指令库编程应用 - 设置系统时钟 1、调用 SET_RTC_I,将以十进制整数格式存储的日期时间设定为 PLC 时钟

Clock_Integer 指令库例子程序
注意:该例程必须使用 Micro/WIN V4.0 SP3 或以上版本软件打开。
注意:此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和热线支持,用户不必为此联系西门子技术支持与服务部门。
注意: CPU221、CPU222 没有内置的实时时钟,需要外插“时钟/电池卡”才能获得此功能。 只有 STEP7 Micro/Win V3.2+SP4 和 V4.0 版本才支持使用该指令库。 在使用 ‘SET_RTC_I’ 设定 PLC 时钟时,被设定的时间必须有实际意义,否则设定操作不能成功完成。例如: 不能将月份设为 13,或者将分钟设为 61 等。 Address 端必须输入地址指针,如:&VB10,&VB20;或者为双字地址,如:VD100,MD10,AC0等,在该地址中存有地址 3.6. 时钟保持性,电池卡 在 CPU 停电时,实时时钟的走动靠 CPU 的内置超级电容供电。如果停电时间较长,只能在 CPU 上插入电池卡以保持时钟。 时钟电池卡:内部兼有实时时钟和备份电池,专用于CPU221/CPU222 BC293:电池卡,为CPU数据保持提供电源。用于CPU224/224 XP/226保持数据和实时时钟数据
CPU224及以上的CPU具有内置的实时时钟,而CPU221及CPU222需要外加时钟电池卡才具有实时时钟功能。 S7-200的时钟电池卡/电池卡,在连续无供电时,可使用200天(即保持数据达200天)。CPU在不断电的情况下电池卡有效寿命为10年。 注意:时钟电池卡/电池卡均为1次性使用,不可充电。 可通过下表查看保持时间: 表6. S7-200新CPU(23版)的数据保持时间 型号 CPU221 CPU222 CPU224 CPU224XP CPU226 无电池,超级电容保持 50小时/典型值(40℃时最少8小时) 100小时/典型值(40℃时最少70小时) 电池卡 200天/典型值 表7. S7-200CPU(22版)的数据保持时间 型号 CPU221 CPU222 CPU224 CPU226 CPU226XM 无电池,超级电容保持 50小时/典型值(40℃时最少8小时) 190小时/典型值(40℃时最少120小时) 电池卡 200天/典型值 3.7. 同步操作面板与 S7-200 控制器的日期和时间 HMI 人机操作界面与 S7-200 的时钟同步功能包括两个方向的时钟同步: PLC 到面板的时钟同步。 西门子操作面板可分为硬件时钟面板(TP/OP/MP270,MP370 等)和软件时钟面板(XP170X, XP177X,K-TP178 micro 等)。软件时钟面板和无备份电池的硬件时钟面板, 当断电关机后, 面板的内部时钟就会丢失, 回到出厂时的状态。但面板可以通过设置,来定时读取 PLC 的硬件时钟信息,以保持和 PLC 时钟一致,这就是 PLC 到面板的时钟同步。 面板 到PLC的时钟同步。 与上述相反,即用面板的时钟来校准 PLC 的系统时钟。PLC 实际上是得到面板的时钟信息后,调用相应设置时钟的函数(或者通过用户编制的程序),更改自己的系统时钟,以保持和面板时钟一致。在本文所提供的例程中,实现的是用 PLC 的时间同步面板系统时钟,同时可以在面板上修改 PLC 的时钟,从而间接地修改了面板的系统时钟。 S7-200CPU到面板的时间同步主要操作步骤如下: 1. 在 S7-200 中编程读取 CPU 系统时钟。周期调用 READ_RTC 函数,以读取 S7-200 CPU 的系统时钟,将时钟信息存放在 V 存储区,比如 VB100。



如何使用 WinCC flexible 组态同步操作面板 TP170A / TP170micro / TP177micro 与 S7-200 控制器间的日期和时间? 3.8. 面板上在线修改S7-200 实时时钟 通过操作面板修改 S7-200 的实时时钟,主要有以下几个步骤: 1. 在面板上建立相应的输入变量 可以新建一个标志变量(比如:地址为 V20.0)和用于触发 S7-200 CPU 的写实时时钟功能,建立年、月、日、时、分、秒 、星期等 BYTE 变量,按照 S7-200 时钟缓冲区的格式分别连接到 PLC 的连续 V 存储区中,比如:VB70 – VB77。
因 S7-200 时钟设置指令的要求,这些 BYTE 变量必须是以 BCD 格式存在,在配置时可选用“16进制”数据格式。在面板上设置的数据必须是有效的 BCD 格式的时间、日期数据,包括星期的信息(有如需要,星期信息可能需要进行必要的转换处理),否则会导致时钟同步失败。(如果使用上文提到的Clock Integer 指令库,则可选用10进制数据格式) 2. 在 S7-200 中编程,用标志变量触发来调用 SET_RTC,将 VB70 起始的缓冲区地址作为时间参数传递给该函数,来实现通过面板修改S7 PLC时间。

如何同步操作面板与 S7-200/300/400 控制器的日期和时间 3.9. 时钟指令常问问题
Clock_Integer 指令库和 Micro/WIN 指令树中的读、写实时时钟指令有什么不同? Clock_Integer 指令库读出或写入的 PLC 时钟是以十进制整数格式存储;而读、写实时时钟指令读出或写入的 PLC 时钟为 BCD 码格式。
写时钟指令(TODW)为何不能正常改写时钟内容 写时钟指令需要严格按照8个字节的时钟缓冲区格式,设置相应的数据单,任何不合格的数据都可能造成不能写入的现象。注意数据的格式必须是BCD格式,可以说是将10进制数换成16进制表示,如16#59(59H)就是59(秒/分等)。
执行写时钟指令要保证缓冲区所有字节都包含合法数据;仅修改某些数据时,其他字节不能包含非法数值,否则会发生错误。 写时钟指令必须使用一次性的脉冲(沿)触发条件,不能持续激活写时钟指令。
如何实现 K-TP 178 micro 面板与 S7-200 的时钟同步? 步骤和方法与上述2.7章节内容相同。 4STEP 7-Micro/WIN32的指令库 为了便于用户的编程,Micro/WIN提供了对指令库的支持。指令库就是独立于具体工程项目文件,而与Micro/WIN集成的子程序集。 Micro/WIN可以集成两种类型的指令库: 西门子提供的标准指令库 用户自定义的指令库 指令库存在于Micro/WIN指令树的Libraries(指令库)分支中:



可以使用Suggest Address(推荐地址)设置数据区,但要注意编程软件设置的数据区地址,只考虑到了其他一般寻址,而未考虑到诸如Modbus数据保持寄存器区等的设置。应当确保不与其他任何已使用的数据区重叠、冲突。不应重复按Suggest Address按钮,否则也会造成混乱。
在STEP 7-Micro/WIN32 V3.1中,有分配库指令数据区时有不同的操作方法,需要在Symbol Table(符号表)中设置一个首地址。我们强烈建议使用当时最新的编程版本。 4.2. 添加指令库
注意:添加自定义指令库,需要关闭编辑库指令的项目,新建立一个项目。如果要添加其他来源的库指令自然不需要如此。 第一步:在Micro/WIN的File(文件)菜单中选择Add/Remove Libraries…(添加/删除指令库)命令 ;或者在指令树的Libraries(指令库)分支上单击鼠标右键,选择Add/Remove Libraries…



缺省情况下,Micro/WIN到图8中的路径下寻找库指令文件。用户也可以指定其他路径。但要注意库文件应当保持在非移动的介质上,如果指定了一个可移动硬盘,则硬盘不在时会发生找不到库的错误。建议用户使用缺省设置。 4.3. 删除库指令 第一步:选择添加/删除指令库命令


2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/37115.html