1.用户程序存储区的类型
S7-1200 CPU通过系统储存器、数据块(DB)和临时存储器处理和存储用户程序和数据。为了在执行用户程序期间存储数据,如表5.8所示对CPU存储区进行了如下划分。①全局存储器:CPU提供了各种专用存储区,其中包括输入(I)、输出(Q)和位存储器(M),所有代码块可以无限制地访问该储存器。②数据块(DB):可在用户程序中加入DB以存储代码块所需的数据,从相关代码块开始执行一直到结束,存储的数据始终存在。“全局”DB存储所有代码块均可使用的数据,而背景DB存储特定FB的数据并且由FB的参数进行构造。③临时存储器:只要调用代码块,CPU的操作系统就会分配要在执行块期间使用的临时或本地存储器(L)、代码块执行完成后,CPU将重新分配本地存储器,以用于执行其他代码块。
表5.8 CPU的存储区
在STEP 7软件中采用符号编程,既可在项目变量(数据块)中创建变量,也可在组织块OB、功能块FC或功能块FB顶部的接口中创建变量,这些变量包括名称、数据类型、偏移量(Offset)和注释。
(1)输入映像存储器(I)。
输入映像存储器(I)是以字节为单位的寄存器,它的每一位对应于一个物理数字量输入接点。CPU仅在每个扫描周期的循环组织块OB执行之前对物理输入点进行采样,并将这些值写入输入映像寄存器。在执行用户程序过程中,不再理会物理输入接点的状态,它所处理的数据为输入映像存储器(I)中的值。物理输入点只能以位为单位存取,但可以按位、字节(B)、字(W)或双字(D)访问输入映像寄存器,对过程映像输入点进行读写访问,但过程映像输入点通常为只读。通过在地址后面添加“:P”,就可以立即读取CPU、SB或SM的数字量和模拟量输入。
使用I_:P访问与使用I访问的区别是:前者直接从被访问点而非输入映像存储器获得数据。这种I_:P访问称为“立即读”访问,物理输入点是直接从与其连接的现场设备接收数值,所以不允许对这些点进行写访问。即I_:P访问为只读访问,而I访问是可读/写的访问。I_:P访问也仅限于单个CPU、SB或SM所支持的输入大小(向上取整到最接近的字节),如信号板SB1223只有2×DC 24V输入/2×DC 24V输出,如果输入被组态为从I4.0开始,则可按I4.0:P和I4.1:P形式,或者按IB4:P形式访问输入点。不会拒绝I4.2:P到I4.7:P的访问形式,但没有任何意义,因为这些输入点未使用。但不允许IW4:P和ID4:P的访问形式,因为它们超出了与SB 1223相关的字节偏移量。使用I_:P访问不会影响存储在输入映像存储器中的相应值。
(2)输出映像存储器(Q)。
输出映像存储器(Q)是以字节为单位的寄存器,它的每一位对应于一个物理数字量输出接点。CPU在执行用户程序过程中,并不把输出信号随时送到物理输出接点,而是送到输出映像寄存器中,只有到了每个扫描周期的末尾,才将输出映像寄存器的输出状态复制到各物理输出接点。物理输出点只能以位为单位存取,但可以按位、字节(B)、字(W)或双字(D)访问输出映像寄存器。输出映像寄存器允许读/写的访问。通过在地址后面添加“:P”,可以立即写入CPU、SB或SM的物理数字量和模拟量输出。使用Q_:P访问与使用Q访问的区别是,前者除了将数据写入输出映像寄存器外,还直接将数据写入被访问点(写入2个位置)。这种Q_:P访问称为“立即写”访问,物理输出点是直接控制与其连接的现场设备,所以不允许对这些点进行读访问。即,Q_:P访问为只写访问,而Q访问是可读/写访问。Q_:P访问也仅限于单个CPU、SB或SM所支持的输出大小(向上取整到最接近的字节),使用Q_:P访问时既影响物理输出,也影响存储在输出过程映像区中的相应值。
(3)位存储器(M)。
位存储器(M)又称内部辅助继电器,类似于继电逻辑控制系统的中间继电器,用于实现中间逻辑,存储中间状态或其他控制信息,可以按位、字节(B)、字(W)或双字(D)访问位存储区,允许读/写访问。
(4)临时存储器(L)。
临时存储器(L)用来存储代码块的局部变量、调用功能(FC或FB)时要传送的参数、程序中的中间逻辑结果等。CPU根据需要分配临时存储器,在代码块起动(对于OB)或被调用(对于FC或FB)时为其分配临时存储器。为代码块分配临时存储器时,可能会重复使用其他OB、FC或FB先前使用的相同临时存储单元。CPU在分配临时存储器时不会对其进行初始化,因而临时存储器可能包含任何值。
临时存储器与M存储器类似,主要的区别是M存储器在“全局”范围内有效,数据可以全局性地用于用户程序中的所有元素,任何OB、FC或FB都可以访问M存储器中的数据。而临时存储器在“局部”范围内有效,只有创建或声明了临时存储单元的OB、FC或FB才可以访问临时存储器中的数据。只能通过符号寻址的方式访问临时存储器,如当OB调用FC时,FC无法访问对其进行调用的OB的临时存储器。
(5)数据块(DB)。
数据块(DB)是用户声明的用于存取数据的存储区,可以被打开或关闭。在用户程序中创建数据块(DB)以存储代码块所需的数据,其中包括操作的中间状态或FB的其他控制信息参数以及许多指令(如定时器和计数器)所需的数据结构。可以按位、字节(B)、字(W)或双字(D)访问数据块存储器,可以指定数据块为读/写访问还是只读访问。
数据块有全局数据块DB和背景数据块DB两种类型。用户程序中的任何代码块OB、FB或FC都可访问全局数据块DB中的数据。背景数据块是由编辑器生成,而非用户编辑的。在背景数据块DB中仅存储特定功能块(FB)的数据,存放FB的部分运行变量,其中数据的结构反映了功能块FB的参数(Input、Output和InOut)和静态数据。任何代码块都可访问背景数据块DB中的数据,FB的临时存储器不存储在背景数据块DB中。每个功能块FB都有一个对应的背景数据块,一个FB也可以使用不同的背景数据块。用户程序中的相关代码块执行完成后,数据块DB中存储的数据不会被删除。(www.daowen.com)
2.I/O寻址
对于S7-1200 PLC来说,如果将模块插入设备视图中,其用户数据将位于CPU的过程映像中(默认设置),起始地址就是模块的最低字节地址。组态模块时,调整用户程序中所使用的地址与模块起始地址。在模块属性(“I/O地址”组)中,可更改插入模块后自动分配的起始地址,还可进行设置,以确定地址是否位于过程映像中。采用STEP 7软件进行组态和编程时,当添加CPU和I/O模块时,系统会自动分配默认的I地址和Q地址,也可以通过在组态画面中选择地址域,并键入新编号更改默认寻址设置。数字量输入和输出按完整的字节方式进行分配,无论模块是否使用所有的字节位,数字量输入和输出可以按字节(B)、字(W)或双字(D)存取。模拟量输入和输出按每组2通道(2个字)的方式进行分配。存储区的每个存储单元都有唯一的地址,用户程序利用这些地址访问存储单元中的信息。
(1)“位”寻址方式。访问一个位也称为“字节.位”寻址,即位存储单元的地址由字节地址和位地址组成,位寻址是最小存储单元的寻址方式。寻址时,采用存储区关键字+字节地址+位地址。如地址I3.4:I表示过程映像输入存储区,而3表示字节3(第4个字节),通过后面的句点(.)与位地址4(第5位)分开。再如Q4.3:区域标识符“Q”表示输出,4表示第5个字节,3表示位地址为3。字节地址从0开始,最大值由该存储区的大小决定,位地址的取值范围是0~7。如果程序直接访问用户数据(而不是使用过程映像),则为I/O地址附加后缀“:P”。对于物理输入或输出地址,应在过程映像区地址后面添加“:P”,如I0.3:P、Q1.7:P或“Motor_Start:P”等。
(2)“字节”寻址方式。访问一个8位存储区域称为字节寻址。要在存储器中访问数据的字节,必须以类似于指定位地址的方式指定该地址。该地址包括存储区标识符、数据大小标识以及起始字节地址,如MB20、QB5等。MB20中,“M”表示位存储区,B表示字节,20表示字节20,其中,最低位的位地址为M20.0,最高位的为M20.7。如输入字节IB3由I3.0~I3.7这8位组成。
(3)“字”寻址方式。访问一个16位存储区域称为字寻址。相邻的两个字节组成一个字,一个字中两个字节的地址必须连续,而且低位字节是高8位,高位字节是低8位。取值范围为W#16#0000~W#16#FFFF。寻址时采用存储区关键字+字的关键字(W)+第1字节地址结构,如IW14表示由IB14和IB15组成的1个字,IW14中的I为区域标识符,W表示字(Word),14表示从第14个字节开始,包括两个字节的存储空间,即IB14和IB15。IB14是高8位,IB15是低8位。
(4)“双字”寻址方式。访问一个32位存储区域称为字寻址。相邻的4个字节表示一个双字,4个字节的地址必须连续。最低位字节在一个双字中是最高8位。范围DW#16#0000_0000~DW#16#FFFF_FFFF。寻址时采用存储区关键字+字的关键字(D)+第1字节地址结构,如ID12表示由IB12~IB15组成的双字,包括LB12、LB13、LB14和LB15四个字节;I为区域标识符,D表示存取双字(Double Word),12为起始字节的地址。ID12中的IB12是最高8位,IB15是最低8位。
(5)符号寻址。符号寻址是利用符号名称和绝对地址访问块。符号寻址是先给需要使用的绝对地址或参数变量声明符号,然后在程序中使用已声明的符号进行编程寻址。可以声明全局符号和局部符号两种:①在STEP 7程序编辑器中,全局符号在“PLC变量(PLC tags)”编辑器中声明,适用于所有的程序块,以双引号表示;②局部符号在“块接口(Interface)”中声明,所定符号只在本程序块中有效,符号前加#号表示。
(6)变量的符号声明和寻址。可以符号声明、符号和绝对声明两种不同的方式声明块中的变量。符号声明仅包含一个符号名且块中没有固定寻址,变量的绝对地址在编译期间动态传递并且不会在块接口中显示。变量存储在可用存储区中,且只能以符号形式对所声明的变量进行符号寻址,如可按如下方式访问“Data”数据块中的“Fill Level”变量:“Data”.Fill Level。对变量的纯符号声明的优点是,数据以最适合所用CPU的方式结构化和排列,这样可提高CPU的性能,可以将特定的各变量定义为有保持性。对于绝对声明,保持性设置适用于所有块变量。
在块中符号和绝对声明仅包含一个符号名和固定的绝对地址,如该地址显示在块接口的“偏移量”(Offset)列中。可以符号或绝对方式对这些变量进行寻址,如可按如下方式访问“Data”数据块中的“Fill Level”变量:“Data”.Fill Level或%DBl.DBX0.0。
(7)符号编程。符号编程时,编程期间使用操作数和变量,如输入、输出和位存储器。CPU根据数字绝对地址来识别这些操作数,该绝对地址由操作数ID和地址构成(如Q4.0、I1.1、M2.0)。但如果要使程序布局更加清晰和简化故障排除,在编程时应使用代表操作数和变量的符号名,在PLC变量表中为全局变量定义符号名。在块接口中,为代码块或全局数据块中的局部变量指定符号名,如可以将符号名“Motor_on”分配给输入信号I1.0。编程时可先使用符号操作数,以后再分配绝对地址,即使分配没有完成,也仍可保存程序。尚未分配绝对地址的操作数会以红色波浪下划线突出显示。要分配绝对地址,选择操作数并单击快捷菜单中的“定义变量”(Define tag)。
在程序编辑器中可以采用符号表示法、绝对表示法及符号和绝对表示法显示操作数。要改变操作数的表示法,在程序编辑器工具栏中单击“启用/禁用绝对操作数”按钮。所有新建的块之后将使用该默认设置来创建,该设置不会影响背景数据块,因为其会接管来自更高级代码块的访问,该设置也不会影响现有的块或移植的块。要为程序中的所有新块设置符号访问,在“选项”菜单中,选择“设置”命令,在区域导航中,选择“PLC编程”组,然后在“操作数访问方式”中,选中“仅符号访问”复选框。
如果设置为“仅符号访问”,则可以纯符号方式声明块变量,无须指定绝对地址。如果启用了符号访问,则可以设置功能块中各个变量的保持特性。在只能以符号方式访问的块中,可以将各个变量定义为具有保持性。在可通过其他方式访问的块中,不能对块接口中的各个变量进行保持性设置,只能将分配的背景数据块定义为具有保持性,该块包含的所有变量随后会被视为具有保持性。
3.变量声明
变量声明的目的是区分不同的变量类型,通过变量声明定义要在块中使用的变量名称和数据类型。在功能块中,可以为块参数和静态局部数据分配默认值。功能块的变量声明可在背景数据块中保留存储空间。代码块的变量声明可确定程序中功能块的调用接口。功能块的变量声明可确定分配给FB的每个背景数据块的数据结构。
在编程系统中,除指令外,变量是最为重要的元素。在用户程序中,对每一个程序组织单元必须声明变量属性,变量属性包括符号名和地址(如I0.1,MOTOR_ON)、数据类型(如BOOL)、保持性和注释等。在程序编辑器中的“PLC变量(PLC tags)”窗口中声明变量,变量声明窗口分为“变量表”“变量属性”和“变量详细视图”三部分,在“变量属性”中还显示时间,记录变量创建和修改时间等信息,“变量详细视图”相当于一个已声明变量的目录。
全局变量在PLC变量表的“PLC变量”选项卡中声明。在代码块的声明部分声明的变量和参数称为局部变量和参数,局部数据可以是基本数据类型或复合数据类型,也可以是专门用于参数传递的“参数类型”。参数是在调用块和被调用块间传递的数据,是指代码块的变量,参数类型包括定时器、计数器、块的地址等。
形参是指指令上标记该指令要使用的数据位置的标识符(例如ADD指令的INI输入)。实参是指包含指令要使用的数据的存储单元或常量(例如%MD400,“Number_of_Widgets”)。用户指定的实参的数据类型必须与指令指定的形参所支持的数据类型之一匹配。指定实参时,必须指定变量(符号)或者绝对存储器地址。变量将符号名(变量名)与数据类型、存储区、存储器偏移量和注释关联在一起,并且可以在PLC变量编辑器或块(OB、FC、FB或DB)的接口编辑器中进行创建。如果输入一个没有关联变量的绝对地址,使用的地址大小必须与所支持的数据类型相匹配,而默认变量将在输入时创建,还可为许多输入参数输入常数值。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。