西门子数据格式以及寻址,实例讲解清晰易懂,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)寄存器间接寻址示例
西门子S7-200 PLC在断电情况下的数据保持问题
西门子S7-200 PLC在没有存储卡,并且长时间断电的情况下,里面的程序能存储多久?这个问题也有不少学员问过了,所以在这里总结性的说一下。
首先,让我们了解一下S7-200内部存储器的大概工作情况。PLC内部存储器分为RAM存储器和EEPROM永久存储器两种。我们都知道RAM存储器的数据必须靠供电维持,当存储芯片供电中断时,其中所存数据也不复存在。RAM存储器主要用作PLC程序运行时程序、组态参数、程序数据的实时存取空间。EEPROM存储器为带电可擦写存储器,其数据写入后可在完全断电情况下长期保存。
PLC在每次程序下载时,将下载的程序块、数据块(可选)、CPU 配置(可选)载入RAM存储区,同时CPU自动将其拷贝到EEPROM存储器中,以实现永久保存。在PLC的使用过程中,每次上电时PLC会从EEPROM存储区向RAM存储区中恢复程序和CPU配置,同时检查RAM存储器中的断电数据保持区域是否成功保存。
如果保存成功,则保持区域将保持不变,RAM存储器的V存储区中的未保持区域,将从相应的EEPROM中的V存储永久区域处恢复过来。如果RAM存贮器的内容没有保持下来,CPU会清除 RAM存贮器并置保持数据丢失存贮器位(SM0.2)为1,并将存于EEPROM存储器永久区域中的数据复制RAM存储器中。
1、正常情况之下,下载到S7-200PLC里的程序是永不丢失的,因为程序块(数据块、系统块)是直接下载到EEPROM中的,而RAM中的数据为PLC的运行数据,靠一个超级电容(或电池卡)保持,前提是在系统块中必须有相应的设置。没有电池卡,靠一个超级电容可以保持10天左右时间。但是值得注意的是EEPROM不要每个周期都触发,一定要加触发条件,因为EEPROM是有擦写次数的。
2、我们平时所说的S7-2OO不加电池,使用内部电容保存数据方式,在50-60小时,加入电池卡的话最好也就是200多天,在这里说的是数据,而不是程序,例如计数器,定时器等的数据。
3、S7-200的变量区,用PLC内部的“超级电容”可保存时间是根据CPU的型号、环境有所不同。对此说明一下:
CPU212/221/222典型时间最少50小时,温度40度时,8小时!
CPU214/215/216/226XM典型时间最少190小时,温度40度时,120小时。
CPU224/226典型时间最少100小时,温度40度时,70小时!
下面再说一下S7-200程序数据的断电保存方法。S7-200PLC程序数据的断电保存方法,主要可分三种,其数据断电保存方法及特点如下:
1、在系统块中设置断电数据保持功能来保存数据。
在 S7-200的编程中,系统块中有一项功能为断电数据保持设置,设置范围包括V存储区、M存储区、时间继电器T和计数器C(其中定时器和计数器只有当前值可被保持,而定时器位或计数器位是不能被保持的)。其基本工作原是在PLC外部供电中断时,利用PLC内部的超级电容供电,保持系统块中所设置的断电数据 保持区域的数值保持不变,而将非保持区域的数据值归零。
由于超级电容容量的限制,在西门子的资料中宣称只能保存几天时间。对于M存储区中的前十四个字节 (即MB0-MB13),当设为断电数据保持,在PLC外部供电中断时,PLC内部自动将以上存储区的数据转移到EEPROM中,因此可实现断电永久保存。若需更长的RAM存储器断电数据保存时间,西门子公司可提供一个可选的电池卡,在超级电容耗尽后继续提供电能,延长数据保存时间(约200天)。
2、在编程时建立数据块来保存数据。
在程序设计的编程阶段,可在编程中建立数据块,并赋予需要的初始值,编程完成后随程序一起下载到PLC的 RAM存储器中,CPU同时自动将其转存于EEPROM,作为EEPROM储器中的V数据永存储区。因EEPROM的数据保存不需要供电维持,所以可以实现永久保存。若在系统块中相应V存储区未设为断电数据保持,在每次PLC上电初始,CPU自动将EEPROM中的V数据值读入RAM的V存储区。若相应V 存储区设为断电数据保持,在每次PLC上电初始,CPU检测断电数据保存是否成功。若成功,则保持RAM中的相应V数据保持不变。若保存不成功,则将 EEPROM中的相应V数据值读入RAM的V存储区。此方法只适用于V数据的断电数据保存。
3、在程序中用SMB31和SMW32来保存数据。
在程序中将要保存的V存储器地址写入SMW32,将数据长度写入SMB31,并置 SM31.7为1。在程序每次扫描的末尾,CPU自动检查SM31.7,如果为1,则将指定的数据存于EEPROM中,并随之将SM31.7置为零,保存的数据会覆盖先前EEPROM中V存储区中的数据。在保存操作完成之前,不要改变RAM中V存储区的值。存一次EEPROM操作会将扫描时间增加15至20毫秒。因为存EEPROM的次数是有限制的(最少10万次,典型值为100万次),所以必须控制程序中保存的次数,否则将导致EEPROM的失效。
总之,结合以上的了解和工地调试的经验,在实际应用中,若遇到需程序数据保持的时候,要多种方法结合运用以达到最理想的结果。针对程序中需保存数据的不同,采取不同的方式实现。
1、对于需在程序第一次运行时进行预置并在程序运行过程中个别情况下进行重新设置的数据,如高度、荷重等相关标定参数,可在程序的数据块中建立数据,并赋予初始数值。同时在程序中编入SMB31和SMW32命令,在相关条件下对EEPROM的V数据区进行重新保存,修改先前的初始值。
2、对于程序运行过程中数值变化比较频繁,且需断电长期保存的数据,则可将数据存于MB0至MB13存储区,且系统块的断电数据保存设置中将相应的M存储区设为断电数据保存。也可使用程序中的V存储区,在必要时进行一次程序数据存储,而在断电数据保持设置中可选取,也可不选取。
相关问答
三菱plc怎么设置数据保存?
三菱plc在线读取的程序工程保存:一、将plc与编程软件连接,首先点击菜单栏里的【在线】中的【PLC读取】会弹出对话框让你选择plc类型。二、点击【程序+参数】...
您好,利用PLC采集数据,怎样将,采集到的值都保存到PLC中,方便以后调用。怎样编程啊,谢谢20ms采集一次的?
PLC的存储器容量有限,一个采集数据,一个字或一个双字的大小,如果按20ms,根本储存不了多少。建议你将采集时间延长,如果是20ms采集一次且变化速率不大的,便...
plc怎么保存坐标点位?
在PLC中,坐标点位的保存主要依赖于其内存存储区。每个格子代表一个bit位,一行则代表一个字节。例如,当使用寄存器模式,可以用W1寄存器来表示位移值。对于坐...
plc数据保存不住怎么办?
plc数据保存不住应该请检查PLC程序,一般PLC内变量如果不设置成掉电保护的话,断电后就会丢失,如果想保留PLC内的设置参数变量,有两种方案一种是如深圳精展达高...
wincc写入plc数据保持不了?
这个问题可能出现在WinCC配置或PLC通信设置上。首先,确保WinCC中的写入功能已正确配置,并且PLC通信正常。其次,检查PLC内存区域是否正确设置为可写入状态,...
三菱PLC输入信号怎么储存到寄存器里?
要将三菱PLC的输入信号储存到寄存器里,可以通过编写PLC程序来实现。首先,需要使用特定的指令来读取输入信号的状态,然后将读取的状态储存到指定的寄存器中。...
plc如何保存?
跟一般文件一样的不过要先转换(按F4)再保存。PLC是采用“顺序扫描,不断循环”的方式进行工作的。即在PLC运行时,CPU根据用户按控制要求编制好并存于用户存...
plc的内部存储器有哪两类?
(1)系统存储器系统存储器用来存放由PLC生产厂家编写的系统程序,并固化在ROM内,用户不能更改。它使PLC具有基本的功能,能够完成PLC设计者规定的各项工作...(...
plc数据通讯程序编写步骤?
第一步:阅读产品说明书第二步:根据说明书,检查I/O第三步:打开编程软件,进行硬件配置,并将I/O地址写在符号表中第四步:写出程序流程图第五步:在软件中...
plc浮点数是怎么储存的?
1.PLC浮点数是以32位二进制形式储存的。2.这是因为浮点数需要储存小数,而二进制只能表示0和1两种状态,因此需要将小数部分转化为二进制形式,再与整数部分一...