上海蔻湘自动化设备商行
联系电话: 17621969553 15367687176
联系人: 李 勇 (销售经理)
商务QQ: 1243346113
传真: 021-57350212
质量保证·服务诚信·价格实惠,本公司销售的产品一律为原装正品 , 可以签约正式的销售合同
-------上海蔻湘自动化设备商行 本着“以人为本、科技先导、顾客满意、持续改进”的工作方针,致力于工业自动化控制领域的产品开发、工程配套和系统集成,拥有丰富的自动化产品的应用和实践经验以及雄厚的技术力量,尤其以 PLC复杂控制系统、传动技术应用、伺服控制系统、控备品备件、人机界面及网络/软件应用为公司的技术特长,几年来,上海蔻湘在与德国 SIEMENS公司自动化与驱动部门的长期紧密合作过程中,建立了良好的相互协作关系,在可编程控制器、交直流传动装置方面的业务逐年成倍增长,为广大用户提供了SIEMENS的技术及自动控制的解决方案。
主要经营范围:
PLC及 模块:S7-200、 S7-300、 S7-400、S7-1200,S7-1500,ET-200系列
变 频 器:MM420、 MM430、 MM440、 6SE70、 6RA70,V20,V60,V90系列
触 摸 屏:OP27、 OP37、 OP270、 OP370,TD200, TD400C, K-TP OP177 TP177,MP277, MP377,等系列
数 控:6SN、1FT、6FC、6FX,1FK等系列
主要优势:
逻辑控制模块: LOGO!230RC、230RCO、230RCL、24RC、24RCL
SITOP直流电源: 24V DC 1.3A、2.、3A、、10A、20A、40A可并联.
数控伺服停产备件:(6FC,6SN全系列)
全数字直流调速装置: 6RA23、6RA24、6RA28、6RA70、6SE70系列
SIEMENS 数控 伺服
SINUMERIK:801、802S 、802D、802D SL、810D、840D、611U、S120
系统及伺报电机,力矩电机,直线电机,伺服驱动等备件销售
SIEMENS S7系列
S7-400(优势产品,库存量大)
S7-300(优势产品,库存量大)
S7-200 (优势产品,库存量大)
SIEMENS 其他产品
PLC周边产品(编程电缆,前连接器,导轨)
PLC编程软件
规 格:德国Siemens原产出品;凡所购公司产品,均按原厂质保一年。
西门子STL间接寻址常问问题集
时间:2013-08-09 来源:电气自动化技术网 编辑:编辑部 点击:次 字体设置: 大 中 小
1.1如何获得指针或者间接寻址有关的信息?
指针的类型包括16位指针、32位指针、Pointer(6Byte)和Any(10Byte)。16位指针用于定时器、计数器、程序块的寻址;32位指针用于I/Q/M/L/数据块等存储器中位、字节、字以及双字的寻址,其中第0~2位表示位地址(0~7)、第3~18位为字节地址,其余位未定义;Pointer和Any一般应用在复杂数据类型(比如Date_and_Time /Array/String等)在FB、FC之间的传递。而Any可以看做是对Pointer的延伸,因为由10Byte组成的Any中Byte4~Byte9就是一个Pointer。
了解指针的格式十分重要,为正确使用指针,应阅读如下内容:
1、 "SIMATIC Programming with STEP 7 V5.5" 05/2010 第27.3.4章 参数类型
2、文档:1008用于S7-300 和S7-400 的语句表(STL)编程
3、文档:F0215,S7-300和S7-400寻址 1.2为什么语句 LAR1 P##PointerInput 在一个函数(FC)中是无效的,然而,同样的语句在一个功能块(FB)中是?
在FC被调用时,复杂数据类型例如指针是被复制到调用者的临时变量区中,在FC内部对此V区地址直接取址放入到地址寄存器AR1或AR2是不被编译器规则接受的(导致MC7寄存器信息过长),也就是说在FC内部通过P#进行地址寄存器取址仅能支持Temp临时变量。因此如果需要在FC中操作指针等复杂输入输出变量地址需要使用累加器进行中转。
考虑到程序的一致性、遵守编译器规则和STL手册中LAR1指令说明,建议用户使用如下指令操作:
L P##PointerInput
LAR1 1.3 STEP 7 中哪些操作会覆盖DB/DI寄存器或者地址寄存器AR1/AR2的内容?
下面说明了可能引起DB/DI寄存器或者地址寄存器AR1/AR2内容改变的一些操作:
DB寄存器和AR1受到影响的操作
1. 使用完整的DB路径(如L DB20.Val)或者调用FC/FB时使用DB块完整地址作为其参数,则DB寄存器内容被覆盖。
例如在OB1中调用FC1后,DB寄存器变成20。
OPN DB1
Call FC1
Input(bit):DB20.DBX0.2
因此在编程的时候,OPN 指令打开数据块,通过DBX x.y的方式访问其中内容, 但是如果在打开数据块后DB寄存器的内容被修改了,则DBX x.y的方式访问变量则 会访问到错误的地址。可以通过使用符号寻址的方式或者使用完整路径编程避免,当 然重新使用 OPN指令也是可以的。
2. 调用FC时使用string, array, structure ,UDT作为其形参或者调用FB时使用string, array, structure 或者UDT作为其in out形参,在FC/FB程序中访问这些地址则AR1寄存器内容被覆盖,因此当使用AR1进行间接寻址时需要注意AR1内容的正确性。
AR2地址寄存器和DI寄存器在FB中作为参数和静态变量的基址寻址使用。AR2和DI如果被修改,会影响FB的参数访问,如果希望在FB中使用DI寄存器或者地址寄存器AR2,必须预先保存它们中的内容,并在使用后恢复它们,例如:
TAR2 #AR2_SAVE; //AR2寄存器状态保存到#AR2_SAVE
L DINO;
T #DB2_SAVE; //DI寄存器状态保存到#DB2_SAVE
User Program
LAR2 #AR2_SAVE; //AR2寄存器恢复到使用前状态
OPN DI [#DB2_SAVE]; //DI寄存器恢复到使用前状态
1.4 如何得到多重背景FB中的变量在背景DB里偏移量呢?
可以用下面的方法处理:
TAR2 (得到多重背景FB在背景DB里的偏移地址)
AD DW#16#00FFFFFF (屏蔽掉存储区ID,可参考32位指针格式)
L P##Variable (得到变量在多重背景FB里的地址)
+D (多重背景FB的偏移地址与变量在多重背景FB里地址相加,即得到实际偏移量)
LAR1
上述语句就是就得到了变量在背景DB中偏移量,从而供后续程序处理。 1.5如何在程序中使用ANY 型指针? 简要说明如下:
L P##Input //指向存储地址指针Input首地址
//这个参数是一个Any类型,P##Input指向参数Input的值所在地址,这就是指针的指针
LAR1 //装载到地址寄存器AR1中。
L W [AR1,P#4.0] //打开DB块
// 由Any类型结构知道Any类型的Byte4、Byte5存放的数据块号
T #BLOCK_NO
OPN DB [#BLOCK_NO] //如果是DB块,打开指定的DB块。
L W [AR1,P#2.0] //判断ANY指针中数据长度
// Any类型的Byte2、Byte3是重复系数,如P#DB1.DBX0.0 Byte 8后面的Byte 8
_001:T #DATA_LEN //通常此处做loop循环!!
L D [AR1,P#6.0] //找出需要计算数据区的开始地址
// Any类型Byte6~Byte9是32位区域地址
理解Pointer、Any的类型的数据结构,对于正确使用指针有很大帮助。
为正确使用指针,应仔细阅读如下内容:
"SIMATIC Programming with STEP 7 V5.5" 05/2010 第27.3.4章 参数类型 如下的程序实现了SFC20的部分功能,可以作为Any使用的参考。
资讯来源:17621969553
|