S PLC编程及应用第三版_廖常初__第章_第1页
S PLC编程及应用第三版_廖常初__第章_第2页
S PLC编程及应用第三版_廖常初__第章_第3页
S PLC编程及应用第三版_廖常初__第章_第4页
S PLC编程及应用第三版_廖常初__第章_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.1第4章 S7-1200的用户程序结构4.1 函数与函数块函数与函数块 4.1.1 生成与调用函数生成与调用函数 1函数的特点函数的特点 函数FCFB是用户编写的子程序,它们包含完成特定任务的程序,FC和FB有与调用它的块共享的输入、输出参数。 设压力变送器量程的下限为0 MPa,上限为High MPa,经A/D转换后得到027648的整数。转换后的数字NP之间的计算公式为P =(High N)/ 27648 (MPa) 用函数FC1实现上述运算。 2生成函数生成函数 指令树的“添加新块”,单击“添加新块”对话框中的“函数”按钮,FC默认的编号为1,默认的语言为LAD。设置函数的名称为“计算

2、压力”。单击“确定”按钮,生成FC1。 往下拉动程序区最上面的分隔条,分隔条上面是函数的接口区,下面是程序区。.2 在接口区中生成局部变量,后者只能在它所在的块中使用。 右键单击项目树中的FC1,单击快捷菜单中的“属性”,选中打开的对话框左边的“属性”,用复选框取消默认的属性“块的优化访问”。成功编译后接口区出现“偏移量”列,只有临时数据才有偏移量。 函数各种类型的局部变量的作用如下: 1)输入参数Input用于接收调用它的主调块提供的输入数据。 2)输出参数Output用于将块的程序执行结果返回给主调块。 3)输入_输出参数InOut的初值由主调块提供,块执行完后用同一个参数将它的值返回给主

3、调块。 4)文件夹Return中自动生成的返回值“计算压力”与函数的名称相同,属于输出参数。数据类型为Void,表示函数没有返回值。 函数还有两种局部数据: 5)临时数据Temp是暂时保存在局部数据堆栈中的数据。每次调用块之后,临时数据可能被同一优先级中后面调用的块的临时数据覆盖。.3 6)常量Constant是块中使用并且带有符号名的常量。 4FC1的程序设计的程序设计 程序见下图,运算的中间结果用临时局部变量“中间变量”保存。STEP 7自动地在局部变量的前面添加#号。 5在在OB1中调用中调用FC1 在变量表中生成调用FC1时需要的3个变量,将项目树中的FC1拖放到右边的程序区的水平“导

4、线”上。FC1的方框中左边的“输入数据”等是在FC1的接口区中定义的输入参数和输入/输出参数,右边的“压力值”是输出参数。它们被称为块的形式参数,简称为形参,形参在FC内部的程序中使用。方框外是调用时为形参指定的实际参数,简称为实参。实参与它对应的形参应具有相同的数据类型。STEP 7自动地在全局变量的符号地址两边添加双引号。 PLC变量表 OB1调用FC1的程序.4 6函数函数应用的仿真实验应用的仿真实验 将程序下载到仿真CPU后,CPU切换到RUN模式。单击精简视图右下角的 按钮,切换到项目视图。双击打开项目树中的“SIM表1”。 令I0.6为1状态,调用FC1,令IW64为13824(2

5、7648的一半),执行FC1中的程序后,输出参数“压力值”的值5.0 MPa被传送给它的实参“压力计算值”MD18。4.1.2 生成与调用函数块生成与调用函数块 1函数块函数块 函数块(FB)是用户编写的有自己的存储区(背景数据块)的代码块,FB的典型应用是执行不能在一个扫描周期结束的操作。每次调用函数块时,都需要指定一个背景数据块。 2生成函数块生成函数块 在项目“函数与函数块”中添加名为“电动机控制”的FB1。取消FB1默认的属性“块的优化访问”。.5 3生成函数块的局部变量生成函数块的局部变量 函数块的输入、输出参数和静态数据用指定的背景数据块保存。在FB中,定时器如果使用一个固定的背景

6、数据块,在同时多次调用该FB时,该数据块将会被同时用于两处或多处。为此在块接口中生成数据类型为IEC_TIMER的静态变量“定时器DB”,用它提供定时器TOF的背景数据。.6 4FB1的控制要求与程序的控制要求与程序 用输入参数“起动按钮”和“停止按钮”控制InOut参数“电动机”。按下停止按钮,断开延时定时器(TOF)开始定时,输出参数“制动器”为1状态,经过输入参数“定时时间”设置的时间预置值后,停止制动。 在TOF定时期间,每个扫描周期执行完FB1之后,用静态变量“定时器DB”来保存TOF的背景数据。可以修改函数块的输入、输出参数和静态变量的默认值。该默认值作为FB的背景数据块同一个变量

7、的启动值。调用FB时没有指定实参的形参使用背景数据块中的启动值。.7 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状态。可以令两台设

8、备几乎同时起动、同时停车和制动延时。.8 7处理调用错误处理调用错误 调用符号名为“电动机控制”的FB1之后,在FB1的接口区增加了输入参数“定时时间”,被调用的FB1的字符变为红色。右键单击出错的FB1,执行快捷菜单中的“更新块调用”命令,出现“接口同步”对话框,显示出原有的块接口和增加了输入参数后的块接口。单击“确定”按钮,“接口同步”对话框消失。被调用的FB1被修改为新的接口,程序中FB1的红色字符变为黑色。.9 8函数与函数块的区别函数与函数块的区别 FB和FC均为用户编写的子程序,接口区中均有Input、Output、InOut参数和Temp数据。FC的返回值实际上属于输出参数。下面

9、是FC和FB的区别: 1)函数块有背景数据块,函数没有。 2)只能在函数内部访问它的局部变量。其他代码块或HMI可以访问函数块的背景数据块中的变量。 3)函数没有静态变量,函数块有保存在背景数据块中的静态变量。如果函数或函数块的内部不使用全局变量,只使用局部变量,不需要做任何修改,就可以将块移植到其他项目。如果代码块有执行完后需要保存的数据,应使用函数块。 4)在调用函数块时可以不设置某些输入、输出参数的实参,而是使用它们的默认值。函数的局部变量没有默认值,调用时应给所有的形参指定实参。 5)函数块的输出、输入参数和用静态数据保存的内部状态数据有关。 9组织块与组织块与FB和和FC的区别的区别

10、 出现事件或故障时,由操作系统调用对应的组织块,FB和FC是用户程序在代码块中调用的。组织块没有输出参数、InOut参数和静态数据,它的输入参数是操作系统提供的启动信息。用户可以在组织块的接口区生成临时变量和常量。组织块中的程序是用户编写的。.104.1.3 多重背景多重背景 1用于定时器计数器的多重背景用于定时器计数器的多重背景 每次调用IEC定时器和IEC计数器指令时,都需要指定一个背景数据块。如果这类指令很多,将会生成大量的数据块“碎片”。多重背景用于解决这个问题。在项目“多重背景”中生成名为“电磁阀控制”的FB2,去掉它的“优化的块访问”属性。在接口区定义数据类型为IEC_Timer的

11、静态变量TON_DB、TP_DB和TOF_DB,来提供定时器的背景数据。这种程序结构被称为多重背景。.11 将定时器TON拖放到程序区,出现“调用选项”对话框。单击选中“多重背景”,用选择框选中列表中的“TON_DB”,用FB2的静态变量TON_DB提供TON的背景数据。用同样的方法在FB2中调用定时器TP和TOF,用FB2的静态变量“TP_DB”和“TOF_DB”提供TP和TOF的背景数据。 这样处理后,3个定时器的背景数据被包含在它们所在的函数块的背景数据块中,不需要为每个定时器设置一个单独的背景数据块。因此能更合理地利用存储空间。.12 在PLC变量表中定义调用FB2需要的变量,在OB1

12、中两次调用FB2,将用户程序下载到仿真CPU,CPU切换到RUN模式。在SIM表1中生成地址IB0和QB0,用I0.4和I0.5模拟FB2的输入信号“使用者1”和“使用者2”几乎同时为1状态和同时为0状态,观察FB2的输出参数“电磁阀1”和“电磁阀2”的状态是否按程序的要求变化,各段定时时间与FB2中设置的是否相同。.13 2用于用户生成的函数块的多重背景用于用户生成的函数块的多重背景 在项目“多重背景”生成与4.1.2节相同的名为“电动机控制”的函数块FB1,去掉FB1“优化的块访问”属性。生成一个名为“多台电机控制”的函数块FB3,去掉FB3“优化的块访问”属性。在它的接口区生成两个数据类

13、型为“电动机控制”的静态变量“1号电动机”和“2号电动机”。每个静态变量内部的参数是自动生成的,与FB1“电动机控制”的相同。 在FB3中调用FB1,在“调用选项”对话框中选中“多重背景DB”,选中列表中的“1号电动机”,用FB3的静态变量“1号电动机”提供FB1“电动机控制”的背景数据。用同样的方法调用FB1来控制2号电动机。.14 在OB1中调用FB3“多台电机控制”,FB3的背景数据块只有静态变量“1号电动机”和“2号电动机”。两次调用FB1的背景数据都在FB3的背景数据块DB1中。 将用户程序下载到仿真PLC,CPU切换到RUN模式。在SIM表1中生成地址IB0和QB0,用I0.0同和

14、I0.2分别启动1号、2号电动机,用I0.1同和I0.3分别停止1号、2号电动机,观察电动机和制动器的状态变化是否正常。.154.2 数据类型与间接寻址数据类型与间接寻址4.2.1 数据类型数据类型 1数据类型的分类数据类型的分类 数据类型分为基本数据类型、复杂数据类型、参数类型、系统数据类型和硬件数据类型。 2参数类型参数类型 参数类型是传递给被调用块的形参的数据类型。参数类型Void不保存数值,它用于函数不需要返回值的情况。 3系统数据类型系统数据类型 系统数据类型(SDT)由系统提供,可供用户使用,具有不能更改的预定义的结构。例如定时器结构IEC_TIMER,6种整数数据类型的计数器结构

15、等。 4硬件数据类型硬件数据类型 硬件数据类型与硬件组态时模块的设置有关。它用于识别硬件元件、事件和中断OB等与硬件有关的对象。PLC变量表的“系统常量”选项卡列出了项目中的硬件数据类型变量的值,即硬件组件和中断事件的标识符。.16 5数据类型的转换方式数据类型的转换方式 调用指令或块时,如果操作数具有不同的数据类型,应对它们进行转换。 (1)隐式转换 如果操作数的数据类型兼容,将自动执行隐式转换。兼容性测试使用两种标准: 1)使用IEC检查,采用严格的兼容性规则,指令有关的操作数应具有相同的数据类型。 2)不使用IEC检查,不要求指令有关的操作数具有相同的数据类型,但是必须具有相同的数据位数

16、,例如16位的数据类型Int、UInt和Word。 (2)显式转换 操作数不兼容时,只能使用显式转换指令。可使用指令列表的“数学函数”“转换操作”和“字符串 + 字符”文件夹中的指令。 6设置设置IEC检查功能检查功能 (1)设置对项目中所有新的块进行IEC检查 执行“选项”菜单中的“设置”命令,选中出现的“设置”编辑器左边窗口的“PLC编程”中的“常规”组,用复选框选中右边窗口“新块的默认设置”区中的“IEC检查” 。 (2)设置单独的块进行IEC检查 如果没有设置对项目中所有的新块进行IEC检查,用鼠标右键单击项目树中的某个代码块,执行快捷菜单中的“属性”命令,选中打开的对话框左边窗口的“

17、属性”组,用右边窗口中的复选框激活或取消IEC检查功能。 .174.2.2 间接寻址间接寻址 1用用FieldRead与与FieldWrite指令实现间接寻址指令实现间接寻址 在项目“间接寻址”中生成DB1,在DB1中生“数组1”Array1.5 of Int。使用指令FieldRead(读取域)和FieldWrite(写入域)指令实现间接寻址。设置要写入或读取的数据类型为Int。参数MEMBER的实参必须是数组的第一个元素“数据块1”.数组11。参数索引值“INDEX”是要读写的数组元素的下标,数据类型为DINT。参数“VALUE”是要写入数组元素的操作数或保存读取的数组元素的值的地址。 将

18、程序下载到仿真PLC,启动OB1的程序状态监视功能。用鼠标右键单击指令FieldWrite的输入参数INDEX的实参MD10,将MD10的值修改为3。启用数据块1的监视功能,可以看到输入参数VALUE的值25被写入下标为3的数组元素“数据块1”.数组13。修改INDEX的值,VALUE的值将被写入INDEX对应的数组元素。 用上述方法设置指令FieldRead的输入参数INDEX的值为3,输出参数VALUE的实参MW18中是读取的下标为3的数组元素“数据块1”.数组13的值。.18 2使用间接寻址的循环程序使用间接寻址的循环程序 在项目“间接寻址”的DB1中生成有5个DInt元素的数组“数组2

19、”,数据类型为Array1.5 of DInt,设置各数组元素的初始值。生成一个名为“累加双字”的函数FC1,输入参数“数组IN”的数据类型为Array1.5 of Dint。 FC1的程序首先将“累加结果”清零,设置数组下标的初始值为1,程序段2的跳转标签Back表示循环的开始。指令FieldRead用来实现间接寻址,其参数INDEX是要读写的数组元素的下标。读取数组元素值后,将它与输出参数“累加结果”的值相加,将数组的下标加1,它指向下一个数组元素,为下一次循环做好准备。将作为循环次数计数器的“累加个数”减1。减1后如果非0则返回标签Back处,开始下一次循环的操作。.19 在OB1中调用

20、FC1“累加双字”,求数据块1中的数组2从第一个元素开始,若干个数组元素之和,运算结果用MD20(“累加值”)保存。 将程序下载到仿真PLC,CPU切换到RUN模式。用MW24设置要求和的数组元素的个数为5。启动监视功能。在“累加启动”信号M2.0的上升沿调用FC1“累加双字”,通过循环程序计算出数组2的5个元素的累加和为15。 3数组元素的间接索引数组元素的间接索引 将项目“间接寻址”中的FC1复制为名为“间接索引”的FC2,用MOVE指令取代上述循环程序中的FieldRead,用Int数据类型的变量做下标,可以实现一维或多维数组的间接寻址。.20 改变MOVE指令的实参“#数组IN#下标”

21、中的“下标”,就可以实现间接寻址,读取数组不同的元素的值。4.3 中断事件与中断指令中断事件与中断指令4.3.1 事件与组织块事件与组织块 1启动组织块的事件启动组织块的事件 组织块OB是操作系统与用户程序的接口,出现启动组织块的事件时,由操作系统调用对应的组织块。如果当前不能调用OB,则按照事件的优先级将其保存到队列。如果没有为该事件分配OB,则会触发默认的系统响应。 2事件执行的优先级与中断队列事件执行的优先级与中断队列 事件一般按优先级的高低来处理,先处理高优先级的事件。优先级相同的事件按“先来先服务”的原则来处理。如果设置为OB可中断模式,更高优先级的事件将中断正在运行的OB。 各事件

22、有默认的组织块,此外还可以生成编号大于等于123的组织块。.21 3用用DIS_AIRT与与EN_AIRT指令禁止与激活中断指令禁止与激活中断 可以用指令DIS_AIRT延时处理优先级高于当前组织块的中断OB,调用指令EN_AIRT启用以前调用DIS_AIRT延时的组织块处理。4.3.2 初始化组织块与循环中断组织块初始化组织块与循环中断组织块 1程序循环组织块程序循环组织块 项目为“启动组织块与循环中断组织块”,自动生成程序循环组织块OB1。 双击项目数中的“添加新块”,单击“组织块”按钮,选中列表中的“Program cycle”,生成一个程序循环组织块。OB默认的编号为123,语言为LA

23、D。单击“确定”按钮,生成OB123。 分别在OB1和OB123中生成简单的程序,将它们下载到仿真PLC,如果可以用I0.4和I0.5分别控制Q1.0和Q1.1,说明OB1和OB123均被循环执行。 2启动组织块启动组织块 启动组织块用于首次扫描时将系统初始化,生成OB100,给QB0置初值7,将MB14加1。在仿真时观察OB100的功能是否正常。 3循环中断组织块循环中断组织块 循环中断组织块以设定的循环时间(160000ms)周期性地执行,而与程序循环OB的执行无关。循环中断和延时中断组织块的个数之和最多允许4个,循环中断OB的编号应为OB30OB38,或大于等于123。.22 生成OB3

24、0,将循环时间改为1s。相位偏移用于错开不同时间间隔的几个循环中断OB。OB30的程序控制8位彩灯循环移位,I0.2控制彩灯是否移位,I0.3控制移位的方向。 在CPU运行期间,用SET_CINT指令重新设置循环中断的循环时间和相移,时间的单位为s,用QRY_CINT指令查询循环中断的状态。MB9是读取的状态字MW8的低位字节,M9.4为1表示已下载OB30,M9.2为1表示已启用循环中断。.234.3.3 时间中断组织块时间中断组织块 1时间中断的功能时间中断的功能 时间中断用于在设置的日期和时间产生一次中断,或从设置的日期时间开始,周期性地重复产生中断。时间中断OB的编号应为1017,或大

25、于等于123。在OB1中调用指令QRY_TINT来查询时间中断的状态。在I0.0的上升沿,调用指令SET_TINT和ACT_TINT来分别设置和激活时间中断OB10。 参数LOCAL为1表示使用本地时间。16#0201表示每分钟产生一次时间中断。参数ACTIVATE为1时,该指令设置并激活时间中断,为0仅设置时间中断。本例用指令ACT_TINT来激活时间中断。在OB10中将MB4加1。.24 3仿真实验仿真实验 打开仿真软件S7-PLCSIM,生成IB0、MB4和MB9的SIM表条目,MB9是QRY_TINT读取的状态字MW8的低位字节。下载所有的块后,仿真PLC切换到RUN模式,M9.4为1

26、状态,表示已经下载了OB10。M9.2为1状态,表示时间中断已被激活。如果设置的是已经过去的日期和时间,CPU将会在0秒时每分钟调用一次OB10,将MB4加1。在I0.1的上升沿,时间中断被禁止,M9.2变为0状态,MB4停止加1。在I0.0的上升沿,时间中断被重新激活,M9.2变为1状态,MB4每分钟又被加1。4.3.4 硬件中断组织块硬件中断组织块 1硬件中断事件与硬件中断组织块硬件中断事件与硬件中断组织块 硬件中断事件包括CPU内置的和信号板的DI的上升沿/下降沿事件,高速计数器的实际计数值等于设定值 、计数方向改变和外部复位输入信号的上升沿。最多可以生成50个硬件中断OB,其编号应为4

27、047,或大于等于123。 在项目“硬件中断例程1”中生成硬件中断OB40、OB41,组态时将它们分配给I0.0的上升沿事件和I0.1的下降沿事件。 在OB40和OB41中,分别用M1.2一直闭合的常开触点将Q0.0:P置位和复位。.25 将程序下载到仿真PLC,打开SIM表1,生成IB0和QB0的SIM表条目。两次单击I0.0对应的小方框,在I0.0的上升沿,CPU调用OB40,将Q0.0置位为1。两次单击I0.1对应的小方框,在I0.1的下降沿,CPU调用OB41,将Q0.0复位。4.3.5 中断连接指令与中断分离指令中断连接指令与中断分离指令 “将OB附加到中断事件”指令ATTACH和“

28、将OB与中断事件分离”指令DETACH分别用于在PLC运行时建立和断开硬件中断事件与中断OB的连接。要求使用指令ATTACH和DETACH,在出现I0.0上升沿事件时,交替调用硬件中断组织块OB40和OB41,分别将不同的数写入QB0。项目为“硬件中断2”。 在硬件组态时将OB40分配给I0.0的上升沿中断事件。该中断事件出现时,调用OB40。在OB40中,断开该事件与OB40的连接,建立该事件与OB41的连接。用MOVE指令给QB0赋值为16#F。OB40.26 下一次出现I0.0上升沿事件时,在OB41中,断开该事件与OB41的连接,建立该事件与OB40的连接。用MOVE指令给QB0赋值为

29、16#F0。OB41 4仿真实验仿真实验 将程序下载到PLC,打开SIM表1,生成I0.0和QB0的SIM表条目。在I0.0的上升沿,CPU调用OB40,断开I0.0的上升沿事件与OB40的连接,将该事件与OB41连接。将16#0F写入QB0,后者的低4位为1。 在I0.0下一个上升沿,CPU调用OB41,断开I0.0的上升沿事件与OB41的连接,将该事件与OB40连接。将16#F0 写入QB0,后者的高4位为1。 连续多次单击I0.0对应的小方框,CPU交替调用OB40和OB41,QB0被交替写入16#0F和16#F0。.274.3.6 延时中断组织块延时中断组织块 时间延迟OB的编号为20

30、23,或大于等于123。项目为“时间延迟中断例程”。在I0.0的上升沿中断OB40中,调用指令SRT_DINT,启动10s延时。时间范围为160000ms,精度为1ms。调用“读取本地时间”指令RD_LOC_T,读取启动延时的时间,用DB1中的变量DT1保存。 定时时间到时调用OB20。在OB20中调用RD_LOC_T指令,读取延时结束的时间,用DB1中的变量DT2保存。同时将Q0.4:P置位。 OB20 OB1.28 在OB1中调用指令QRY_DINT来查询延时中断的状态字STATUS。在I0.1为1时调用指令CAN_DINT来取消延时中断过程。 仿真时生成IB0、QB0和MB9的SIM表条目,M9.4为1表示OB20已经下载到CPU,M9.2为1表示正在执行SRT_DINT启动的时间延时。 监控DB1中延时的起、止时间。 定时期间令I0.1为1状态,调用指令CAN_DINT取消时间延迟,M9.2变为FALSE。10s的延迟时间到的时候,不会调用OB20。Q0.4不会变为TRUE,DB1中的DT2也不会显示出新读取的时间值。.294.4 交叉引用表与程序信息交叉引用表与

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论