1

我试图完成一个 twincat 3 库,它使用在主项目中定义的全局常量来做事情,比如创建这些常量大小的数组并在它们之间循环。但是我一直没有成功,我想知道这是否可以做到。当我尝试构建主项目时,我只是收到此错误“数组的错误 4 边框 'cPassedConstant' 没有常量值”。错误来自库中定义的数组。

我尝试为库创建一个具有相同名称的常量的 GVL,然后将“外部实现”属性设置为 true,但这没有帮助。

我的目标是制作一个带有过滤等功能的 IO 管理库。然后我可以将它添加到主项目并定义一些常量,如“cDigitalIputsCount”、“cAnalogInputCount”等。

4

3 回答 3

1

您应该检查 Beckhoff 的称为Parameter List的功能。通过将参数列表添加到库项目中,您可以在使用该库的项目中重新定义库常量。定义发生在库管理器中。

来自 Beckhoff 网站的图片: 在此处输入图像描述

我认为应该这样做。当然,另一个选项是使用该ARRAY[*]选项,这也很棒(对于 PLC 编程世界)。参数列表的问题在于它是项目范围的重新定义。使用ARRAY[*]允许动态更改大小。

于 2018-01-29T06:40:10.737 回答
1

也许您可以改用新的 ARRAY[*] 功能,尽管它仍然非常有限。除了在库中定义常量之外别无他法。

库的概念与其他环境中的相同。库为您提供可重用的组件。您的主要项目取决于图书馆,而不是相反。因此,您的图书馆无法知道有关使用它的项目的任何信息。

TwinCat3 中的一个令人困惑的事情是,您可以成功构建项目,但内部存在编程错误。只要不调用 TwinCat3 编译器,它就允许项目中出现损坏的代码。因此,当您发布库时,您应该始终使用“检查所有对象”。

于 2017-12-10T00:32:36.957 回答
0

我建议使用可变长度的 ARRAY[*],如下面的链接中所述(以及 Beckhoff/Infosys 的 DataTypes/Array 部分)。

关键是您应该在主程序中声明 FB_AnalogIO 的 ARRAY[1..cAINs](它知道模拟库中的 FB_AnalogIO 并且可以用恒定大小声明它)。

然后应该将 PRG_IO 更改为函数或函数块,以便它在不知道确切大小的情况下接受 ARRAY[*] 作为 VAR_IN_OUT。

https://stefanhenneken.wordpress.com/2016/09/27/iec-61131-3-arrays-with-variable-length/

于 2017-12-11T07:45:26.503 回答