您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > S7-300和S7-400寻址
S7-300和S7-400寻址AddressingforS7-300andS7-400Single-FAQEdition(2010年-9月)摘要本文对S7-300,S7-400PLC编程过程中,所涉及的寻址方式方法,做了简单介绍及简单示例。关键词STEP7,编程,寻址,间接寻址,S7-300,S7-400KeyWordsSTEP7,Programming,Addressing,Indirectionaddressing,S7-300,S7-400目录S7-300和S7-400寻址1.S7-300/400系统存储区域2.S7-300/400PLC寻址方式2.1直接寻址2.1.1绝对地址:2.1.2符号寻址:2.2间接寻址2.2.1存储器间接寻址2.2.2寄存器间接寻址2.2.3FB/FC的指针参数传递1S7-300/400系统存储区域S7CPU的系统存储区域分为下表中列出的地址区域。在程序中可以根据相应的地址直接读取数据。地址区域可以访问的地址单位S7符号(IEC)描述过程映像输入表输入(位)I循环扫描周期开始时,CPU从输入模板读输入值并记录到该区域输入(字节)IB输入(字)IW输入(双字)ID过程映像输出表输出(位)Q在循环扫描周期中,程序计算输出值并记录到该区域。循环扫描周期结束时,CPU将计算结果写入相应的输出模板输出(字节)QB输出(字)QW输出(双字)QD位存储器存储器(位)M该区域用于存储程序的中间计算结果存储器(字节)MB存储器(字)MW存储器(双字)MD定时器定时器(T)T该区域提供定时器的存储计数器计数器(C)C该区域提供计数器的存储数据块数据块,用OPNDB打开DB数据块中包含了程序的信息。可以定义为所有逻辑块共享(sharedDBs)或指定给一个特定的FB或SFB做背景数据块(instanceDB)。数据位DBX数据字节DBB数据字DBW数据双字DBD数据块,用OPNDI打开DI数据位DIX数据字节DIB数据字DIW数据双字DID局部数据局部数据位L该区域包含块执行时该块的临时数据。L堆栈还提供用于传递块参数及记录梯形逻辑网络中间结果的存储器局部数据字节LB局部数据字LW局部数据双字LD外设地址(I/O)外设输入字节PIB主站及分布式从站(DP)外设输入输出区域允许直接存取输入外设输入字PIW外设输入双字PID外设地址(I/O)外设输出字节PQB输出外设输出字PQW外设输出双字PQD2.S7-300/400PLC寻址方式2.1直接寻址在STEP7程序中可以使用输入输出信号(I/O),位存储区(M),计数器(C),计时器(T),数据块(DB)以及功能块(FB)等地址。你可以直接访问这些绝对地址,但是如果给绝对地址以符号(助记符)程序将更易读懂(例如Motor_A_On,或者根据你的公司或者工程中的代码使用别的标识符),而一个你的用户程序中的地址也就可以用一个符号来访问。2.1.1绝对地址:绝对地址由一个地址标识符和存储器位置组成。例如I0.0,Q1.7,PIW256,PQW512,MD20,T15,C16,DB1.DBB10,L10.0等。2.1.2符号寻址:如果给绝对地址分配符号可使程序易读而简化故障查找。STEP7能自动翻译符号名为要求的绝对地址。如果你准备用符号名访问数组,结构,数据块,局部变量,逻辑块及用户自定义数据类型,那么你必须在此之前先分配符号名给绝对地址。例如,你可以分配符号名’Motor_On’给地址Q4.0,然后在程序语句中使用符名’Motor_On’作为地址。如需在程序中显示DB里所定义的符号,可以给该DB块定义一个符号。不能在符号表给DB块中某地址单独定义符号。2.2间接寻址间接寻址分为存储器间接寻址和寄存器间接寻址,间接寻址的指针分为16位指针和32位指针,而32位指针又分为内部区域寻址与交叉区域寻址。2.2.1存储器间接寻址►16位指针:16位地址指针用于定时器、计数器、程序块(DB、FC、FB)的寻址,16位指针被看作一个无符号整数(0~65535),它表示定时器(T)、计数器(C)、数据块(DB、DI)或程序块(FB、FC)的号,16位指针的格式如下:图1寻址格式表示为:区域标识符[16位地址指针]例如使一个计数器向上计数表示为:CUC[MW]上述指令中,’C’为区域标识符,而’MW20’为一个16位指针。16位指针存储器间接寻址举例://用于定时器L1TMW0//将1传送到MW0AI0.0//如果I0.0=TrueLS5T#10SSDT[MW0]//T1开始计时//上述指令可等同于:AI0.0LS5T#10SSDT1//用于打开DB块L20TLW20OPNDB[LW20]//打开DB20//程序调用L2TLW20UCFC[LW20]//调用FC2L41TDBW30UCFB[DBW30]//调用FB41►32位指针:32位地址指针用于I、Q、M、L、数据块等存储器中位、字节、字及双字的寻址,32位的地址指针可以使用一个双字表示,第0位~第2位作为寻址操作的位地址,第3位~第18位作为寻址操作的字节地址,第19位~第31位没有定义,32位指针的格式如下:图2存储器32指针仅用于内部区域寻址。寻址格式表示为:地址存储器标识符[32位地址指针]例如写入一个M的双字表示为:TMD[LD0]‘MD’为区域标识符及访问宽度,而LD0为一个32位指针。32位内部区域指针可用常数表示,表示为P#字节.位。如常数P#10.3为指向第10个字节第3位的指针常数。若把一个32位整型转换为字节指针常数,从上述指针格式可以看出,应要把该数左移3位(或是乘8)即可。如:LL#100//Accu0装入32位整形100SLD3//左移3位TLD0//LD0得到P#100.0指针常数32位存储器间接寻址举例://DB块间接寻址举例OPNDB1//打开DB1。OPNDI3//打开DB3,最多可以同时打开两个DB块。L4//装载4到累加器1中。SLD3//累加器1中数值左移3位。TMD20//将逻辑操作结果传送到MD20中,MD20//包含地址指针为P#4.0。LP#20.0//将地址指针P#20.0装载到MD24中。TMD24L320//320转换指针为P#40.0并装载到MD28中。TMD28LDBW[MD20]//装载DB1.DBW4。LDBW[MD24]//装载DB1.DBW20。+I//相加LDIW[MD28]//装载DB3.DBW40。-I//相减。TDIW2//将运算结果传送到DB3.DBW2中。JZm1//M存储器连续区域操作L0//初始化MW100和MD4。TMW100TMD4OPNDB1//打开DB1。L100//循环操作的次数,100次。NEXT:TMW100//将循环100次装载到MW100中,固定格式。LMW2//进行比较的数值存储于MW2。LDBW[MD4]//与DB块中存储的值进行比较,开始地址为DBW0。==I//如果数值相等跳到m1。JCm1LMD4//将地址指针加2(每个相邻的字地址相差2)。LP#2.0+DTMD4LMW100//次数减1,跳回next,如果MW100等于0,跳LOOPNEXT//出循环操作LOOP指令,LOOP指令固定格式。m1:FPM10.0//如果数值相当,记录MD4指针的数据,将转换为数组JCNm2//的位置((地址值/P#2.0)+1)值存储于MD8中。LMD4LP#2.0/D+L#1TMD8m2:NOP02.2.2寄存器间接寻址通过CPU的地址寄存器AR1和AR2寻址方式称为寄存器间接寻址,分为内部区域间接寻址和交叉区域寻址。使用寄存器间接寻址方式的程序语句包含以下部分:指令,地址标识符,地址寄存器标识符,偏移量AR1,AR2均为32位寄存器,寄存器间接寻址只使用32位指针。与ARx相关的指令有:LAR1,LAR2,TAR1,TAR2,+AR1,+AR2,LAR1AR2,CAR等。以上指令使用请参考手册:开始-(所有)程序-SIMATIC-Documentation-English-STEP7–StatementListforS7-300andS7-400。或点击下载该手册中文版►内部区域寄存器间接寻址指针格式与存储器间接寻址的32位指针相同,第0位~第2位作为寻址操作的位地址,第3位~第18位作为寻址操作的字节地址,第19位~第31位没有定义,32位指针的格式如下:图3间接寻址表示为:存储器标识符[ARx,地址偏移量]如:LMW[AR1,P#2.0]‘MW’为被访问的存储器及访问宽度,’AR1’为地址寄存器1,P#2.0为地址偏移量。内部区域寄存寻址举例://DB块寄存器内部寻址OPNDB1//打开DB1。LAR1P#10.0//将指针P#10.0装载到地址寄存器1中。LDBW[AR1,P#12.0]//将DBW22装载到累加器1中。LAR1MD20//将存储于MD20中的指针装载到地址寄存器1中。LDBW[AR1,P#0.0]//将DBW装载到累加器1中,地址存储于MD20中。+ILAR2P#40.0//将指针P#40.0装载到地址寄存器2中。TDBW[AR2,P#0.0]//运算结果传送到DBW40中。//DI、DO区寄存器内部寻址LP#8.7//装载指向第8字节第7位的指针值到累加器1LAR1//累加器1中的指针装载到AR1AI[AR1,P#0.0]//查询I8.7的信号状态=Q[AR1,P#1.1]//给输出位Q10.0赋值►交叉区域寄存器间接寻址包含有存储器区域信息的指针,称为交叉区域指针。同样,交叉区域指针为32位,寄存器间接寻址要使用地址寄存器AR1或AR2。32位交叉区域指针,左起0~18位格式与32位内部区域指针相同,19~23位,27~30位未定义,31位为交叉区域指针标识位。24~26位是存储区域地址标识,8中组合表示8种存储器区域:000表示没有地址区,例如P#12.0;001表示输入地址区I,例如P#I12.0;010表示输出地址区Q,例如P#Q12.0;011表示标志位地址区M,例如P#M12.0;100表示数据块(DB)中的数据,例如P#DB1.DBX12.0101表示数据块(DI)中的数据,例如P#DI1.DIX12.0110表示区域地址区L,例如P#L12.0;111表示调用程序块的区域地址区V,例如P#V12.0;交叉区域指针格式如下:图4交叉区域指针常数表达为:P#存储器字节.位例如:P#Q10.5//指向Q区第10字节第5位的指针常P#DB1.DBX32.0//指向DB1区域的第32字节第0位的指针常数交叉区域寻址表示为:访问宽度[ARx,偏移量]例如:LW[AR2,P#1.0]‘W’为访问宽度,AR2为地址寄存器2,P#1.0为偏移量。交叉区域间接寻址举例://M存储区LP#M20.0LAR1L1234TW[AR1,P#2.0]//I存储区LP#I0.0LAR2LW[AR2,P#0.0]TMW02.2.3FB/FC的指针参数传递在使用FB/FC形参传递指针参数时,16位、32位指针是可用的,但POINTER与ANY指针类型也是常见的类型,因为更方便。►16指针用于参数传递例如://编写一个FC,作用是启动条件满足后延时3秒输出闭合信号//定义FC的形参如下:图5//程序如下:L#Pointer16TLW0//将16位指针装入LW0A#Start//Start参数=True时LS5T#3S//计时3秒SDT[LW0]AT[LW0]//计时器计时到=#Motor//输出Motor=True*32指针用于参数传递//编写一个FC,作用是将输入DB块指定的区域(实数)求出平均值//定义形参如下:图6//程序如下:L#DB_NoTLW0//装载DB块号至LW0OPNDB[LW0]//并打开该DB块L#Data_1stTLD2//装载第一个要计算的实数的32指针至LD0L0TLD8//将'和'初始为0L#Len//长度NEXT:TLW6//实数的个数装载至LW6,并且进入一个LOOP循环L
本文标题:S7-300和S7-400寻址
链接地址:https://www.777doc.com/doc-7512640 .html