STEP7编址详解
PLC STEP-7编程技术
例3 设计一个3个按钮控制一个灯的电路,要求3个按钮位于不同位 置。按任意一个按钮灯亮,再按任意一个按钮灯灭。
图 例4多台电机顺序起动顺序停止PLC控制梯形图程序 图 例5多台电机顺序起动顺序停止PLC控制梯形图程序
3.7STEP7指令系统(二) 指令系统( 指令系统
定时器指令 1.脉冲定时器:--(SP) 2.扩展脉冲定时器--(SE) 3.开通延时定时器--(SD) 4.保持型开通延时定时器--(SS) 5.关断延时定时器--(SF) 数据装载和传送指令(MOVE)
注意:时间基准反映了定时器的分辨率,时间基准越小,分
辨率越高,可定时的时间越短;时间基准越大,分辨率越 低,可定时的时间越长。
1、脉冲定时器 --(SP)
--(SP)指令是产生指定时间宽度脉冲的 定时器。
LAD 参数 <地址> 数据类型 TIMER 存储区 T 说明 地址表示要 起动的计时 器号
时间值
正跳变
<地址>
BOOL
Q、M、D
例4 多台电动机的PLC控制,要求:有5台电动机M1~M5,每台 电机都有自己的起停按钮,起动时必须按照顺序才能起动,即 当电动机M1起动运行以后,电动机M2才能起动,依次类推。 停止时也必须M1停止以后,M2才能停止,依次类推。 例5 多台电动机的PLC控制,要求:有5台电动机M1~M5,每台 电机都有自己的起停按钮,起动时必须按照顺序才能起动,即 当电动机M1起动运行以后,电动机M2才能起动,依次类推, 直到M5起动。停止时顺序相反,即必须M5停止以后,M4才 能停止,依次类推,直到M1停止。
0 1
1
1
1
1
1
0
位逻辑指令 正跳沿(上升沿)检测指令
必威自动化Profibus网关配置相关模块到STEP 7_详细地址分配
1. AS-I与各PLC连接实例1 必威自动化Profibus网关和西门子S7-300可编程控制器连接1.1选用的模块1.1.2 使用的软件(1)完成网关,电源,以及模块之间的接线(2)用手持式编址器给每个模块编址(3)给ASI网络上电(4)在网关面板上,按住“Mode”键5秒钟(进入组态模式),每个被检测到的从站都会被循环显示,如果有重复地址,丢失从站,未知从站等错误,会在网关LCD屏幕上显示相关从站地址和相关错误信息。
(5)再按住“Mode”键5秒钟(进入保护模式),如果所有的组态都正确,网关LCD会显示Config. ok。
1.1.3 西门子可编程控制器连接步骤(1)完成Profibus-DP主站(西门子PLC主站)和从站(倍加福ASI网关)的接线(2)用一个转接器连接西门子PLC CPU的MPI接口和PC机的RS232接口(3)将CPU置于“stop”状态,并给PLC通电。
1.1.4 系统软件的连接和组态过程通过SIMATIC Step 7软件即可建立Profibus 主站和从站之间的连接。
可按照如下步骤建立起连接。
1.4.1 新建项目从主菜单中选择文件菜单,再选择新建。
写入你想要创建项目的名字,并选择存储位置。
1.4在项目中组态站点从主菜单中选择插入菜单,然后选择300站点。
左键点击SIMATIC 300(1) 再双击Hardware 图标。
先为PLC添加导轨,再按照前面列出的硬件型号,从硬件列表中选择所使用的西门子产品,依次添加PLC的电源和CPU。
Profibus 网络组态添加PLC的CPU之后,会弹出一个属性窗口,设置DP口的参数建立新的网络并选择1.5Mbps 速率,这个波特率对于CPU运行来说完全足够用。
安装网关的电子数据库(GSD)文件并刷新列表。
将列表中所使用的网关拖入DP主站的黑线上,这时的ASI网关就成为Profibus总线上的DP从站。
注意选择DP网络上的ASI网关地址,需要与ASI网关自身设置的地址保持一致性。
西门子STEP7通讯编程常用命令解释及说明
一、词汇Actual Parameter(实际参数)在用户程序调用一个功能块(FB)或功能(FC)时,实际参数代替形式参数。
例如,形式参数“REQ”被实际参数“I3.6”代替。
Address(地址)地址是一个操作对象或操作区域的标识符。
例如,输入I12.1;存贮字MW25;数据块DB3等等。
Addressing(编址)在用户程序中分配一个地址。
此地址被分配给一个操作对象或操作区域(例如,输入I12.1;存贮字MW25),它准确地指向它们的存贮位置。
Baud rate(波特率)数据传输速度。
波特率是1秒种内传输的位(bit)数(波特率=位(bit)速率)。
PROFIBUS-DP允许的波特率范围:9.6k bit/s~12 M bit/s。
BUS(总线)公共传输路经(传输介质),它把节点或站连接成网络。
在PROFIBUS网络中,总线是双绞线或光纤电缆。
Bus Plug Connector(总线插头连接器)站(也称“节点”)与总线导线的物理连接元件。
在PROFIBUS网络中,总线插头连接器可能是带或不带与PG编程装置的连接,可以用于防护等级IP20和IP65。
Bus Segment(总线段)由于网络的物理性质,PROFIBUS网络只能构造到它的最大长度和最大的连接站数,如果把它分成若干个总线段,则总线段之间必须通过中继器彼此连接。
Bus System(总线系统)通过总线电缆相互物理连接的所有站形成一个总线系统。
Chassis ground(机壳接地)电子装备部件的所有固定部分全体,即使在故障事件的情况下,它不导传有害的波动电压。
Cless 1 Master(1类主站)Cless 2 Master(2类主站)它是处理网络控制、调试投运和组态功能的DP主站设备。
CLEAR(清除)DP主站的运行模式。
在此模式下,DP主站循环地读输入数据,而输出仍然设置在“0”状态。
Clear/Reset(清除/复位)清除或复位SIMATIC S7可编程控制器的CPU,该命令使CPU主存储器、装载存储器的读/写区域和系统存储器复位。
西门子STEP7图解编程、调试步骤
1.打开SIMATIC STEP7。
2.新建一个工程项目3.项目定义名字后,点击OK4.硬件配置,(以CPU为S7-400为例)5.打开硬件组态6.根据实际基架型号选择基架,并双击7.选择电源:8.选择CPU9.选择数字量输入模板:10.选择数字量输出模板11.选择模拟量输入模板12.选择模拟量输出模板13.硬件配置保存并编译这样就完成了硬件配置。
配置完成后回到主界面,就可以在CPU中的BLOCK进行软件编程了。
14.根据需要插入中断组织块:在属性窗口中可以定义OB的绝对地址以及符号地址,还可以对组织块的功能加以简单注释等。
也可以在此处选择该OB所用编程语言的种类。
15.新建数据块:16.打开DB,定义该数据块的地址结构:在数据块中可以定义数据的符号名,定义数据类型,定义数据注释。
17.建立符号表18.新建功能:在下面的FC属性窗口中可以定义FC的绝对地址以及符号地址,还可以对功能块的功能加以简单注释等。
也可以在此处选择该功能所用编程语言的种类。
19在FC中进行软件编程:根据功能需要插入常开常闭触点,整/实型运算函数,延时器等。
新建NETWORK:20.保存FC100并在OB1中调用。
21.启动S7-PLCSIM进行仿真测试:22.将所有程序块下载到仿真器中:23.将仿真器CPU从STOP位置变换到RUN-P位置:24.打开OB1 进行监视。
25.打开FC100 进行监视。
26.强制信号:27.另外还可以通过变量表监视系统数据:输入要监视变量的绝对地址:。
最新STEP-7软件编程课件解析教学讲义ppt课件
中矿传动与自动化有限公司
ASCS直流提升机电控系统认证工程师
中矿传动与自动化有限公司
ASCS直流提升机电控系统认证工程师
中矿传动与自动化有限公司
ASCS直流提升机电控系统认证工程师
中矿传动与自动化有限公司
ASCS直流提升机电控系统认证工程师
S7-300/400 CPU的存储区
系统存储器
1.过程映像输入/输出(I/Q)
ASCS直流提升机电控系统认证工程师
PLC柜结构及性能
PLC柜主要由2台PLC组成,一般都采用SIEMENS S7-300或400系列PLC,此两台PLC 置于柜体前侧上部,一般采用上下排列,其中上面一组PLC为操作PLC,其下为行程PLC ;柜体顶部为一排低压配电开关,负责柜内各部分的供电,在PLC下部为一屏蔽机笼,其 中放置了电源板、安全回路板、模拟量处理板、可调闸板等功能模块。机笼下面是中间继 电器部分,集合了输入和输出等各功能的继电器,其中JD*为输入隔离继电器、KD*为操 作PLC输出继电器、XD*为行程PLC输出继电器。柜体最下部为变压器和UPS电源。
中矿传动与自动化有限公司
ASCS直流提升机电控系统认证工程师
安全回路
重事故信号 各 种 保 护 信 号
轻事故信号
继电器安全回路
立即施闸类故障
P
L
电气制动施闸类故障
C
操
速度1M/ S时
作
保
提升终了施闸类故障
护
系
抱闸信号
统
报警类故障
液 压 制 动 系 统
警笛
中矿传动与自动化有限公司
ASCS直流提升机电控系统认证工程师
存在,则CPU 停机。 除了监视最长循环时间,还可以保证最短循环时间。操作系统将延长下一个新循环(
STEP7编址详解
完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如NOT等)。
其中的操作数是指令要执行的目标,也就是指令要进行操作的地址。
我们知道,在PLC中划有各种用途的存储区,比如物理输入输出区P、映像输入区I、映像输出区Q、位存储区M、定时器T、计数器C、数据区DB和L等,同时我们还知道,每个区域可以用位(BIT)、字节(BYTE)、字(WORD)、双字(DWORD)来衡量,或者说来指定确切的大小。
当然定时器T、计数器C不存在这种衡量体制,它们仅用位来衡量。
由此我们可以得到,要描述一个地址,至少应该包含两个要素:1、存储的区域2、这个区域中具体的位置比如:A Q2.0其中的A是指令符,Q2.0是A的操作数,也就是地址。
这个地址由两部分组成:Q:指的是映像输出区2.0:就是这个映像输出区第二个字节的第0位。
由此,我们得出,一个确切的地址组成应该是:〖存储区符〗〖存储区尺寸符〗〖尺寸数值〗.〖位数值〗地址标识符例如:DBX200.0。
其中,我们又把〖存储区符〗〖存储区尺寸符〗这两个部分合称为:地址标识符。
这样,一个确切的地址组成,又可以写成:地址标识符+ 确切的数值单元【间接寻址的概念】寻址,就是指定指令要进行操作的地址。
给定指令操作的地址方法,就是寻址方法。
在谈间接寻址之前,我们简单的了解一下直接寻址。
所谓直接寻址,简单的说,就是直接给出指令的确切操作数,像上面所说的,A Q2.0,就是直接寻址,对于A这个指令来说,Q2.0就是它要进行操作的地址。
这样看来,间接寻址就是间接的给出指令的确切操作数。
对,就是这个概念。
比如:A Q[MD100] ,A T[DBW100]。
程序语句中用方括号[ ] 标明的内容,间接的指明了指令要进行的地址,这两个语句中的MD100和DBW100称为指针Pointer,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。
间接由此得名。
西门子的间接寻址方式有两大类型:存储器间接寻址和寄存器间接寻址。
STEP 7 编程方法
(接受)
96.0 to 99.7
100.0 to 103.7
104.0 to 107.7
108.0 to 111.7
112.0 to 115.7
116.0 to 119.7
120.0 to 123.7
124.0 to 127.7
PS 机架 2
IM
(接受)
64.0 to 67.7
68.0 to 70.7
模块化编程
OB 1 FC 1 电机控制 电机控制 FC 2 信息 信息
FC 3 取得操作小时数 取得操作小时数
SIMATIC S7
Siemens AG 2000. All rights reserved.
Date: 2009-03-28 File No.: SSP1_03C.5
Information and Training Center Knowledge for Automation
2
3
SIMATIC S7
Siemens AG 2000. All rights reserved.
Date: 2009-03-28 File No.: SSP1_03C.18
Information and Training Center Knowledge for Automation
S7-300模拟量模块的寻址
Information and Training Center Knowledge for Automation
循环程序执行
启动块 (OB 100) 上电后执行一次 输入 模块
循环监视时间的开始
从模块读信号状态,并保存到过程映象区 (PII)
CPU 循环
执行OB1中的程序 (循环执行) 事件 (日期时间中断、硬件中断等) 调用其他 OB,FB,FC
step7地址详解
西门子的间接寻址方式计有两大类型:存储器间接寻址和寄存器间接寻址。
【存储器间接寻址】
存储器间接寻址的地址给定格式是:地址标识符+指针。指针所指示存储单元中所包含的数值,就是地址的确切数值单元。
存储器间接寻址具有两个指针格式:单字和双字。
这样看来,间接寻址就是间接的给出指令的确切操作数。对,就是这个概念。
比如:A Q[MD100] ,A T[DBW100]。程序语句中用方刮号 [ ] 标明的内容,间接的指明了指令要进行的地址,这两个语句中的MD100和DBW100称为指针Pointer,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。间接由此得名。
完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如NOT等)。其中的操作数是指令要执行的目标,也就是指令要进行操作的地址。
我们知道,在PLC中划有各种用途的存储区,比如物理输入输出区P、映像输入区I、映像输出区Q、位存储区M、定时器T、计数器C、数据区DB和L等,同时我们还知道,每个区域可以用位(BIT)、字节(BYTE)、字(WORD)、双字(DWORD)来衡量,或者说来指定确切的大小。当然定时器T、计数器C不存在这种衡量体制,它们仅用位来衡量。由此我们可以得到,要描述一个地址,至少应该包含两个要素:
现在,我们来分析一下上述例子中的A I[MD104] 为什么最后是对I1.2进行与逻辑操作。
通过L L#+10 ,我们知道存放在MD104中的值应该是:
MD104:0000 0000 0000 0000 0000 0000 0000 1010
当是对P区域寻址时,AR=800xxxxx
当是对I区域寻址时,AR=810xxxxx
STEP7程序执行原理和编程方法S7系列学习3
STEP7程序执行原理和编程方法 S7系列学习3 STEP7程序执行原理和编程方法 S7系列学习3今天我们来讲讲STEP7的编程方法,要讲编程方法,那么我们就要先来看看PLC的循环程序是如何执行的。
(这一点非常重要)1.循环程序如何执行西门子PLC程序执行图(建议保存)1.1在CPU上电之后,启动块OB100/101/102先启动一次。
(调用哪一个OB块由系统的启动模式配置决定)1.2启动块执行完毕后,系统的循环监视时间就被激活了(这个时间可以在STEP7的硬件配置中设置,如果循环时间超出则PLC停机)1.3之后,CPU会从输入模块及其它过程映象设备读取所有的输入状态1.4接着下来便到了主循环程序的执行1.4.1主循环执行也是按照语句顺序执行,如图所示,当OB1执行第一个语句CallFB,则此时程序进入所调用FB块顺序执行FB块的语句1.4.2若在所调用的FB块,在某一语句中执行了CallFB/FC,则程序又进入下一级的FC中依次执行块中语句,依此类推1.4.3当调用的下一级FC所有语句执行完成后,程序回到CallFC的这一语句,继续执行后面的语句1.4.4当所Call的FB也执行完成后,程序回到OB1的CallFB处,继续执行后面的语句。
1.4.5直至最后,完成OB1的所有程序,则主循环结束。
1.4.6在OB1执行的过程中,循环中断(如OB35)、故障中断(如OB86)等可以插入执行,执行完成后会回到中断的地方继续主循环的执行。
1.5主循环执行完成后,PLC将过程映象的输出写到输出模块1.6完成1.5的步骤之后一个完整的循环就结束了,此时跳至1.2步骤,重新开始新一循环的监视时间,如此周而复始。
2.程序块类型知道了PLC循环程序如何执行后,我们再来看一看STEP7的程序块有哪些类型2.1用户块用户块包括程序代码和用户数据。
在结构化程序中,一些块循环调用处理,一些块需要时才调用。
2.1.1组织块OB块构成了S7CPU和用户程序的接口。
必威自动化Profibus网关配置相关模块到STEP 7_详细地址分配
1. AS-I与各PLC连接实例1 必威自动化Profibus网关和西门子S7-300可编程控制器连接1.1选用的模块1.1.2 使用的软件1.1.3系统硬件连接1.1.3.1ASI总线的连接和步骤(1)完成网关,电源,以及模块之间的接线(2)用手持式编址器给每个模块编址(3)给ASI网络上电(4)在网关面板上,按住“Mode”键5秒钟(进入组态模式),每个被检测到的从站都会被循环显示,如果有重复地址,丢失从站,未知从站等错误,会在网关LCD屏幕上显示相关从站地址和相关错误信息。
(5)再按住“Mode”键5秒钟(进入保护模式),如果所有的组态都正确,网关LCD会显示Config. ok。
1.1.3 西门子可编程控制器连接步骤(1)完成Profibus-DP主站(西门子PLC主站)和从站(倍加福ASI网关)的接线(2)用一个转接器连接西门子PLC CPU的MPI接口和PC机的RS232接口(3)将CPU置于“stop”状态,并给PLC通电。
1.1.4 系统软件的连接和组态过程通过SIMATIC Step 7软件即可建立Profibus 主站和从站之间的连接。
可按照如下步骤建立起连接。
1.4.1 新建项目从主菜单中选择文件菜单,再选择新建。
写入你想要创建项目的名字,并选择存储位置。
1.4在项目中组态站点从主菜单中选择插入菜单,然后选择300站点。
左键点击SIMATIC 300(1) 再双击Hardware 图标。
先为PLC添加导轨,再按照前面列出的硬件型号,从硬件列表中选择所使用的西门子产品,依次添加PLC的电源和CPU。
1.1.4.3 Profibus 网络组态添加PLC的CPU之后,会弹出一个属性窗口,设置DP口的参数建立新的网络并选择1.5Mbps 速率,这个波特率对于CPU运行来说完全足够用。
安装网关的电子数据库(GSD)文件并刷新列表。
将列表中所使用的网关拖入DP主站的黑线上,这时的ASI网关就成为Profibus总线上的DP从站。
STEP7基础编程介绍
硬件中断组织块
OB40~OB47:硬件中断。一旦硬件中断事 件发生,硬件中断组织块OB40~OB47将被 调用。硬件中断可以由不同的模块触发, 对于可分配参数的信号模块DI、DO、AI、 AO等,可使用硬件组态工具来定义触发硬 件中断的信号;对于CP模块和FM模块,利 用相应的组态软件可以定义中断的特性。
3.1.4背景数据块和共享数据块
背景DB是和某个FB或SFB相关联,其内部 数据的结构与其对应的FB或SFB的变量声明 表一致。
共享DB的主要目的是为用户程序提供一个 可保存的数据区,它的数据结构和大小并 不依赖于特定的程序块,而是用户自己定 义。需要说明的是,背景DB和共享DB没有 本质的区别,它们的数据可以被任何一个 程序块读写。
3.1.1组织块OB
启动组织块 循环执行的程序组织块 定期执行的程序组织块 事件驱动执行的程序组织块
1.启动组织块
(1)OB100为完全再启动类型(暖启动)。启动时,过程映像区和不 保持的标志存储器、定时器及计数器被清零,保持的标志存储器、定 时器和计数器以及数据块的当前值保持原状态,执行OB100,然后开 始执行循环程序OB1。一般S7-300PLC都采用此种启动方式。
STEP7中的数据可分为以下三大类: 基本数据类型 复合数据类型 参数数据类型
基本数据类型(一)
位(BOOL) 字节(BYTE) 字(WORD) 双字(DOUBLE WORD) 整数(INT) 双整数(DOUBLE INT) 浮点数(REAL)
基本数据类型(二)
S5TIME(SIMATIC时间) IEC时间(TIME) IEC日期(date) 日计时(TIME_OF_DAY) 字符(CHAR)
4.事件驱动的程序执行组织块
问题如何在STEP7中使用间接寻址编写循环程序解答间接寻址
问题:如何在STEP 7中使用间接寻址编写循环程序?解答:间接寻址允许寻址地址在程序运行期间才可以确定的操作数。
这意味着,程序的一部分可以重复执行。
在每个运行周期内,循环编程为所使用的操作数分配不同的地址。
在下载中包含了所附的程序“LoopAddr”的详细信息。
通过循环程序,将输入变量“Input_1”和“Input_2”的数值放入100个连续放置的存储单元中。
该程序包含了一个功能FC10,其IN变量为“Input_1”和“Input_2”( 类型为DWORD),并包含了编号为“DB_No”(类型为WORD)的数据块,以及一个声明为:“Value:ARRAY[1..100] of REAL”的数据块DB10。
在循环程序的每个运行期间内,将数值“Input_2”与来自“Input_1”的初始值相加,或者加到后面的总和上,然后将结果保存到数据块中计算得到的地址内。
例如,如果“Input_1”分配的数值为0.5,而“Input_2”数值为1.5,则第一个0.5保存在地址0.0中,而将计算得到的和(0.5+1.5=2.0)保存在后面的地址(4.0)中,下一个计算和(2.0+1.5=3.5)又保存在随后的地址(8.0)中,以此类推。
表1:在DB10中计算出来地址下保存“Input_1”、“Input_2”和相加结果的两个实例。
在FC10的第一部分中,调用系统功能SFC24“TEST_DB”,然后评估参数“RET_VAL”。
通过SFC24,接收到位于CPU的工作存储区中的数据块的信息。
如果DB是写保护的,则检测并检查所选DB的数据字节数。
如果“RET_VAL”的错误代码不等于零,则通过一个命令跳转来终止程序。
“RET_VAL”可能会返回下列错误编号:∙0000:没有错误发生。
∙80A1:数据块的编号为零,或者大于该CPU所允许的最大编号。
∙80B1:给定的数据块不在CPU中。
∙80B2:使用关键字UNLINKED生成数据块。
西门子STEP7通讯编程常用命令解释及说明
西门子STEP7通讯编程常用命令解释及说明 [5368]一、词汇Actual Parameter(实际参数)在用户程序调用一个功能块(FB)或功能(FC)时,实际参数代替形式参数。
例如,形式参数“REQ”被实际参数“I3.6”代替。
Address(地址)地址是一个操作对象或操作区域的标识符。
例如,输入I12.1;存贮字MW25;数据块DB3等等。
Addressing(编址)在用户程序中分配一个地址。
此地址被分配给一个操作对象或操作区域(例如,输入I12.1;存贮字MW25),它准确地指向它们的存贮位置。
Baud rate(波特率)数据传输速度。
波特率是1秒种内传输的位(bit)数(波特率=位(bit)速率)。
PROFIBUS-DP允许的波特率范围:9.6k bit/s~12 M bit/s。
BUS(总线)公共传输路经(传输介质),它把节点或站连接成网络。
在PROFIBUS网络中,总线是双绞线或光纤电缆。
Bus Plug Connector(总线插头连接器)站(也称“节点”)与总线导线的物理连接元件。
在PROFIBUS网络中,总线插头连接器可能是带或不带与PG编程装置的连接,可以用于防护等级IP20和IP65。
Bus Segment(总线段)由于网络的物理性质,PROFIBUS网络只能构造到它的最大长度和最大的连接站数,如果把它分成若干个总线段,则总线段之间必须通过中继器彼此连接。
Bus System(总线系统)通过总线电缆相互物理连接的所有站形成一个总线系统。
Chassis ground(机壳接地)电子装备部件的所有固定部分全体,即使在故障事件的情况下,它不导传有害的波动电压。
Cless 1 Master(1类主站)它是处理用户信息交换的DP主站设备。
Cless 2 Master(2类主站)它是处理网络控制、调试投运和组态功能的DP主站设备。
CLEAR(清除)DP主站的运行模式。
在此模式下,DP主站循环地读输入数据,而输出仍然设置在“0”状态。
在STEP7中如何使用间接寻址编写循环程序
在STEP 7 中如何使用间接寻址编写循环程序间接寻址允许寻址那些在程序运行期间才可以确定其地址的操作数。
这意味着,程序的某些部分可以重复执行。
循环程序在每次运行时为所使用的操作数分配一个不同的地址。
在所附的下载程序“LoopAddr”中,编写了一段循环程序,使用输入变量“Input_1”和“Input_2”的值为100 个连续的存储单元赋值。
该程序包含了一个功能FC10,该功能的输入IN 变量为“Input_1”、“Input_2”(数据类型为DWORD) 和“DB_No”(数据类型为WORD) ,以及一个通过语句:“Value: ARRAY[1..100] of REAL”声明的数据块DB10。
在该循环程序每次运行的过程中,将“Input_2”的值累加到“Input_1”的初始值上,或者将“Input_2”的值累加到上次的累加和上,并将结果保存在数据块中计算出来的地址内。
例如,如果将数值0.5 赋予“Input_1”并将 1.5 赋予“Input_2”,则第一个值保存在地址0.0 中,计算结果(0.5+1.5=2.0) 保存于下面的地址(4.0) 中,下一个计算和(2.0+1.5=3.5) 保存于接下来的地址(8.0) 中,以此类推。
表1:将“Input_1”和“Input_2”的相加结果保存在DB 10 中计算出来的地址内的两个实例。
在FC10 的第一部分中,调用系统功能SFC24“TEST_DB”,然后评估参数“RET_VAL”。
SFC24 提供了数据块在CPU 工作存储器中的位置信息。
评估所选DB 的数据类型的数据块编号并检查DB 是否为写保护。
如果“RET_VAL”的错误代码不为零,则程序通过一个跳转指令终止。
“RET_VAL”可能返回下列错误编号:∙0000:没有发生错误。
∙80A1:数据块的编号为零,或者大于该CPU 所允许的最大编号。
∙80B1:CPU 中不存在指定的数据块。
∙80B2:通过关键字UNLINKED 生成数据块。
STEP7编址详解
完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如NOT等)。
其中的操作数是指令要执行的目标,也就是指令要进行操作的地址。
我们知道,在PLC中划有各种用途的存储区,比如物理输入输出区P、映像输入区I、映像输出区Q、位存储区M、定时器T、计数器C、数据区DB和L等,同时我们还知道,每个区域可以用位(BIT)、字节(BYTE)、字(WORD)、双字(DWORD)来衡量,或者说来指定确切的大小。
当然定时器T、计数器C不存在这种衡量体制,它们仅用位来衡量。
由此我们可以得到,要描述一个地址,至少应该包含两个要素:1、存储的区域2、这个区域中具体的位置比如:A Q2.0其中的A是指令符,Q2.0是A的操作数,也就是地址。
这个地址由两部分组成:Q:指的是映像输出区2.0:就是这个映像输出区第二个字节的第0位。
由此,我们得出,一个确切的地址组成应该是:〖存储区符〗〖存储区尺寸符〗〖尺寸数值〗.〖位数值〗地址标识符例如:DBX200.0。
其中,我们又把〖存储区符〗〖存储区尺寸符〗这两个部分合称为:地址标识符。
这样,一个确切的地址组成,又可以写成:地址标识符+ 确切的数值单元【间接寻址的概念】寻址,就是指定指令要进行操作的地址。
给定指令操作的地址方法,就是寻址方法。
在谈间接寻址之前,我们简单的了解一下直接寻址。
所谓直接寻址,简单的说,就是直接给出指令的确切操作数,像上面所说的,A Q2.0,就是直接寻址,对于A这个指令来说,Q2.0就是它要进行操作的地址。
这样看来,间接寻址就是间接的给出指令的确切操作数。
对,就是这个概念。
比如:A Q[MD100] ,A T[DBW100]。
程序语句中用方括号[ ] 标明的内容,间接的指明了指令要进行的地址,这两个语句中的MD100和DBW100称为指针Pointer,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。
间接由此得名。
西门子的间接寻址方式有两大类型:存储器间接寻址和寄存器间接寻址。
西门子STEP7中的绝对寻址和符号寻址
西门子STEP7中的绝对寻址和符号寻址绝对寻址和符号寻址在STEP 7程序中,使用地址如I/O信号、位内存、计数器、定时器、数据块和功能块。
完全可以在程序中访问这些地址,但是如果使用地址符号,程序将更容易阅读(例如,Motor_A_On或其它符合公司或行业内代码系统的符号)。
然后,可以通过此符号访问用户程序中的地址。
绝对地址绝对地址包含地址标识符和内存位置(例如,Q 4.0, I 1.1, M 2.0, FB21)。
符号地址如果将符号名分配给绝对地址,可以使程序更易读,并能简化故障排除。
STEP 7可以自动地将符号名称翻译成所需要的绝对地址。
如果愿意使用符号名称访问ARRAY、STRUCT、数据块、本地数据、逻辑块和用户自定义数据类型,在使用符号寻址数据前,必须首先将符号名称分配给绝对地址。
例如,可以将符号名称MOTOR_ON分配给地址Q 4.0,然后在程序语句中将MOTOR_ON作为地址使用。
使用符号地址,更容易识别程序中的元素与过程控制项目的组件的匹配程度。
支持编程在编程语言梯形图、功能块图和语句表中,可以输入地址、参数和块名称,作为绝对地址或符号。
使用菜单命令视图> 显示> 符号表示法,可以在地址的绝对表示法和符号表示法之间切换。
为了更容易使用符号地址编程,可以显示绝对地址和属于符号的符号注释。
可以使用菜单命令视图> 显示> 符号信息激活此信息。
这意味着每个STL语句后的行注释中包含更多的信息。
不能编辑该显示;任何改变都必须在符号表或变量声明表中开展。
下列图显示在STL中的符号信息。
当打印输出一个块时,具有语句注释或符号注释的当前画面表示也被打印。
共享符号与局部符号符号使您能够采用具有某种意义的符号名来代替绝对地址开展工作。
短符号和长注释的有效结合,可使编程更容易、程序文档的质量更好。
应注意区分局部(指定块)符号和共享符号之间的不同。
显示共享符号或局部符号程序代码段中的共享符号与局部符号之间的差异可区分如下:来自符号表中的符号(共享符号)将显示在引号".."内。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如NOT等)。
其中的操作数是指令要执行的目标,也就是指令要进行操作的地址。
我们知道,在PLC中划有各种用途的存储区,比如物理输入输出区P、映像输入区I、映像输出区Q、位存储区M、定时器T、计数器C、数据区DB和L等,同时我们还知道,每个区域可以用位(BIT)、字节(BYTE)、字(WORD)、双字(DWORD)来衡量,或者说来指定确切的大小。
当然定时器T、计数器C不存在这种衡量体制,它们仅用位来衡量。
由此我们可以得到,要描述一个地址,至少应该包含两个要素:1、存储的区域2、这个区域中具体的位置比如:A Q2.0其中的A是指令符,Q2.0是A的操作数,也就是地址。
这个地址由两部分组成:Q:指的是映像输出区2.0:就是这个映像输出区第二个字节的第0位。
由此,我们得出,一个确切的地址组成应该是:〖存储区符〗〖存储区尺寸符〗〖尺寸数值〗.〖位数值〗地址标识符例如:DBX200.0。
其中,我们又把〖存储区符〗〖存储区尺寸符〗这两个部分合称为:地址标识符。
这样,一个确切的地址组成,又可以写成:地址标识符+ 确切的数值单元【间接寻址的概念】寻址,就是指定指令要进行操作的地址。
给定指令操作的地址方法,就是寻址方法。
在谈间接寻址之前,我们简单的了解一下直接寻址。
所谓直接寻址,简单的说,就是直接给出指令的确切操作数,像上面所说的,A Q2.0,就是直接寻址,对于A这个指令来说,Q2.0就是它要进行操作的地址。
这样看来,间接寻址就是间接的给出指令的确切操作数。
对,就是这个概念。
比如:A Q[MD100] ,A T[DBW100]。
程序语句中用方括号[ ] 标明的内容,间接的指明了指令要进行的地址,这两个语句中的MD100和DBW100称为指针Pointer,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。
间接由此得名。
西门子的间接寻址方式有两大类型:存储器间接寻址和寄存器间接寻址。
【存储器间接寻址】存储器间接寻址的地址给定格式是:地址标识符+指针。
指针所指示存储单元中所包含的数值,就是地址的确切数值单元。
存储器间接寻址具有两个指针格式:单字和双字。
单字指针是一个16bit的结构,从0-15bit,指示一个从0-65535的数值,这个数值就是被寻址的存储区域的编号。
双字指针是一个32bit的结构,从0-2bit,共三位,按照8进制指示被寻址的位编号,也就是0-7;而从3-18bit,共16位,指示一个从0-65535的数值,这个数值就是被寻址的字节编号。
指针可以存放在M、DI、DB和L区域中,也就是说,可以用这些区域的内容来做指针。
单字指针和双字指针在使用上有很大区别。
下面举例说明:L DW#16#35 //将32位16进制数35存入ACC1T MD2 //这个值再存入MD2,这是个32位的位存储区域L +10 //将16位整数10存入ACC1,32位16进制数35自动移动到//ACC2T MW100 //这个值再存入MW100,这是个16位的位存储区域OPN DBW[MW100] //打开DBW10。
这里的[MW100]就是个单字指针,存放指针//的区域是M区,MW100中的值10,就是指针间接指定的//地址,它是个16位的值!L L#+10 //以32位形式,把10放入ACC1,此时,ACC2中的内容为://16位整数10T MD104 //这个值再存入MD104,这是个32位的位存储区域A I[MD104] //对I1.2进行与逻辑操作!=DIX[MD2] //赋值背景数据位DIX6.5!A DB[MW100].DBX[MD2] //读入DB10.DBX6.5数据位状态=Q[MD2] //赋值给Q6.5A DB[MW100].DBX[MD2] //读入DB10.DBX6.5数据位状态=Q[MW100] //错误!!没有Q10这个元件从上面系列举例我们至少看出来一点:单字指针只应用在地址标识符是非位的情况下。
的确,单字指针前面描述过,它确定的数值是0-65535,而对于byte.bit这种具体位结构来说,只能用双字指针。
这是它们的第一个区别,单字指针的另外一个限制就是,它只能对T、C、DB、FC和FB进行寻址,通俗地说,单字指针只可以用来指代这些存储区域的编号。
相对于单字指针,双字指针就没有这样的限制,它不仅可以对位地址进行寻址,还可以对BYTE、WORD、DWORD寻址,并且没有区域的限制。
不过,有得必有失,在对非位的区域进行寻址时,必须确保其0-2bit为全0!总结一下:单字指针的存储器间接寻址只能用在地址标识符是非位的场合;双字指针由于有位格式存在,所以对地址标识符没有限制。
也正是由于双字指针是一个具有位的指针,因此,当对字节、字或者双字存储区地址进行寻址时,必须确保双字指针的内容是8或者8的倍数。
现在,我们来分析一下上述例子中的A I[MD104] 为什么最后是对I1.2进行与逻辑操作。
通过L L#+10 ,我们知道存放在MD104中的值应该是:MD104:00000000 0000 0000 0000 0000 0000 1010当作为双字指针时,就应该按照3-18bit指定byte,0-2bit指定bit来确定最终指令要操作的地址,因此:0000 0000 0000 0000 0000 0000 0000 1010 = 1.2【地址寄存器间接寻址】在先前所说的存储器间接寻址中,间接指针用M、DB、DI和L直接指定,就是说,指针指向的存储区内容就是指令要执行的确切地址数值单元。
但在寄存器间接寻址中,指令要执行的确切地址数值单元,并非寄存器指向的存储区内容,也就是说,寄存器本身也是间接的指向真正的地址数值单元。
从寄存器到得出真正的地址数值单元,西门子提供了两种途径:1、区域内寄存器间接寻址2、区域间寄存器间接寻址地址寄存器间接寻址的一般格式是:〖地址标识符〗〖寄存器,P#byte.bit〗比如:DIX[AR1,P#1.5] 或M[AR1,P#0.0] 。
〖寄存器,P#byte.bit〗统称为:寄存器寻址指针,而〖地址标识符〗在上帖中谈过,它包含〖存储区符〗+〖存储区尺寸符〗。
但在这里,情况有所变化。
比较一下刚才的例子:DIX [AR1,P#1.5] 区域内寄存器间接寻址X [AR1,P#1.5] 区域间寄存器间接寻址DIX可以认为是我们通常定义的地址标识符,DI是背景数据块存储区域,X是这个存储区域的尺寸符,指的是背景数据块中的位。
但下面一个示例中的M呢?X只是指定了存储区域的尺寸符,那么存储区域符在哪里呢?毫无疑问,在AR1中!DIX [AR1,P#1.5] 这个例子,要寻址的地址区域事先已经确定,AR1可以改变的只是这个区域内的确切地址数值单元,所以我们称之为:区域内寄存器间接寻址方式,相应的,这里的[AR1,P#1.5] 就叫做区域内寻址指针。
X [AR1,P#1.5] 这个例子,要寻址的地址区域和确切的地址数值单元,都未事先确定,只是确定了存储大小,这就是意味着我们可以在不同的区域间的不同地址数值单元以给定的区域大小进行寻址,所以称之为:区域间寄存器间接寻址方式,相应的,这里的[AR1,P#1.5] 就叫做区域间寻址指针。
既然有着区域内和区域间寻址之分,那么,同样的AR1中,就存有不同的内容,它们代表着不同的含义。
地址寄存器是专门用于寻址的一个特殊指针区域,西门子的地址寄存器共有两个:AR1和AR2,每个32位。
当使用在区域内寄存器间接寻址中时,我们知道这时的AR中的内容只是指明数值单元,因此,区域内寄存器间接寻址时,寄存器中的内容等同于上帖中提及的存储器间接寻址中的双字指针,也就是:其0-2bit,指定bit位,3-18bit指定byte字节。
其第31bit固定为0。
AR:0000 0000 0000 0BBB BBBB BBBB BBBB BXXX这样规定,就意味着AR的取值只能是:0.0 ——65535.7例如:当AR=D4(hex)=0000 0000 0000 0000 0000 0000 1101 0100(b),实际上就是等于26.4。
而在区域间寄存器间接寻址中,由于要寻址的区域也要在AR中指定,显然这时的AR中内容肯定于寄存器区域内间接寻址时,对AR内容的要求,或者说规定不同。
AR:1000 0YYY0000 0BBB BBBB BBBB BBBB BXXX比较一下两种格式的不同,我们发现,这里的第31bit被固定为1,同时,第24、25、26位有了可以取值的范围。
聪明的你,肯定可以联想到,这是用于指定存储区域的。
对,bit24-26的取值确定了要寻址的区域,它的取值是这样定义的:区域标识符26、25、24位000:P(外部输入输出)001:I(输入映像区)010:Q(输出映像区)011:M(位存储区)100:DB(数据块)101:DI(背景数据块)111:L(暂存数据区,也叫局域数据)如果我们把这样的AR内容,用HEX表示的话,那么就有:当是对P区域寻址时,AR=800xxxxx当是对I区域寻址时,AR=810xxxxx当是对Q区域寻址时,AR=820xxxxx当是对M区域寻址时,AR=830xxxxx当是对DB区域寻址时,AR=840xxxxx当是对DI区域寻址时,AR=850xxxxx当是对L区域寻址时,AR=870xxxxx经过列举,我们有了初步的结论:如果AR中的内容是8开头,那么就一定是区域间寻址;如果要在DB区中进行寻址,只需在8后面跟上一个40。
84000000-840FFFFF指明了要寻址的范围是:DB区的0.0——65535.7。
例如:当AR=840000D4(hex)=1000 0100 0000 0000 0000 0000 1101 0100(b),实际上就是等于DBX26.4。
我们看到,在寄存器寻址指针[AR1/2,P#byte.bit] 这种结构中,P#byte.bit又是什么呢?【P#指针】P#中的P是Pointer,是个32位的直接指针。
所谓的直接,是指P#中的#后面所跟的数值或者存储单元,是P直接给定的。
这样P#XXX这种指针,就可以被用来在指令寻址中,作为一个“常数”来对待,这个“常数”可以包含或不包含存储区域。
例如:● L P#Q1.0//把Q1.0这个指针存入ACC1,此时ACC1的内容=82000008(hex)=Q1.0 ★L P#1.0 //把1.0这个指针存入ACC1,此时ACC1的内容=00000008(hex)=1.0● L P#MB100 //错误!必须按照byte.bit结构给定指针。