西门子数据格式以及寻址,实例讲解清晰易懂,PLC编程必修课
PLC在应用时需要处理各种各样的数据,因此为了应付这些数据,它的存储单元就需要有多种格式,今天带大家了解一下,西门子1200PLC的数据格式.
西门子S7-1200 CPU中可以按照位、字节、字和双字,对存储单元进行寻址。二进制数的一位只有0或1两种不同的取值,可以用来表示数字量或称开关量的两种不同的状态,如触点的断开和接通线圈的通电和断电等。
八位二进制数组成一个字节,其中的第0位为最低位,第七位为最高位。
两个字节组成一个字,其中的第0位为最低位,第15位为最高位。
两个字组成一个双字,其中的第0位为最低位,第31位为最高位。
西门子S7-1200 CPU,不同的存储单元都是以字节为单位, 如图所示:
对位数据的寻址由字节地址和位地址组成,如I3.2,其中的区域标识符I表示输入映像区,字节地址为3,位地址为2,这种存取方式称为字节位寻址方式。
对字节的寻址,如MB2,其中的区域标识符M表示为存储区,2表示寻址单元的起始字节地址,B表示寻址长度为一个字节,即寻址为存储区中的第二个字节。
对字的寻址,如MW2,其中的区域标识符M表示为存储区,2表示寻址单元的起始字节地址,W表示寻址长度为一个字,即两个字节,寻址为存储区中从第二个字节开始的一个字,即字节2和字节3。请注意,两个字节组成一个字,遵循的是低地址、高字节的原则。以MW2为例,MB2为MW2的高字节,MB3为MW2的低字节。
对双字的寻址,如MD0,其中的区域标识符M表示为存储区,0表示寻址单元的起始字节地址,D表示寻址长度为一个双字,即两个字四个字节,寻址为存储区中从第0个字节开始的一个双字,即字节0、字节1、字节2和字节3。
寻址方式详解
分类:寻址方式从大的方面可以分成直接寻址和间接寻址。
直接寻址就像甲要和乙说话直接叫乙的名字就可以了,甲直接和乙建立联。
间接寻址就像甲要和乙说话,而乙在另外一个城市,甲就写了一封信通过邮递员送给乙,甲通过邮递员间接和乙建立联系,这就叫间接寻址。间接寻址中指针就充当了邮递员的角色。
直接寻址分为:绝对地址寻址,符号寻址
间接寻址分为:存储器间接寻址,寄存器间接寻址。
直接寻址是最简单的寻址方法,也是编程中最常用的寻址方式。
①绝对地址寻址
绝对地址寻址就是直接调用要使用的地址
示例:
I0.0 Q1.0 MW0
②符号寻址
符号寻址就是通过符号表中的绝对地址的命名进行寻址
二、间接寻址★★★★★
间接寻址是比较复杂的寻址方式,也是我们这里重点讲解的地方,间接寻址需重点理解指针的概念。
★指针:理解指针主要需要理解指针的两个特性。
A.存储性:存储性指的是指针也是一段存储空间,它的存储内容是地址。
B.指向性:因为指针存放的内容是地址,那么指针中存放的是哪一个地址,我们就说指针指向了这个地址所对应的存储空间,这就是指针的指向性。
A.存储器间接寻址
【A1】16位指针寻址:
1)16位指针存储空间
16位指针存储空间是16位,2个字节,通过这2个字节的空间来存放变量的地址。
2)16位指针寻址范围
16位指针只能对计时器(T),计数器(C),数据块(DB,DI)的号,程序块(FB,FC)的号进行寻址,也就是这2个字节的存储空间中只能存放计时器的编号,计数器的编号,数据块的编号,程序块的编号。
3)16位指针寻址表示格式
16位指针寻址表示格式为:区域标示符[16位地址指针]
示例:
DB [MW0] //表示对DB块进行寻址,MW0中如果存储的是1,那么该寻址结果为DB1,也就是通过该指令找到了DB1数据块。
T [MW2] //表示对计时器进行寻址,MW2中如果存放的是2,那么该寻址结果为T2,也就是通过该指令找到了计时器T2。
4)16位指针寻址程序示例
例1:
L 2 //将2进行装载
T MW 0 //将2传送到MW0
A I 0.0 //如果I0.0 = True
L S5T#10S //装载时间
SD T [MW0] //T开始计时
例2:
L 1 //将1进行装载
T MW 0 //将1传送到MW0
OPN DB [MW 0] //打开DB1
L 10 //将10进行装载
T DBW 0 //将10传送到DB1.DBW0中
L DBW 0 //将DB1.DBW0进行装载
T MW 2 //将DB1.DBW0传送到MW2中
【A2】32位指针寻址
1)32位指针存储空间
32位指针存储空间是32位,4个字节,通过这4个字节的空间来存放变量的地址。
2) 32位指针寻址范围
32位指针能对I、Q、M、L、数据块的位、字节、字、双字进行寻址,也就是这4个字节的存储空间中能对上述存储类型中的位、字节、字、双字的地址进行存储。
3)32位指针存储格式
4)32位指针寻址表示格式
32位指针寻址表示格式为:地址存储器标示符[32位地址指针]
示例:
I[MD0] //I表示输入存储区,MD0存储地址信息。
Q[MD4] //Q表示输出存储区,MD4存储地址信息。
5)32位指针三种寻址方法
①直接输入10进制数寻址(最复杂最不直观的寻址方式,不推荐使用)。
②将输入的10进制数左移3位进行寻址(比较直观的寻址方式)。
③利用 P#字节.位 格式进行寻址(最直观最方便的寻址方式,推荐使用)。
6)32位指针三种寻址方法举例
★例1 :直接输入10进制数寻址
该程序实现的是两个数相加的功能。
这里我们要重点理解为什么第六句将10传送到了MW4中,而不是MW32中,为什么第八句将15传送到了MW6中,而不是MW48中。
这是因为32,和48存放到指针中是按照32位二进制数进行存放的,下面我们通过将48存放到MD24来进行举例说明
由上图可知将48放进MD24则MW[MD24]指向了MW6
例2:左移3为进行寻址
由于将10进制数对应的2进制数左移三位后,字节存储区的二进制数和该10进制数对应的2进制数又相同了,而位存储区变为0,所以这样的寻址要比例1的寻址方式显得更为直观,便于使用和理解。
例3:以 P#字节.位 格式进行寻址
通过这个实例我们可以发现直接使用P#字节.位的寻址方式是最直观方便的。
B.寄存器间接寻址
寄存器间接寻址使用的是CPU的地址寄存器AR1和AR2
B1)寻址格式
区域标示符[AR1/AR2,P#X]
注:
①AR1/AR2表示地址寄存器AR1或者AR2,地址寄存器中只能存放地址。
②P#X表示偏移量X是偏移具体数值。
B2)寄存器间接寻址示例
一文读懂PLC过程映像区和外设地址,PLC编程真的超简单
一、过程映像区
1.1 什么是过程映像区
当我们在用户程序中对输入 (I) 和输出 (Q) 地址区进行寻址时,CPU并不直接访问信号模块, 而是访问 CPU 系统存储器中的存储区。 该存储区就是过程映像区。该区域分为两部分: 输入过程映像区(PII)和输出过程映像区(PIQ)。有两种方式可以更新过程映像区:OB1更新过程映像区和PIP更新过程映像区。
1.2 使用过程映像区有什么好处
与直接访问输入/输出模块相比,访问过程映像区的优势在于在循环程序处理期间,可为CPU 提供一致的过程映像区数据,即在程序执行过程中,访问的过程映像区信号始终一致。 如果在程序执行期间输入模块的信号状态发生变化,过程映像区中的信号状态将保持不变,直到过程映像区在下一个周期中被更新。只有在过程映像区刷新时刻,I区和Q 区的内容才与输入/输出的实际值相同,所以它们并不能直接反映输入/输出的实际状态。
此外,由于过程映像存储在CPU的系统存储器中,访问过程映像区的速度明显快于直接访问信号模块。为了节省时间,通常程序中使用过程映像区的数据。
1.3 过程映像区的设置
对于S7-300/400的CPU而言,可以设置过程映像区的大小,具体设置方法如图1和图2所示,设置范围可以查看CPU的技术规范手册或者在组态界面查看。
对于S7-1200/1500CPU而言过程映像区不可更改。S7-1200 CPU输入过程映像区大小为1kbyte,输出过程映像区的大小为1kbyte。
S7-1500CPU输入过程映像区大小为32kbyte,输出过程映像区的大小为32kbyte。
图1 经典STEP7软件中设置CPU过程映像区
图2 博途STEP7软件中设置CPU过程映像区
对于S7-300/400的CPU来说,能否更改过程映像区的大小与CPU固件相关。
1.4 OB1更新过程映像区有什么特点
在地址的分配过程中,如果模块的地址位于过程映像区之内,则可以选择自动更新过程映像,自动更新即为按照CPU OB1的周期更新过程映像区,如图3所示。如果地址不在过程映像区,则该区域显示“无”。
图3 自动更新过程映像
对于S7-300/400的CPU而言,该区域默认显示设置为“OB1过程映像”。I/O模块会在此过程映像区中分配相应的地址,操作系统在其每个程序循环内自动更新此地址。PLC的循环程序处理过程如图4和表格1所示。
图4 PLC程序循环处理过程
表格1 PLC循环程序处理过程
1.5 PIP更新过程映像有什么特点
除 OB1 更新过程映像区之外,某些类型的 CPU 中还可以将输入/输出地址分配至过程映像分区 (PIP)中进行更新,比如一些I/O地址区域仅在相应的OB块,如循环中断OB被执行时才会被刷新,这种有条件的刷新方式也可以减轻CPU的负荷。
注意:只有具有输入或输出模块才能选择此选项,同时不能将同一输入/输出地址既分配至 OB1 过程映像区更新,又分配至过程映像分区 (PIP)做更新,只能二选一。
过程映像分区的更新有以下两种方式:
将 PIP 分配至 OB块更新通过在用户程序中通过调用 SFC 26 (UPDAT_PI) 和 SFC 27 (UPDAT_PO)系统功能块做更新在IO地址区中,可以将过程映像分区连接到一个OB,启动OB后,系统将自动更新所分配的输入过程映像分区,在OB结束时,系统将分配的过程映像分区输出写入到I/O输出中。图5为通过过程映像分区6和循环中断做更新的示例,此外CPU还必须支持过程映像分区,可用的过程映像分区数量取决于CPU类型。
S7-300 CPU支持的过程映像分区的最大数量为1;S7-400 CPU支持的过程映像分区的最大数量为15;S7-1200 CPU支持的过程映像分区的最大数量为4;S7-1500 CPU支持的过程映像分区的最大数量为31。图5 通过过程映像分区6和循环中断做更新
如果过程映像分区未分配给OB,则操作系统不会更新此PIP,此时可通过特殊指令更新过程映像分区
过程映像分区输入可使用SFC 26 (UPDAT_PI)指令过程映像分区输出则使用SFC 27 (UPDAT_PO)指令需要注意的是:S7-1200CPU 不支持SFC 26 (UPDAT_PI)、SFC 27 (UPDAT_PO)指令。S7-300 CPU不支持PIP分配至OB块更新。
二、外设地址
2.1什么是外设地址
对于无法更改过程映像区的CPU来说,一旦所要使用的模板I/O地址超出了过程映像区范围,就必须使用外设寻址。
外设寻址就是指不经过过程映像区直接去访问I/O模板,使用时通过在地址前加上字母‘P’来表示。
2.2 外设地址如何标识
通过外设寻址同样可以访问已被分配过程映像区的 I/O 地址。
PIB --> Peripheral Input Byte 外设输入字节PQB --> Peripheral output Byte 外设输出字节PIW --> Peripheral Input Word 外设输入字PQW --> Peripheral output Word 外设输出字PID --> Peripheral Input Double-word 外设输入双字PQD --> Peripheral Output Double-word 外设输出双字外设地址的最小地址为字节,即PIB、PQB。
以模拟量输入为例理解IW与PIW:
PIW:直接读取外设地址,即直接采集模板信号。 外设地址是实时更新数据,可能同一个扫描周期内有不同的实时数值。在某些需要对输入/输出进行较为实时处理的场合,需要选择使用直接外设寻址。IW:每个扫描周期将模板数据读取至过程映像区,程序访问过程映象区数值。2.3什么情况下必须使用外设地址
下列情况需要使用外设地址:
模板地址超出过程映像区范围用户程序需要直接从输入模板读取实时值输出值需要直接输出至模板 (至少一个字节)三、常见问题
3.1如何访问外设地址的Bool地址?
由于外设地址的最小地址为字节,因此无法直接读取Bool地址。以输入为例,需要先用PIB/PIW/PID将数值MOVE到其他的存储区(如M,DB区),再访问M或DB的Bool地址。 输出也是一样,需要对M或者DB的Bool地址写入,然后将M或者DB的字节/字/双字MOVE到PQB/PQW/PQD。
3.2PQW能否使用状态图表监控?
PQW为只写操作,无法监看。通常设置一个中间地址,写入数值先赋值给M区或DB区地址,再由M区或DB区地址,MOVE给PQW,监看这个中间地址即可。 同理,PIW为只读操作,无法写入。
3.3DP或PN通讯正常为何从站数据为零?
S7-300挂分布式IO,通讯指示灯正常,但是读不到/写不进从站数据;读取的数值一直为0,写入的数值能看到,但从站无变化?
访问外设地址或者更改CPU的过程映像区,将输入或者输出地址放在过程映像区之内。
3.4 模块地址能否跨过程映像区?
使用S7-300系列的控制器CPU313C-2DP(6ES7 313-6BG04-0AB0)实现控制要求,组态一个32点的DI模块,自定义地址,“Start”设置为126,此时会提示地址无效,推荐的New Address为128,这是为什么?
这是因为当前CPU的输入/输出IO映像区范围默认是128个字节,32点的DI模块需要占用4个字节,本体的DI输入地址是124-125,如果保持地址连续的话,DI模块的地址应为126-129,此时已经超过默认的过程映像区128。对于一个数字量模块而言,其输出地址不能“跨越”过程映像,即一部分地址位于过程映像区内而一部分地址在过程映像区外。如果要保持数字量输出地址连续,可将过程映像区范围改大。也可以选择建议的起始地址128。
3.5 CP343-1或者CP342-5的IO地址与过程映像区有什么关系?
CP343-1或者CP342-5的IO地址需要在CPU的过程映像区之外,不能在CPU过程映像区之内,否则编译会报错。
相关问答
plc存储区详解?
关于这个问题,PLC存储区是指程序可编程控制器(PLC)中用于存储不同类型数据的区域。PLC存储区的划分可以根据不同PLC的架构和功能而有所不同,但一般包括以下几...
什么是plc的间接寻址?
PLC(可编程逻辑控制器)的间接寻址是一种编程方法,通过使用指针或地址标识符来访问存储器中的数据,而不是直接给出操作的地址。间接寻址在PLC编程中并不常用...
plc编程高级思路?
再开始编程会简单点。...4、合理分配主程序、子程序和定时中断程序等;5、合理分配数据块,定时器,计数器,存储器变量等,注意变量位置不能重叠。七、软件内部...
plc指针地址怎么写?
指针是用于地址操作的,不是地址里的数据,而是地址(装数据的各类容器,如:m,l,db,i,q等地址区域)。在没有前提说明的情况下p#0.0是指某个地址的首个位...指针...
欧姆龙PLC输入输出和中间继电器地址怎么分配的?
CPM系列的输入和输出区一般都为10个字,和中间继电器共用IR地址空间,编程时直接用数字表示,如输入区(位)表示范围为00000-00915十个字,输出区(位)表示范围...C...
三菱plc程序上载后显示黄色区域是怎么回事?
只有在早先的版本中支持Label标签方式下才可以.黄色代表转换错误而不是什么隐藏程序.使用指令表显示方式就可以看到.GX软件对于并联触点的数量有限制,为24行,...
三菱plc全局db怎么建?
M区域是全局变量寄存器,你也可以建立一个共享的DB功能块,作为全局变量的一个合集来使用,然后在里面声明REAL类型的变量。把你原来存放在MDXX里面的数据直接存...
plc的指令系统有哪三个?
有三种控制系统1.PLC构成的单机系统这种系统的被控对象是单一的机器生产或生产流水线,其控制器是由单台PLC构成,一般不需要与其它PLC或计算机进行通信。但是...
西门子PLCM存储区与V存储区的区别?
西门子PLC中的M存储区和V存储区是两种不同类型的存储区域,它们的区别如下:1.用途不同:M存储区用于存储中间变量,例如计数器、定时器等,这些变...西...
信捷PLC软件没有设置“断电区域保存”功能?
其实他PLC是有断电保持区的,只是你那个版本的软件不能改,3.3的可以改而已其实他PLC是有断电保持区的,只是你那个版本的软件不能改,3.3的可以改而已