S7-200 SMART PLC 编程说明
数据类型
S 7-200 S M A R T 的数据主要分为:
l
与实际输入/输出信号相关的输入/输出映象区:
?I :数字量输入(D I )
?Q :数字量输出(D O ) ?A I :模拟量输入 ?A Q :模拟量输出
l
内部数据存储区
?V :变量存储区,可以按位、字节、字或双字来存取V 区数据
?M
:位存储区,可以按位、字节、字或双字来存取M 区数据 ?T :定时器存储区,用于时间累计 ?C :计数器存储区,用于累计其输入端脉冲电平由低到高的次数 ?H C :高速计数器,独立于 C P U 的扫描周期对高速事件进行计数,高速计数器的当前值是只读值,仅可作为双字(32 位)来寻址 ?A C :累加器,可以像存储器一样使用的读/写器件,可以按位、字节、字或双字访问累加器中的数据 ?S
M :特殊存储器,提供了在 C P U 和用户程序之间传递信息的一种方法。 可以使用这些位来选择和控制 C P U 的某些特殊功能, 可以按位、字节、字或双字访问 S M 位 ?L :局部存储区,用于向子例程传递形式参数
?S
:顺序控制继电器,用于将机器或步骤组织到等效的程序段中,实现控制程序的逻辑分段。 可以按位、字节、字或双字访问 S 存储器
存储器范围及特性 表1.存储器范围 数据寻址
S7-200 SMART 系统中的数据及其格式
说明
C P U S R 20 C P U S R 40, C P U
S T 40 C P U C R 40
C P U S R 60,C P U
S T 60 用户程序大小 12288字节 24576字节 12288字节 30270字节 用户数据大小 8192字节 16384字节 8192字节 20480字节 过程映象输入寄存器 I 0.0到I 31.7 I 0.0到I 31.7 I 0.0到I 31.7 I 0.0到I 31.7 过程映象输出寄存器 Q 0.0到Q 31.7 Q 0.0到Q 31.7 Q 0.0到Q 31.7 Q 0.0到Q 31.7 模拟量输入(只读) A I W 0到A I W 110 A I W 0到A I W 110 --- --- A I W 0到A I W 110 模拟量输出(只写) A Q W 0到A Q W 110 A Q W 0到A Q W 110 --- --- A Q W 0到A Q W 110 变量存储器(V ) V B 0到V B 8191 V B 0到V B 16383 V B 0到V B 8191 V B 0到V B 20479 局部存储器(L ) L B 0到L B 63 L B 0到L B 63 L B 0到L B 63 L B 0到L B 63 位存储器(M )
M 0.0到M 31.7
M 0.0到M 31.7
M 0.0到M 31.7
M 0.0到M 31.7
特殊存储器(S M )
S M 0.0到S M 1535.7 S M 0.0到S M 29.7 S M 1000.0到
S M 1535.7
S M 0.0到S M 1535.7 S M 0.0到S M 29.7 S M 1000.0到
S M 1535.7
S M 0.0到S M 1535.7 S M 0.0到S M 29.7 S M 1000.0到
S M 1535.7
S M 0.0到S M 1535.7
S M 0.0到S M 29.7 S M 1000.0到
S M 1535.7
S7-200S M A R T C P U收集操作指令、现场状况等信息,把这些信息按照用户程序指定的规律进行运算、处理,然后输出控制、显示等信号。所有这些信息都表示为不同格式的数据,作为数据来处理。各种指令对数据格式都有一定要求,指令与数据之间的格式要一致才能正常工作。例如,为一个整数数据使用实数(浮点数)运算指令,显然会得到不正确的结果。
数据有不同的长度(以二进制表示它们时,占据的位数不同),也就决定了数值的大小范围。模拟量信号在进行模/数(A/D)和数/模(D/A)转换时,一定会存在误差;代表模拟量信号的数据,只能以一定的精度表示模拟量信号。
l所有的数据在P L C中都是以二进制形式表示的
l数据都有其特定的长度和表示方式,称为格式
l数据的格式与用于运算、处理它的指令相关
l以不同的格式查看一个数据,或是使用不同格式的指令处理它,会得到不同的效果
二进制、十六进制和十进制
二进制和二进制数: 所有通过S7-200S M A R T P L C处理的数据(数值、字符等等)都以二进制形式表示。 十六进制和十六进制数:在二进制数中,每4个二进制位可以分为一组;这组二进制数值的不同变化可以表示16个状态,正好是16进制数每一位数字的变化范围。因此,可以用十六进制数值方便地表示二进制数。 例如,二进制数1000_1111b分为两组来看,分别是1000b和1111b,正好可以表示16进制数字8h和F h(0000b 对应于0h,...,1111b对应于F h);那么这个二进制数就可以表示为8F h。
十进制和十进制数:十进制是S7-200S M A R T的数学计算的基础,一般都使用十进制的体系,除了时间
(12/24或60进制)等特殊数据外。
二进制数用于在P L C中表示十进制数值、或者其他(如字符等)数据,而16进制用来比较简单地描述二进制数。
二进制位逻辑(b i t)
P L C中以二进制“位”的数据形式来表示逻辑“1”、“0”(或者“开”、“关”)。位是最基本的数据单位。
在数据字节(B y t e)中,二进制逻辑只用一个位(b i t)来表示。每个字节由8个位组成。
整数、无符号整数和有符号整数
字节、字、双字都可以用来表示十进制整数,显然它们的数据长度不同,能够表示的数的大小范围也不同。
无符号整数只有0和正整数;有符号整数可以有正数和负数。
有符号整数采用二进制补码的形式来表示负数。
实数(浮点数)
实数(或浮点数)以 32位单精度数表示,其格式为 A N S I/I E E E754-1985标准中所描述的形式。实数按双字长度访问。
注意:浮点数精确到小数点后第 6位。 因此输入浮点常数时,最多只能指定 6位小数。计算涉及到包含非常大和非常小数字的一长串数值时,计算结果可能不准确。
A S C I I字符和S t r i n g(字符串)
在S7-200S M A R T中,A S C I I字符是由表示字母、数字和一些特殊符号的A S C I I编码组成的二进制数据字节,一个字节存储一个字符。
A S C I I(美国信息交换标准码)是一种字符编码格式,在一个字节长度中不同的二进制数值代表不同的字符。如字母A为41h(十六进制数值),以十进制看就是65;而数字5的A S C I I值为35h,十进制值为53。
字符串是一个字符序列,其中的每个字符都以字节的形式存储。 字符串的第一个字节定义字符串的长度,即字符数。 字符串的长度可以是 0到 254个字符,再加上长度字节,因此字符串的最大长度为 255个字节。 字符串常数限制为126个字节。(字符串中也能包括汉字编码,每个汉字占用两个字节。)
这是S7-200S M A R T内部对A S C I I字符串的格式定义,所有与字符串有关的指令都遵照这个格式。
l在编程软件中,用单字节(英文)的单引号(')将作为字符的内容括起来可以在数据块和状态图中输入A S C I I数据字节
l在单字节的双引号(")中间输入文本内容可以输入字符串
l按上述方法输入的字符串会自动按字符串格式排列(在起始地址中放入字符个数)
l使用程序,或人为组合成的A S C I I字符串,使用A S C I I字符串指令时,必须注意是否符合格式
例如:
图1.在数据块中输入A S C I I数据和字符串
下载项目到S7-200S M A R T C P U,使用状态图在线监控可以看到:
图2.状态图
注意A S C I I字节和字符串的区别。D6D0h是汉字“中”的编码。
S7-200 SMART 数据寻址
l如何调用开关量或模拟量信号?
l怎样读取数据?
l怎么使用输入信号?
l如何输出控制?
l……
上述问题都是关于如何访问、使用数据的问题,也就是所谓“寻址”。
访问S7-200S M A R T中的数据
S7-200S M A R T从外部接收信号输入(输入数据),在内部按照用户程序运算、处理后,再输出进行各种控制、显示。
C P U将信息存储在不同存储单元,每个位置均具有唯一的地址。寻址时,数据地址以代表存储区类型的字母开始,随后是表示数据长度的标记,然后是存储单元编号;对于二进制位寻址,还需要在一个小数点分隔符后指定位编号。
位寻址的举例如下图所示:
图1.位寻址举例
其中,存储区和字节地址(“M 3”)代表 M 存储器的第 3 个字节,用句点(“.”)与位地址(位 4)分开。
字节寻址的举例如下图所示:
图2. 字节寻址举例
可以看出,V W 100包括V B 100和V B 101;V D 100包括V W 100和V W 102,即V B 100,V B 101,V B 102,V B 103这4个字节。这些地址是互相交叠的。
当涉及到多字节组合寻址时,遵循“高地址,低字节”的规律。 下表给出了不同数据长度可表示的整数值范围。 表1
.
不同数据长度表示的十进制和十六进制数范围 表示方式
字节(B )字(w )双字 (D W ) 无符号整数
0到255
16#00到16#F F 0到65,535
16#0000到16#F F F F 0到4,294,967,295
16#00000000到16#F F F F F F F F 有符号整数
-128到+127
16#80到16#7F -32,768到+32,767
16#8000到16#7F F F
-2,147,483,648到+2,147,
483,647 16#8000 0000到16#7F F F F F F F 实数(I E E E 32位浮点
数)
不适用
不适用
+1.175495E -38 到 +3.402823E +38(正数)
-1.175495E -38到-3.402823E +38 (负数)
S 7-200 S M A R T 中的数据类型
《S 7-200 S M A R T 系统手册》上关于P L C 概念的第四章,其中对于S 7-200 S M A R T 中数据寻址的叙述非常好,建议初学者必读!
几乎所有的指令、功能都与各种形式的寻址有关,不弄清楚数据寻址会给工作带来极大的困难。 对本地 I /O 和扩展 I /O 进行寻址
C P U 提供的本地 I /O 具有固定的 I /O 地址。可以通过在 C P U 的右侧连接扩展 I /O 模块,或通过安装信号板来增加 I /O 点。 模块点的地址取决于 I /O 类型和模块在 I /O 链中的位置。 注意:
l
数字量 I /O 的过程映像寄存器空间总是以八位(一个字节)递增的形式预留。 如果模块没有为每个
保留字节中的每一位提供相应的物理点,那些未使用的位就无法分配给 I /O 链中的后续模块。 对于输入模块,这些未使用的位会在每个输入更新周期中被清零。 l
模拟量 I /O 点总是以两点递增的方式分配。 如果模块没有为这些点分配相应的物理 I /O ,则这些 I /O 点将丢失,并且不能够分配给 I /O 链中的后续模块。
下表提供固定映射惯例的示例(由 S T E P 7 M i c r o /W I N S M A R T 建立,并作为系统块中I /O 组态的一部分下载)。
表2. C P U 映射惯例: 间接寻址
间接寻址是指用指针来访问存储区的数据。指针以双字的形式 存储其它存储区的地址,只能将 V 存储单
元、L 存储单元或累加器寄存器(A C 1、A C 2、A C 3)用作指针。 注意:不能使用间接寻址访问单个位或访问 H C 、L 或累加器存储区。
要创建指针,必须使用“移动双字”指令,将间接寻址的存储单元地址移至指针位置。;用“&”符号加上要访问的存储区地址可建立一个指针,当指令中的操作数是指针时,应该在操作数前加上“*”号。 如下图所示为以创建和使用指针示例。在该示例中,输入*A C 1 表示 A C 1 存储指向“移动字”(M O V W ) 指令引用的字长度值的指针,在 V B 200 和 V B 201 中存储的值被移至累加器 A C 0。
图3.创建和使用指针举例 其中:
l
通过将V B 200的地址(V W 100的初始字节)移动到A C 1创建指针。
CPU 信号板
信号模块 0 信号模块 1 信号模块 2 信号模块 3
起始地址
I 0.0
Q 0.0
I 7.
0 Q 7.0 无 A I S B A Q 12I 8.0
Q 8.0
A I 16
A Q 16
I 12.0
Q 12.0 A I 32 A Q 32
I 16.0
Q 16.0 A I 48 A Q 48
I 20.0
Q 20.0 A I 64 A Q 64
l移动A C1中的指针引用的字值。
l
注意:修改指针的值时,请记住调整所访问数据的大小:访问字节时,指针值加 1;访问定时器 或计数器的字或当前值时,指针值加 2;访问双字时,指针值加 4。
子程序和中断服务程序
子程序和中断服务程序都是程序的组织结构,它们和主程序一起被称为P O U(程序组织单元)。
子程序
子程序可以把整个用户程序按照功能进行结构化的组织。一个“好”的程序总是把全部的控制功能分为几
个符合工艺控制规律的子功能块,每个子功能块可以由一个或多个子程序组成。这样的结构也非常有利于
分步调试,以免许多功能综合在一起无法判断问题的所在;而且,几个类似的项目也只需要对同一个程序
作不多的修改就能适用。
l更好的组织程序结构,便于调试和阅读;
l子程序在执行到末尾时自动返回,不必加返回指令;
l子程序不能使用跳转语句跳入、跳出;
l S7-200S M A R T C P U最多可以调用128个子程序;
l子程序可以嵌套调用,即子程序中再调用子程序,一共可以嵌套8层 ;
l子程序可以带参数调用,在子程序的局部变量表中设置参数的类型;
有关子程序的详情,请看《S7-200S M A R T系统手册》相关部分。
中断服务程序
中断功能是S7-200S M A R T的重要功能,用于实时控制、高速处理、通信和网络等复杂和特殊的控制任务。 S7-200S M A R T系列可编程控制器最多有38个中断源(9个预留),分为三大类:通信中断、输入/输出
(I/O)中断和时基中断,优先由高到低依次是:通信中断、I/O中断和时基中断。每类中断中不同的中断
事件又有不同的优先权。
S7-200S M A R T中使用中断服务程序来响应这些内部、外部的中断事件。中断服务程序与子程序最大的不同是,中断服务程序不能由用户程序调用,而只能由特定的事件触发执行。
l及时处理与用户程序的执行时序无关的操作,或者不能事先预测何时发生的“事件”
l只有把中断服务程序标号(名称)与中断事件联系起来,并且开放系统中断后才能进入等待中断并随时执行的状态
l多个中断事件可以连接同一个中断服务程序;一个中断服务程序只能连接一个中断事件
l中断程序只需与中断事件连接一次,除非需要重新连接
l中断事件各有不同的优先级别 ,中断服务程序不能再被中断,如果再有中断事件发生,会按照发生的时间顺序和优先级排队
l中断程序应短小而简单,执行时对其他处理不要延时过长,即越短越好
l中断程序一共可以嵌套 4层子程序。
在《S7-200S M A R T系统手册》中有关中断指令的叙述十分详细,建议初学者仔细阅读。
常见问题
中断指令
S 7-200 S M A R T 设置了中断功能,用于实时控制、高速处理、通信和网络等复杂和特殊的控制任务。 S 7-200 S M A R T 系列可编程控制器最多有38个中断源(9个预留),分为三大类:通信中断、输入/输出(I /O )中断和时基中断,S 7-200 S M A R T 规定的中断优先由高到低依次是:通信中断、I /O 中断和时基中断。每类中断中不同的中断事件又有不同的优先权。 中断指令主要包括以下几种:
l A T C H :中断连接,连接某中断事件所要调用的程序段。 l E N I :全局允许中断,开放中断处理功能。 l D I S I :全局禁止中断,禁止处理中断服务程序,但中断事件仍然会排队等候。 l D T C H :中断分离,将中断事件号与中断服务程序之间的关联切断,并禁止该中断事件。 l R E T I :条件中断返回,根据逻辑操作的条件,从中断服务程序中返回。 l
C L R _E V N T :清空中断队列。
与S 7-200相比,下表所示中断事件号为S 7-200 S M A R T 所特有的 : 表1.S 7-200 S M A R T 特有中断事件号 中断指令的有效操作数如下: 表2.中断指令的有效操作数 中断程序实例
本例使用定时中断实现对100m s 定时周期计数。我们使用特殊存储器定时中断0。由定时中断0的中断事件号
为10,确定周期的特殊寄存器字节时S M B 34。 该程序主要包括以下几部分:
l S B R _0:中断初始化程序;
l
I N T _0:中断服务程序;
在主程序中调用S B R _0,如下图所示:
事件号说明
C R 40
S R 20/S R 40/S T 40/S R 60/S T 6035上升沿,信号板输入0N Y 36下降沿,信号板输入0N Y 37上升沿,信号板输入1N Y 38
下降沿,信号板输入1N
Y
输入/输出数据类型操作数
I N T B Y T E 常数: 中断例程编号(0 到 127)
E V N T
B Y T E
常数: 中断事件编号(C P U C R 40: 0-13、16-18、
21-23、27、28 和 32C P U S R 20、S R 40、S T 40、S R 60、S T 60: 0-13、16-18、21-28、32和 35-38)
图1.S B R_0的调用
其中,初始化中断程序秩序调用一次,因此用S M0.1作为条件。
S B R_0编程如下图所示:
图2.S B R_0编程
其中,写入定时周期数100m s,连接10号中断事件即定时中断0,指定中断服务程序名称为I N T_0。
I N T_0编程如下图所示:
图3.I N T_0编程
其中,用双字长的整数加法对V D200自身加1。
注意:中断程序的初始化只需执行一次。也可根据需要重新定义中断事件。 使用状态表监视,V D200的内容就是100m s周期到达的次数,如下图所示:
图4.状态表监视
计数器
S7-200S M A R T指令提供了下述三种类型的计数器。
l C T U:增计数器。
l C T D:减计数器 。
l C T U D:增/减计数器 。
计数器指令的梯形图格式如下图所示。
图1.计数器指令
l C U:增计数信号输入端;
l C D:减计数信号输入端;
l P V:预置值;
l L D:装载预置值;
l R:复位输入;
计数器指令的有效操作数如下表所示:
表1.计数器指令接收操作数
输入/输出数据类型操作数
C x x W O R D常数(C0到 C255)
注意:当子程序在同一周期内被多次调用时,不能使用上升沿、下降沿、定时器和计数器。
注意:由于每个计数器有一个当前值,因此请勿将同一计数器编号分配给多个计数器。 (编号相同的加
计数器、加/减计数器和减计数器会访问相同的当前值) 计数器按如下表所列的规律工作: 表2.计数器工作规律 计数器计数范围为0~32,767。计数器号不能重复使用。计数器有两种寻址类型:W o r d (字)和B i t (位)。计数器号既可以用来访问计数器当前值,也可以用来表示计数器位的状态。 增/减计数器指令举例如下图所示:
图2.增/减计数器指令 时序图如下所示:
C U ,C
D ,L D ,R B O O L I 、Q 、V 、M 、S M 、S 、T 、C 、L 、逻辑流
P V
I N T
I W 、Q W 、V W 、M W 、S M W 、S W 、L W 、T 、C 、A C 、A I W 、
*V D 、*L D 、*A C 、常数
类型操作
计数器位
上电周期/首次扫描
C T U C U 增加当前值。 直至达到32,
767。当前值 >= 预设值时,计数器位接通 计数器位关断。
当前值可保留 C T D
C D 减少当前值。 直至达到0。
当前值 = 0时,计数器位接通 计数器位关断。
当前值可保留
C T U D
C U 增加当前值。C D
减少当前值。
当前值持续增加或减
少,直至 计数器复位。
当前值 >= 预设值时,计数器位接通计数器位关断。
当前值可保留
图3.时序图
其中:
l I0.0加计数;
l I0.1减计数;
l I0.2将当前值复位为0;
l当前值大于等于4时,加/减计数计数器C48接通 C48位;
定时器
S7-200S M A R T指令提供了下述三种类型的定时器。
l接通延时定时器(T O N):用于定时单个时间间隔 。
l有记忆的接通延时定时器(T O N R):用于累积多个定时时间间隔的时间值。
l断开延时定时器(T O F): 用于在 O F F(或 F A L S E) 条件之后延长一定时间间隔,例如冷却电机的延时。
定时器号和分辨率
定时器对时间间隔计数。定时器的分辨率(时基)决定了每个时间间隔的长短。
S7-200S M A R T提供了256个可供使用的定时器,即用户可用的定时器号为T0-T255。T O N、T O N R和 T O F定时器提供三种分辨率:1m s、10m s和100m s。(当前值的每个单位均为时基的倍数。例如,使用 10m s定时器时,计数 50表示经过的时间为 500m s)。
定时器号的分辨率(时基)及最大计数时间,如下表:
表1.定时器号和分辨率
定时器号决定了定时器的分辨率(时基),并且分辨率在指令块上标出。
注意:同一个定时器编号不能同时用于 T O N 和 T O F 定时器。 例如,不能同时使用 T O N T 32和 T O F
T 32。 不同分辨率的定时器按以下规律刷新:
l
1m s :1m s 分辨率的定时器,定时器位和当前值的更新不与扫描周期同步。对于大于1m s 的程序扫描周
期,在一个扫描周期内,定时器位和当前值刷新多次。 l
10m s :10m s 分辨率的定时器,定时器位和当前值在每个程序扫描周期的开始刷新。定时器位和当前值在整个扫描周期过程中为常数。在每个扫描周期的开始会将一个扫描累计的时间间隔加到定时器的当前值上。 l
100m s :100m s 分辨率的定时器,定时器位和当前值在指令执行时刷新。因此为了保证正确的定时值,要确保在一个程序扫描周期中,只执行一次100m s 定时器指令。
注意:要确保最小时间间隔,请将预设值 (P V ) 增大 1。例如:使用 100 m s 定时器时,为确保最小时间间隔至少为 2100 m s ,则将 P V 设置为22。 定时器指令的有效操作数如下表所示: 表2. 定时器指令的有效操作数 不同定时器的功能
T O N 和 T O N R 定时器操作:
l 在使能输入 I N 接通时开始计时。 当前值等于或大于预设时间时,定时器位置为接通。
l 使能输入置为断开时,清除 T O N 定时器的当前值。 l
使能输入置为断开时,保持 T O N R 定时器的当前值。 输入 I N 置为接通时,可以使用T O N R 定时器累积时间。 使用复位指令 (R ) 可清除 T O N R 的当前值。 l
达到预设时间后,T O N 和 T O N R 定时器继续定时,直到达到最大值 32,767 时才停止定时。
T O F 定时器
l
使能输入接通时,定时器位立即接通,当前值置为 0。输入断开时,定时开始,定时一直持续到当前时间等于预设时间。
l
达到预设值时,定时器位断开,当前值停止递增;但是,如果在 T O F 达到预设值之前使能输入再次
定时器类型分辨率最大定时值定时器值T O N R
(可保持)
1 m s
32.767s
(0.546m i n .)T 0, T 64 10 m s
32.767s (0.546m i n .)T 1-T 4, T 65-T 68
100 m s 3276.7s (54.6m i n .)T 5-T 31, T 69-T 95 T O N ,T O F
(不保持)
1 m s
32.767s (0.546m i n .)
T 32, T 96
10 m s 327.67s (5.46m i n .)
T 33-T 36, T 97-T 100 1 m s
3276.7s (54.6m i n .)T 37-T 63, T 101-T 255
输入/输出 数据类型 操作数
T x x x W O R D 定时器编号(T 0~T 255)
I N B O O L I 、Q 、V 、M 、S M 、S 、T 、C 、L 、能流 P T
I N T
?I W 、Q W 、V W 、M W 、S M W 、S W 、T 、C 、
L W 、A C 、A I W 、*V D 、 *L D 、*A C 、常数
接通,则定时器位保持接通。 l 要使 T O F 定时器开始定时断开延时时间间隔,使能输入必须进行接通-断开转换。 l
如果 T O F 定时器在 S C R 区域中,并且 S C R 区域处于未激活状态,则当前值设置为0,定时器位断开且当前值不递增。
定时器工作规律如下表所示: 表3. 定时器操作和P L C 上电循环 接通延时定时器指令举例如下图所示:
图1.接通延时定时器指令程序举例 其中:
l
定时器T 37时基为100m s ,预置值设定为10,实际延时时间为100m s ×10=1s 。
类型
当前值 >= 预设值 使能输入 I N 的状态 上电循环/首次扫
描
T O N
定时器位接通
当前值继续定时到
32,767 O N : 当前值 = 定时值
O F F : 定时器位断开,当前值 = 0 定时器位 = O F F 当前值 = 0 T O N R
定时器位接通
当前值继续定时到 32,767 O N : 当前值 = 定时值
O F F : 定时器位和当前值保持最后状态和
值
定时器位 = O F F
当前值可以保持
T O F
定时器位断开
当前值 = 预设值,停止定时
O N : 定时器位接通,当前值 = 0 O F F : 在接通-断开转换之后,定时器开始定时
定时器位 = O F F 当前值 = 0
图2.时序图
其中:
l I N为“1”状态时,定时器开始运行
l延时到达预置值,T37置位
l I N输入端为“0”状态时,定时器复位
l如无复位,当前值继续增至最大值
定时器在子程序中的表现
在条件调用子程序的主程序中,当停止子程序调用时,如果定时器已经激活正在计时,停止调用这个子程序会造成定时器的失控。不管此时定时器前面的激活条件如何变化,定时器(1m s、10m s时基的)会一直走到最大值,定时器输出也会在达到设定值时接通;(100m s时基的定时器会在上述情况下停止计时,但在逻辑上处于失控状态)。
如果用 S M0.0调用子程序;或者在控制逻辑的时序上做到能够保证定时功能完整执行,定时器会正常运行。使用条件调用含有定时器的子程序时,一定要注意时序逻辑,以免造成程序运行错误。
常见问题
编了一个利用定时器的程序,在编译时已经通过,为何下载到C P U中时提示出错?
这种情况往往是调用的定时器号与定时器类型不配合造成的。参见上面的表格,如T7只能用作T O N R,而不能用于T O N或T O F。
移位指令
S7-200S M A R T移位指令分为左、右移位、循环左、右移位及寄存器移位指令三大类。前两类移位指令按移位数据的长度又分字节型、字型、双字型3种。
下图所示为移位指令梯形图:
图1.移位指令:
如下为一个移位和循环移位实例:
图2.移位和循环移位程序图
其中:
l I4.0上升沿触发
l F O R_W为字循环右移
l S H L_W为字左移
其移位和循环移位的过程可由下图进一步说明:
图3.移位和循环移位过程说明图
F o r N e x t循环
程序循环结构用于描述一段程序的重复循环执行。由 F O R和N E X T指令构成程序的循环体。F O R指令标记循环
的开始,N E X T指令为循环体的结束指令。
图4.F o r N e x t循环
其中:
l I N I T,F I N A L分别定义起始值和结束值。
l使能输入E N有效,循环体开始执行,执行到N E X T指令时返回,每执行一次循环体,当前值计数器I N D X 增1,达到终止值F I N A L时,循环结束。
l使能输入无效时,循环体程序不执行。每次使能输入有效,指令自动将各参数复位。
注意:使用 F O R和 N E X T指令可在重复执行分配计数的循环中执行程序段。每条 F O R指令需要一条
N E X T指令。
F o r N e x t编程实例
图5.F o r N e x t循环循环程序图
使用状态表监控程序的运行如下图所示
图6.状态监视图
如上表所示,V W100值为4,I N D E X大于终止值,循环终止。