在Logix控制器系列中,有的模拟量模块已具备很强的数据处理能力,可以对模拟量数据进行详尽的组态,如数据定标、超限报警和限幅输出等。但是很多模块,特别是分布式的模块,数据处理的能力不是那么强,所以在很多项目的规划中都会创建一个模拟量处理的例程,专用来处理模拟量信号,编制标准的模拟量处理Add_On指令不失为一个好办法。下面,我们创建一个模拟量输入数据处理的Add_On指令和一个模拟量输出数据处理的Add_On指令。
创建一个模拟量输入定标指令ANALOG_SCP_IN,如图15-50所示。
图15-50 创建一个模拟量输入定标指令
创建如图15-51所示的指令参数设置,各个指令参数的用法和数据类型以及说明如表中所示,并设定参数显现在指令中。
创建如图15-52所示的本地标签,用来存放偏移量和比例系数中间结果的数据单元。
在Logic例程中编写梯级逻辑如图15-53所示,使用CPT指令计算比例系数和偏移量以及定标输出的运算。CPT指令是最常见的综合运算指令,按照算术逻辑运算规则书写的表达式可以将所需的运算综合在一起,使用一条指令就让人一目了然计算公式和运算目的。这条指令虽然表达明了,但是较为消耗时间,所以单一的运算并不推荐使用这条指令,而是建议直接使用单一的运算指令,如前面所使用的加法指令、减法指令和乘法指令。
使用大于等于指令和小于等于指令来判定是否进入最高定标或最低定标的范围,定标报警信号使用的非保持型继电器输出指令,这里只是表达了当时的一种状态,并不要锁定报警状态,所以无须延时或锁定。如果需要锁定报警状态,可以将这个进入定标范围外的状态另外编程来解决。
图15-51 创建指令参数
图15-52 创建本地标签
注意到,我们只是运算出定标的换算关系,并没有限制信号的范围,所以运算出来的结果很有可能是超出定标范围的。本条Add_On指令只如实完成定标的工作,输入是不会限幅的,但是要报告超出定标范围的状态,让外部的程序决定该怎样处理。
编辑完成的ANALO_SCP_IN指令将出现在分类指令集的Add_On指令中,当我们在例程中引用该条指令,将出现如图15-54所示的界面。
为本条指令分配一个结构数据标签Analog_SCP_In1,这个数据标签是与ANALO_SCP_IN指令同名的结构数据类型,它将存放与指令操作有关的全部数据,并在数据库给出了所有的指令参数。根据指令参数设置时的用法选择,有的参数是输入设定的,如Unscale_Max、Unscale_Min、Scale_Max及Scale_Min,有的参数用于监视并显示在指令上,如Ana-log_Scaled、Alarm_High和Alarm_Low。
由于指令后台运行的结果,Analog_SCP_In1标签的子元素是活动的数据,如果指令参数没有选择标签Analog_SCP_In1的子元素,而是选择了同类数据类型的其他标签,那么标签Analog_SCP_In1中的子元素将不断地给其他标签相互复制(拷入或拷出)。指令中针对模拟量1通道定标,将模拟量信号的A/D转换结果0~31140范围转换为定标值1~10000的范围。可以看到输入量4224定标为1356.4547的值,定标后的值将被执行代码引用。
图15-53 定标计算的梯级逻辑
创建一个模拟量输出定标指令ANALOG_SCP_OUT,如图15-55所示。
创建如图15-56所示的指令参数设置,各个指令参数的用法和数据类型以及说明如表中所示,并设定参数显现在指令中。
图15-54 在例程中编写调用ANALOG_SCP_IN指令的梯级逻辑
(www.xing528.com)
图15-55 创建一个模拟量输出定标指令
图15-56 创建指令参数
创建如图15-57所示的本地标签,用来存放计算结果、偏移量和比例系数中间结果的数据单元。
图15-57 创建本地标签
编写梯级逻辑如图15-58所示,同样是用CPT指令来完成偏移量和比例系数的计算,但是定标计算后的结果不能直接送出,模拟量输出的定标指令应该具有限幅的功能,以防止信号输出超幅,从而保护外部回路。也许有的模拟量输出模块本身就具备限幅功能,作为通用于所有的模拟量输出的定标指令,我们必须编写逻辑关系来进行限制。
在判断进入限幅范围时,令输出限制在最大限幅或最小限幅上,同时给出限幅警告。未进入限幅范围,则按定标结果给予输出。
图15-58 定标计算的梯级逻辑
图15-58 定标计算的梯级逻辑(续)
大于比较指令GRT、小于比较指令LES和范围测试指令LIM分辨了输出的范围,这里LIM指令High Limit和Low Limit的比较范围是包含上限值和下限值本身的数值的,所以只能采用大于而不是大于等于,采用小于而不是小于等于,以免分界值模糊不清,并将LIM指令的梯级放置于GRT指令和LES指令的梯级之后执行。
编辑完成的ANALO_SCP_OUT指令将出现在分类指令集的Add_On指令中,当我们在例程中引用该条指令,将出现如图15-59所示的界面。
为本条指令分配一个结构数据标签Analog_SCP_Out1,这个数据标签是与ANALO_SCP_OUT指令同名的结构数据,它将存放与指令操作有关的全部数据,并在数据库给出了所有的指令参数。根据指令参数设置时的用法选择,有的参数是输入设定的,如Unscale_Max、Unscale_Min、Scale_Max、ScaleMin、Limit_High及Limit_Low,有的参数用于监视并显示在指令上,如Analog_Scaled_OUT、Alarm_High和Alarm_Low。
由于指令后台运行的结果,Analog—SCP—Out1标签的子元素是活动的数据,如果指令参数没有选择标签Analog_SCP_Out1的子元素,而是选择了同类数据类型的其他标签,那么标签Analog_SCP_Out1中的子元素将不断地给其他标签相互复制(拷入或拷出)。指令中将程序运行的结果送至子元素Analog_SCP_Out1.Analog_Unscale中,这是一个0~10000范围的数值,经过定标转换为模拟量输出模块D/A转换所需要的数据范围0~31140。从指令中可以看到,从3300转换为10276的输出数据将送至模拟量输出通道1,然后D/A转换为相应的模拟量信号。此处数据在限幅范围之中,没有报警,输出也未限幅。
图15-59 在例程中调用ANALOG—SCP—OUT指令的梯级逻辑
大家也许注意到了前面三条关于数据标准化处理的Add_On指令,在指令界面参数的排列不是随意的,不但归类、对称、具有层次感,还要排列为输入数据在前输出数据在后,因果关系明了。如果感觉原先的排列不合适,参数位置的排列可在Add_On指令的参数页面用Move Up或Move Down调整,如图15-60所示。
本章中,我们列举了多个熟悉的实例,转化成为Add_On指令的执行,可以说Add_On指令实际上就是将实例转化为用户自定义的常规指令动作,嵌入指令系统中共享。因而,在RSLogix5000的编程软件中,Add_On指令的导入和导出都十分方便,并以独立文件形式存在,便于发布和交换。
图15-60 可调整指令参数位置
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。