西门子S7-300RS485DP网络插头

发布时间:2018-11-07

西门子S7-300RS485DP网络插头

西门子S7-300RS485DP网络插头

西门子S7-300RS485DP网络插头

(上海湘康自动化设备中心yanyi321)

 凡在公司采购西门子产品,均可质保一年,罚十
花30秒询价,你会知道什么叫优势;花60秒咨询,你会知道什么叫服务;
合作一次,你会知道什么叫质量!以质量求生存,以信誉求发展。
我公司将提供的质量,服务作为自已重要的责任。


德国制造 现货
全新原装 参数
质量保证 保修
价格优势
我公司大量现货供应,价格优势,品质保证,德国原装进口

用于将 PROFIBUS 节点连接到 PROFIBUS 总线电缆

易于安装

FastConnect 插头采用绝缘刺破连接技术,可确保极短的组装时间

集成端接电阻 (6ES7 972-0BA30-0XA0 中不具有)

通过总线连接器连接的编程器,无需额外安装网络节点。

用于 PROFIBUS 的 RS485 总线连接器,可用于连接 PROFIBUS 节点或 PROFIBUS 网络部件到 PROFIBUS 总线电缆。

以下各种不同版本的总线连接器可以按链接的方式应用于被连接的设备:

具有轴向电缆出口(180°)的总线连接器,例如用于 PC 和 SIMATIC HMI OP ,用于传输率达到 12 Mbit/s 的具有集成的总线终端电阻器的设备

具有垂直电缆出口(90°)的总线连接器

这种连接器可以使用传输率高达 12 Mbit/s 的具有集成总线终端电阻器的垂直电缆出口(具有或者没有 PG 接口)。 传输速率达到 3.6 或者 12 Mbit/s 时, 就需要在具有附加 PG 接口的总线连接器和编程设备之间用 SIMATIC S5/S7 连接电缆。

具有 30°电缆出口(低成本版本)的总线连接器,不带传输速率 1.5 Mbit/s 的 ΠΓ 接口,不带集成的总线终端电阻器。

PROFIBUS FastConnect RS485 总线连接器 (90° 或 180° 电缆引出线), 总线大传输速率可达 12 Mbit/s,采用隔离位移法(适用于刚性和柔性电线)可以很方便地进行安装。

总线连接器直接插入到 PROFIBUS 节点或者 PROFIBUS 网络组件的 PROFIBUS 接口(9 针式 Sub-D 型非插入式连接器)。

进线和出线 PROFIBUS LAN 电缆通过连接器中的四个端子连接。

使用从外部很容易接近的开关( 6ES7 972-0BA30-0XA0 除外)来连接集成在总线连接器中的线路终接器。 在这里,进线和出线总线电缆在连接器中是分开的(隔离功能)。

PROFIBUS 两端都必须如此。

西门子DP总线连接器 西门子总线连接器 西门子DP头 西门子DP插头

西门子DP总线连接器

6ES7972-0BB12-0XA0 网络总线连接器,带编程口, 垂直电缆出线
6ES7972-0BA12-0XA0 网络总线连接器,不带编程口,垂直电缆出线
6ES7972-0BA41-0XA0 网络总线连接器,不带编程口,35°垂直电缆出线
6ES7972-0BB41-0XA0 网络总线连接器,带编程口, 35°垂直电缆出线
6ES7972-0BA50-0XA0 网络总线连接器,90°无编程口快速总线连接器
6ES7972-0BB50-0XA0 网络总线连接器,90°带编程口快速总线连接器
6ES7972-0BA52-0XA0 网络总线连接器,不带编程口,垂直电缆出线
6ES7972-0BB52-0XA0 网络总线连接器,带编程口, 垂直电缆出线

西门子DP接头 西门子DP电缆接头 西门子DP电缆插头 西门子总线接头

西门子总线插头 西门子DP总线接头 西门子DP总线插头 西门子DP通讯接头

西门子DP通讯插头 西门子DP通讯连接器 西门子电缆连接器 西门子电缆接头

西门子电缆插头 西门子通讯接头 西门子通讯插头 西门子通讯连接器

西门子电缆通讯连接器 西门子电缆通讯接头 西门子电缆通讯插头

西门子总线电缆连接器 西门子插头 西门子接头 西门子连接器

西门子总线电缆接头 西门子总线电缆插头 西门子总线电缆通讯接头

西门子总线电缆通讯插头 西门子总线电缆通讯连接器


@ S7-200 CPU模块提供5VDC和24VDC电源:
当有扩展模块时CPU通过I/O总线为其提供5V电源,所有扩展模块的5V电源消耗之和不能过该CPU提供的电源额定。若不够用不能外接5V电源。每个CPU都有一个24VDC传感器电源,它为本机输入点和扩展模块输入点及扩展模块继电器线圈提供24VDC。如果电源要求出了CPU模块的电源定额,你可以增加一个外部24VDC电源来提供给扩展模块。
所谓电源计算,就是用CPU所能提供的电源容量,减去各模块所需要的电源消耗量。
注意: EM277模块本身不需要24VDC电源,这个电源是通讯端口用的。24VDC电源需求取决于通讯端口上的负载大小。
CPU上的通讯口,可以连接PC/PPI电缆和TD 200并为它们供电,此电源消耗已经不必再纳入计算。
@ 调试前的组网故障问题结

 在每一次调试前,我们要做的工作就是把硬件全部组态正确,网络组建好。此时,才能把程序下载进去进行软硬件的调试。然而,就是这前期的组网问题,往往能够遇到千奇百怪的问题。不管经历过的弯路,终都会把项目调试完成。只不过是顺利不顺利的问题。下面就我经历过的一些小白问题,跟大家分享下。

1、模块已组态,但不可用,预设值/实际值不匹配:(插入的模块和组态的模块类型不同) 期望的型号 ,与当前型号不匹配或是 不可用。
这样的故障为常见了。那么,很有可能的原因:(1)就是检查组态型号和实际模块型号是否一致。不过这样的原因很小,因为大家做工程都很谨慎,(2)就是硬件上有些模块没能正确连接上,导致故障出现。也会出现此类故障现象。我遇到a.西门子ET200S上的高性能直接启动器模块与底板插接处,因为接线工的暴力,竟然把链接处的插针压弯了。表面上安装到位了。实际没有到位。这样导致ET200S故障,导致CPU也会出现上面的故障。当时,换了模块也不行,换了底板才发现插针已经损坏。b.实际安装的模块数量比软件组态中的数量模块多一个,但是多这个模块没有用,只是备用。但是,软件中的硬件组态下载到CPU中,硬件多一个模块,虽然没有接外边传感信号,但是它在ET200S接口模块上。这个故障让我很郁闷。大致一看,没有问题。都是正确的。但是,仔细检查,少组态了一个备用的模块。同样也会出现上面的故障信息。

  2、针对总线没有连通,我遇到的情况跟大家分享下。

 (1)ProfiNet网络不能正常连接

a、网线硬件连接就是错误的。由于接线都是接线工来操作。根据在线诊断,定位故障的子站或是分站的设备。 我都是再另外做一根长的网线,单独拉一根到出故障的设备上面,进行检测。直接判断出,网线的硬件接线错误。b.干扰问题所致。当时,我的网络总线布置是分站和变频器走在一路上面,星型连接。每一路上面都是ET200S子站和变频器。当时组态没有问题,但是真正运行时候,就出现网络故障。后来在网络布置上进行更改,一路上把子站放一路,把变频器放一路,这样重新布置网络,重新布线,避免了上面的问题。

 (2)ProfiBus网络不能正常连接

a.设备初期运行正常,运行了半年之后,就是出现丢站的现象。当时,以为是干扰所致,就把所有屏蔽做了检测和修改。故障仍然出现。总线电缆也是西门子原装的。后来就更改网络结构。把CPU上的DP接口放在总线的中间,终端电阻打到OFF,然后,两边再连接其他DP站。原来是CPU放在DP总线的开始端,这样经过更改之后,故障不出现了。这根通讯的据率和速率有关系导致这个故障出现。

b、DP总线一直故障,连接不上。从硬件检查,包括DP设备上拨码开关。软件参数的检查都没有问题。但是始终通讯不上。这个故障让我折腾很长时间才找出问题。当时,也是把通讯电缆和动力电缆分开布线,降低通讯速率,终端电阻检查,屏蔽接线的检查。都没有问题。

   原来是DP接头安放的位置不对所致的。 我CPU下挂了机器人。机器人对CPU来说是从站,但是机器人自身有下挂了ET200L作为这个模块的主站。这样,机器人作为CPU从站,作为ET200L模块的主站。DP总线需要两个DP接头,一个是从CPU过来的,一个是从ET200L过来。都要接在机器人上安装的CP5614 A2这个通讯卡上面。同时,要保证机器人内部通讯参数配置正确,I.O驱动配置正确。以为这方面原因,折腾来折腾去的。反复配置断电重启。都不行。看终端电阻的位置也都正确。后来静心想了下,漏 一个环节,因为接线安装都是工人在操作。我一看DP接头硬件安装位置机不对,导致整个DP总线就不能通讯。后来把两个DP接头在机器人控制柜内换下位置就全部好了。

  上面是我们都经常在调试前遇到小问题,只是我们做调试前,细心点,冷静点,都能把这些问题快速解决。

@


销售地区:
北京,重庆,天津,上海,河北,石家,唐山,秦皇,邯郸,邢台,保定,张家口,承德西,沧州,廊坊,衡水,山西,太原,大同,阳泉,长治,晋城,朔州,晋中,运城,忻州,临汾,吕梁,内蒙古,呼和浩特,辽宁西,沈阳
大连,鞍山,抚顺,本溪,丹东,锦州,营口,阜新,辽阳,盘锦,铁岭,朝阳,葫芦岛,吉林,长春,吉林,四平,辽源,通化,白山,松原,白城,黑龙江,哈尔滨,齐齐哈尔,鸡西,鹤岗,双鸭山,大庆,伊春,佳木斯,七台河,牡丹江,黑河,绥化,江苏,南京,无锡,徐州,常州,苏州,南通,连云港,淮安,盐城,扬州,镇江,泰州,宿迁,浙江,杭州,宁波,温州,嘉兴,湖州,绍兴,金华,衢州,舟山,台州,丽水,安徽,合肥,芜湖,蚌埠,淮南,马鞍山,淮北,铜陵,安庆,黄山,滁州,阜阳,宿州,巢湖,六安,亳州,池州,宣城,福建,福州,厦门,莆田,三明,泉州,漳州,南平,龙岩,宁德,江西,南昌,景德镇,萍乡,九江,新余,鹰潭,赣州,吉安
宜春,抚州,上饶,山东,济南,青岛,淄博,枣庄,东营,烟台,潍坊,威海,济宁,泰安,日照,莱芜,临沂,德州,聊城,滨州,菏泽,河南,郑州,开封,洛阳,平顶山,焦作,鹤壁,新乡,安阳,濮阳,许昌,漯河,三门峡,南阳,商丘,信阳,周口,驻马店,湖北,武汉,黄石,襄阳,十堰,荆州,宜昌,荆门,鄂州,孝感,黄冈,咸宁,随州,恩施州,湖南,长沙,株洲,湘潭,衡阳,邵阳,岳阳,常德,张家界,益阳,郴州,永州,怀化,娄底,湘西,广东,广州,深圳,珠海,汕头,韶关,佛山,江门,湛江,茂名,肇庆,惠州,梅州,汕尾,河源,阳江,清远,东莞,中山,潮州,揭阳,云浮,广西,南宁,柳州,桂林,梧州,北海,钦州,贵港,玉林,百色,贺州,河池,来宾,崇左,海南,海口,四川,成都,自贡,攀枝花,泸州,德阳,绵阳,广元,遂宁,内江,乐山,南充,宜宾,广安,达州,眉山,雅安,巴中,贵州,贵阳,六盘水,遵义,安顺,铜仁,毕节,黔西南州,黔东南州,黔南州,云南,昆明,曲靖,玉溪,保山,昭通,丽江,普洱,临沧,西藏,拉萨,陕西,西安,铜川,宝鸡,咸阳,渭南,延安,汉中,榆林,安康,商洛,甘肃,兰州,嘉峪关,金昌,白银,天水,武威,张掖,平凉,酒泉
庆阳,定西,陇南,临夏,甘南,青海,西宁,海东 ,宁夏,银川,新疆,乌鲁木齐。


西门子RS485DP通讯连接器@ @ 订货号 注释
PROFIBUS网络部件: 
网卡及电缆 
6ES7 972-0CB20-0XA0 USB接口编程适配器(USB接口编程电缆)
6ES7 972-0CB35-0XA0 TS适配器II 用于调制解调器远程服务
6ES7 972-0CC35-0XA0 TS适配器II 用于ISDN 远程服务
6GK1 561-1AA01 CP5611网卡(PCI总线软卡,支持MPI,PPI,PROFIBUS-DP)
6GK1 562-1AA00 CP5621 PCI EXPRESS X1-卡(32 位),用于连接 编程器或带 PCI EXPRESS-BUS 的 PC 到 PB 或 MPI;
6GK1 551-2AA00 CP5512网卡(PCMCIA总线软卡,支持MPI,PPI,PROFIBUS-DP,笔记本电脑用,32BIT)
6GK1 561-3AA01 CP5613网卡(PCI总线硬卡,支持PROFIBUS-DP主站)
6GK1 561-3FA00 CP5613光纤网卡(PCI总线硬卡,支持PROFIBUS-DP主站
6GK1 561-4AA01 CP5614网卡(PCI总线硬卡,支持PROFIBUS-DP主站/从站)
6GK1 561-4FA00 CP5614光纤网卡(PCI总线硬卡,支持PROFIBUS-DP主站/从站)
6XV1830-3EH10 
6XV1830-0EH10 PROFIBUS通讯电缆
6XV1 820-H10 光纤电缆(米)
6XV1 820-5BH50 光纤电缆 含BFOC (5米)
6XV1 820-5BT10 光纤电缆 含BFOC (100米)
6GK1 901-0DA20-0AA0 BFOC接头(每包20只)
6ES7 901-0BF00-0AA0 5米MPI电缆
6ES7 901-1BF00-0XA0 RS232电缆
链接模板 
6GK1 415-2AA01 DP-AS-i 网关 IP20
6GK1 415-0AA01 DP-EIB 网关
6ES7 158-0AD01-0XA0 DP/DP 耦合器 
6ES7 157-0AC83-0XA0 DP/PA 耦合器 ,非本安区
6ES7 157-0AD82-0XA0 DP/PA 耦合器 ,本安区
6XV1 830-5EH10 PROFIBUS FC 过程电缆( 易爆区 )
6XV1 830-5FH10 PROFIBUS FC 过程电缆( 非易爆区 )
6ES7 195-7HF80-0XA0 DP/PA耦合器有源总线单元
6GK1 905-0AA00 SpliTConnect分接头(10件)
6GK1 905-0AD00 SpliTConnect终端(Ex)(5件)
6GK1 905-0AB10 SpliTConnect M12输出端(5件)
6GK1 905-0AC00 SpliTConnect 耦合器(10件)
总线连接器 
6GK1 905-6AA00 快速剥线工具
6ES7972-0BA52-0XA0 快速连线DP总线接头不带编程口
6ES7972-0BB52-0XA0 快速连线DP总线接头带编程口
6ES7 972-0BA50-0XA0 快速连线网络接头(不带编程口)
6ES7 972-0BB50-0XA0 快速连线网络接头(带编程口)
6ES7 972-0BA12-0XA0 90度网络接头(不带编程口)
6ES7 972-0BB12-0XA0 90度网络接头(带编程口)
6ES7 972-0BA42-0XA0 35度DP总线不带编程口接头
6ES7 972-0BB42-0XA0 35度DP总线带编程口接头
6ES7 972-0BA41-0XA0 35度网络接头(不带编程口)
6ES7 972-0BB41-0XA0 35度网络接头(带编程口)
6GK1 500-0EA02 无角度网络接头(不带编程口)
6GK1 500-0FC00 无角度快速连线网络接头(不带编程口)

@ 西门子间接寻址精讲教程

详解西门子间接寻址
【地址的概念】 
完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如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,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。间接由此得名。
西门子的间接寻址方式计有两大类型:存储器间接寻址和寄存器间接寻址。
【存储器间接寻址】
存储器间接寻址的地址给定格式是:地址标识符+指针。指针所指示存储单元中所包含的数值,就是地址的确切数值单元。
存储器间接寻址具有两个指针格式:单字和双字。
单字指针是一个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存入ACC1
T MD2 //这个值再存入MD2,这是个32位的位存储区域
L +10 //将16位整数10存入ACC1,32位16进制数35自动移动到ACC2
T MW100 //这个值再存入MW100,这是个16位的位存储区域
OPN DBW[MW100] //打开DBW10。这里的[MW100]就是个单字指针,存放指针的区域是M区,
MW100中的值10,就是指针间接的地址,它是个16位的值!
--------
L L#+10 //以32位形式,把10放入ACC1,此时,ACC2中的内容为:16位整数10
T MD104 //这个值再存入MD104,这是个32位的位存储区域
A I[MD104] //对I1.2进行与逻辑操作!
=DIX[MD2] //赋值背景数据位DIX6.5!
--------
A DB[MW100].DBX[MD2] //读入DB10.DBX6.5数据位状态
=Q[MD2] //赋值给Q6.5
--------
A 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:0000 0000 0000 0000 0000 0000 0000 1010
当作为双字指针时,就应该按照3-18bitbyte,0-2bitbit来确定终指令要操作的地址,因此:
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中,就存有不同的内容,它们代表着不同的含义。
【AR的格式】
地址寄存器是专门用于寻址的一个特殊指针区域,西门子的地址寄存器共有两个:AR1和AR2,每个32位。
当使用在区域内寄存器间接寻址中时,我们知道这时的AR中的内容只是指明数值单元,因此,区域内寄存器间接寻址时,寄存器中的内容等同于上帖中提及的存储器间接寻址中的双字指针,也就是:
其0-2bit,bit位,3-18bitbyte字节。其第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 0YYY 0000 0BBB BBBB BBBB BBBB BXXX
比较一下两种格式的不同,我们发现,这里的第31bit被固定为1,同时,第24、25、26位有了可以取值的范围。聪明的你,肯定可以联想到,这是用于存储区域的。对,bit24-26的取值确定了要寻址的区域,它的取值是这样定义的:
区域标识符 
26、25、24位 
P(外部输入输出) 
000 
I(输入映像区) 
001 
Q(输出映像区) 
010 
M(位存储区) 
011 
DB(数据块) 
100 
DI(背景数据块) 
101 
L(暂存数据区,也叫局域数据) 
111 
如果我们把这样的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结构给定指针。
L P#M100.0 //把M100.0这个指针存入ACC1,此时ACC1的内容=83000320(hex)=M100.0
L P#DB100.DBX26.4 //错误!DBX已经提供了存储区域,不能重复。
L P#DBX26.4 //把DBX26.4这个指针存入ACC1,此时ACC1的内容=840000D4(hex)=DBX26.4
我们发现,当对P#只是数值时,累加器中的值和区域内寻址指针规定的格式相同(也和存储器间接寻址双字指针格式相同);而当对P#带有存储区域时,累加器中的内容和区域间寻址指针内容完全相同。事实上,把什么样的值传给AR,就决定了是以什么样的方式来进行寄存器间接寻址。在实际应用中,我们正是利用P#的这种特点,根据不同的需要,P#指针,然后,再传递给AR,以确定终的寻址方式。
在寄存器寻址中,P#XXX作为寄存器AR指针的偏移量,用来和AR指针进行相加运算,运算的结果,才是指令真正要操作的确切地址数值单元!
无论是区域内还是区域间寻址,地址所在的存储区域都有了,因此,这里的P#XXX只能纯粹的数值,如上面例子中的。
【指针偏移运算法则】
在寄存器寻址指针 [AR1/2,P#byte.bit] 这种结构中,P#byte.bit如何参与运算,得出终的地址呢?
运算的法则是:AR1和P#中的数值,按照BYTE位和BIT位分类相加。BIT位相加按八进制规则运算,而BYTE位相加,则按照十进制规则运算。
例如:寄存器寻址指针是:[AR1,P#2.6],我们分AR1=26.4和DBX26.4两种情况来分析。
当AR1等于26.4,
AR1:26.2
+ P#: 2.6
---------------------------
= 29.7 这是区域内寄存器间接寻址的终确切地址数值单元
当AR1等于DBX26.4,
AR1:DBX26.2
+ P#: 2.6
---------------------------
= DBX29.7 这是区域间寄存器间接寻址的终确切地址数值单元
【AR的地址数据赋值】
通过前面的介绍,我们知道,要正确运用寄存器寻址,重要的是对寄存器AR的赋值。同样,区分是区域内还是区域间寻址,也是看AR中的赋值。
对AR的赋值通常有下面的几个方法:
1、直接赋值法
例如:
L DW#16#83000320
LAR1
可以用16进制、整数或者二进制直接给值,但必须确保是32位数据。经过赋值的AR1中既存储了地址数值,也了存储区域,因此这时的寄存器寻址方式肯定是区域间寻址。
2、间接赋值法
例如:
L [MD100]
LAR1
可以用存储器间接寻址指针给定AR1内容。具体内容存储在MD100中。
3、指针赋值法
例如:
LAR1 P#26.2
使用P#这个32位“常数”指针赋值AR。
之,无论使用赋值方式,由于AR存储的数据格式有明确的规定,因此,都要在赋值前,确认所赋的值是否符合寻址规范。
详解西门子间接寻址
使用间接寻址的主要目的,是使指令的执行结果有动态的变化,简化程序是目的,在某些情况下,这样的寻址方式是必须的,比如对某存储区域数据遍历。此外,间接寻址,还可以使程序更具柔性,换句话说,可以标准化。
下面通过实例应用来分析如何灵活运用这些寻址方式,在实例分析过程中,将对前面帖子中的笔误、错误和遗漏做纠正和补充。
【存储器间接寻址应用实例】
我们先看一段示例程序:
L 100 
T MW 100 // 将16位整数100传入MW100
L DW#16#8 // 加载双字16进制数8,当把它用作双字指针时,按照BYTE.BIT结构,
结果演变过程就是:8H=1000B=1.0
T MD 2 // MD2=8H
OPN DB [MW 100] // OPN DB100
L DBW [MD 2] // L DB100.DBW1
T MW[MD2] // T MW1 
A DBX [MD 2] // A DBX1.0
= M [MD 2] // =M1.0
在这个例子中,我们中心思想其实就是:将DB100.DBW1中的内容传送到MW1中。这里我们使用了存储器间接寻址的两个指针——单字指针MW100用于DB块的编号,双字指针MD2用于DBW和MW存储区字地址。
-------------------------------------------------------------------------------------------------------------------------------------------------
对于坛友提出的 DB[MW100].DBW[MD2] 这样的寻址是错误的提法,这里做个解释:
DB[MW100].DBW[MD2] 这样的寻址结构就寻址原理来说,是可以理解的,但从SIEMENS程序执行机理来看,是非法的。在实际程序中,对于这样的寻址,程序语句应该写成:
OPN DBW[WM100], L DBW[MD2]-------------------------------------------------------------------------------------------------------------------------------------------------
事实上,从这个例子的中心思想来看,根本没有必要如此复杂。但为什么要用间接寻址呢?
要澄清使用间接寻址的优势,就让我们从比较中,找答案吧。
例子告诉我们,它终执行的是把DB的某个具体字的数据传送到位存储区某个具体字中。这是针对数据块100的1数据字传送到位存储区第1字中的具体操作。如果我们现在需要对同样的数据块的多个字(连续或者不连续)进行传送呢?直接的方法,就是一句一句的写这样的具体操作。有个字的传送,就写这样的语句。毫无疑问,即使不知道间接寻址的道理,也应该明白,这样的编程方法是不合理的。而如果使用间接寻址的方法,语句就简单多了。
【示例程序的结构分析】
我将示例程序从结构上做个区分,重新输入如下:
=========================== 输入1:数据块编号的变量
|| L 100 
|| T MW 100 
===========================输入2:字地址的变量
|| L DW#16#8 
|| T MD 2 
===========================操作主体程序 
OPN DB [MW 100] 
L DBW [MD 2] 
T MW[MD2] 
显然,我们根本不需要对主体程序(红色部分)进行简单而重复的复写,而只需改变MW100和MD2的赋值(绿色部分),就可以完成应用要求。
结论:通过对间接寻址指针内容的修改,就完成了主体程序执行的结果变更,这种修改是可以是动态的和静态的。
正是由于对真正的目标程序(主体程序)不做任何变动,而寻址指针是这个程序中要修改的地方,可以认为,寻址指针是主体程序的入口参数,就好比功能块的输入参数。因而可使得程序标准化,具有移植性、通用性。
那么又如何动态改写指针的赋值呢?不会是另一种简单而重复的复写吧。
让我们以一个具体应用,来完善这段示例程序吧:
将DB100中的1-11数据字,传送到MW1-11中
在设计完成这个任务的程序之前,我们先了解一些背景知识。
【数据对象尺寸的划分规则】
数据对象的尺寸分为:位(BOOL)、字节(BYTE)、字(WORD)、双字(DWORD)。这似乎是个简单的概念,但如果,MW10=MB10+MB11,那么是不是说,MW11=MB12+MB13?如果你的回答是肯定的,我建议你继续看下去,不要跳过,因为这里的疏忽,会导致终的程序的错误。
按位和字节来划分数据对象大小时,是以数据对象的bit来偏移。这句话就是说,0bit后就是1bit,1bit后肯定是2bit,以此类推直到7bit,完成一个字节大小的,再有一个bit的偏移,就进入下一个字节的0bit。
而按字和双字来划分数据对象大小时,是以数据对象的BYTE来偏移!这就是说,MW10=MB10+MB11,并不是说,MW11=MB12+MB13,正确的是MW11=MB11+MB12,然后才是MW12=MB12+MB13!
这个概念的重要性在于,如果你在程序中使用了MW10,那么,就不能对MW11进行任何的操作,因为,MB11是MW10和MW11的交集。
也就是说,对于“将DB100中的1-11数据字,传送到MW1-11中”这个具体任务而言,我们只需要对DBW1、DBW3、DBW5、DBW7、DBW9、DBW11这6个字进行6次传送操作即可。这就是单独分出一节,说明数据对象尺寸划分规则这个看似简单的概念的目的所在。
【循环的结构】
要“将DB100中的1-11数据字,传送到MW1-11中”,我们需要将指针内容按照顺序逐一指向相应的数据字,这种对指针内容的动态修改,其实就是遍历。对于遍历,简单的莫过于循环。
一个循环包括以下几个要素:
1、初始循环指针
2、循环指针自加减
2、继续或者退出循环体的条件判断
被循环的程序主体必须位于初始循环指针之后,和循环指针自加减之前。
比如:
初始循环指针:X=0
循环开始点M
被循环的程序主体:-------
循环指针自加减:X+1=X
循环条件判断:X≤10 ,False:GO TO M;True:GO TO N
循环退出点N
如果把X作为间接寻址指针的内容,对循环指针的操作,就等于对寻址指针内容的动态而循环的修改了。
【将DB100中的1-11数据字,传送到MW1-11中】
L L#1 //初始化循环指针。这里循环指针就是我们要修改的寻址指针
T MD 102 
M2: L MD 102
T #COUNTER_D 
OPN DB100
L DBW [MD 102]
T MW [MD 102]
L #COUNTER_D
L L#2 // +2,是因为数据字的偏移基准是字节。 
+D 
T MD 102 //自加减循环指针,这是动态修改了寻址指针的关键 
L L#11 //循环次数=n-1。n=6。这是因为,首次进入循环是无条件的,
但已事实上执行了一次操作。

西门子S7-300RS485DP网络插头
上一篇:研发MC800T-5A-C/...
下一篇:6ES7671-1RC08-0Y...