首页 理论教育 如何定义自定义指令:完整指南

如何定义自定义指令:完整指南

时间:2023-06-28 理论教育 版权反馈
【摘要】:梯形图、功能块图和结构化文本均可用于用户自定义指令逻辑。用户自定义指令有一个基本逻辑例程,定义了指令执行时的行为。用户自定义指令参数用法和数据类型选项如下:1)输入参数:向用户自定义指令传送值。3)读写参数:向用户自定义指令内传送外部引用。参考信息可以使用必要参数来确保特定数据已被送入用户自定义指令中。用户自定义指令的参数可以通过符合正常标签范围规则的指令定义标签,在控制器编程过程中直接访问。

如何定义自定义指令:完整指南

1.现在来看一下,刚才导入了什么。右键单击Drive_Milling_Position AOI并选择“打开定义”(Open Definition),如图18-5所示。

978-7-111-47798-3-Chapter04-6.jpg

图18-4 项目列表

978-7-111-47798-3-Chapter04-7.jpg

图18-5 自定义菜单

2.将看到以下窗口。现在查看的内容被称作:“AOI定义”,如图18-6所示。

参考信息

“常规”(General)选项卡包含最初创建指令之后的信息。可以使用这个选项卡来更新信息。说明、版本、版本注释和厂家信息会被复制到指令的客户帮助文件中。版本无法由软件自动管理。由负责定义如何使用软件以及何时更新。

梯形图、功能块图和结构化文本均可用于用户自定义指令逻辑。如上面所示,此AOI是使用结构化文本(ST)编程的。

RSLogix 5000软件支持的每一种编程语言都针对不同类型的应用和编程方式。一般来说,梯形图执行简单布尔逻辑、定时器和计数器的速度最快。如果利用了功能块图和结构化文本中较高级的过程及变频器指令,则这两种语言可能会更加高效。

无法比较用不同编程语言编写的相同用户自定义指令的执行时间。不同语言的执行和编译存在本质差别。

978-7-111-47798-3-Chapter04-8.jpg

图18-6 AOI定义窗口

3.请看窗口的左下角。会看到“逻辑”(Logic)按钮以及旁边的“数据类型长度”(Data Type Size)。

978-7-111-47798-3-Chapter04-9.jpg

用户自定义指令有一个基本逻辑例程,定义了指令执行时的行为。此逻辑例程与项目中的其他例程一样,对长度没有额外限制。支持的最大数据实例(包括输入、输出和局部标签)为2MB。

4.让了解一下AOI在做什么。单击“逻辑”(Logic)按钮。将看到ST编辑器,其中包含有AOI中封装的所有代码,如图18-7所示。

为了向PowerFlex变频器写入参数,封装代码使用了消息指令(MSG_Configuration)。当机器位于正确位置时,消息指令会向变频器中写入一个数据数组(MSG_Data,数据类型为INT[36]),数组中包含需要设置的参数编号和值。发送给变频器的参数为最大频率、最大速度、超速限制值、加减速时间以及方向模式。

消息是“Set_Attributes_Scattered”类型的,可在一条消息中写入多个参数。

阅读与图18-8类似的部分代码:

在STX中,将MSG指令触发仅一次扫描周期是很重要的,通常情况下,指令始终都会执行。接下来的两行使用了STX中的单触发技术来检测发送到变频器中的消息是何时执行的。最后一行设置指令的“ER”位,并让指令在第一行后停止执行(“transition”)。

5.关闭结构化文本编辑器并回到“AOI定义”(AOI Definition)窗口。现在选择“参数”(Parameters)选项卡,如图18-9所示。

978-7-111-47798-3-Chapter04-10.jpg

图18-7 ST编辑器窗口

这些参数定义了指令接口;使用时,指令的外观显示。参数顺序定义了指令调用时所显示参数的顺序。用户自定义指令参数用法和数据类型选项如下:

1)输入参数:向用户自定义指令传送值。必须是SINT、INT、DINT、REAL或

978-7-111-47798-3-Chapter04-11.jpg

图18-8 消息代码

978-7-111-47798-3-Chapter04-12.jpg

图18-9 参数选项卡

BOOL数据类型。在该示例中,POS被定义为一个输入参数。POS可以从AOI外部访问。在用户的应用中,POS将会在下一个AOI中用到,即根据机器的位置改变变频器速度的时候。

2)输出参数:向用户自定义指令外传送值。必须是SINT、INT、DINT、REAL或BOOL数据类型。在该示例中,DN和ER被用作输出参数。它们将显示在AOI的右侧,为用户提供指令执行情况的反馈信息。

3)读写参数:向用户自定义指令内传送外部引用。可以是任意数据类型,包括结构和数组。在该示例中,Message标签需要通过指令中的引用来传送,在程序中插入AOI后将完成Mes-sage配置。MSG_Data是一个数组,因此该标签的用法只能是“读写”。

一个只含有输入参数(EnableOut除外)的指令在梯形图中会被视为输入指令。EnableOut参数用于梯级条件。

参考信息

可以使用必要参数来确保特定数据已被送入用户自定义指令中。必要参数必须作为自变量进行传递,以便调用指令来验证。在梯形图和结构化文本中,这可以通过为这些参数指定一个自变量标签来实现。在功能块图中,必要的输入和输出参数必须连线,而读写参数必须有自变量标签。

对输出参数来说,如果不需要经常向自变量传递参数值,但为了故障排查,又想突出显示出它的值,那么让参数可见是非常有用的。必要参数始终是可见的,而读写参数都是必要参数并且始终可见。无论被标记为必要的还是可见的,所有的输入和输出参数均可作为指令标签的成员通过程序访问。对于读写参数,可见设置始终是可见的。所有读写参数都是必要的。

如果有一个参数,用户必须给这个参数指定一个标签作为输入源或输出目标,并且不想让其成为可选的,那么请将该参数设置为“必要”的。任何必要参数都会被自动设置为可见。

用户自定义指令的参数可以通过符合正常标签范围规则的指令定义标签,在控制器编程过程中直接访问。每个用户自定义指令默认情况下都有“EnableIn”和“EnableOut”参数,这两个参数都具有符合不同语言环境(梯形图逻辑、功能块图、结构化文本)的特性。

执行基本逻辑例程时,“EnableIn”参数在任何语言环境中都为真(1)。一般来说,“EnableIn”参数不应被指令定义中的基本逻辑例程引用。(www.xing528.com)

默认情况下,“EnableOut”会遵循“EnableIn”的状态,但是用户逻辑可以强制该参数的状态。

在梯形图逻辑环境下,“EnableIn”参数反映了输入指令的梯级状态。例如,如果指令前的梯级状态为真(1),则“EnableIn”为真,并且将执行指令的基本逻辑例程。

在功能块环境下,用户可以通过引脚连接来操作“EnableIn”参数。如果没有连接,则当指令开始执行时“EnableIn”参数会被设置为“真”(1),并会执行指令的基本逻辑例程。如果参数上的连接为“假”(0),则不会执行指令的基本逻辑例程。写入EnableIn参数的其他引用不会影响该参数的状态。只有此参数输入引脚上的连接才能将其强制为“假”(0)。

在结构化文本环境中,默认情况下“EnableIn”参数始终设置为“真”(1)。用户无法对结构化文本中“EnableIn”参数的状态造成影响。

6.现在选择“帮助”(Help)选项卡。RSLogix 5000软件会使用指令说明、版本注释和参数说明,为用户自定义指令自动建立帮助。可以通过创建有价值的说明来帮助使用该指令的用户。此外,还可以通过使用扩展说明字段将自己的自定义文本添加进帮助。

创建用户自定义指令并将信息添加进说明字段时,会自动生成用户自定义指令帮助。如要提供更多帮助文档,还可以将其输入用户自定义指令定义编辑器的帮助选项卡中。可在指令浏览器中找到指令帮助,也可在语言编辑器中存在该指令的调用时按F1键来打开。

用户自定义指令帮助让用户在使用指令的时候更方便地获得所需的帮助。

编写说明时,请记住以下准则

1)使用简短、易懂的语言;

2)所写内容应简要直接;

3)列举简单的示例;

4)确认字段输入内容,如图18-10所示。

978-7-111-47798-3-Chapter04-13.jpg

图18-10 编写说明

7.选择“局部标签”(Local Tags)选项卡,如图18-11所示。

978-7-111-47798-3-Chapter04-14.jpg

图18-11 局部标签选项卡

参考信息

局部标签包含了用户自定义指令中使用的,但是又不想暴露给客户的数据。局部标签不会显示在用户自定义指令的数据结构中,因为它们是隐藏成员。通过指定局部标签的名称作为用户自定义指令型标签中的成员,即可从HMI访问局部标签值。

以下数据类型不可用于局部标签-ALARM_ANALOG、ALARM_DIGITAL、MESSAGE或者其他运动控制数据类型,例如Axis(轴)或MOTION_GROUP。要在用户自定义指令中使用这几类标签,请定义一个读写参数。与用户数据类型一样,局部标签同样仅限一维数组。

当创建用户自定义指令数据类型的标签,或在指令定义编辑器中向用户自定义指令定义添加新标签时,会将默认值从用户自定义指令定义加载到标签中。

用户自定义指令定义中的局部标签值是默认值。更改一个现有的局部标签不会影响已经存在的用户自定义指令的实例。要确定某个值是否已应用到指令中的所有实例,可立即将数据分配给用户自定义指令的代码中的标签。

8.选择“扫描模式”(Scan Modes)选项卡,如图18-12所示。

参考信息

指令定义编辑器中的“扫描模式”(Scan Modes)选项卡可用于创建或启动例程的执行,包括三种扫描模式:Prescan、Postscan和EnableInFalse。

为使用户自定义指令拥有与内置指令一样的灵活性,可以对可选的扫描模式例程进行配置,从而能够全面地定义指令的行为。用户自定义指令中开始并不存在扫描模式例程,因为它们是可选的,必须由客户根据指令的需要来创建。

对于指令的预期操作而言,在未创建可选扫描模式的情况下执行用户自定义指令的这种默认行为可能足以满足要求了。如果未定义可选的操作模式,则用户自定义指令的默认行为如下:

真:执行用户自定义指令的主逻辑例程。

假:不执行用户自定义指令的逻辑,并且不会写入任何输出。输入参数会传送来自相应自变量的值。

预扫描:在预扫描(Prescan)模式下执行用户自定义指令的主逻辑例程。会传送所有必要的输入、输出参数的值。

后扫描:在后扫描(Postscan)模式下执行用户自定义指令的主逻辑例程。

对于每一种扫描模式,都可以定义一个专门为该扫描模式编写的例程,并可进行配置以便在该模式下执行。

真:执行用户自定义指令的主逻辑例程(非可选)。

假:当发生指令扫描错误时,通常由EnableIn False例程代替主逻辑执行。会传送所有必要的(或FBD中连接的)输入、输出参数的值。

预扫描:通常在主逻辑例程的预扫描执行结束后执行本AOI的预扫描例程。会传送所有必要的输入、输出参数的值。

后扫描:通常在主逻辑例程的后扫描执行结束后执行本AOI的后扫描例程。

978-7-111-47798-3-Chapter04-15.jpg

图18-12 扫描模式选项卡

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈