您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > S7-1200-PLC编程及应用第三版-廖常初-课件-第4章
第4章S7-1200的用户程序结构4.1函数与函数块4.1.1生成与调用函数1.函数的特点函数FC和函数块FB是用户编写的子程序,它们包含完成特定任务的程序,FC和FB有与调用它的块共享的输入、输出参数。设压力变送器量程的下限为0MPa,上限为HighMPa,经A/D转换后得到0~27648的整数。转换后的数字N和压力P之间的计算公式为P=(HighN)/27648(MPa)用函数FC1实现上述运算。2.生成函数指令树的“添加新块”,单击“添加新块”对话框中的“函数”按钮,FC默认的编号为1,默认的语言为LAD。设置函数的名称为“计算压力”。单击“确定”按钮,生成FC1。3.生成函数的局部数据往下拉动程序区最上面的分隔条,分隔条上面是函数的接口区,下面是程序区。在接口区中生成局部变量,后者只能在它所在的块中使用。右键单击项目树中的FC1,单击快捷菜单中的“属性”,选中打开的对话框左边的“属性”,用复选框取消默认的属性“块的优化访问”。成功编译后接口区出现“偏移量”列,只有临时数据才有偏移量。函数各种类型的局部变量的作用如下:1)输入参数Input用于接收调用它的主调块提供的输入数据。2)输出参数Output用于将块的程序执行结果返回给主调块。3)输入_输出参数InOut的初值由主调块提供,块执行完后用同一个参数将它的值返回给主调块。4)文件夹Return中自动生成的返回值“计算压力”与函数的名称相同,属于输出参数。数据类型为Void,表示函数没有返回值。函数还有两种局部数据:5)临时数据Temp是暂时保存在局部数据堆栈中的数据。每次调用块之后,临时数据可能被同一优先级中后面调用的块的临时数据覆盖。6)常量Constant是块中使用并且带有符号名的常量。4.FC1的程序设计程序见下图,运算的中间结果用临时局部变量“中间变量”保存。STEP7自动地在局部变量的前面添加#号。5.在OB1中调用FC1在变量表中生成调用FC1时需要的3个变量,将项目树中的FC1拖放到右边的程序区的水平“导线”上。FC1的方框中左边的“输入数据”等是在FC1的接口区中定义的输入参数和输入/输出参数,右边的“压力值”是输出参数。它们被称为块的形式参数,简称为形参,形参在FC内部的程序中使用。方框外是调用时为形参指定的实际参数,简称为实参。实参与它对应的形参应具有相同的数据类型。STEP7自动地在全局变量的符号地址两边添加双引号。PLC变量表OB1调用FC1的程序6.函数应用的仿真实验将程序下载到仿真CPU后,CPU切换到RUN模式。单击精简视图右下角的按钮,切换到项目视图。双击打开项目树中的“SIM表1”。令I0.6为1状态,调用FC1,令IW64为13824(27648的一半),执行FC1中的程序后,输出参数“压力值”的值5.0MPa被传送给它的实参“压力计算值”MD18。4.1.2生成与调用函数块1.函数块函数块(FB)是用户编写的有自己的存储区(背景数据块)的代码块,FB的典型应用是执行不能在一个扫描周期结束的操作。每次调用函数块时,都需要指定一个背景数据块。2.生成函数块在项目“函数与函数块”中添加名为“电动机控制”的FB1。取消FB1默认的属性“块的优化访问”。3.生成函数块的局部变量函数块的输入、输出参数和静态数据用指定的背景数据块保存。在FB中,定时器如果使用一个固定的背景数据块,在同时多次调用该FB时,该数据块将会被同时用于两处或多处。为此在块接口中生成数据类型为IEC_TIMER的静态变量“定时器DB”,用它提供定时器TOF的背景数据。4.FB1的控制要求与程序用输入参数“起动按钮”和“停止按钮”控制InOut参数“电动机”。按下停止按钮,断开延时定时器(TOF)开始定时,输出参数“制动器”为1状态,经过输入参数“定时时间”设置的时间预置值后,停止制动。在TOF定时期间,每个扫描周期执行完FB1之后,用静态变量“定时器DB”来保存TOF的背景数据。可以修改函数块的输入、输出参数和静态变量的默认值。该默认值作为FB的背景数据块同一个变量的启动值。调用FB时没有指定实参的形参使用背景数据块中的启动值。5.在OB1中调用FB1在PLC变量表中生成两次调用FB1使用的符号地址。在OB1中两次调用FB1,自动生成背景数据块。为各形参指定实参。6.调用函数块的仿真实验将程序下载到仿真PLC,后者进入RUN模式。在S7-PLCSIM的项目视图打开项目树中的“SIM表1”,在表中生成IB0和QB0的SIM表条目。两次单击起动按钮I0.0,1号设备Q0.0变为1状态。两次单击停止按钮I0.1,Q0.0变为0状态,制动Q0.1变为1状态。经过参数“定时时间”设置的时间后Q0.1变为0状态。可以令两台设备几乎同时起动、同时停车和制动延时。7.处理调用错误调用符号名为“电动机控制”的FB1之后,在FB1的接口区增加了输入参数“定时时间”,被调用的FB1的字符变为红色。右键单击出错的FB1,执行快捷菜单中的“更新块调用”命令,出现“接口同步”对话框,显示出原有的块接口和增加了输入参数后的块接口。单击“确定”按钮,“接口同步”对话框消失。被调用的FB1被修改为新的接口,程序中FB1的红色字符变为黑色。8.函数与函数块的区别FB和FC均为用户编写的子程序,接口区中均有Input、Output、InOut参数和Temp数据。FC的返回值实际上属于输出参数。下面是FC和FB的区别:1)函数块有背景数据块,函数没有。2)只能在函数内部访问它的局部变量。其他代码块或HMI可以访问函数块的背景数据块中的变量。3)函数没有静态变量,函数块有保存在背景数据块中的静态变量。如果函数或函数块的内部不使用全局变量,只使用局部变量,不需要做任何修改,就可以将块移植到其他项目。如果代码块有执行完后需要保存的数据,应使用函数块。4)在调用函数块时可以不设置某些输入、输出参数的实参,而是使用它们的默认值。函数的局部变量没有默认值,调用时应给所有的形参指定实参。5)函数块的输出、输入参数和用静态数据保存的内部状态数据有关。9.组织块与FB和FC的区别出现事件或故障时,由操作系统调用对应的组织块,FB和FC是用户程序在代码块中调用的。组织块没有输出参数、InOut参数和静态数据,它的输入参数是操作系统提供的启动信息。用户可以在组织块的接口区生成临时变量和常量。组织块中的程序是用户编写的。4.1.3多重背景1.用于定时器计数器的多重背景每次调用IEC定时器和IEC计数器指令时,都需要指定一个背景数据块。如果这类指令很多,将会生成大量的数据块“碎片”。多重背景用于解决这个问题。在项目“多重背景”中生成名为“电磁阀控制”的FB2,去掉它的“优化的块访问”属性。在接口区定义数据类型为IEC_Timer的静态变量TON_DB、TP_DB和TOF_DB,来提供定时器的背景数据。这种程序结构被称为多重背景。将定时器TON拖放到程序区,出现“调用选项”对话框。单击选中“多重背景”,用选择框选中列表中的“TON_DB”,用FB2的静态变量TON_DB提供TON的背景数据。用同样的方法在FB2中调用定时器TP和TOF,用FB2的静态变量“TP_DB”和“TOF_DB”提供TP和TOF的背景数据。这样处理后,3个定时器的背景数据被包含在它们所在的函数块的背景数据块中,不需要为每个定时器设置一个单独的背景数据块。因此能更合理地利用存储空间。在PLC变量表中定义调用FB2需要的变量,在OB1中两次调用FB2,将用户程序下载到仿真CPU,CPU切换到RUN模式。在SIM表1中生成地址IB0和QB0,用I0.4和I0.5模拟FB2的输入信号“使用者1”和“使用者2”几乎同时为1状态和同时为0状态,观察FB2的输出参数“电磁阀1”和“电磁阀2”的状态是否按程序的要求变化,各段定时时间与FB2中设置的是否相同。2.用于用户生成的函数块的多重背景在项目“多重背景”生成与4.1.2节相同的名为“电动机控制”的函数块FB1,去掉FB1“优化的块访问”属性。生成一个名为“多台电机控制”的函数块FB3,去掉FB3“优化的块访问”属性。在它的接口区生成两个数据类型为“电动机控制”的静态变量“1号电动机”和“2号电动机”。每个静态变量内部的参数是自动生成的,与FB1“电动机控制”的相同。在FB3中调用FB1,在“调用选项”对话框中选中“多重背景DB”,选中列表中的“1号电动机”,用FB3的静态变量“1号电动机”提供FB1“电动机控制”的背景数据。用同样的方法调用FB1来控制2号电动机。在OB1中调用FB3“多台电机控制”,FB3的背景数据块只有静态变量“1号电动机”和“2号电动机”。两次调用FB1的背景数据都在FB3的背景数据块DB1中。将用户程序下载到仿真PLC,CPU切换到RUN模式。在SIM表1中生成地址IB0和QB0,用I0.0同和I0.2分别启动1号、2号电动机,用I0.1同和I0.3分别停止1号、2号电动机,观察电动机和制动器的状态变化是否正常。4.2数据类型与间接寻址4.2.1数据类型1.数据类型的分类数据类型分为基本数据类型、复杂数据类型、参数类型、系统数据类型和硬件数据类型。2.参数类型参数类型是传递给被调用块的形参的数据类型。参数类型Void不保存数值,它用于函数不需要返回值的情况。3.系统数据类型系统数据类型(SDT)由系统提供,可供用户使用,具有不能更改的预定义的结构。例如定时器结构IEC_TIMER,6种整数数据类型的计数器结构等。4.硬件数据类型硬件数据类型与硬件组态时模块的设置有关。它用于识别硬件元件、事件和中断OB等与硬件有关的对象。PLC变量表的“系统常量”选项卡列出了项目中的硬件数据类型变量的值,即硬件组件和中断事件的标识符。5.数据类型的转换方式调用指令或块时,如果操作数具有不同的数据类型,应对它们进行转换。(1)隐式转换如果操作数的数据类型兼容,将自动执行隐式转换。兼容性测试使用两种标准:1)使用IEC检查,采用严格的兼容性规则,指令有关的操作数应具有相同的数据类型。2)不使用IEC检查,不要求指令有关的操作数具有相同的数据类型,但是必须具有相同的数据位数,例如16位的数据类型Int、UInt和Word。(2)显式转换操作数不兼容时,只能使用显式转换指令。可使用指令列表的“数学函数”“转换操作”和“字符串+字符”文件夹中的指令。6.设置IEC检查功能(1)设置对项目中所有新的块进行IEC检查执行“选项”菜单中的“设置”命令,选中出现的“设置”编辑器左边窗口的“PLC编程”中的“常规”组,用复选框选中右边窗口“新块的默认设置”区中的“IEC检查”。(2)设置单独的块进行IEC检查如果没有设置对项目中所有的新块进行IEC检查,用鼠标右键单击项目树中的某个代码块,执行快捷菜单中的“属性”命令,选中打开的对话框左边窗口的“属性”组,用右边窗口中的复选框激活或取消IEC检查功能。4.2.2间接寻址1.用FieldRead与FieldWrite指令实现间接寻址在项目“间接寻址”中生成DB1,在DB1中生“数组1”Array[1..5]ofInt。使用指令FieldRead(读取域)和FieldWrite(写入域)指令实现间接寻址。设置要写入或读取的数据类型为Int。参数MEMBER的实参必须是数组的第一个元素“数据块1”.数组1[1]。参数索引值“INDEX”是要读写的数组元素的下标,数据类型为DINT。参数“VALUE”是要写入数组元素的操作数或保存读取的数组元素的值的地址。将程序下载到仿真PLC,启动OB1的程序状态监视功能。用鼠标右键单击指令FieldWrite的输入参数INDEX的实参MD10,将MD10的值修改为3。启用数据块1的监视功能,可以看到输入参数VALUE的值25被写入下标为3的数组元素“数据块1”.数组1[3]。修改INDEX的值,VALUE的值将被写入INDEX对应的数组元素。用上述方法设置指令FieldRead的输入参数INDEX的值为3,输出参数VALUE的实参MW18中
本文标题:S7-1200-PLC编程及应用第三版-廖常初-课件-第4章
链接地址:https://www.777doc.com/doc-5562233 .html