plc地址的概念
- 格式:docx
- 大小:28.65 KB
- 文档页数:19
固定地址分配方式是一种对PLC安装机架上的每一个安装位置(插槽)都规定地址的分配方式。
其特点如下:
①PLC的每一个安装位置都按照该系列PLC全部模块中可能存在的最大I/O 点数分配地址。
例如:S7-300系列I/O模块中最大开关量输入/输出为32点,因此,每一个安装位置都必须分配32点地址:如果实际安装的模块只有16点输入,那么剩余的I/O地址将不可以再作为物理输入点使用。
②对于输入或输出来说,I/O地址是间断的,而且,在输入与输出中不可以使用相同的二进制字节与位。
例如:S7-300系列I/O模块的第1安装位中安装了32点输入模块,地址数据中的0.0~3.7就被该模块所占用,地址固定为I0.0~13.7;即使第2安装位中安装了32点输出模块,其输出地址也只能是Q4.O~Q7.7,而不可以是QO.O~Q3.7,在实际编程时QO.O~Q3.7就变成了不存在的输出。
同样,如果在第3
安装位中接着安装了16点输入模块,其地址将为I8.0~19.7,在实际编程时I4.0~17.7就变成了不存在的输入。
以上分配原则对模拟量模块同样适用。
艾驰商城是国内最专业的MRO工业品网购平台,正品现货、优势价格、迅捷配送,是一站式采购的工业品商城!具有10年工业用品电子商务领域研究,以强大的信息通道建设的优势,以及依托线下贸易交易市场在工业用品行业上游供应链的整合能力,为广大的用户提供了传感器、图尔克传感器、变频器、断路器、继电器、PLC、工控机、仪器仪表、气缸、五金工具、伺服电机、劳保用品等一系列自动化的工控产品。
如需进一步了解台达PLC、西门子PLC、施耐德plc、欧姆龙PLC的选型,报价,采购,参数,图片,批发等信息,请关注艾驰商城/。
上位机与plc的网口通讯地址设置随着工业自动化的迅猛发展,上位机与PLC之间的通讯变得愈发重要。
而网口通讯地址的正确设置则是实现这一目标的关键。
本文将探讨上位机与PLC的网口通讯地址设置的相关问题。
一、什么是网口通讯地址网口通讯地址是指用于设备间进行数据传输和交流的网络地址,为确保通讯的顺利进行,上位机和PLC之间的网口通讯地址需要按照一定的设定进行设置。
二、IP地址的设置IP(Internet Protocol)地址是互联网上面每一台计算机的唯一标识,也是上位机与PLC之间进行通讯的关键。
IP地址由四个由句点分隔的数字构成,例如192.168.1.1。
在设置IP地址时,需要首先确定上位机和PLC在同一网络段上。
这意味着IP地址的前三段数字需要一致,只有最后一段数字不同。
例如,上位机的IP地址设置为192.168.1.100,那么PLC的IP地址可以设置为192.168.1.101。
通过这样的设置,上位机和PLC就处于同一网络段上,可以进行通讯。
另外,为了避免地址冲突,确保网络的安全稳定,建议将IP地址设置为静态IP地址,而不是动态分配的DHCP地址。
静态IP地址不会随着网络变化而改变,可以保证通讯的连续性。
三、子网掩码的设置子网掩码(Subnet Mask)用来确定同一网络中的设备数量。
一般情况下,子网掩码为255.255.255.0,也可以根据具体情况进行调整。
设置子网掩码时,需要确保上位机和PLC的子网掩码一致,才能进行正常的通讯。
如果子网掩码不一致,可能会导致通讯失败或者无法连接。
四、网关的设置网关(Gateway)是连接不同网络之间的通道,也是上位机和PLC进行通讯的桥梁。
网关的设置需要与路由器的设置保持一致。
在设置网关时,需要确保上位机和PLC的网关地址一致,才能实现跨网段的通讯。
如果网关设置不正确,可能会导致无法访问PLC或者无法实现数据传输。
五、端口号的设置端口号是上位机与PLC之间进行通讯时使用的标识,不同的通讯协议对应不同的端口号。
欧姆龙 PLC的地址分配————————————————————————————————作者 : ————————————————————————————————日期 :?欧姆龙 PLC的地址分配欧姆龙PLC 系统中的单元, 根据前后位置或单元的特殊性,分别占用CI O区不同的地址 , 了解地址分配、知道输入、输出数据的具体存放位置,就能够利用编程对数据进行正确的处理。
第一讲欧姆龙PL C 的地址分配在 I/ O存储器中,CPU单元和CP1 W扩展单元的输入地址占用出地址占用100 ~116通道,而1个通道就是我们所说的本篇我们以CP1H 为例,来说明PLC地址分配的规律。
000 ~011 个字 , 它也等于6通道 ,输16 个位,1、 CPU单元地址分配X 和 XA型CPUX 和占用XA 型0 ~CPU单元自带40点1 通道 , 总共分配2I/O ,其中输入4 个输入位:24 点,输出16 点,在CIO 区输入部分①其中12 个位为0 通道的位00 ~位11②另12个位为1通道的位00~位11③0通道和 1 通道中不使用的位 12 ~ 位 15,将始终被清除,且不可用作内部辅助工作位X 和 XA 型C PU单元的输出 16点 , 在 CI O 区输出部分占用 100 ~ 101 通道,总共分配 16 个输出位:①其中8 个位为100 通道的位00~位07②另8个位为10 1 通道的位0 0~位07③100通道和101通道的位08 ~位15,可用作内部辅助工作位CP1H-XA 型 CPU中自带了模拟量输入和输出,其中 4 路模拟量输入占用200 ~ 203 通道, 2 路模拟量输出占用210 ~ 21 1 通道。
Y型 CPUCP 1H-Y型CPU 中自带 2 0点 I/O,其中输入12点 , 输出8点,由于脉冲输入输出专用端子占用,输入输出被分配到不连续的地址:①所以Y型CPU单元的输入,占用CIO 区 0 通道和1通道的共计12 点②0 通道和1通道中不使用的位1 2 ~ 位 15 , 将始终被清除,且不可用作内部辅助工作位Y 型 CPU单元的输出8 点 , 也是由于脉冲输入输出专用端子占用:①CPU单元的输出占用CIO 区 10 0 通道和101 通道的共计8 点②100通道和101 通道中不使用的位08 ~位15,可用作内部辅助工作位2、扩展单元地址分配扩展单元的作用是扩展输入、输出,扩展单元从CP U 单元的分配通道之后的下一个通道开始, 依次往后分配地址。
欧姆龙PLC的地址分配欧姆龙PLC系统中的单元,根据前后位置或单元的特殊性,分别占用CIO区不同的地址,了解地址分配、知道输入、输出数据的具体存放位置,就能够利用编程对数据进行正确的处理。
第一讲欧姆龙PLC的地址分配在I/O存储器中,CPU单元和CP1W扩展单元的输入地址占用000 ~ 016通道,输出地址占用100 ~ 116通道,而1个通道就是我们所说的1个字,它也等于16个位,本篇我们以CP1H为例,来说明PLC地址分配的规律。
1、CPU单元地址分配X和XA型CPUX和XA型CPU单元自带40点I/O,其中输入24点,输出16点,在CIO区输入部分占用0 ~ 1通道,总共分配24个输入位:①其中12个位为0通道的位00 ~ 位11②另12个位为1通道的位00 ~ 位11③ 0通道和1通道中不使用的位12 ~ 位15,将始终被清除,且不可用作内部辅助工作位X和XA型CPU单元的输出16点,在CIO区输出部分占用100 ~ 101通道,总共分配16个输出位:①其中8个位为100通道的位00 ~ 位07②另8个位为101通道的位00 ~ 位07③ 100通道和101通道的位08 ~ 位15,可用作内部辅助工作位CP1H-XA型CPU中自带了模拟量输入和输出,其中4路模拟量输入占用200 ~ 203通道,2路模拟量输出占用210 ~ 211通道。
Y型CPUCP1H-Y型CPU中自带20点I/O,其中输入12点,输出8点,由于脉冲输入输出专用端子占用,输入输出被分配到不连续的地址:①所以Y型CPU单元的输入,占用CIO区0通道和1通道的共计12点② 0通道和1通道中不使用的位12 ~ 位15,将始终被清除,且不可用作内部辅助工作位Y型CPU单元的输出8点,也是由于脉冲输入输出专用端子占用:① CPU单元的输出占用CIO区100通道和101通道的共计8点② 100通道和101通道中不使用的位08 ~ 位15,可用作内部辅助工作位2、扩展单元地址分配扩展单元的作用是扩展输入、输出,扩展单元从CPU单元的分配通道之后的下一个通道开始,依次往后分配地址。
欧姆龙PLC的地址分配————————————————————————————————作者: ————————————————————————————————日期:ﻩ欧姆龙PLC的地址分配欧姆龙PLC系统中的单元,根据前后位置或单元的特殊性,分别占用CIO区不同的地址,了解地址分配、知道输入、输出数据的具体存放位置,就能够利用编程对数据进行正确的处理。
第一讲欧姆龙PLC的地址分配在I/O存储器中,CPU单元和CP1W扩展单元的输入地址占用000 ~ 016通道,输出地址占用100 ~ 116通道,而1个通道就是我们所说的1个字,它也等于16个位,本篇我们以CP1H为例,来说明PLC地址分配的规律。
1、CPU单元地址分配X和XA型CPUX和XA型CPU单元自带40点I/O,其中输入24点,输出16点,在CIO区输入部分占用0 ~ 1通道,总共分配24个输入位:①其中12个位为0通道的位00 ~ 位11②另12个位为1通道的位00 ~ 位11③0通道和1通道中不使用的位12 ~ 位15,将始终被清除,且不可用作内部辅助工作位X和XA型CPU单元的输出16点,在CIO区输出部分占用100 ~ 101通道,总共分配16个输出位:①其中8个位为100通道的位00 ~ 位07②另8个位为101通道的位00~位07③100通道和101通道的位08 ~ 位15,可用作内部辅助工作位CP1H-XA型CPU中自带了模拟量输入和输出,其中4路模拟量输入占用200 ~ 203通道,2路模拟量输出占用210 ~ 211通道。
Y型CPUCP1H-Y型CPU中自带20点I/O,其中输入12点,输出8点,由于脉冲输入输出专用端子占用,输入输出被分配到不连续的地址:①所以Y型CPU单元的输入,占用CIO区0通道和1通道的共计12点②0通道和1通道中不使用的位12 ~ 位15,将始终被清除,且不可用作内部辅助工作位Y型CPU单元的输出8点,也是由于脉冲输入输出专用端子占用:①CPU单元的输出占用CIO区100通道和101通道的共计8点②100通道和101通道中不使用的位08 ~位15,可用作内部辅助工作位2、扩展单元地址分配扩展单元的作用是扩展输入、输出,扩展单元从CPU单元的分配通道之后的下一个通道开始,依次往后分配地址。
plc地址的概念完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如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 .其中,我们又把〖存储区符〗〖存储区尺寸符〗这两个部分合称为:地址标识符。
这样,一个确切的地址组成,又可以写成:地址标识符 + 确切的数值单【间接寻址的概念】寻址,就是指定指令要进行操作的地址。
给定指令操作的地址方法,就是寻址方法。
在谈间接寻址之前,我们简单的了解一下直接寻址。
所谓直接寻址,简单的说,就是直接给出指令的确切操作数,象上面所说的,A Q2.0,就是直接寻址,对于A这个指令来说,Q2.0就是它要进行操作的地址。
这样看来,间接寻址就是间接的给出指令的确切操作数。
对,就是这个概念。
比如:A Q[MD100] ,A T[DBW100]。
程序语句中用方刮号 [ ] 标明的内容,间接的指明了指令要进行的地址,这两个语句中的MD100和DBW100称为指针Pointer,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。
间接由此得名。
西门子PLC的地址的分配方式根据不同的PLC配置情况确定I/O地址是PLC编程的前提与基础,程序中的地址必须与实际物理连接点一一对应,才能确保动作的正确执行。
当选择了PLC之后,首先需要确定的是系统中各I/O 点的绝对地址。
在西门子S7系列PLC中I/O绝对地址的分配方式共有固定地址型、自动分配型、用定义型3种。
实际所使用的方式决定于所采用的PLC的CPU型号、编程软件、软件版本、编程人员的选择等因素。
1.固定地址型固定地址分配方式是一种对PLC安装机架上的每一个安装位置(插槽)都规定地址的分配方式。
其特点如下:①PLC的每一个安装位置都按照该系列PLC全部模块中可能存在的最大I/O点数分配地址。
例如:S7-300系列I/O模块中最大开关量输入/输出为32点,因此,每一个安装位置都必须分配32点地址:如果实际安装的模块只有16点输入,那么剩余的I/O地址将不可以再作为物理输入点使用。
②对于输入或输出来说,I/O地址是间断的,而且,在输入与输出中不可以使用相同的二进制字节与位。
例如:S7-300系列I/O模块的第1安装位中安装了32点输入模块,地址数据中的0.0~3.7就被该模块所占用,地址固定为I0.0~13.7;即使第2安装位中安装了32点输出模块,其输出地址也只能是Q4.O~Q7.7,而不可以是QO.O~Q3.7,在实际编程时QO.O~Q3.7就变成了不存在的输出。
同样,如果在第3安装位中接着安装了16点输入模块,其地址将为I8.0~19.7,在实际编程时I4.0~17.7就变成了不存在的输入。
以上分配原则对模拟量模块同样适用。
2.自动分配型自动地址分配方式是一种通过自动检测PLC所安装的实际模块,自动、连续分配地址的分配方式。
其特点如下:①PLC的每一个安装位置的I/O点数量无规定,PLC根据模块自动分配地址。
例如:当每一个安装位置安装了32点模块后,PLC自动分配给该模块0.0~3.7的地址:如果实际安装的模块只有16点输入,那么PLC自动分配给该模块的地址就成为0.0~1.7。
plc地址的概念完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如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 .其中,我们又把〖存储区符〗〖存储区尺寸符〗这两个部分合称为:地址标识符。
这样,一个确切的地址组成,又可以写成:地址标识符 + 确切的数值单【间接寻址的概念】寻址,就是指定指令要进行操作的地址。
给定指令操作的地址方法,就是寻址方法。
在谈间接寻址之前,我们简单的了解一下直接寻址。
所谓直接寻址,简单的说,就是直接给出指令的确切操作数,象上面所说的,A Q2.0,就是直接寻址,对于A这个指令来说,Q2.0就是它要进行操作的地址。
这样看来,间接寻址就是间接的给出指令的确切操作数。
对,就是这个概念。
比如:A Q[MD100] ,A T[DBW100]。
程序语句中用方刮号 [ ] 标明的内容,间接的指明了指令要进行的地址,这两个语句中的MD100和DBW100称为指针Pointer,它指向它们其中包含的数值,才是指令真正要执行的地址区域的确切位置。
间接由此得名。
西门子S7-300系列PLC基础知识(三)地址分配当物理模块安装完毕后,要对信号模块SM上的每一个信号通道分配一个物理地址,从而使用户程序能够识别这些这些通道。
首先要清楚以下几个概念:位,Bit字节,Byte,1Byte=8Bit字,Word,1个字等于2个字节,等于16位双字,D,等于2个字,4个字节,32位数字量的地址每个位BIT可以表示一个数字I/O点。
数字量以字节为单位(包括8个位),每个字节可表示8个I/O点。
数字量每个槽分为4个字节Byte。
所以一个槽可以表示32个I/O通道。
比如Q4.2,Q表示输出区域,4表示第4个字节,2表示第4个字节中的第3位。
数字量的地址分配如下图。
如果一个槽内只有一个16点的I/O模块,则地址只占用0.0至1.7,2.0至3.7不使用。
模拟量的地址每个字W可以表示一个模拟量通道。
每个槽分为16个字节(16Byte)。
即8个通道。
比如PIW256,PI表示外设输入,W表示一个字W的长度,256表示256和257两个字节组成的单字PIW256。
256表示首地址。
模拟量地址分配见下图:注意点- 以上地址都是从第四个槽开始,前3个槽预留给CPU, PS, IM。
- 由于一个模拟通道是由一个单字W组成,所以PIW257, IW273等等地址是不存在的,如果在编程中出现,会导致出错,这一点是初学者常犯的错误。
- 当数字量和模拟量插槽混合使用的时候,仍然可以按照上面的原则分配。
只不过会出现很多未被使用的地址。
如下图所示:存贮器表示方法主标识符+辅助标识符+地址主标识符有:输入映像区I、输出映像区Q、外设输入PI、外设输出PQ、存储区域映像区M、数据表DB、DI、定时器T、计数器C、本地数据L、系统保留区。
辅助标识符有:X(省略)位、B 字节、W 字、D 双字。
plc地址的概念完整的一条指令,应该包含指令符+操作数(当然不包括那些单指令,比如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 .其中,我们又把〖存储区符〗〖存储区尺寸符〗这两个部分合称为:地址标识符。
这样,一个确切的地址组成,又可以写成:地址标识符+确切的数值单【间接寻址的概念】寻址,就是指定指令要进行操作的地址。
给定指令操作的地址方法,就是寻址方法。
在谈间接寻址之前,我们简单的了解一下直接寻址。
所谓直接寻址,简单的说,就是直接给出指令的确切操作数,象上面所说的,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存入ACC1T MD2 //这个值再存入MD2,这是个32位的位存储区域L +10 //将16位整数10存入ACC1,32位16进制数35自动移动到ACC2T MW100 //这个值再存入MW100,这是个16位的位存储区域OPN DBW[MW100] //打开DBW10。
这里的[MW100]就是个单字指针,存放指针的区域是M区,MW100中的值10,就是指针间接指定的地址,它是个16位的值!--------L L#+10 //以32位形式,把10放入ACC1,此时,ACC2中的内容为:16位整数10T 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:00 00 00 00 00 00 00 10当作为双字指针时,就应该按照3-18bit指定byte,0-2bit指定bit来确定最终指令要操作的地址,因此:00 00 00 00 00 00 00 10 =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-18bit指定byte字节。
其第31bit固定为0。
AR:00 00 00 0BBB BB BB BB BXXX这样规定,就意味着AR的取值只能是:0.0——65535.7例如:当AR=D4(hex)=00 00 00 00 00 00 1101 0100(b),实际上就是等于而在区域间寄存器间接寻址中,由于要寻址的区域也要在AR中指定,显然这时的AR中内容肯定于寄存器区域内间接寻址时,对AR内容的要求,或者说规定不同。
AR:1000 0YYY 00 0BBB BB BB BB BXXX比较一下两种格式的不同,我们发现,这里的第31bit被固定为1,同时,第24、25、26位有了可以取值的范围。
聪明的你,肯定可以联想到,这是用于指定存储区域的。
对,bit24-26的取值确定了要寻址的区域,它的取值是这样定义的:区域标识符26、25、24位P(外部输入输出)000I(输入映像区)001Q(输出映像区)010M(位存储区)011DB(数据块)100DI(背景数据块)101L(暂存数据区,也叫局域数据)111如果我们把这样的AR内容,用HEX表示的话,那么就有:当是对P区域寻址时,AR=800xxx当是对I区域寻址时,AR=810xxx当是对Q区域寻址时,AR=820xxx当是对M区域寻址时,AR=830xxx当是对DB区域寻址时,AR=840xxx当是对DI区域寻址时,AR=850xxx当是对L区域寻址时,AR=870xxx经过列举,我们有了初步的结论:如果AR中的内容是8开头,那么就一定是区域间寻址;如果要在DB区中进行寻址,只需在8后面跟上一个40。
84000-840FFF指明了要寻址的范围是:0.0——65535.7。
例如:当AR=8400D4(hex)=00(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的内容=820008(hex)=Q1.0★L P#1.0 //把1.0这个指针存入ACC1,此时ACC1的内容=00008(hex)=1.0●L P#MB100 //错误!必须按照byte.bit结构给定指针。
100.0 //把M100.0这个指针存入ACC1,此时ACC1的内容=(hex)=M100.0●L P#DB100.DBX26.4 //错误!DBX已经提供了存储区域,不能重复指定。