参考图书馆的常数,twincat 3

时间:2017-12-08 23:41:40

标签: reference twincat

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

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

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

3 个答案:

答案 0 :(得分:1)

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

库概念与其他环境相同。库为您提供可重用的组件。您的主要项目取决于图书馆,而不是相反。因此,您的图书馆无法了解项目所在的位置。

TwinCat3中的一个令人困惑的事情是,您可以在内部编程错误的情况下成功构建项目。只要没有调用,TwinCat3编译器就允许项目中的代码损坏。因此,在运送库时,应始终使用“检查所有对象”。

答案 1 :(得分:1)

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

来自Beckhoff网站的图片: enter image description here

我认为应该这样做。当然,另一个选择是使用this.getData().subscribe(data => { this.dataArray = data; }) 选项,这也是很棒的(对于PLC编程世界)。参数列表的问题在于它是一个项目范围的重新定义。使用ARRAY[*]可以动态更改大小。

答案 2 :(得分: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/