西门子S7-1200PLC模块黑龙江代理商
可以不经过累加器1,直接将操作数装入或传送出地址寄存器AR1和AR2(见表4-4),或从AR1和AR2将数据传送出来:也可以将两个地址寄存器的内容直接交换,指令TAR1<D>和TAR2 <D>的目的区为双字MD、LD、DBD和DID。下面是应用实例:
LAR1 DBD 20 //将数据双字DBD20中的指针装入AR1
LAR1 P#M 10.2 //将带存储区标识符的32位指针常数装入AR1
LAR2 P#24.0 //将不带存储区标识符的32位指针常数装入AR2
TAR2 MD 24 //AR2的内容传送到存储器双字MD24
+ AR1指令将地址寄存器AR1的内容加上作为地址偏移量的累加器1的低字的内容,或加上指令中的16位常数(-32768~+32767),结果在AR1中。+AR2指令具有类似的功能。
16位有符号整数首先被扩充为24位,其符号位不变,然后与AR1中的低24位有效数字相加。地址寄存器中的存储区域标识符rrr(第24~ 26位,见图4-25)保持不变。
L P#20.0 //指针常数P#20.0装入累加器1的低字
+AR1 //AR1与累加器1低字的内容相加,运算结果送AR1
+AR2 P#100.0 //AR2的内容加上地址偏移量P#100.0,运算结果送AR2
表4-4 与AR1和AR2有关的指令
指令 | 描 述 |
LAR1 AR2 | 将AR2的内容装入AR1 |
LAR1<D> | 将32位双字指针<D>装入AR1 |
LAR2<D> | 将32位双字指针<D>装入AR2 |
LAR1 | 将累加器1的内容(32位指针常数)装入AR1 |
LAR2 | 将累加器1的内容(32位指针常数)装入AR2 |
TAR1 AR2 | 将AR1的内容传送到AR2 |
TAR1<D> | 将AR1的内容传送到32位指针 |
TAR2<D> | 将AR2的内容传送到32位指针 |
TAR1 | 将AR1的内容传送到累加器1,累加器1中的内容保存到累加器2 |
TAR2 | 将AR2的内容传送到累加器1,累加器1中的内容保存到累加器2 |
+AR1 | AR1的内容加上地址偏移量 |
+AR2 | AR2的内容加上地址偏移量 |
CAR | 交换AR1和AR2中的数据 |
区域内间接寻址的地址指针格式与存储器间接寻址的相同,包括被寻址数值所在的存储单元的字节地址和位地址,存储区的类型在指令中给出。这种指针格式适用于在某一存储区内寻址。第24~26位(rrr)和第31位应为0。下面是区域内间接寻址的例子(见随书光盘中的项目“寄存器间接寻址”):
L P#5.0 //将间接寻址的指针装入累加器1
LAR1 //将累加器1的内容送到地址寄存器1,见表4-4
A M[AR1,P#2.3] //AR1中的P#5.0加偏移量P#2.3,对M7.3进行操作
= Q[AR1,P#0.2] //逻辑运算结果送Q5.2
L MW[ AR1,P#19.0] //将MW24装入累加器1
T MW 8
S7-300/400有两个地址寄存器AR1和AR2,可以用它们对各存储区的地址作寄存器间接寻址。地址寄存器的地址值加上地址偏移量,形成地址指针,后者指向数据所在的存储单元。
图4-25是地址寄存器间接寻址的双字地址指针的格式,其中第0~2位(xxx)为被寻址地址中位的编号(0~7),第3~18位为被寻址地址的字节的编号。第24~ 26位(rrr)为被寻址地址的区域标识号(见表4-3),第31位x=0为区域内的间接寻址,为l则为区域间的间接寻址。如果要用寄存器指针访问一个字节、字或双字,必须保证指针的位地址编号为0。
图4-25 寄存器间接寻址的双字指针格式
表4-3 区域间寄存器间接寻址的区域标识符
在块调用中,可以用复杂数据类型作为块的实参,用它将一组数据传送到被调用块,或者用复杂数据类型将一组数据返回给调用它的块。通过这种方式,可以GX而简洁地在主调块和被调块之间传递数据。
下面的例子用数组作为功能的输入参数。将数组作为参数传递时,作为形参和实参的两个数组应有相同的结构,例如都是2×3格式的数组,数组元素的数据类型应相同。
用STEP 7的新建项目向导创建一个名为“字逻辑与”的项目。在SIMATIC管理器中生成功能FC1,在FC1的局部变量表中生成一个输入参数InArray,它是有3个WORD元素的数组(见图4-22),再生成一个数据类型为WORD的输出参数Result。图中的语句表程序将数组InArray的3个字元素作“与”运算。
在SIMATIC管理器中生成数据块DB1,在DB1中生成有3个WORD元素的数组Aray。在OB1中调用FC1(见图4-23),用数组Aray作FC1的输入参数InArray的实参。
图4-23 在OB1中调用FC1
在SIMATIC管理器中生成变量表,在变量表中输入数组DB1. Aray的3个元素的地址(见图4-24),以及用来保存FC1的运算结果的MW6。将用户程序下载到仿真PLC,将仿真PLC切换到RUN -P模式。打开变量表VAT -1,点击工具栏上的按钮,启动监视功能。在“修改数值”列输入数组元素的值,点击工具栏上的激活修改值按钮,将修改值送入CPU。可以看到只有DB1中的3个字的同一位均为1时,“与”运算后MW6的对应才为1,程序执行后得到了正确的结果。
将OB1左边窗口中“FB块”文件夹内的“FB1”图标拖放到程序段2的水平“导线”上(见图4-19)。FB1的符号名为“发动机控制”。方框内的Start等是FB1的变量声明表中定义的输入、输出参数(形参)。方框外的符号地址“起动汽油机”等是方框内的形参对应的实参。实参“共享”。PE_Speed是符号名为“共享”的数据块DB3中的变量PE _Speed(汽油机的实际转速)。在调用块时,CPU将实参分配给形参的值存储在背景数据块中。如果调用时没有给形参指定实参,功能块使用背景数据块中形参的数值。该数值可能是在功能块的变量声明表中设置的形参(例如静态变量Preset_Speed)的初始值,也可能是上一次调用时储存在背景数据块中的数值。
在FB1方框的上面,可以输入已经生成的FB1的背景数据块DB1(见图4-15),也可以输入一个尚不存在的背景数据块,例如DB2。输入后按回车键,出现提示信息“实例数据块DB2不存在,是否要生成它?”,点击“是”按钮确认。可以在SIMATIC管理器中看到新生成的背景数据块DB2。
两次调用FB1时,使用不同的实参和不同的背景数据块,使FB1分别用于控制汽油机和柴油机。两个背景数据块中的变量相同,区别仅在于变量的值(即实参的值)不同。
下面是在语句表模式调用FB1和FC1的程序,“:=”的前面是形参,“:=”的后面是实参。该程序不能用STEP 7直接转换为梯形图。
程序段1:汽油机风扇控制
CALL”风扇控制”
Engine_On :=“汽油机运行”
Timer_Function :=“汽油机风扇延时”
Fan_On :=“汽油机风扇运行”
程序段2:汽油机控制
CALL “发动机控制”,“汽油机数据”
Start :=“起动汽油机”
Stop :=“关闭汽油机”
Actual_Speed :=“共享”.PE_Speed
Engine_On :=“汽油机运行”
Overspeed :=“汽油机超速”
OB1通过两次调用FB1和FC1,实现对汽油机和柴油机的控制。图4-19给出了控制汽油机的程序,控制柴油机的程序与之相似。
块调用分为条件调用和无条件调用。用梯形图调用块时,块的EN(Enable,使能)输入端有能流流入时执行块中的程序,反之则不执行。条件调用时使能输入端EN受到触点电路的控制。块被正确执行时ENO(Enable Output,使能输出端)为1,反之为0。
首先在符号表中定义块的符号、两次调用FC1、FB1的实参的符号(见图4-18)。
双击打开SIMATIC管理器中的OB1,在梯形图显示方式,将左边窗口中的“FC块”文件夹中的“FC1”拖放到程序段1的水平“导线”上(见图4-19),无条件调用符号名为“风扇控制”的FC1。
方框的左边是块的输入参数和输入/输出参数,右边是输出参数。方框内的Engine_On等是FC1的变量声明表中定义的IN和OUT参数,称为“形式参数”(Formal Parameter),简称为“形参”。方框外的符号地址“汽油机运行”等是形参对应的“实际参数”( Actual Parameter),简称为“实参”。形参是局部变量在逻辑块中的名称,实参是调用块时指定的具体的输入、输出参数。调用功能或功能块时应将实参赋值给形参,并保证实参与形参的数据类型一致。
输入参数(IN)的实参可以是地址、符号地址或常数,输出参数(OUT)或输入_输出参数(IN_OUT)的实参必须指定为地址或符号地址。将不同的实参赋值给形参,就可以实现对类似的但是不完全相同的被控对象(例如汽油机和柴油机)的控制。
西门子S7-1200PLC模块黑龙江代理商