STEP7——POINTER指针详解
西门子PLC指针寻址教学
L 11 T MW 60
OPN DB[MW 60]
OPN DB 11
z 双字格式的32位指针(用于对I、Q、M...进行寻址)
L P#24.0 T MD 50
LI
W
[MD50]
L IW 24
存储 访问 区域 宽度
地址
SIMATIC S7
Siemens AG 2001. All rights reserved.
地址标识符
Bit 31=0: 内部区域 Bit 31=1: 交叉区域
字节地址(无符号整数)
位地址
z 地址标识符:
000 I/O
010 输出(PIQ) 100 DB寄存器中的数据 110 自有本地数据
001 输入(PII)
011 位(Bit)存储器 101 DB寄存器2中的数据(DI) 111 调用块的LD(本地数据)
本地数据堆栈
SIMATIC S7
Siemens AG 2001. All rights reserved.
Date: File:
2013-4-26 PRO2_04E.3
SITRAIN Training for
Automation and Drives
DB中地址标识符直接寻址
打开的数据块
在数据块中装载和传递
A DBX 0.0
从0字节的第0位开始扫描
L DB19.DBW4 从DB 19中装载数据字4
L “Values”.Number_1 符号访问变量
Number_1. DB19 具有变量名“Values”
A DB10.DBX4.7 从DB 10 的第4个字节的第7位开始扫描
SIMATIC S7
Siemens AG 2001. All rights reserved.
STEP 7 指针编程
A&D CS2 FA 崔坚
SIMATIC Technical Consulting 2007 8月
Page 14
A&D AS CS2 FA Systems Support
寻址方式
直接寻址
存储区地址指针
寄存器间接寻址
POINTER数据 类型指针
ANY数据类型 指针
FB块形参的 编程
32位内部区域指针使用示例
SIMATIC Technical Consulting 2007 8月
Page 13
A&D AS CS2 FA Systems Support
寻址方式
直接寻址
存储区地址指针
寄存器间接寻址
POINTER数据 类型指针
ANY数据类型 指针
FB块形参的 编程
32位内部区域指针
32位内部区域指针地址寻址表示格式为:地址存储器标识符 [地址寄存器,地址偏移常量],例如装载M存储器一个字节表 示为:
JC m1
A&D CS2 FA 崔坚
SIMATIC Technical Consulting 2007 8月
Page 9
A&D AS CS2 FA Systems Support
寻址方式
直接寻址
存存储储区区地地址址指指针针
寄存器间接寻址
POINTER数据 类型指针
ANY数据类型 指针
FB块形参的 编程
的倍数,,如果对相邻 两个双字操作,指针转换为整数值最小必须为32(指针为P#4.0)的
倍数,对字与双字指针 的要求主要防治数据间的冲突,例如DBW[MD2],MD2为16的倍数 时,按照DBW2、DBW4、DBW6寻址,如果为8的倍数,按照DBW1、 DBW2、DBW3寻址,地址间数据冲突。
STEP7 指针编程(崔坚(36))
32位交叉区域指针使用示例
使用交叉区域指针表示方法(例如装载M存储器一个字节)为:
寄存器间接寻址
LAR1 P#M 20.0
//将指针P#M20.0 装载到地址寄存器1中。
A [AR1,P#1.1] //M21.1“与”操作。
= Q 1.2
//如果M21.1为1,输出1.2为1。
L P#I 40.0
32位地址指针
地址寻址表示格式为: 地址存储器标识符[32位地址指针],例如指针存储于LD20中, 装载M存储器一个字节表示
存储区地址指针
32位地址指针也可以使用常数表示,例如装载32位指针常 数 L P# 40.3 (P=指针,字节地址=40,位地址=3)。32位地址 指针数据与双整数可以相互转换,由于指针指到一个位地 址上,每一个位地址加1,相应转换的整数值加1的倍数, 例如P#0.0转换双整数为L#0,P#0.1转换双整数为L#1,每一 个字节地址加1,相应转换的整数值加8的倍数,例如P#3.1 转换双整数为L#25.
//指针指向P#2.4,相当于L DBB2.4,CPU无法识别,将停机。
如果对相邻两个字节操作,指针转换为整数值最小必须为8(指针为 P#1.0)的倍数,如果对 相邻两个字操作,指针转换为整数值最小必须为16(指针为P#2.0)的 倍数,,如果对相邻
两个双字操作,指针转换为整数值最小必须为32(指针为P#4.0)的倍 数,对字与双字指针
寄存器间接寻址
地址寄存器AR1、AR2的限制
寄存器间接寻址
避免方法:
L #ARR_TEST[1]
//装载形参变量ARR_TEST[1 1
//打开OB1
LAR1 P#20.0
//将P#20.0装载到地址寄存器AR1
Step7-数据类型详细说明总结汇总
Step7-数据类型详细说明总结汇总STEP7中的基本数据类型⑴位(BOOL)位数据的数据类型为BOOL(布尔)型,在软件编程中BOOL 变量的值1和0常用英语词TURE(真)和FALSE(假)来表示,对应二进制数中的“1”和“0”,常用于开关量的逻辑运算,存储空间为1位。
⑵字节(BYTE)字节数据长度为8位,数据格式为B#16#,B代表BYTE,表示数据长度为一个字节(8位),#16#表示十六进制,取值范围为B#16#0~B#16#FF。
⑶字(WORD)字数据长度为16位,这种数据可采用4种方法进行描述。
二进制:二进制的格式为2#,如2#101,取值范围为2#0~2#1111_1111_1111_1111,书写时每4位可用下划线隔开,也可直接表示为2#111111111111。
十六进制:十六进制的格式为W#16#,W代表WORD,表示数据长度为16位,#16#表示十六进制,数据取值范围为W #16#0~W#16#FFFF。
BCD码:BCD码的格式为C#,取值范围为C#0~C#999。
BCD码是用4位二进制表示1位十进制数,4位二进制中的0000~1001组合分别表示十进制中的0~9,4位二进制中的1010~1111组合放弃不用。
BCD码的最高4位用来表示符号,十六位BCD码的取值范围为-999~+999。
在STEP7的数据格式中,BCD码的取值只取正值,与最高4位的符号无关。
无符号十进制数:无符号十进制数的格式为B#(×,×),取值范围为B#(0,0)~B#(255,255),无符号十进制数是用十进制的0~255对应二进制数中的0000_0000~1111_1111(8位),16位二进制数就需要两个0~255的数来表示,例如:B#(12,254)=2#0000_1100_1111_111012 254上面4种数据都是描述一个长度位16位的二进制数,无论你使用哪种方式都可以。
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地址详解
西门子的间接寻址方式计有两大类型:存储器间接寻址和寄存器间接寻址。
【存储器间接寻址】
存储器间接寻址的地址给定格式是:地址标识符+指针。指针所指示存储单元中所包含的数值,就是地址的确切数值单元。
存储器间接寻址具有两个指针格式:单字和双字。
这样看来,间接寻址就是间接的给出指令的确切操作数。对,就是这个概念。
比如: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寻址方式
完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如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。
DB X 200 . 0 其中,我们又把〖存储区符〗〖存储区尺寸符〗这两个部分合称为:地址标识符。
这样,一个确切的地址组成,又可以写成:地址标识符+ 确切的数值单元【间接寻址的概念】寻址,就是指定指令要进行操作的地址。
给定指令操作的地址方法,就是寻址方法。
在谈间接寻址之前,我们简单的了解一下直接寻址。
所谓直接寻址,简单的说,就是直接给出指令的确切操作数,象上面所说的,A Q2.0,就是直接寻址,对于A这个指令来说,Q2.0就是它要进行操作的地址。
这样看来,间接寻址就是间接的给出指令的确切操作数。
对,就是这个概念。
比如:A Q[MD100] ,A T[DBW100]。
程序语句中用方刮号[ ] 标明的内容,间接的指明了指令要进行的地址,这两个语句中的MD100和DBW100称为指针Pointer,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。
间接由此得名。
指针(pointer)――C C 的精髓.
指针(pointer——C/C++的精髓!你不得不学好它!指针(pointer指针是一种数据类型,用于存放某个变量的地址值。
此时该指针被称为是指向该变量。
一个指针的类型决定于它所指向的变量的类型。
指针既可指向基本数据类型(即预定义数据类型),又可指向数组、函数、类和文件等用户自定义数据类型。
指针可以初始化为0、NULL(即0,这是标准库头文件中定义的符号化常量)或一个地址。
内容为0或NULL的指针不指向任何变量,称为空指针。
例如:int a;int *ptr;指针ptr在下式中被初始化为指向变量a。
ptr = &a;两条语句也可组合地表示为:a = *ptr;其中&为存地址运算符,而*则为取内容运算符。
int a, *ptr;ptr = &a;指针与数组数组名是一个指向该数组的常量指针(其值不能改变),也是该数组中首单元的地址值。
一维数组的指针如下:int arr[5] = { 1, 3, 5, 7, 9 };int *ptra;ptra = arr;数组指针与数组名两者的异同:(1)整型变量指针ptr与整型数组指针ptra的说明格式相同,其间空格可放可不放。
(2)arr既是数组名,又是数组地址,还是数组指针(称为常量指针),三位一体。
因此arr可在一定范围内与ptra等效地使用。
[ ]可在一定范围内与 * 等效地使用。
但arr不准重新赋值。
例如:arr[0]即*arr即*ptra即ptra[0] = 1arr[3]即*(arr+3即*(ptra+3即ptra[3] = 7但arr的使用不如ptra灵活,如:不允许*arr++,而允许*ptra++。
见以下例子:§2.2中[例1]的主程序void main({int arr[5] = {1, 3, 5, 7, 9};for ( int i = 0; i < 5; i++cout << arr[i] << endl; //数组名}其中的for语句可改为:for ( int i = 0; i < 5; i++cout << *(arr+i << endl; //指针// 但不允许arr加减,即不允许:// cout << *(arr++ << endl; not allowed但可使用以下指针ptra:int *ptra = arr;for ( int i = 0; i < 5; i++cout << *(ptra++ << endl;// 此处可以将指针加减(3)字符串与字符数组:字符串一般使用指针(包括变量指针和常量指针两种方式)表示其地址和内容,此地址也即其第一个字符的地址。
西门子STEP7指针编程研究与应用
刘 强 ( 三一重工股份有限公司, 湖南 长沙 4 1 0 0 0 0 )
【 摘 要 】 本文首先简要阐述了西门子 S T E P 7中常见 的间接寻址 方式 , 包括存储器间接寻址、 寄存器间接寻址、 P O I N T E R指针和 A N Y指针寻址
B y t e 7 ~ B y t e 9 : 被寻址的字节及位地址。
1 . 2 寄 存 器 间接 寻址
寄存 器 间接 寻 址使 用 P L C 内部 集成 的 两 个 3 2位 寄 存 器
A R1 和 A R 2 。 地 址 寄 存 器 的 内容加 上 偏 移 量 形 成 地 址 指 针 , 该 指 针 指 向数 值 所在 的存 储 单 元 .从 而 可 以 实现 对各 存 储 区存
等: 同时, 结 含 工 程 实 例 对 AN Y 类 型指 针 编 程 进 行 了详 细 分析 与说 明 , 为i  ̄f - 3 子 S T E P 7指 针 编 程 的 推 广 应 用起 到抛 砖 引玉 的作 用。
【 关键词 】 S T E P 7 ; 指针 ; 寻址 方式 ; 存储器 ; 寄存器 【 中图分类号 】 T M 5 7 l 【 文献标识码 】 A 【 文章编号 】 1 0 0 6 — 4 2 2 2 ( 2 0 1 5 ) 1 0 — 0 2 5 1 — 0 2
存 器 间接 寻 址 、 P OI NT ER指 针 和 AN Y 指 针 寻 址【 2 1 。 下 面 分 别 进 行 简要 阐述 :
块 F B传 递 复 合 数 据 类 型 ( 如 A R R A Y、 S T R U C T及 D T等 ) 的实
参. 在 被 调 用 的 函数 F C及 函数 块 F B 内部 可 以 间接 访 问 实 参
STEP7-功能块全中文说明书
parator== IN1等于IN2<> IN1不等于IN2> IN1大于IN2< IN1小于IN2>= IN1大于或等于IN2<= IN1小于或等于IN22.整数就是没有小数位都是零的数,即能被1整除的数(如-1,-2,0,1,……)CMP ?I(INT)整数比较CMP ?D (DINT)比较双精度整数CMP ?R (REAL)比较实数3.转换指令概述BCD_I BCD码转换为整数I_BCD 整型转换为BCD码BCD_DI BCD码转换为双精度整数I_DINT 整型转换为长整型DI_BCD 长整型转换为BCD码DI_REAL 长整型转换为浮点型4 计数器指令S_CUD 双向计数器S_CD 降值计数器S_CU 升值计数器---( SC ) 设置计数器线圈•---( CU ) 升值计数器线圈•---( CD ) 降值计数器线圈5.S_CUD 双向计数器`6. S_CU 升值计数器7. S_CD 降值计数器8. ---( SC ) 设置计数器值9. ---( CU ) 升值计数器线圈10. ---( CD ) 降值计数器线圈11. ---(OPN)打开数据块:DB或DI如果想将数据块中的数据读出(如DB和DI),需要通过(OPN)打开数据块后才可读出。
12. ---(JMP)--- 无条件跳转13. ---(JMPN) 若“否”则跳转14. LABEL标号【整型数学运算指令】整型数学运算指令概述说明使用整数运算,您可以对两个整数(16和32位)执行以下运算:•ADD_I 加整数•SUB_I 减整型•MUL_I 乘整型•DIV_I 除整型•ADD_DI 加双精度整数•SUB_DI 减长整型•MUL_DI 乘长整型•DIV_DI 除长整型•MOD_DI 返回分数长整型15. ADD_I 整数加16. SUB_I 整数减17. MUL_I 整数乘18. DIV_I 整数除19. MOD_DI 返回长整数余数20. 浮点运算指令概述IEEE32位浮点数属于REAL数据类型。
分析一段Step 7的指针程序
LAR1 把地址8.0装载到AR1
L P#Q8.7 把指针值和地址标识符装载到累加器1
LAR2 把存储区域Q和地址8.7装载到AR2
A I[AR1,P#0.0] 查询输入位I8.0的信号状态
= [AR2,P#1.1]
给输出位Q10.0赋值
用途:
指针适合大批量数据处理,赋值等,比如:
有兴趣自己研究下:
LAR1 把存储区域I 和地址8.7装载到AR1
L P#Q8.7 把指针值和地址标识符装载到累加器1
LAR2 把存储区域Q和地址8.7装载到AR2
A [AR1,P#0.0] 查询输入位I8.7的信号状态
= [AR2,P#1.1]
给输出位Q10.0赋值
指针用法3: L 8 把指针值及存储区域标识装载到累加器1 SLD 3 转换为指针值
//数值比较 //置位标志位Comp_NOK
L #Count L1 +D T #Count
//指向DAT_DB_*.DBB [#PointerAdr*+1] 的值
L #Count_Byte <D JC beg
//与一个固定值比较,是否该DB快内数据都已经比较完毕。 //没有比较完,跳转回去继续。
为什么要SLW 3 呢 看看下图
本段程序的原理图如下,有兴趣自己编程试试:
基础知识:
指针用法1: L P#8.7 LAR1 A I[AR1,P#0.0] = Q[AR1,P#1.1]
把指针值装载到累加器1 把指针从累加器1装载到AR1 查询I8.7的信号状态 给输出位Q10.0赋值
指针用法2:
L P#I8.7 把指针值及存储区域标识装载到累加器1
分析一段Step 7的指针程序
STEP7-功能块全中文说明
parator== IN1等于IN2<> IN1不等于IN2> IN1大于IN2< IN1小于IN2>= IN1大于或等于IN2<= IN1小于或等于IN22.整数就是没有小数位都是零的数,即能被1整除的数(如-1,-2,0,1,……)CMP ?I(INT)整数比较CMP ?D (DINT)比较双精度整数CMP ?R (REAL)比较实数3.转换指令概述BCD_I BCD码转换为整数I_BCD 整型转换为BCD码BCD_DI BCD码转换为双精度整数I_DINT 整型转换为长整型DI_BCD 长整型转换为BCD码DI_REAL 长整型转换为浮点型4 计数器指令S_CUD 双向计数器S_CD 降值计数器S_CU 升值计数器---( SC ) 设置计数器线圈•---( CU ) 升值计数器线圈•---( CD ) 降值计数器线圈5.S_CUD 双向计数器`6. S_CU 升值计数器7. S_CD 降值计数器8. ---( SC ) 设置计数器值9. ---( CU ) 升值计数器线圈10. ---( CD ) 降值计数器线圈11. ---(OPN)打开数据块:DB或DI如果想将数据块中的数据读出(如DB和DI),需要通过(OPN)打开数据块后才可读出。
12. ---(JMP)--- 无条件跳转13. ---(JMPN) 若“否”则跳转14. LABEL标号【整型数学运算指令】整型数学运算指令概述说明使用整数运算,您可以对两个整数(16和32位)执行以下运算:•ADD_I 加整数•SUB_I 减整型•MUL_I 乘整型•DIV_I 除整型•ADD_DI 加双精度整数•SUB_DI 减长整型•MUL_DI 乘长整型•DIV_DI 除长整型•MOD_DI 返回分数长整型15. ADD_I 整数加16. SUB_I 整数减17. MUL_I 整数乘18. DIV_I 整数除19. MOD_DI 返回长整数余数20. 浮点运算指令概述IEEE32位浮点数属于REAL数据类型。
step7编程语言与指令
S7-300/400得编程语言与指令系统3、1 S7-300/400得编程语言3、1、1 PLC编程语言得国际标准IEC 61131就是PLC得国际标准,1992~1995年发布了IEC 61131标准中得1~4部分,我国在1995年11月发布了GB/T15969-1/2/3/4(等同于IEC 61131-1/2/3/4)。
IEC 61131-3广泛地应用PLC、DCS与工控机、“软件PLC”、数控系统、RTU等产品。
定义了5种编程语言1) 指令表IL(Instruction list):西门子称为语句表STL。
2) 结构文本ST(Structured text):西门子称为结构化控制语言(SCL)。
3) 梯形图LD(Ladder diagram):西门子简称为LAD。
4)功能块图FBD (Function block diagram):标准中称为功能方框图语言。
5)顺序功能图SFC(Sequential function chart):对应于西门子得S7 Gra ph。
3、1、2 STEP 7中得编程语言梯形图、语句表与功能块图就是3种基本编程语言,可以相互转换。
ﻩ1.顺序功能图(SFC) :STEP 7中得S7 Graph2.梯形图(LAD)直观易懂,适合于数字量逻辑控制。
“能流”(Power flow)与程序执行得方向。
3、语句表(STL):功能比梯形图或功能块图强。
4.功能块图(FBD):“LOGO!”系列微型PLC使用功能块图编程。
5.结构文本(ST):STEP 7得S7SCL(结构化控制语言)符合EN 61131-3标准。
SCL适合于复杂得公式计算、复杂得计算任务与最优化算法,或管理大量得数据等。
6.S7 HiGraph 编程语言图形编程语言S7 HiGraph 属于可选软件包,它用状态图(state graphs)来描述异步、非顺序过程得编程语言。
7.S7 CFC 编程语言可选软件包CFC(Continuous Function Chart,连续功能图)用图形方式连接程序库中以块得形式提供得各种功能。
STEP7——ANY指针详解
精心整理参数类型ANY的格式STEP 7以10个字节存储参数类型ANY。
当构造类型为ANY的参数时,必须确保所有10个字节都被占用,因为调用块估计参数整个内容的值。
例如,如果以字节4指定DB编号,也必须以字节6明确地指定存储器区。
地址以格式Byte.Bit存储,此处字节寻址存储在字节7的位0 - 2,节字8的位0 - 7,节字9的位3 - 7。
位地址存储在字节9的位0 - 2。
对于类型NIL的空指针,所有来自字节1的字节设置为0。
下表给出参数类型ANY的数据类型或存储区域的编码。
对于参数类型,STEP 7存储数据类型和参数的地址。
重复因子始终是1。
字节4、5和7始终是0。
字节8和9指示定时器、计数器或块的编号。
下表为参数类型显示参数类型ANY的数据类型编码。
使用参数类型ANY∙基本数据类型:指定实际参数的绝对地址或符号名称。
∙复杂数据类型:指定复杂数据类型的数据符号名称(例如,数组和结构)。
∙定时器、计数器和块:指定编号(例如,T1、C20或FB6)。
∙下图说明数据如何传送到具有ANY数据类型参数的FC。
在此实例中,FC100具有三个参数(in_par1、in_par2和in_par3),声明为ANY 数据类型。
∙当FB10调用FC100时,FB10传送一个整数(静态变量speed)、一个字(MW100)和一个双字到DB10 (DB10.DBD40)。
∙当FB11调用FC100时,FB11传送一个实数数组(临时变量"Thermo")、一个布尔值(M1.3)和一个定时器(T2)。
为ANY参数指定数据区不仅可以分配各个地址(例如,MW100)给ANY参数,而且可以指定数据区。
如使用参数类型ANY的实例下列实例给出了如何使用参数类型ANY和系统功能SFC20 BLKMOV复制10个字节的存储区域。
STEP7——POINTER指针详解
参数类型POINTER的格式下图给出了存储在每个字节中的数据类型。
参数类型POINTER存储下列信息:∙DB编号(或0,如果数据没有存储在DB中)∙CPU中的存储区域(下表给出了参数类型POINTER存储器区的十六进制代码)十六进制代码存储区描述b#16#81I输入区域b#16#82Q输出区域b#16#83M位存储区域b#16#84DB数据块b#16#85DI背景数据块b#16#86L本地的数据(L堆栈)b#16#87V先前的本地数据∙数据的地址(格式为字节.位)STEP7提供指针格式:p#memory_area byte.bit_address.(如果形式参数被声明为参数类型POINTER,只需要指出存储区域和地址。
STEP7将自动地重定输入指针的格式。
)下面的实例说明如何为以M50.0开始的数据输入参数类型POINTER:∙P#M50.0∙M50.0(如果形式参数声明为POINTER)。
使用参数类型POINTER指针用于指向地址。
这种寻址方式的优点是可以在程序处理期间动态地修改语句的地址。
存储器间接寻址的指针使用存储器间接寻址的程序语句由指令、地址标识符和偏移量组成(偏移量必须在方括号内给出)。
双字格式指针的实例:L P#8.7装载指针的值到累加器1。
T MD2传送指针到MD2。
A I[MD2]询问输入位I8.7的信号状态,并=Q[MD2]将信号状态分配给输出位Q8.7。
区域内部和区域交叉寻址的指针使用这些寻址方式的程序语句包含指令和下列部分:地址标识符、地址寄存器标识符、偏移量。
地址寄存器(AR1/2)和偏移量必须在方括号内一起指定。
区域内部寻址的实例指针不包含存储器区的指示:L P#8.7装载指针的值到累加器1。
LAR1将指针从累加器1装载到AR1。
A I[AR1,P#0.0]询问输入位I8.7的信号状态,并=Q[AR1,P#1.1]将信号状态分配给输出位Q10.0。
偏移量0.0没有影响。
STEP7——ANY指针详解
STEP7——ANY指针详解参数类型ANY的格式STEP 7以10个字节存储参数类型ANY。
当构造类型为ANY的参数时,必须确保所有10个字节都被占用,因为调用块估计参数整个内容的值。
例如,如果以字节4指定DB编号,也必须以字节6明确地指定存储器区。
STEP 7管理基本和复杂数据类型的数据与参数类型的数据不同。
数据类型的ANY格式对于基本和复杂数据类型,STEP 7存储下列数据:数据类型重复因子DB编号信息存储的存储区域数据的起始地址重复因子识别由参数类型ANY传送的指示数据类型的数量。
这意味着可以指定数据区,也可以和参数类型ANY结合使用数组和结构。
STEP 7将数组和结构识别为数据类型的编号(借助重复因数)。
例如,如果要传送10个字,必须为重复因子输入数值10,并且必须为数据类型输入数值04。
地址以格式Byte.Bit存储,此处字节寻址存储在字节7的位0 - 2,节字8的位0 - 7,节字9的位3 - 7。
位地址存储在字节9的位0 - 2。
对于类型NIL的空指针,所有来自字节1的字节设置为0。
下表给出参数类型ANY的数据类型或存储区域的编码。
参数类型的ANY格式对于参数类型,STEP 7存储数据类型和参数的地址。
重复因子始终是1。
字节4、5和7始终是0。
字节8和9指示定时器、计数器或块的编号。
下表为参数类型显示参数类型ANY的数据类型编码。
使用参数类型ANY可以为适合于任何数据类型的实际参数的块定义形式参数。
当调用块是未知或可以改变时(和当允许任何数据类型时),已提供了实际参数的数据类型时,这尤其有用。
在块的变量声明中,可以声明参数为数据类型ANY。
然后可以在STEP 7中分配任何数据类型的实际参数。
STEP 7为ANY数据类型的变量分配存储器的80个位。
如果分配实际参数给此形式参数,STEP 7在80个位中编码起始地址、数据类型和实际参数的长度。
调用块为ANY参数分析保存数据的80个位,并获取进一步处理所需的信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
参数类型POINTER的格式
下图给出了存储在每个字节中的数据类型。
参数类型POINTER存储下列信息:
•DB编号(或0,如果数据没有存储在DB中)
•CPU中的存储区域(下表给出了参数类型POINTER存储器区的十六进制代码)
十六进制代码存储区描述
b#16#81I输入区域
b#16#82Q输出区域
b#16#83M位存储区域
b#16#84DB数据块
b#16#85DI背景数据块
b#16#86L本地的数据(L堆栈)
b#16#87V先前的本地数据
•数据的地址(格式为字节.位)
STEP 7提供指针格式:p#memory_area byte.bit_address.(如果形式参数被声明为参数类型POINTER,只需要指出存储区域和地址。
STEP 7将自动地重定输入指针的格式。
) 下面的实例说明如何为以M50.0开始的数据输入参数类型POINTER:
•P#M50.0
•M50.0 (如果形式参数声明为POINTER)。
使用参数类型POINTER
指针用于指向地址。
这种寻址方式的优点是可以在程序处理期间动态地修改语句的地址。
存储器间接寻址的指针
使用存储器间接寻址的程序语句由指令、地址标识符和偏移量组成(偏移量必须在方括号内给出)。
双字格式指针的实例:
区域内部和区域交叉寻址的指针
使用这些寻址方式的程序语句包含指令和下列部分:地址标识符、地址寄存器标识符、偏移量。
地址寄存器(AR1/2)和偏移量必须在方括号内一起指定。
区域内部寻址的实例
指针不包含存储器区的指示:
偏移量0.0没有影响。
输出10.0由8.7 (AR1)加上偏移量1.1计算出来。
结果是10.0而不是9.8,参见指针格式。
区域交叉寻址的实例
在区域交叉寻址中,存储区域在指针中指出(在实例I和Q中)。
偏移量0.0没有影响。
输出10.0由8.7 (AR2)加上偏移量1.1计算出来。
结果是10.0而不是9.8,参见指针格式。