常数值可以是字节、字或双字,CPU以二进制方式存储常数,常数也可以用十进制、十六进制ASCII码或浮点数形式来表示。
B#16#、W#16#、DW#16#分别用来表示十六进制字节、字和双字常数。2#用来表示二进制常数,例如2#11011010。
L#为32位双整数常数,例如L#+5。P#为地址指针常数,例如P#M2.0是M2.0的地址。
S5T#是16位S5时间常数,格式为S5T#aD_bH_cM_dS_eMS。其中a、b、c、d、e分别是日、小时、分、秒和毫秒的数值。输入时可以省掉下划线,例如S5T#4S30MS=4s30ms,S5T#2H15M30S=2小时15分30秒。S5时间常数的取值范围为S5T#0H_0M_0S_0MS~S5T#2H_46M_30S_0MS,时间增量为l0ms。2.复合数据类型
通过组合基本数据类型和复合数据类型可以生成下面的数据类型。
·数组(ARRAY)将一组同一类型的数据组合在一起,形成一个单元。
·结构(STRUCT)将一组不同类型的数据组合在一起,形成一个单元。
·字符串(STRING)是较多有254个字符(CHAR)的一维数组。
·日期和时间(DATE_ANl_TIME)用于存储年、月、日、时、分、秒、毫秒和星期,占用8个字节,用BCD格式保存。星期天的代码为1,星期一~星期六的代码为2~7。
例如DT#2004-07-15-12:30:15.200为2004年7月15日12时30分15.2秒。
·用户定义的数据类型UDT(User-defined Data Types):由用户将基本数据类型和复合数据类型组合在一起,形成的新的数据类型。可以在数据块DB和变量声明表中定义复合数据类型。
3.参数类型
参数类型是为在逻辑块之间传递参数的形参(Formal Parameter)定义的数据类型。
参数类型是为在逻辑块之间传递参数的形参(Formal Parameter)定义的数据类型。
·TIMER(定时器)和COUNTER(计数器):*执行逻辑块时要使用的定时器和计数器,对应的实参(Actual Parameter,实际参数)应为定时器或计数器的编号,例如T3、C21等。
·BLOCK(块):*一个块用作输入和输出,参数声明决定了使用的块的类型,例如FB、FC、DB等。块参数类型的实参应为同类型的块的**地址编号(如FB2)或符号名(如“Motor”)。
·POINTER(指针):指针指向一个变量的地址,即用地址作为实参,例如P#M50.0是指向M50.0的双字地址指针。
·ANY:用于实参的数据类型未知或实参可以使用任意数据类型的情况,占用10B。
6.2.3 存储区类型
1.装载存储器
装载存储器可能是RAM和FEPROM,用于保存不包含符号地址和注释1.装载存储器
装载存储器可能是RAM和FEPROM,用于保存不包含符号地址和注释的用户程序和系统数据(组态、连接和模块参数等)。有的CPU有集成的装载存储器,有的可以用微存储卡(MMC)扩展,CPU 3lxC的用户程序只能装入插入式的MMC。
断电时数据保存在MMC存储器中,因此数据块的内容基本上被*保留。
下载程序时,用户程序(逻辑块和数据块)被下载到CPU的装载存储器,CPU把可执行部分复制到工作存储器,符号表和注释保存在编程设备中。
2.工作存储器
它是集成的高速存取的RAM存储器,用于存储CPU运行时的用户程序和数据,例如组织块、功能块、功能和数据块。为了保证程序执行的快速性和不过多地占用工作存储器,只有与程序执行有关的块被装入工作存储器。
STL程序中的数据块可以被标识为“与执行无关”(UNLINKED),它们只是存储在装载存储器中。有必要时可以用SFC 20“BLKMOV”将它们复制到工作存储器。复位CPU的存储器时,RAM中的程序被清除,FEPROM中的程序不会被清除。
的用户3.系统存储器
系统存储器是CPU为用户程序提供的存储器组件,划分为若干个地址区域。使用指令可以在相应的地址区内对数据直接进行寻址。系统存储器为不能扩展的RAM,用于存放用户程序的操作数据,例如过程映像输入、过程映像输出、位存储器、定时器和计数器、块堆栈(B堆栈)、中断堆栈(I堆栈)和诊断缓冲区等。
系统存储器还提供临时存储器(局域数据堆栈,即L堆栈),用来调用存储程序块时的临时数据。访问局域数据比访问数据块中的数据更快。用户生成块时,可以声明临时变量(TEMP),它们只在执行该块时有效,执行完后就被覆盖了。
4.外设I/O存储区
通过外设I/O存储区(PI和PQ),用户可以不经过过程映像输入和过程映像输出,直接访问输入模块和输出模块。不能以位为单位访问外设I/O存储区,只能以字节、字和双字为单位访问。
6.2.4 系统存储器
S7 CPU的系统存储区域分为表6-1中列出的地址区域。在程序中可以根据相应的地址直接读取数据。
1.过程映像输入/输出表
在扫描循环开始时,CPU读取数字量输入模块的输入信号的状态,并将它们存入过程映像输入(Process Image Input,PII)表中。
用户程序访问PLC的输入(I)和输出(Q)地址区时,不是去读写数字信号模块中的信号状态,而是访问CPU中的过程映像区。在扫描循环中,用户程序计算输出值,并将它们存入过程映像输出(Process Image Output,PIO)表。在循环扫描开始时将过程映像输出表的内容写入数字量输出模块。
I和Q均可以按位、字节、字和双字来存取,例如I0.0、IB0、IW0和ID0(见表6-1)。
与直接访问I/O模块相比,访问过程映像表可以保证在整个程序周期内,过程映像的状态始终一致。即使在程序执行过程中接在输入模块的外部信号状态发生了变化,过程映像表中的信号状态仍然保持不变,直到下一个循环被刷新。由于过程映像保存在CPU的系统存储器中,访问速度比直接访问信号模块快得多。
输入过程映像在用户程序中的标识符为I,是PLC接收外部输入的数字量信号的窗口。输入端可以外接常开触点或常闭触点,也可以接多个触点组成的串并联电路。PLC将外部电路的通/断状态读入并存储在输入过程映像中,外部输入电路接通时,对应的输入过程映像为ON(1状态);反之为OFF(0状态)。在梯形图中,可以多次使用I的常开触点和常闭触点。
输出过程映像在用户程序中的标识符为Q,在循环周期开始时,CPU将输出过程映像的数据传送给输出模块,再由后者驱动外部负载。如果梯形图中Q0.0的线圈“通电”,继电器输出模块中对应的硬件继电器的常开触点闭合,使接在Q0.0对应的输出端子的外部负载工作。输出模块中的每一个硬件继电器仅有一对常开触点,但是在梯形图中,可以多次使用输出位的常开触点和常闭触点。
除了操作系统对过程映像的自动刷新外,S7-400 CPU可以将过程映像划分为较多15个区段,这意味着如果需要,可以独立循环,刷新过程映像表的某些区段,用STEP 7*的过程映像区段中的每一个I/O地址不再属于OBl过程映像输入/输出表。需要定义哪些I/O模块地址属于哪些过程映像区段。
西门子CPU模块详细信息与参数及规格
某些CPU也可以调用OB(组织块)由系统自动地对*的过程映像分区刷新。
2.内部存储器标志位存储器区
内部存储器标志位(M)用来保存控制逻辑的中间操作状态或其他控制信息。虽然名为“位存储器区”,表示按位存取,但是也可以按字节、字或双字来存取。
3.定时器存储器区
定时器(T)相当于继电器系统中的时间继电器。给定时器分配的字用于存储时间基值和时间值(0~999)。时间值可以用二进制或BCD码方式读取。
4.计数器存储器区
计数器(C)用来累计其计数脉冲上升沿的次数,有加计数器、减计数器和加减计数器。给计数器分配的字用于存储计数当前值(0~999)。计数值可以用二进制或BCD码方式读取。
5.共享数据块与背景数据块
DB为共享数据块,DBX是数据块中的数据位,DBB、DBW和DBD分别是数据块中的数据字节、数据字和数据双字。
I为背景数据块,DIX是背景数据块中的数据位,DIB、DIW和DID分别是背景数据块中的数据字节、数据字和数据双字。
6.外设I/O区
外设输入(PI)和外设输出(PQ)区允许直接访问本地的和分布式的输入模块及输出模块。可以按字节(PIB或PQB)、字(PIW或PQW)或双字(PID或PQD)存取,不能以位为单位存取PI和PO。
6.3 S7-300/400的指令系统
与其他控制器一样,西门子S7-300/400系列PLC有着丰富的指令,其功能兼顾的控制及运算,可满足绝大多数基本控制需求。
6.3.1 位逻辑指令
位逻辑指令用于二进制数的逻辑运算,二进制数只有0和1这两个数,位逻辑指令只使用1和0两个数字。在触点和线圈领域中,1表示激活或激励状态,0表示未激活或未激励状态。位逻辑指令对1和0信号状态加以解释,并按照布尔逻辑组合它们。这些组合产生由1或0组成的结果,位逻辑指令如表6-2所示。
公司始终本着"顾客至上"的经营理念,在为客户提供尖端技术的同时,我们同样非常注重售后服务。西门子上海庆惜自动化设备有限公司拥有多名技术人员,他们经过专业培训和长期实践,积累了丰富的现场经验,能做到24小时响应,处理各种故障和紧急情况, 使用户没有后顾之忧。 一直以来,其工作得到了用户的一致**。
NEG是单个地址位提供的信号的下降沿检测指令,比较<address1>的信号状态与**次扫描的信号状态(存储在<address2>中)。如果当前RLO状态为1且其**状态为0(检测到下降沿),执行此指令后RLO位将是1。相应的输出线圈“通电”一个扫描周期。
【例6-13】地址下降沿检测指令实例
地址下降沿检测指令实例如图6-13所示。
POS是单个地址位提供的信号的上升沿检测指令,比较<address1>的信号状态与**次扫描的信号状态(存储在<address2>中)。如果当前RLO状态为1且其**状态为0(检测到上升沿),执行此指令后RLO位将是1。相应的输出线圈“通电”一个扫描周期。
1.定时器的种类
定时器相当于继电器电路中的时间继电器,S7 300/400的定时器分为脉冲定时器(SP)、扩展脉冲定时器(SE)、接通延时定时器(SD)、保持型接通延时定时器(SS)和断开延时定时器(SF)。
脉冲定时器在输入信号的上升沿开始定时,输出为1,当定时时间到或输入信号变为0或者复位输入信号为1时,则输出为0。
扩展脉冲定时器在输入信号的上升沿开始定时,输出为1,当定时时间到或复位输入信号为1,则输出为0,脉冲定时器和扩展脉冲定时器的主要区别在于开始定时后,在定时时间未到时是否受到输入信号的影响。
接通延时定时器是使用较多的定时器,在输入信号的上升沿开始定时,当输入信号为1且定时时间到时输出才为1,否则输出为0。
保持型接通延时定时器在输入信号的上升沿开始定时,定时时间到时输出为1,当复位输入信号为1时,输出为0,与接通延时定时器的主要区别在于开始定时后是否受到输入信号的影响。
断开延时定时器在输入信号的上升沿输出为1,在输入信号的下降沿才开始定时,时间到时或复位输入信号为1时,输出为0。
2.定时器的存储区
S5是西门子PLC老产品的系列号,S5定时器是S5系列PLC的定时器,在梯形图中用指令框(Box)的形式表示。此外每一个S5定时器都有功能相同的用线圈形式表示的定时器。
S7 CPU为定时器保留了一片存储区域。每个定时器有一个16位的字和一个二进制位,定时器的字用来存放当前的定时时间值,定时器触点的状态由位的状态来决定。用定时器地址(T和定时器号,如T6)来存取时间值和定时器位,带位操作数的指令存取定时器位,带字操作数的指令存取定时器的时间值。不同的CPU支持32~512个定时器。梯形图逻辑指令集支持256个定时器。
下列功能可访问定时器存储区。
1)定时器指令。
2)通过定时时钟更新定时器字。当CPU处于RUN模式时,此功能按以时间基准*的时间间隔,将给定的时间值递减一个单位,直至时间值等于零。3.定时器字的表示方法
用户使用的定时器由3位BCD码时间值(0~999)和时基组成,时基是时间基准的简称,时间值以*的时基为单位。在CPU内部,时间值以二进制格式存放,占定时器字的0~9位。时间值*单位数。时间更新操作按以时间基准*的时间间隔,将时间值递减一个单位,递减至时间值等于零。可以用二进制、十六进制或以二进制编码的十进制(BCD)格式,将时间值装载到累加器1的低位字中。
可以使用以下任意一种格式预先装载时间值。
1)十六进制数W#16#wxyz,其中,w=时间基准(即时间间隔或分辨率);xyz=以二进制编码的十进制格式表示的时间值。
2)S5T#aH_bM_cS_dMS,其中,H=小时,M=分钟,S=秒,MS=毫秒;a、b、c、d为用户设置的值。
时基是CPU自动选择的,选择的原则是在满足定时范围要求的条件下选择较小的时基。可以输入的较大时间值是9990秒或2小时46分钟30秒。下面举例说明。
定时器字的*12位和*13位用于时基(时间基准),时间基准定义为将时间值递减一个单位所用的时间间隔。较小的时间基准是10毫秒;较大的时间基准是10秒。时基代码为二进制数00、01、10和11时,对应的时基分别为10ms、100ms、1S和10s。实际的定时时间等于时间值乘以时基值。例如,定时器字为W#16#3999时,时基为l0s,定时时间为9990s。时基反映了定时器的分辨率,时基越小分辨率越高,定时的时间越短;时基越大分辨率越低,定时的时间越长。
不接受**过2小时46分30秒的数值,其分辨率**出范围限制的值(如2小时10毫秒)将舍入到有效的分辨率。用于S5TIME的通用格式对范围和分辨率的限制如表6-26所示。
[图片]
(2)时间单元中的位组态
定时器启动时,定时器单元的内容用作时间值。定时器单元的0~11位容纳二进制编码的十进制时间值(BCD格式:四位一组,包含一个用二进制编码的十进制值)。12位和13位存储二进制编码的时间基准。
(3)读取时间和时间基准
每个定时器逻辑框提供两种输出:BI和BCD,从中可指示一个字位置。BI输出提供二进制格式的时间值。BCD输出提供二进制编码的十进制(BCD)格式的时间基准和时间值。
如果在启动(S)输入端有一个上升沿,S_PULSE(脉冲S5定时器)将启动*的定时器。信号变化始终是启用定时器的必要条件。定时器在输入端S的信号状态为1时运行,但较长周期是由输入端TV*的时间值。只要定时器运行,输出端Q的信号状态就为1。如果在时间间隔结束前,S输入端从1变为0,则定时器将停止。这种情况下,输出端Q的信号状态为0。
如果在定时器运行期间定时器复位(R)输入从0变为1时,则定时器将被复位。当前时间和时间基准也被设置为零。如果定时器不是正在运行,则定时器R输入端的逻辑1没有任何作用。
可在输出端BI和BCD上扫描当前时间值。时间值在BI端是二进制编码,在BCD端是BCD编码。当前时间值为初始TV值减去定时器启动后经过的时间。例6-16】S_PULSE脉冲S5定时器指令实例
S_PULSE脉冲S5定时器指令实例如图6-17所示。
如果输入端I0.0的信号状态从0变为1(RLO中的上升沿),则定时器T5将启动。只要I0.0为1,定时器就将继续运行*的两秒(2s)时间。如果定时器达到预定时间前,I0.0的信号状态从1变为0,则定时器将停止。如果输入端I0.1的信号状态从0变为1,而定时器仍在运行,则时间复位。
[图片]图 6-17 S_PULSE脉冲S5定时器指令实例图
只要定时器运行,输出端Q4.0就是逻辑1,如果定时器预设时间结束或复位,则输出端Q4.0变为0。如果在启动(S)输入端有一个上升沿,S_PEXT(扩展脉冲S5定时器)将启动*的定时器。信号变化始终是启用定时器的必要条件。定时器以在输入端TV*的预设时间间隔运行,在时间间隔结束前,S输入端的信号状态变为0,只要定时器运行,输出端Q的信号状态就为1。如果在定时器运行期间输入端S的信号状态从0变为1,则将使预设的时间值重新启动(“重新触发”)定时器。
如果在定时器运行期间复位(R)输入从0变为1,则定时器复位。当前时间和时间基准被设置为0。
可在输出端BI和BCD上扫描当前时间值。时间值在BI端为二进制编码,在BCD端为BCD编码。当前时间值为初始TV值减去定时器启动后经过的时间。
例6-17】S_PEXT扩展脉冲S5定时器指令实例
S_PEXT扩展脉冲S5定时器指令实例如图6-19所示。
如果输入端I0.0的信号状态从0变为1(RLO中的上升沿),则定时器T5将启动。定时器将继续运行*的两秒(2秒)时间,不会受到输入端S处下降沿的影响。
如果在定时器达到预定时间前I0.0的信号状态从0变为1,则定时器将被重新触发。只要定时器运行,输出端Q4.0就为逻辑1。