资源描述
DCS,产品和技术培训,图形化编程,主讲人:,一、图形化软件概述,图形化组态的作用?,编写自定义控制方案,如精馏、联锁反应、燃烧等,四种编程语言,梯形图(LD),顺控图(SFC),功能块图(FBD),ST语言,启动,方式,推荐方式:通过单击组态软件的算法,弹出自定义控制算法设置对话框,,点击图形编程中的“编辑”,启动图形化编程软件;,软件操作界面,工程栏,信息栏,工具栏,菜单栏,编辑区,编译成功提示,编译出错提示,状态栏,帮助,菜单项简介,二、图形化编程基础,主要内容:,工程、段落、区段,编程基本步骤,程序运行原理及执行次序,工程管理,数据类型,变量,系统资源,培训什么?,工程、段落、区段,工程,SControl用一个工程(Project)描述一个控制站的所有程序。,每个工程唯一对应一个控制站,工程必须指定其对应的控制站地址。,段落,工程包含一个或多个段落(Section)。,SControl通过任务管理来管理多个段落文件,在工程文件中保存配置信息。,段落是通常意义上的一个文档,是组成工程的基本单位。,新建段落时必须指定段落的编辑类型和程序类型。,区段,区段指在同一段落中有数据信号相连的元素的总和。,一个段落可以包含一个或多个区段(SFC段落只有一个区段)。,区段只是一个表示段落中元素间关系的概念,新建区段不会生成任何新文件。,工程、段落和区段的关系,工程,段落,区段,组态文件说明,软件(产生文件),文件扩展名,文件说明,SControl软件,.PRJ,工程文件,.FBD,FBD文件,.LAD,LAD文件,.SFC,SFC文件,.BIN,二进制代码文件,.C,临时文件,.H,临时文件,.EXP,.EXT,模块导出文件,文件保存路径,一,个组态的相关文件必须保存在正确的文件夹下,否则在组态中进行联编时会出错。,段落文件须保存在工程文件夹下;,工程文件与工程文件夹须保存在组态文件夹下的“Control”文件夹下;,“Control”文件夹须保存在组态文件夹下。,编程基本步骤,基本步骤,建立图形化组态,工程,并与系统组态软件建立关联;,根据控制方案的特点及需要选择合适的编辑器在建好的工程中新建,段落,,在段落中,编写程序,,编写的过程中进行保存;,程序编写完毕后,通过,编译,检查程序语法错误,修改程序至程序编译无误;,将程序,下载,到主控卡,联机,调试,程序,使程序运行时符合控制方案的要求;,程序运行原理及执行次序,图形化自定义程序下载到控制站后,每隔一个运行周期运行一次。,控制站执行程序时,先判断段落的执行次序,,对于段落中的执行次序,先判断区段的执行次,序,然后再判断区段中各个编程元素的执行次序。,新建工程,工程与组态关联,段落新建及保存,按编辑类型可将段落分类为,FBD段落,LD段落,SFC段落,ST语言段落,按程序类型分可将段落分类为:,程序段落,模块段落,程序类型和段类型,任务管理,SControl以系统组态软件中设置的控制周期为1Ts,即:如果在系统组态软件的组态过程中设置了控制周期为0.1s,则1Ts=0.1s.,用户还可通过操作“移到队首”、“上移”、“下移”、“移到队尾”等操作设置同一运行周期各程序运行的优先级,即排在队列靠前的同一运行周期程序比排在队列靠后的程序优先执行。不同运行周期的程序之间的优先级无法比较。,可以对每个段落设置密码进行保护,只有当编辑界面打开后,才可以进行设置密码和删除密码的操作,。,练习,请大家花5分钟的时间:,1、熟悉软件界面,2、新建一个工程,3、使用不同的编辑器建立几个段落,4、改变段落的执行周期,5、调整段落的执行次序,数据类型,图形化软件提供的变量数据类型,半浮点2字节,数据类型编辑器,SControl内置数据类型编辑器,用户可以用数据类型编辑器生成自己的数据类型,并可以在任何编辑变量类型的地方使用。,系统内已预定义了部分数据类型,这些数据类型只读,用户无法修改删除。,问题?,模拟量输入信号数据类型?,structAI,模拟量输入信号的PV成员数据类型?,SFLOAT,开关量输入信号数据类型?,structDI,开关量输入信号的VAL成员数据类型?,BOOL,变量分类,变量按结构分为:,基本变量:基本数据类型(如BOOL、SFLOAT、INT等)构成的变量称为基本变量。,复合变量:复合数据类型(如结构体、数组等)所对应的变量为复合变量。,变量分类,变量按作用范围分为:,组态中定义的变量;,全局变量(“工程”菜单下“变量编辑器”中定义);,私有变量(“对象”菜单下“变量定义”中定义);,输入变量与输出变量(“对象”菜单下“变量定义”中定义);,变量声明,变量作用范围,SCControl中可以使用的变量有四类:,组态中定义的变量,作用范围:整个组态,包括图形化工程和SCX语言程序、操作组态,全局变量,作用范围:整个图形化工程,包括各个段落,私有变量,作用范围:只在该段落起作用,输入变量与输出变量,作用范围:只在自定义段落起作用,变量查找,根据所查找目标数据源的分类(当前段、当前工程)进行变量、位号以及模块的查询。,系统资源,位号,系统变量,单回路控制模块,串级回路控制模块,冷热启动及下载组态标志,模入量位号成员,开入量位号成员,名称,类型,说明,VAL,BOOL,测量值,MAN,BOOL,手自动切换开关,OFF:自动;ON:手动,MVAL,BOOL,手动输入信号值,FLAG,BOOL,质量码,系统变量,单回路控制模块,串级回路控制模块,串级回路控制模块,冷热启动及下载组态标志,BOOL g_bHotStartup,热启动标志,热启动时为ON,需要编程清0;,BOOL g_bColdStartup,冷启动标志,冷启动时为ON,需要编程清0;,g_bDownUsrPrgFlag,下载用户程序标志,下载了用户程序之后为ON,需要编程清0;,g_bDownCfgFlag,下载组态标志,下载了组态(包括硬件组态、用户程序组态)后为ON,需要编程清0。,提问,需要在流程图上显示累积量,在哪里定义?,三、功能块图(FBD)语言,功能块图(FBD)概述,功能块图的程序结构和执行次序,FBD的编程元素,模块库介绍,常用模块介绍,控制策略的FBD实现,FBD编程注意事项,培训什么?,主要内容:,FBD概述,FBD是一种图形化的编程语言,FBD用功能和功能块来构建控制策略,FBD直观、易于维护,IEC61131-3标准定义了FBD编程语言要素,功能块指包含内部状态的程序块,功能块分为基本功能块和自定义功能块,FFB都可用EN输入和ENO输出进行配置,FFB由带有输入和输出的图形框来描述,FBD概述,EN和ENO(使能),EN是功能块的缺省的第0号输入。,ENO是功能块缺省的第0号输出。,可以隐藏EN和ENO引脚。,如果当调用功能块时EN值等于ON时,则由FFB定义的算法才被执行。,ENO=EN,FBD段落:即一幅FBD图,FBD区段:有链路相连的元素的组合,区段起始模块:那些输入只连接变量的模块,区段启动模块:位置最上的起始模块,一个FBD段落可以包含一个或多个FBD区段,FBD程序结构,FBD执行次序,区段的执行从启动模块开始。,区段内的执行次序由区段内的数据流决定。,段落中区段间的执行次序由区段的启动模块的位置决定。执行次序由上到下。,执行次序,FBD编辑器-组态元素,选择,连接线,取反,最近选择的功能块,功能块选择,注释文本,调试文本,跳转按钮,FBD编辑器-IEC模块库,算术运算模块,比较运算模块,转换运算模块,计数器模块,逻辑模块,数学模块,选择模块,定时器模块,触发器模块,FBD编辑器-辅助模块库,控制模块,通讯辅助模块,累积模块,输入处理,系统模块,文本代码模块,辅助计算,电量转换,信号选择模块,浮点处理模块,FBD编辑器-自定义模块库,自定义模块库收集了当前工程所编辑的所有模块。,FBD编辑器-附加库,附加库主要包括一些特殊模块、锅炉模块、造气模块、DEH模块、,智能通讯卡模块供用户使用,。,注:DEH模块、智能通讯卡模块只供ECS-100X系统使用。,下面我们介绍几个较常用的模块,其他模块的使用可以参考相应的帮助文档。,算术运算-ADD,在使用这个模块的时候,要注意模块的输入、输出变量的数据类型。,该模块可以有多个输入参数,我们可以用鼠标拖动模块下方的黑点来增加或减少输入变量。,可以通过点击“显示EN/ENO”隐藏EN/ENO引脚。,可以通过点击“帮助”按钮来查看该模块的使用说明。,例1:求温度TI101(量程0600)和TI102(量程0600)的平均值,并将 运算结果存放至自定义变量TT中。,算数运算-DIV,算数运算-DIV,除法运算时应注意其运算结果应在半浮点数据类型的表示范围内。,例:要求计算流量FI101(0500M3/h)和FI102,(0600M3/h)的比值。,首先,新建浮点型变量BIZHI。,其次,图形化编程如下:,算术运算-MOVE,算术运算-MOVE,这个模块相当于赋值的功能。例如,我们将位号TI101的报警高限设定为0.9,则图形化编程如下:,比较运算-GT,比较运算-GE,例如,当压力PT101(010KPa)超过80%时要求打开电磁阀KO101。,参考程序如下:,转换运算SFLOAT_TO_FLOAT,转换运算SFLOAT_TO_FLOAT,例:求温度TI101(0600)和TI102(0800)的平均值,并将计算结果存放到自定义变量TT(0700)中。,逻,辑运算-AND,逻辑运算-AND,例:要求当三个开关KI101、KI102和KI103都打开时(为ON)启动电机KT101,否则关闭KT101。,数学函数-ABS,数学函数-ABS,例:要求当流量FT101(06000M3/h)超过或低于某个设定值的30%时产生报警(变量BJT=ON),该设定值为半浮点变量FF(06000M3/h)。,选择模块-SEL,选择模块-SEL,例:当操作员将开关(一字节变量KT)打至OFF时,选择测点一(位号TI101)作为控制回路的输入信号;当操作员将开关(一字节变量KT)打至ON时,选择测点二(位号TI102)作为控制回路的输入信号。,选择模块-MAX,选择模块-MAX,例:某装置有3个温度测点,分别为TI101(0600)、TI102(0600)、TI103(0600),要求将最高的温度信号作为连锁程序的判断条件。当温度超过其量程的90%时打开电磁阀KO101。,TON定时器模块,TON定时器模块,定时器的基准为控制周期,定时时间必须设置为运行周期的整数倍。,例:某连锁控制程序,要求当温度TI105(01000),超过600时打开电磁阀KO102。,TOFF定时器模块,TOFF定时器模块,注意,当延时时间到达之后输出为OFF状态。,定时器的基准为控制周期,定时时间必须设置为运行周期的整数倍。,例:要求当电机KT101跳闸时(由ON变为OFF),延时5秒种后点亮报警指示灯TT。,定时器-TP,定时器-TP,该模块用于产生持续时间一定的脉冲。,定时器的基准为控制周期,定时时间必须设置为运行周期,的整数倍。,例:请利用TP模块制作一个自复位按钮,要求当按下按钮KT101后(即为ON)延时5秒种后将KT101复位(即为OFF)。,RS触发器模块,RS触发器模块,RS模块常用于连锁程序的编制。,例:当水位LI101(0200mm)高于量程的60%时打开放水阀门KO101,但要求操作员可以按下手动开关(为ON时)强行将该阀门关闭(用自定义变量MT表示该软手动开关)。,SR触发器模块,报警模块-AIALM,报警模块-AIALM,每个模拟量输入位号都有自己的质量码,主要用于位号的报警分析,在图形化组态中质量码为WORD类型。,例:当温度TE105超过高高限或低于低低限时将变量THL置为ON。,累积函数-TOTAL_ACCUM,累积函数-TOTAL_ACCUM,例:有一流量信号FI101(0100M3/h),要求将该流量累积。,首先,我们定义一8字节累积量FQ101,量程100,单位M3,系数3600,其次,使用该模块实现流量的累积。如下图:,注:该模块每秒钟执行一次,因此要求程序的执行周期,不大于0.5秒。,使用该模块时必须保证流量信号的量程下限为0。,累积函数-SUB_ACCUM,累积函数-SUB_ACCUM,该模块可用于累积量的清零。,例:将累积量FQ101清零。,参考程序如下:,单回路模块-BSC,该模块的功能是产生一个单回路PID控制。使用时与被控对象组成回路,以MV作为被控对象的输入,以被控对象的输出作为BSC模块的输入PV;并正确的设置模块的内部参数,可使测量值PV稳定地等于给定值。,单回路模块-BSCX,注:BSCX是BSC模块的扩展模块,,在BSC模块的基础上增加了该模块,的成员,便于用户使用。,例:某单回路控制,回路输入信号为温度TI101(0600),回路输出为调节阀FV101。,首先,声明自定义单回路如下:,其次,进行图形化编程如下:,例:某连锁控制,当压力PT101(08KPa)超过5KPa时将回路PTC101强制切为手动。回路PTC101的输入信号为PT101,输出位号为PV101。,首先将工程值转化成半浮点数,5KPa对应的半浮点值为0.625。,其次进行自定义回路的声明。,文本代码模块-TEXTCODE,我们可以利用该模块在功能块图编辑器或梯形图编辑器中使用ST语言,编辑器,编写文本代码,使程序编制更为灵活。,ST语言的语法请参考ST编辑器。,双击该模块,将弹出如下对话框,点击“代码”按钮将弹出文本编辑器进行程序编制。,控制策略的FBD实现,例1:某连锁控制,要求当温度TI101(0800)超过400时,全开冷水调节阀TV101;当温度低于200时关闭冷水阀TV101。,例2:要求当操作员打开开关K101(为ON)时,开始对流量FT101(0600M3/h)进行累积;当操作员关闭该开关(为OFF)时停止累积,并对累积量清零。,我们设置自定义8字节累积量FQ101,图形化编程如下:,例3:某温度控制单回路,回路输入信号为温度TI101(01000),回路输出信号为调节阀TV101。正常工况下回路处于自动控制状态;当温度高于900时回路转到手动控制状态,由操作员手动控制,同时发出报警信号(使自定义变量MFT=ON)。,注意事项!,对于编程的时候经常出现的一些错误,你是否知道是怎么引起的?,出现变量非法的提示?,是否在变量定义的时候使用了非法字符?例如,PI-101;图形化组态的时候不允许使用减号“-”,但是可以采用下划线“_”,注意事项!,出现数据类型不匹配的提示?,输入输出引脚所连接的数据与功能块所要求的数据类型不匹配?,例如,四、梯形图(LD)语言,主要内容:,概念,触点,线圈,垂直连接线,编程注意事项,培训什么?,梯形图概述,梯形图在原电器控制系统中的接触器、继电器梯形图基础上演变而来,与电气操作原理相呼应,形象、直观和实用。,触点和线圈来构建逻辑控制方案,很容易将电气联锁图转换为梯形图程序,联锁程序习惯使用梯形图语言进行编辑,LD编辑器程序结构,LD段落的设计对应于继电器开关的梯级(rung)。,图形的左边是汇流条,相应于梯级的相线,只有直接或间接与相线有开关量相连的元素在编程期间被“扫描”。,右汇流条缺省不画出,但可以认为所有的线圈和FFB开关量输出都接到右汇流条上,从而建立电流回路。,四个概念,LD段落:即一幅LD图,一个LD段落由若干个LD区段组成。,LD区段:有链路相连的元素的组合。,区段起始模块:区段内那些输入只连接变量或左汇流条的模块。,区段启动模块:区段中位置最上的起始模块。,LD执行次序,区段的执行从启动模块开始。,区段内的执行次序由区段内的数据流决定。,LD段落中区段间的执行次序由区段的启动模块在段落图形中的位置决定。执行次序由上到下。,LD编辑器-组态元素,常开触点,常闭触点,正跳变触点,负跳变触点,线圈,取反线圈,置位线圈,复位线圈,正跳变线圈,负跳变线圈,垂直连接线,LD编辑器触点,认识SCCONTROL的触点:,触点的特点:,每一个触点都有一个变量和它对应,触点是在变量的控制下断开或闭合。,变量,触点,LD编辑器触点,触点分类:,常开触点,常闭触点,正跳变触点,负跳变触点,LD编辑器触点,不同类型的触点有什么区别?,LD编辑器触点,假设触点对应的变量为TEMP。,LD编辑器线圈,认识SCCONTROL的线圈:,线圈的特点:,每一个线圈都有一个变量和它对应,线圈的得电状态决定了变量的状态。,变量,线圈,LD编辑器线圈,线圈的分类:,常开线圈,常闭线圈,置位线圈,复位线圈,正跳变线圈,负跳变线圈,LD编辑器线圈,不同类型的线圈有什么区别?,LD编辑器线圈,假设线圈相关的变量为TEMP。,LD编辑器垂直连接线,垂直连接线可以同时连接多个输入和多个输出,相当于或的功能,连接线的左边作为或的输入,右边作为或的输出。,垂直连接线上可以连接所有布尔量的数据链路,包括所有触点、线圈及功能块的布尔量引脚。,编程示例3,例3:当开关DI101为ON,或者开关DI102为OFF时电机DJ101为ON;DI101为OFF,且DI102为,ON,则DJ101为OFF。,编程示例3,例4:有三个开关按纽K1、K2、K3。当任何一个按钮按下时(即为ON),其他按钮均弹出(即为OFF)?,编程示例4,编程示例4,编程示例5,例5:开灯程序,KOSTART为开灯信号。当KOSTART为ON时要求灯(KO1001)开5秒关5秒,交替闪烁。当KOSTART为OFF时灯(KO1001)关。,编程示例5,注意事项!,所有的编程元素必须直接或间接的通过一个布尔输入引脚连接到代表电流相线的左汇流条。,如下图就是一个典型的错误:,注意事项!,变量引用或连线时应注意数据类型必须保持一致。,五、顺控图(SFC)语言,SFC概述,SFC的元素及其连接规则,步,转换,跳转,择一分支/择一结合,并行分支/并行结合,SFC控制变量,SFC的应用,主要内容:,培训什么?,SFC概貌,SFC由步进式顺序控制器演变而来,SFC是顺序流程的图形化表示,SFC把流程分解为步和转换,SFC可以方便的实现批量过程控制,SFC诊断、排错方便,易于维护,IEC61131-3标准规定了SFC编程要素,SFC元素,七种基本元素,步类型,步类型有三种:,起始步,普通步,终止步,起始步和终止步必须有且只能各有一个,SFC的执行从起始步开始到终止步结束,步(Step),步是控制流程中相对独立的一组操作的组合,在步中可以定义随意数目的操作,步在紧接在前的转换条件满足时激活,步在激活时才执行相应的操作,步在紧接在后的转换条件满足时退出激活状态,A步的操作,X转换的条件,B步的操作,Y转换的条件,C步的操作,Z转换的条件,满足,不满足,满足,满足,不满足,不满足,控制框图:,如何将我们的任务交给“步”去完成?,SFC编辑器,操作!,步属性对话框,“步属性”中可设置两个功能:,运行时间、操作。,运行时间,在运行时间的填充框中填入,ULONG 类型,的位号(变量),可以将该步的激活时间赋给该位号(变量),时间单位是,毫,秒,。,操作(Action),操作是对实际现场设备进行的操纵,一个步中可以有0个或多个操作,操作的类型由操作限定词来描述,操作限定词时态图,Step,N,S,R,L,D,P,DS,=赋值操作限定词。表示在步的整个激活期间赋值操作一直进行,直到步退出激活状态恢复成不激活状态。,如果是赋值操作限定词(=),则是应用ST语言编写控制算法,操作变量就是自己编写的一段ST语言程序,此时操纵的对象就是对应的ST语言程序。执行到该操作时,就运行该ST语言程序。,转换(Transition),转换指明控制从一个步转移到下一步的条件,当转换条件满足时,紧接在前的步从激活态变成不激活态。然后紧接在后的步将从不激活态转变成激活态,只有当紧接在前的步在激活状态时,转换的条件才被测试,转换和步的连接图例,跳转(Jump),跳转允许程序从不同的步继续执行,跳转连接图例,顺序跳转,顺序回路,根据跳转对象的不同,可以构成顺序跳转和顺序环路,但不能在不同的并行区域间跳转。,择一分支,择一分支提供了在SFC程序中实现条件控制的控制流程选择执行的方法。,每一个分支都有执行的转换条件,择一分支被激活时,会依次对各个分支的转换条件进行判断,转换条件满足的分支被激活。,在择一分支结构内只能有一个分支被激活。分支转换条件的优先级从左到右,比如如果左边第一个和第二个分支的转换条件都被满足时,左边第一个分支被激活,即只执行这个分支的程序。,择一分支和择一接合必须一一对应。,分支必须结束于同一择一接合或者结束于跳转,但至少有一个分支结束于择一接合。,择一分支图例,例:根据如下要求编写一段顺控程序:,有两个电机A、B,启动开关分别为KO101、KO102,ON时启动电机,OFF时关闭电机;,两电机一开一备,工作/备用指示开关为WKSDB,ON时表示电机A工作,B备用,OFF时表示电机B工作,A备用;,有一电机启动按钮DJSTART,要求DJSTART置ON后,延迟5秒再启动电机。,电机A、B开反馈分别为KO101K、KO102K,ON时表示开到位,OFF表示未开到位。要求电机启动后,需确认开反馈到位后方能进入后续的顺控程序。,并行分支,并行分支使流程中几个子流程同时进行,各分支的执行不相互影响,并行分支和并行接合必须一一对应,只有当所有的分支的最后一步都激活时,才测试并行接合紧接的转换的条件是否满足,在并行结构内部的跳转不能跳到并行结构的外部。,并行分支图例,例:根据如下要求编写一段顺控程序:,有两个电机A、B,启动开关分别为KO101、KO102,ON时启动电机,OFF时关闭电机;,要求两电机A、B同时启动,其开反馈分别为KO101K、KO102K,ON时表示开到位,OFF表示未开到位。要求电机启动后,必须确认开反馈已到位。,有一电机启动按钮DJSTART,要求DJSTART置ON后,延迟5秒再启动两电机。,SFC控制变量,复位变量,为ON时,SFC程序起始步被设置为激活步,其它步都强制变为不激活状态,顺控程序从头开始重新执行。为OFF时,复位变量无效。,注意:在起始步中,默认给复位变量赋OFF,在终止步中,默认给复位变量赋ON。,运行变量,为ON时,SFC程序正常执行。为OFF时,所有其它控制变量都无效,SFC程序停止运行。,SFC控制变量,保持(禁止转换)变量,为ON时,当前激活步将一直保持执行而不管紧接的转换条件是否满足,转换条件测试将不进行。此变量受运行变量和复位变量的影响。,强制步进变量,为ON时,当前激活步不管转换条件是否满足,都变为不激活状态,按顺序的下一步变为激活状态。强制步进变量受以上所有变量的影响。,操作使能变量,为ON时,步中的操作才被执行。,控制变量只能选用在系统组态中定义的变量。,每个SFC段落必须要设置复位变量,程序初次下载到控制站时,必须对该复位变量赋ON,使程序从起始步开始执行。,其他控制变量可根据实际需要,做有选择的设置。,练习时间,例:现场有三台电机正在使用,分别是电机1、电机2和电机3,他们的开关状态分别用f1、f2、f3表示,电机的启动和关闭要求用程序控制。将启动按钮start置为on,电机1首先启动,间隔5秒时间以后,电机2启动,再间隔5秒,电机3启动;启动过程完成后,才可以进入关电机过程。将启动按钮start置为off,电机3首先关闭,间隔5秒时间以后,电机2关闭,再间隔5秒时间以后,电机1关闭;关闭过程完成后,才可以重新进入开电机过程。,六、ST语言,ST语言概述,ST语言的语法,自定义函数和功能块,ST语言中的模块调用,ST语言在非ST段落中的应用示例,培训什么?,主要内容:,ST语言,结构化文本语言,IEC61131-3标准语言,SCControl集成,使用方法,在工程中加入ST段落编制函数和模块,在梯形图和功能块图中插入文本代码,在顺控图步的操作中使用=操作限定词,在顺控图转换条件中使用ST逻辑表达式,数据类型,变量类型,关键字,字节长度,布尔类型,BOOL,1,字,WORD,2,双字,DWORD,4,整数,INT,2,无符号整数,UINT,2,长整数,LONG,4,无符号长整数,ULONG,4,半浮点,SFLOAT,2,浮点,FLOAT,4,数组,结构,标识符,以英文字母开头,续以英文字母、数字或下划线,字符长度最多为24个字符,关键字(1),关键字,描述,CASEOFELSEEND_CASE,CASE 语句,BOOL WORD DWORD INT LONG,UINT ULONG SFLOAT FLOAT,数据类型,EXIT,终止循环,FALSE,逻辑假,FORTOBYDOEND_FOR,FOR语句,FUNCTIONEND_FUNCTION,函数定义,FUNCTION_BLOCK,END_FUNCTION_BLOCK,功能块定义,IFTHENELSEIFELSEEND_IF,IF语句,关键字(2),ON,逻辑真,OFF,逻辑假,REPEATUNTILEND_REPEAT,REPEAT 语句,RETURN,函数返回,TRUE,逻辑真,VAREND_VAR,VAR_INPUTEND_VAR,VAR_OUTPUTEND_VAR,变量定义,WHILEDOEND_WHILE,WHILE语句,运算符(1),运算符,描述,类型,优先级,(),表达式运算,9,.,取结构成员,8,取数组成员,8,单目负,7,NOT,取反,逻辑运算,7,*(MUL),乘,算术运算,6,/(DIV),除,算术运算,6,MOD,取余,算术运算,6,+(ADD),加,算术运算,5,(SUB),减,算术运算,5,运算符(2),大于,比较运算,4,=,大于等于,比较运算,4,=,小于等于,比较运算,4,0 THEN,B=1;(*B:=1;亦可*),ELSEIF A -5 THEN,B=2;,ELSE,B:=3;,END_IF;,规定了一组语句在规定的逻辑表达式为TRUE时执行。,CASE语句,CASE语句规定了整数类型的选择项,以及选择项在不同的值时的几组语句组。,CASE TW OF,1:I=1;(*1:I:=1;亦可*),2:I=2;,ELSE I=3;,END_CASE;,FOR语句,FOR K=1 TO 100 BY 2 DO,DOSOMETHING();(*循环体*),END_FOR;,循环语句,规定了终止条件和一组语句,当终止条件没有成TRUE时,这组语句被循环执行。,WHILE语句,J=1;,WHILE J=100 DO,J=J+2;,END_WHILE;,循环语句,规定了终止条件和一组语句,当终止条件没有成TRUE时,这组语句被循环执行。,REPEAT语句,J=1;,REPEAT,J=J+2;,UNTIL J=101,END_REPEAT;,终止条件的判断在语句组执行一次后才进行,所以规定的语句组至少会执行一次。当终止条件成TRUE时,循环被终止。,函数和功能块,ST语言中可以调用程序模块:函数、功能块。,函数,是个程序模块,只有一个输出,根据输入可以唯一确定输出。,如:SFLOAT ADD_SFLOAT(SFLOAT a,SFLOAT b);,功能块,是个程序模块,有多个输出,或输出不但和当前输入有关还和上次内部状态有关,如:void BSC(SFLOAT PV,UINT N,OUT SFLOAT MV);,如何调用?,函数调用语句,ret=Func(in1,in2);(*作为表达式返回值*),Func(in1,in2);(*作为子程序处理,函数返回值为空类型*),功能块的调用语句,调用功能块时要严格按照输入输出顺序,先输入输入参数,再输入输出参数,参数顺序按照定义时的顺序。,输出参数必须是变量:,FuncBlock(in1,in2,out1,out2),对于函数和功能块,系统中有已经定义好的标准库函数及标准功能块供我们使用,我们也可以使用ST语言来自己编制函数和功能块。,函数定义,FUNCTION(定义函数)FUNC3(函数名):BOOL(输出变量属性),VAR_INPUT,IN1:BOOL;(定义输入变量和类型),END_VAR,VAR,TEMP1:BOOL;(函数执行时用到的中间变量),END_VAR,FUNC3=DoSomething();,END_FUNCTION(结束函数定义),函数的示例,例1:使用ST编制一个定时器清零的函数。,形参为:,CTROL1:BOOL;(*定时器清零开关:ON清零*),number1:INT;(*定时器序号*),CTROL2:BOOL;(*定时器清零开关:ON清零*),number2:INT;(*定时器序号*),实现的功能是当开关CTROL1按下时第number1号定时器清零;当CTROL2按下时第number2号定时器清零。,功能块定义,FUNCTION_BLOCK(定义功能块)FB3(功能块名),VAR_INPUT,IN1:BOOL;(定义输入变量和类型),END_VAR,VAR_OUTPUT,OUT1:BOOL;(定义输出变量和类型),END_VAR,VAR,TEMP1:BOOL;(定义中间变量和类型),END_VAR,DoSomething();,END_FUNCTION_BLOCK(结束功能块定义),功能块的示例,例2:某测点为冗余控制,要求当操作员将开关K101打开时(为ON),选择测点1(LI1011)作为单回路LIC101的输入信号;当操作员将开关K101关闭时(为OFF),选择测点1和测点2(LI1012)的平均值作为该回路的输入信号。回路的输出为调节阀LV101。请使用ST语言编写自定义功能块实现该功能,并完成该控制方案。,FUNCTION_BLOCK CHOICE,VAR_INPUT,IN1:SFLOAT;,IN2:SFLOAT;,K:BOOL;,END_VAR,VAR_OUTPUT,OUT:SFLOAT;,END_VAR,VAR,END_VAR,IF K=ON THEN,OUT=IN1;,ELSE,OUT=AVE_SFLOAT(IN1,IN2);,END_IF;,END_FUNCTION_BLOCK,在FBD段落中调用该模块实现控制方案如下:(设置自定义回路0作为该液位控制回路),ST中可调用的函数和功能块,ST语言编写程序语句时可以调用各种模块,如:标准函数、标准功能块、,ST FUNCTION、ST FUNCTION_BLOCK、,LD和FBD生成的自定义功能块。,标准函数库,算术运算,比较运算,逻辑运算,类型转换,数学函数,选择函数,混合运算,通讯辅助,累积辅助,折线表运算,输入处理,比如:,SFLOAT ADD_SFLOAT(SFLOAT a,SFLOAT b);,UINT MOVE_UINT(UINT a);,SFLOAT INT_TO_SFLOAT(INT a);,SFLOAT MAX_SFLOAT(SFLOAT a,SFLOAT b);,标准 功能块库,对于ST语言可用的系统功能块,它们的使用方法与模块库中的功能块的使用方法是一致的。,比如:,void SR(BOOL S1,BOOL R,OUTBOOL Q1);,void BSC(SFLOAT PV,UINT N,OUT SFLOAT MV);,在ST 的 FUNCTION 模块中:,可以调用其它 ST FUNCTION,允许嵌套,可以调用标准函数,模块调用限制,可以调用其它 ST FUNCTION,可以调用标准函数,可以调用标准功能块,可以调用其它 ST 功能块,不能嵌套,在ST 的 FUNCTION_BLOCK 模块中:,模块调用限制,可以调用其它 ST FUNCTION,可以调用标准函数,可以调用标准功能块,可以调用其它 ST 功能块,可以调用各种编程语言生成的功能块,模块调用限制,在TEXTCODE 模块中:,可以调用其它 ST FUNCTION,可以调用标准函数,可以调用标准功能块,可以调用其它 ST 功能块,可以调用各种编程语言生成的功能块,模块调用限制,在SFC中的=操作中:,TEXTCODE模块应用示例,例6.3:有自定义单回路FIC101(回路序号为0),回路输入位号为FI101,回路输出位号为FV101。,当选择开关CH101为OFF时为正常单回路控制,当选择开关CH101为ON时输出调节阀FV101为固定阀位值,即当开关KI101为ON时将调节阀FV101开至50%;当开关K101为OFF时将调节阀关闭。请使用ST语言实现该控制要求。,BSC(FI101,0,FV101);,IF CH101=ON THEN,IF KI101=ON THEN,g_bsc0.SwTV=ON;,g_bsc0.TV=0.5;,g_bsc0.SwTV=ON;,g_bsc0.TV=0.0;,ELSE,END_IF;,END_IF;,七、自定义功能块的设计与使用,主要内容:,概述,自定义模块设计与使用,培训什么?,概述,在SCCONTROL中可以使用功能块编辑器或梯形图编辑器来设计自定义功能块。,从编程角度看,自定义功能块相当于子程序。,自定义功能块内部包含了用户定义的程序逻辑,外部则由输入输出变量组成其框架。,在自定义功能块内部可引用一个或多个功能块或其他自定义功能块,但其本身不能循环嵌套。,作为自定义功能块的外部接口输入输出变量数最大可以定义各32个。,基本步骤,首先,新建段落,并选择段类型为“模块”。,其次,定义该模块的输入输出变量。另外如果需要,也可定义私有变量或全局变量等。,再次,根据工艺要求编写该模块的内部算法。可以选择适合的编程元素按算法要求组合在一起,从而实现我们的控制要求。,最后,对该段落保存、编译。如果编译成功,则回到组态软件中进行联编;如果出错,则应查找错误、修改程序直至编译成功。,新程序段,FBD LD,段名称,变量声明,自定义模块设计与使用,例1,:要求制作一个名为“点灯模块”的自定义功能块。当操作员按下按钮时以固定的时间间隔点亮5盏电灯。,自定义模块设计与使用,自定义模块设计与使用,八、程序调试,主要内容:,概述,调试,培训什么?,概述,调试是对编写的程序进行检验的过程,以确保编写的程序满足我们的控制要求。,调试分静态调试和动态调试。,静态调试,信息栏(出错),信息栏(成功),方法:编译程序,鼠标双击会怎样?,动态调试,组态保存,编译,下载,连接、调试,变量调试,动态调试,例1:实现对PI102的手工置值。,动态调试,例2:在以下梯形图程序中对开关量Y5手工置值。打开变量调试窗口添加变量Y5、D5、D6、D7、D8、D9、D10,并观察D5、D6、D7、D8、D9、D10的状态。,把Y5置为ON,,观察D5、D6、D7、D8、D9、D10的状态变化。,调试辅助工具,调试文本,如何实现在调试状态下从一个段落快速切换到其它段落?,调试辅助工具,跳转按钮,九、综合编程应用,常见编程应用,累积问题,BSC模块实现串级控制,联锁设计(输入处理、滤波),编程注意事项,注释文本,乘除运算,主要内容:,培训什么?,累积量的处理,实现流量累积的两个办法:,1、模拟量组态流量累积(常规),2、通过定义8字节变量,用模块,Total_Accum进行累积。(程序实现),方法一,方法二,系统工作时,对位号首先转换成不带量程不带单位的无因次数,,也就是说,流量信号首先被转换成0-100%之间的数,由于位号的下限为0,所以直接除以量程即可。,TOTAL_ACCUM实际上是对这样的一组百分数每秒钟累加一次。,流量累积原理,累积的结果放在FQ101中,但是我们需要查看的累积值是需要把每一个流量的瞬时信号还原成实际测量值,所以系统进行处理时,要将累积计算的结果FQ101乘以量程除以系数然后再显示在操作站上。,所以请注意,这样的累积模块只能直接使用在流量信号下限为0的场合。,举个例子:对FI101进行流量累积并将累积结果存放于FQ101中。其中:FI101 50-100m3/h,FQ101(自定义8字节),单位m
展开阅读全文