【免费下载】S7300指针类型与间接寻址
(2012-06-19 17:24:33)转释为字或双字指针。
完整的数据地址由地址标识符和指针构成,如下例所示。
间接寻址的优点是能在程序执行期间动态修改指令的数据地址。
存储器间接寻址使用以下两部分地址:1. 地址标识符对于由位逻辑运算寻址的位,可分配地址标识符I、Q、M、L、DIX或DBX。
对于由装载指令寻址的字节、字和双字,可使用存储区I、Q、M、L、D和PI,分配IB、IW、ID、DBB、DBW、DBD、DIB、DIW、DID、PIB、PIW、PID等形式的地址标识符。
对于由传送指令寻址的字节、字和双字,可使用存储区I、Q、M、L、DB、DI和PQ,分配IB、IW、ID、DBB、DBW、DBD、DIB、DIW、DID、PQB、PQW、PQD等形式的地址标识符。
要寻址定时器、计数器或块,可使用T、C、DB、DI、FB、FC形式的区域标识符。
2. 括在方括号"[ ]"内的字或双字指针的地址字指针 - 含有定时器(T)、计数器(C)、数据块(DB、DI)或逻辑块(FC、FB)的标识号的字。
字指针是十进制整数。
双字指针 - 指含有位、字节、字或双字的确切位置的双字。
双字指针的格式为:P#字节.位。
指针必须存储在下列区域之一,才能进行存储器间接寻址:M - 位存储器L - 本地数据D - 数据块(DB或DI)STAT 静态数据(不是用于具有多重实例能力的块的静态数据)注意如果要寻址使用存储器间接寻址的字节、字或双字,请确保指针的位号为双字格式0。
字指针实例:L 5 //将指针值载入ACCU 1。
T MW2 //将指针传送到MW2中。
L T[MW2] //将5号定时器的当前时间值载入ACCU 1。
L C[MW2] //将5号计数器的当前计数值载入ACCU 1。
OPN DB[MW2] //将数据块DB5作为共享数据块打开。
OPN DI[MW2] //将数据块DB5作为背景数据块打开。
双字指针实例:L P#8.7 //将指针值载入ACCU 1。
T MD2 //将指针传送到MD2中。
A I [MD2] //扫描输入位8.7的状态,并将其= Q [MD2] //信号状态分配给输出位Q 8.7。
区域内寄存器间接寻址使用区域内寄存器间接寻址的程序语句包含一条指令和以下组成部分:地址标识符[地址寄存器标识符,地址]。
区域内寄存器间接寻址使用以下两部分地址:1. 地址标识符对于由位逻辑运算寻址的位,可以分配地址标识符I、Q、M、L、DIX或DBX。
对于由装载指令寻址的字节、字和双字,可使用存储区I、Q、M、L、D和PI,分配IB、IW、ID、DBB、DBW、DBD、DIB、DIW、DID、PIB、PIW、PID等形式的地址标识符。
对于由传送指令寻址的字节、字和双字,可使用存储区I、Q、M、L、DB、DI和PQ,分配IB、IW、ID、DBB、DBW、DBD、DIB、DIW、DID、PQB、PQW、PQD等形式的地址标识符。
2. 方括号"[ ]"中的内容包括地址寄存器引用(AR1或AR2)、逗号分隔符","以及双字指针。
双字指针 - 指包含位、字节、字或双字的部分地址的双字。
双字指针的格式为:P#字节.位。
注意请记住您现在使用的是两个格式为"P#字节.位"的指针。
一个指针已被精确表示出来。
另一个指针通过对地址寄存器AR1或AR2的引用来确定。
如果要寻址字节、字或双字,请确保指针的位号为0。
使用寄存器间接寻址的语句不更改地址寄存器的内容。
指针实例L P#8.7 //将指针值载入ACCU 1。
LAR1 //用ACCU 1中的指针装载AR1。
A I [AR1, P#0.0] //检查输入位I 8.7并将有符号的状态分配给Q 10.0。
= Q [AR1, P#1.1] //确切地址8.7在AR1中。
偏移量不对其产生影响。
确切位置10.0由8.7 (AR1)加上1.1 (偏移量)得出,结果是10.0而不是9.8。
区域内寄存器间接寻址实例A I [AR1,P#4.3] 对其位置是由AR1中的内容加上4个字节,再加上3个位计算得出的输入位,执行逻辑与运算。
= DIX [AR2, P#0.0] 将RLO位状态分配给位于AR2中的实例数据位。
L IB [AR1, P#10.0] 将输入字节载入ACCU 1中。
地址由AR1的内容加上十个字节计算得出。
T LD [AR2,P#53.0] 将ACCU 1中的内容传送到本地双字中(该双字的位置由AR2的内容加上53个字节计算得出)。
区域内寄存器间接寻址的特点是:地址标示符在方括号前确定,方括号中的指针均为不含存储区信息(如[AR1,P#4.3]中AR1=P#8.7,两个指针都不含有存储区信息),否则将会与方括号前的地址标示符表示的存储区冲突。
跨区域寄存器间接寻址使用跨区域寄存器间接寻址的程序语句包含一条指令和以下组成部分:地址标识符[地址寄存器标识符,地址]。
跨区域寄存器间接寻址使用以下两部分地址:1. 对已寻址的数据对象(地址标识符)大小的规定数据对象大小规定位(无规定表示是一个位)B 字节W 字D 双字2. 方括号"[ ]"中的内容包括地址寄存器引用(AR1或AR2)、逗号分隔符","以及双字指针。
双字指针 - 指包含位、字节、字或双字的部分地址的双字。
指针具有以下区域内格式:P#字节.位。
注意事先必须已将跨区域双字指针载入到由寄存器间接地址引用的地址寄存器中。
跨区域双字指针 - 包含位的部分地址(对于位逻辑指令)或字节、字或双字的部分地址(对于装载和传送指令)的双字。
地址前面的区域标识符位于用来指定字节和位。
跨区域双字指针格式为:P#区域标识符字节.位。
对于由位逻辑指令寻址的位,可以分配跨区域指针区域标识符I、Q、M、DIX或DBX。
对于由装载或传送指令寻址的字节、字和双字,可以分配跨区域指针区域标识符I、Q、M、DIX、DBX或P。
注意要在指针中指定外设输入或PI区域,请以P#Px.y形式输入指针。
区域被指定为P。
在跨区域指针中不能使用外设输出PQ区域。
请记住您正使用两个指针:作为偏移量,直接在地址中表示的区域内双字指针,例如P#4.0。
存储在地址寄存器(AR1或AR2)中的跨区域双字指针,例如P#Q4.0。
如果要访问通过直接寻址方式进行寻址的字节、字或双字,请确保这两个指针的位号均为0。
使用寄存器间接寻址的语句不更改地址寄存器的内容。
跨区域寄存器间接寻址的第一个实例:L P# I8.7 //将指针值和区域标识符载入ACCU 1。
LAR1 //将存储区I和地址8.7存入AR1。
L P# Q8.7 //将指针偏移量和区域标识符载入ACCU 1。
LAR2 //将存储区Q和地址8.7存入AR2。
A [AR1, P#0.0] //检查输入位I 8.7并将其信号状态分配给输出位Q 10.0。
= [AR2, P#1.1] //偏移量0.0没有任何作用。
输出位10.0由8.7 (AR2)加上1.1 (偏移量)得出,结果是10.0而不是9.8。
跨区域寄存器间接寻址的第二个实例:A I 0.0JC M002L P#M10.0 //将指针值和区域标识符载入ACCU 1。
LAR1 //将存储区M和地址10存入ACCU 1。
JU M001M002: L P#Q0.3 //将指针值和区域标识符载入ACCU 1。
LAR1 //将存储区Q和地址0.3存入ACCU 1。
M001: A I 0.4= [AR1, P#0.1] //I 0.0用于控制哪个指针用于此语句。
将I 0.4的信号状态分配给存储器位M 10.1,或者分配给输出Q 0.4。
跨区域寄存器间接寻址实例A [AR1,P#4.3] 对于其位置是由AR1中的内容加上4个字节,再加上3个位计算得出的位,执行逻辑与运算。
位的存储区在AR1的位24、25和26中指出。
= [AR2, P#0.0] 将RLO位信号状态分配给位于AR2中的位。
位的存储区在AR1的位24、25和26中指出。
L B [AR1, P#10.0] 将字节(其位置由AR1的内容加上10个字节计算得出)载入ACCU 1。
位的存储区在AR1的位24、25和26中指出。
T D [AR2,P#53.0] 将ACCU 1的内容传送到双字(该字的精确位置由AR2的内容加上53个字节计算得出)。
位的存储区在AR1的位24、25和26中指出。
跨区域寄存器间接寻址的特点是:地址标示符在方括号前确定,方括号中的地址寄存器中包含存储区信息(如[AR1,P#4.3]中AR1=P#Q0.3)。
区域内寄存器间接寻址和跨区域寄存器间接寻址的使用相当灵活,可以根据需要选择。
由上面的说明可知,区域内寄存器间接寻址是针对存储区固定的间接寻址方式,寻址的存储区是确定的。
而跨区域寄存器间接寻址则在指令中不确定存储区,存储区由地址寄存器中存储的指针中的信息确定,因而寻址的存储区是可变的。
关于S7-300和400的指针寻址功能说明
关于S7-300和400的指针寻址功能说明Addressing for S7-300 and S7-400SLC A&D CSSeptember, 20041西门⼦⾃动化与驱动产品的在线技术⽀持 (3)2如何获得西门⼦⾃动化与驱动产品的资料 (4)3需设备选型及订货 (4)4西门⼦技术⽀持热线 (4)5西门⼦⾃动化产品的其它⽹站 (5)6S7-300/S7-400 PLC相关⼿册 (5)7缩写词含义 (5)8如何使⽤STEP 7软件的在线帮助 (6)8.1查找某个关键字或功能 (6)8.2想了解某个FB/FC的功能及管脚的定义 (7)9S7-300/400系统存储区域 (9)10S7-300/400 PLC寻址⽅式 (10)10.1直接寻址 (10)10.2间接寻址 (11)10.3S7-300/400寻址⽅式图解 (11)11如何使⽤指针 (11)12在程序中如何进⾏间接寻址 (12)1西门⼦⾃动化与驱动产品的在线技术⽀持⾸先,建议您访问Siemens A&D的产品与技术⽀持⽹站http://www4.ad.siemens.de/,主页如下所⽰:请选择语⾔种类为English。
在主页的Product Support中选择您关⼼的产品或信息,或利⽤Search引擎直接输⼊关键字搜索。
您还可以访问西门⼦(中国)⾃动化与驱动集团的主页/doc/ae8228340.html,如下图所⽰。
该⽹站同样可以提供⼤量的产品和系统的信息。
2如何获得西门⼦⾃动化与驱动产品的资料⾸先,建议您通过Siemens A&D的⽹站搜索并下载。
您还可以致电010-********转3785 /3726索取资料。
另外,还有⼤量的⼿册可以通过分销商订购,和其它产品的订货⽅式⼀样。
3需设备选型及订货如需设备选型及订货,请联系西门⼦⾃动化与驱动的销售⼯程师或当地西门⼦分销商。
分销商联系⽅式可致电010-********获得。
S7-200SMART间接寻址
S7-200 SMART 间接寻址一、间接寻址概念:1、间接寻址是指用指针来访问存储区的数据。
指针以双字的形式存储其它存储区的地址,只能将V 存储单元、L 存储单元或累加器寄存器(AC1、AC2、AC3)用作指针。
注意:S7-200 SMART CPU 允许指针访问下列存储区:I、Q、V、M、S、AI、AQ、SM、T(仅限当前值)和C(仅限当前值)。
不能使用间接寻址访问单个位或访问HC、L 或累加器存储区。
2、指针存储的就是存储器的内存地址或编号,如下所示,VB0表示的是一个存储器,而内存地址:16#08000000则就是VB0这个存储区所对应的内存地址,通过对这个内存地址的改变就可以实现对不同的存储区的访问,这就是间接寻址的过程。
3、间接寻址的使用过程主要分为建立指针,改变指针,通过指针实现存储器三步骤。
二、建立指针:要创建指针,用“&”符号加上要访问的存储区地址可建立一个指针,必须使用“移动双字”指令,将间接寻址的存储单元地址移至指针位置。
注意:修改指针的值时,请记住调整所访问数据的大小:访问字节时,指针值加1;访问定时器或计数器的字或当前值时,指针值加2;访问双字时,指针值加4。
三、修改指针:对指针中的数据进行修改,可以实现对存储地址的改变,如图所示通过对指针进行加法操作来改变指针中的所存的数据,该数据指向的是PLC中存储器的内存地址。
四、通过指针对数据进行存取:当指针的内容修改完后,需要根据修改后的指针的内容访问对应的存储区的数据,此时指令中的操作数是指针是,应该在操作数前面加上“*”号。
例程1.通过指针访问数据表所实现的功能:索引号VW1008=0时,将指定的配方0(VB100~VB104) 数据传送到(VB1500~VB1504) 索引号VW1008=1时,将指定的配方1(VB105~VB109) 数据传送到(VB1500~VB1504) 索引号VW1008=2时,将指定的配方2(VB110~VB114) 数据传送到(VB1500~VB1504) 索引号VW1008=3时,将指定的配方3(VB115~VB119) 数据传送到(VB1500~VB1504)例程2.通过指针存储数据表所实现的功能:索引号VW1008=0时,将(VB1500~VB1504)数据传送到指定的配方0(VB100~VB104) 索引号VW1008=1时,将(VB1500~VB1504)数据传送到指定的配方1(VB105~VB109) 索引号VW1008=2时,将(VB1500~VB1504)数据传送到指定的配方2(VB110~VB114) 索引号VW1008=3时,将(VB1500~VB1504)数据传送到指定的配方3(VB115~VB119)例程3.通过地址偏移量来访问V存储区数据所实现的功能:本例程可以实现对区任意字节数据的访问。
西门子S7-300系列PLC基本指令系统
标识符
I IB IW ID
Q QB QW QD
M MB MW MD
PIB PIW PID PQB PQW PQD
最大范围
0~65 535.7 0~65 535 0~65 534 0~65 532
0~65 535.7 0~65 535 0~65 534 0~65 532
0~255.7 0~255 0~254 0~252
西门子s7300系列plc基本指令系统图图419419五种类型定时器总览五种类型定时器总览西门子s7300系列plc基本指令系统图420脉冲定时器指令spulset5tvbcdbiq40s5t2si00i01s5t2sspt5西门子s7300系列plc基本指令系统图421脉冲定时器时序西门子s7300系列plc基本指令系统图422接通延时定时器指令sodtt5tvbcdbiq40s5t2si00i01s5t2ssdt5西门子s7300系列plc基本指令系统图423延时接通定时器时序定时器线圈指令表412定时器线圈指令lad西门子s7300系列plc基本指令系统图424扩展脉冲定时器线圈指令s5t2sset5西门子s7300系列plc基本指令系统432计数器指令s7中有三种计数器加计数器加计数器scuscu减计数器减计数器scdscd可逆计数器可逆计数器scudscud图425累加器1低字的内容计数值127计数器组成在cpu中保留一块存储区作为计数器计数值存储区每个计数器占用两个字节计数器字中的第011位表示计数值二进制格式计数范围是0999
字节单元。位地址参数用一个点与字节地址分开。如:
M 10.1 当操作数长度是字或双字时,标识符后给出的标识参数是字 或双字内的最低字节单元号。图4.1给出了字节、字、双字的相 互关系及表示方法。当使用宽度为字或双字的地址时,应保证 没有生成任何重叠的字节分配,以免造成数据读写错误。
s7-300PLC编程语句手册汇总
S7-300编程语言与指令孟令生整理STEP 7编程语言介绍 (2)数据类型 (3)参数数据类型 (4)PLC用户存储区的分类及功能 (5)指令操作数 (5)寻址方式 (6)状态字 (8)基本逻辑指令 (9)置位和复位指令 (11)RS和SR触发器 (12)跳变沿检测指令 (12)定时器与计数器指令 (15)计数器指令 (20)访问CPU的时钟存储器 (22)数字指令 (23)装入和传送指令 (23)转换指令 (25)比较指令 (28)算数运算指令 (29)移位指令 (31)控制指令 (32)STEP 7编程语言介绍STEP 7是S7-300/400系列PLC应用设计软件包,所支持的PLC编程语言非常丰富。
该软件的标准版支持STL(语句表)、LAD(梯形图)及FBD(功能块图)3种基本编程语言,并且在STEP 7中可以相互转换。
专业版附加对GRAPH(顺序功能图)、SCL(结构化控制语言)、HiGraph(图形编程语言)、CFC(连续功能图)等编程语言的支持。
不同的编程语言可供不同知识背景的人员采用。
➢STL(语句表)STL(语句表)是一种类似于计算机汇编语言的一种文本编程语言,由多条语句组成一个程序段。
语句表可供习惯汇编语言的用户使用,在运行时间和要求的存储空间方面最优。
在设计通信、数学运算等高级应用程序时建议使用语句表。
➢FBD(功能块图)FBD(功能块图)使用类似于布尔代数的图形逻辑符号来表示控制逻辑,一些复杂的功能用指令框表示。
FBD比较适合于有数字电路基础的编程人员使用。
➢GRAPH(顺序控制)GRAPH类似于解决问题的流程图,适用于顺序控制的编程。
利用S7-GRAPH编程语言,可以清楚快速地组织和编写S7 PLC系统的顺序控制程序。
它根据功能将控制任务分解为若干步,其顺序用图形方式显示出来并且可形成图形和文本方式的文件。
➢ HiGraph (图形编程语言)S7-Higraph 允许用状态图描述生产过程,将自动控制下的机器或系统分成若干个功能单元,并为每个单元生成状态图,然后利用信息通讯将功能单元组合在一起形成完整的系统。
最新s7300scl编程笔记资料
SCL编程数组的定义:二.寻址1○2符号寻址如:DB10.setpoint“motor1data”.DW12○3间接寻址如:E[byteindex,bitindex]MB[byteindex]DB10.DW[byteindex]注:以上运算符的表达式基本大多和我们的数学表达式一样。
这里只讲解一下AND,XOR,OR指令。
如:a1:=a1 AND W#16#FFFFa1:=a1 XOR W#16#FFFFa1:=a1 OR MW10注意:当使用程序循环时,请确保不超过循环监测时间。
1.IF语句:IF 条件0THEN 语句0;ELSIF 条件1THEN 语句1;ELSIF 条件2THEN 语句2;ELSE 语句3;END_IF;2.CASE语句:“选择”内的值等于Const内的值就执行那个语句。
其它语句不执行,就执行END_CASE;CASE 选择OFConst1:语句1;Const2:语句2;………Constn:语句n;END_CASE;3.FOR语句FOR 变量:=n0 TO n BY m DO…………………..;………………….;END_FOR;注意:这里的n为整型变量或整数值。
m为每循环加几。
4.WHILE语句:只要条件满足,程序循环就重复。
WHILE 条件DO语句;END_WHILE;5.REPEAT语句:只要条件不满足,就重复程序循环。
REPEAT语句;UNTIL 条件;END_REPEAT;6.CONTINUE语句:在FOR, WHILE, REPEAT循环中终止当前程序通道。
7.EXIT语句:在FOR, WHILE, REPEAT循环中终止所有程序通道。
8.RETURN语句:语句无条件地退出当前执行的块。
9.GOTO语句:例:LABEL //定义标签M1,M2,M3,END;END_LABEL;……………..CASE Selection;1:GOTO M1;2:GOTO M2;3:GOTO M3;ELSE GOTO DND;END_CASE;M1:语句1;GOTO DND;M2:语句2;GOTO DND;M3:语句3;END: ;五.常量:1. 位常量:值为TRUE或者FALSE.2. 字符常量:(这里是一个字符)Charac_1:=’B’Charac_2:=char#43;Charac_3:=char#’B’//字符‘B’Charac_4:=’$41’//字符‘A’3. 字符串常量:M1:=’ABCDEFJH’4. 日期常量:T1:=DATE#1995-11-11;T2:=D#1995-11-115. 时间常量N1:=TIME#10.2S;N2:=T#3D_2S_3MS;6. TIME_OF_DAY常量:TM1:=TIME_OF_DAY#12:11:10.1;TT2:=TOD#10:10:10;7. DATE_AND_TIME常量:TT:=DT#2012-4-26-18:12:00;六.定时器和计数器:1.定时器有5种,依次为:S_PULSE S_PEXT S_ODT S_ODTS S_OFFDTVARCurrTime : S5time;BiVal : word;ActFlag : bool;END_VAR//在调用定时器时,部分参数可以省略,但左边的赋值变量一定不能省略。
第4章_s7300编程语言与指令系统
CPU
9 6
BCD
正数
W#16#296
0 0 0 0 0 0 1 0 1 0 0 1 0 1 1 0
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
整数
0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 +296 28
= 256 +
25
23
= = 32 + 8 = 296
Page: 14
§4.2.2 复杂数据类型
数组(ARRAY) 结构(STRUCT)
字符串(STRING)
日期和时间(DATE_AND_TIME)
用户定义的数据类型(UDT)
功能块类型(FB、SFB)
Page: 15
返回本节
1.数组(ARRAY)
数组是由一组同一类型的数据组合在一起而形成的复 杂数据类型。数组的维数最大可以到6维;数组中的元素 可以是基本数据类型或者复杂数据类型中的任一数据类型 (Array类型除外,即数组类型不可以嵌套);数组中每 一维的下标取值范围是-32768~32767,要求下标的下限 必须小于下标的上限。 数组定义必须说明书组的维数、元素类型和每一维的 上、下标范围。
用户输出设备
循环程序执行
启动块 (OB 100) 上电后执行一次 输入 模块
循环监视时间的开始
从模块读信号状态,并保存到过程映象区 (PII)
CPU 循环
执行OB1中的程序 (循环执行) 事件 (日期时间中断、硬件中断等) 调用其他 OB,FB,FC
块OB 1
A I 0.1 A I 0.2 = Q8.0
外设输入pibpibpiwpiwpidpid外设输出外设输出pqbpqbpqwpqwpqdpqd用户输入设备输入端子输入锁存器输入映像寄存器程序执行输出锁存器输出端子用户输出设备输出映像寄存器执行ob1中的程序循环执行事件日期时间中断硬件中断等调用其他obfbfc输出模块q80块ob循环监视时间的开始启动块ob100上电后执行一次从模块读信号状态并保存到过程映象区pii把过程映象输出表piq写到输出模块输入模块循环程序执行page
S7300常用操作说明
S7-300常用操作说明利用STEP7监视输入输出量的方法DP:高速数据传送1、打开PLC软件。
运行STEP7,打开PLC软件,将左侧的文件夹层层展开直到选中Blocks,如下图所示:2、找到VAT块。
在右侧找到V AT_??的块,双击打开。
一般此块排列在所有块的最后面,名称以V AT开头,后跟的下划线后的名称可能不一样,可以不管,如有不止一个,可以任意打开一个。
如下图:3、插入VAT块。
如没有找到此块,可以在自行添加一个,操作如下图,在右侧窗口空白处点击鼠标右键,选择Insert New Object(插入新对象)——Variable Table(变量表)4、选中后将出现如下窗口5、打开VAT块。
点击OK按钮即可生成V AT_1块。
打开V AT块,如下图:6、查找监视点地址。
在Address一列中输入想要监视的地址,如需要监视第一流自动转换开关状态,则察看接口表7、监视数字量输入点。
如上图,察看接口表得知,第一流转换开关的自动档输入点为I0.0,第二流转换开关的自动档输入点为I4.0。
将这两个地址输入到V AT窗口中的Address 一栏中,如图:8、判断监视结果。
在第一行中输入I0.0后,回车后,光标自动移到第二行,第三列的Display format自动设为BOOL类型。
在保证工控机与PLC联接正常的情况下,可以点上图方框所示的Monitor Variable按钮,则情况应如下图所示,窗口的标题栏变为高亮的青色,窗口右下角的RUN状态栏有绿色状态条不断闪动。
下图所示的监视结果,I0.0结果为绿色,true,I0.4结果为灰色,false,表明第一流转换开关处于手动档,第二流转换开关不处于手动档。
9、错误判断。
如在Address栏中输入要监视的量后字变为红色,说明输入有误,例如:10、修改显示格式。
所有的数字量输入输出点的数据类型都是BOOL 型,即输入要监视的点后,使用系统给出的默认Display format(显示格式)BOOL就可以了,如要监视模拟量输入点(模拟量输出点无法用V AT监视),应该将显示格式改为Decimal如下图所示,如需要监视第一流的液位采样输入点,看接口表得知,此点地址为386,则在V AT窗口的Address(地址)一栏中输入PIW386,在Display format一栏中点右键,选择Decimal:11、监视模拟量输入。
第4章_s7300编程语言与指令系统
Page: 14
§4.2.2 复杂数据类型
数组(ARRAY) 结构(STRUCT)
字符串(STRING)
日期和时间(DATE_AND_TIME)
用户定义的数据类型(UDT)
功能块类型(FB、SFB)
Page: 15
返回本节
1.数组(ARRAY)
数组是由一组同一类型的数据组合在一起而形成的复 杂数据类型。数组的维数最大可以到6维;数组中的元素 可以是基本数据类型或者复杂数据类型中的任一数据类型 (Array类型除外,即数组类型不可以嵌套);数组中每 一维的下标取值范围是-32768~32767,要求下标的下限 必须小于下标的上限。 数组定义必须说明书组的维数、元素类型和每一维的 上、下标范围。
Page: 6
返回本节
GRAPH(顺序控制)
GRAPH 类似于解决问 题的流程图,适用于顺序 控制的编程。利用S7GRAPH 编程语言,可以清 楚快速地组织和编写S7 PLC 系统的顺序控制程序。 它根据功能将控制任务分 解为若干步,其顺序用图 形方式显示出来并且可形 成图形和文本方式的 文件。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DINT L#+296
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0
Page: 16
返回上级
2.结构(STRUCT)
结构是由一组不同类型(结构的元素可以是基本的或 复杂的数据类型)的数据组合在一起而形成的复杂数据类 型。结构通常用来定义一组相关的数据,例如电机的一组 数据可以按如下方式定义:
西门子S7-1200 PLC的间接寻址功能及实例
S7-1200指针数据- 已解决问题看了这个问题的网友还看了∙西门子模拟量电压问题西门子博图V14安装步骤∙S7-200/S7-1200/S7-300 EPLAN宏下载S7-1200 怎么实现与上位机进行Modbus_TCP/TP通讯∙打开S7-PLCSIM V13就提示几个文件签名无效,然后报错退出。
关于博图软件怎样安装∙1200PLC编程时,同样是16个位,怎样把数组转换为INT?西门子plc1200编程软件下载∙wincc与s7-1200怎么通讯1200PLC不能与PC机链接,找不到设备,输入输出,如附件IF #EXCUTE = True THENPOKE_BLK(area_src:= #AREA_SRC, (* 源数据类型:16#81:I,16#82:Q,16#83:M,16#84:DB *) dbNumber_src:= #DB_NUM_SRC, (* 源数据块:非DB=0 *)byteOffset_src:= #START_BIT_SRC, (* 源数据起始位号 DB[#DB_NUM_SRC].DBB[#START_BIT_SRC] *)area_dest:= #AREA_TYPE, (* 目标存储类型:16#81:I,16#82:Q,16#83:M,16#84:DB *)dbNumber_dest:= #DB_NUM, (* 目标数据块:非DB=0 *)byteOffset_dest:= #START_BIT, (* 目标起始位位号 DB[#DB_NUM].DBB[#START_BIT] *)count:= #BYTE_COUNT); (* 复制长度字节 *)END_IF;图片说明:回答者:sunnic - 高级技术员第7级2016-08-14 17:08:21提问者对于答案的评价:谢谢已有1人评论展开6wenhua6:你好,我按照你做的,怎么不行西门子S7-1200循环程序间接寻址的方法循环程序的关键是间接寻址,西门子S7-1200的间接寻址离不开数组。
s7-300寻址实例
S7300寻址应用实例内容摘要:在plc编程过程中,凡涉及到大量数据处理时,都会用到寻址,这样数据处理起来很简便,让编程更加得心应手。
关键字:寻址S7-300 S7-400 西门子plc编程编程是通过计算机来解决现实问题,任何程序都有数据结构和算法两方面内容,其中数据是基础,如何处理数据,在编程过程中都是很重要的工作。
在S7-300和S7-400 plc编程的过程中,出于处理大量数据的需要,寻址是编程中的一项重要的工作,用于数据的存储,传送和转移。
下面一段程序就是把一个数据块DB9中的50个数据循环下移一位,即第49个数据移到第50个数据字节中,第48个移到第49个,依次类推,第1个移到第2个,第50个在开始被保存的存储器中,最后再移到第一个数据字节中,思路是这样,具体实现方法如下:首先建一个数据块,在本例中建的是DB9,在数据中可以多建几个,这样便于观察数据在程序运行过程中是否溢出规定的范围。
本例中共建了56个字节的变量,参与循环的数据为DB0到DB49。
首先在初始化主程序OB100中写入赋初值的程序OPN DB 9L P#0.0T MD 96 //将间接寻址的地址MD96赋初值P#0.0L 1T MB 92 //将MB92设定为初始传送到DB9中的数据L P#48.0T MD 100 // MD100为被移位的数据,所以初值为P#48.0,移位时移//入P#49.0然后写循环子程序,这里用FC9,然后在OB1中调用FC9,FC9中程序Network 1的思路是把DB9中的从DBB0到DBB49依次装入从1到50的数。
Network 1:OPN DB 9 //打开DB9A(L MD 96L P#49.0<=D) //做一个限定,当地址MD96小于等于P#49.0时,执行存储数据JCN ae //若执行到P#49.0后,MD96地址加P#1.0变成P#50.0,则跳转到nop0 L MB 92 //依次把1到50T DBB [MD 96] //传到DB0到DB49中L MD 96L P#1.0+DT MD 96 //装入一个数据后,地址加P#1.0L MB 92L 1+DT MB 92 //装入一个数据后,数据加1ae: NOP 0然后设定数据移位的地址MD100,每次m10.4由0置1的时候,都把MD100恢复到P#48.0,以便从倒数第二个数开始移位,并在移位开始时,将最先被覆盖的DBB49先存储到MB90中,以便在其他数据完成传送后,把MB90中的DBB49传入DBB0。
