如何将数组从 PLC 程序传递到 TwinCAT 中的 C 模块实例?

Posted

技术标签:

【中文标题】如何将数组从 PLC 程序传递到 TwinCAT 中的 C 模块实例?【英文标题】:How to pass an array from PLC program to C module instance in TwinCAT? 【发布时间】:2021-05-12 14:42:54 【问题描述】:

我是 TwinCAT 的初学者,正在使用 XAE 测试一些功能。 我当前的程序要求我将一个字节数组从 PLC ST 程序传递到 C 模块实例。但是 TwinCAT 3 不允许这样做,并且错误消息显示“外部函数调用中不允许结构化值类型”。 有什么解决方法吗? 有没有其他方法可以将字节数组传递给 C 模块实例?

【问题讨论】:

也许你可以使用一个全局变量数组。 @paladin 但是C模块无法访问PLC中的全局变量列表(据我所知)。 只需创建一个新的自定义全局变量列表并将整个列表用作数组。编辑:您确定“C 模块无法访问...”吗?我认为它能够做到。 @paladin 是的,我很确定。不能这样做。 【参考方案1】:

在您的 C/C++ 项目中,您将能够找到一个名为“TMC Files”的文件夹。在 .tmc 文件中,您可以为您的模块定义数据区。 您可以使用“Input-Destination”为模块定义输入,然后定义您需要的数据结构和命名。当您稍后实例化您的模块时,您可以将此数据区域链接到 PLC 代码中的变量。

这是我项目中的 .tmc 文件示例(不使用数组,而是使用其他输入数据类型):

TMC file

【讨论】:

解决了。另外,我定义了一个指针方法,并在PLC和C之间传递了数据结构。 很高兴我能帮上忙。

以上是关于如何将数组从 PLC 程序传递到 TwinCAT 中的 C 模块实例?的主要内容,如果未能解决你的问题,请参考以下文章

安装Beckhoff PLC编程软件Twincat后,从配置状态切换到运行状态就会出现蓝屏。

倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何设置PLC的扫描周期,运行周期

twincat是啥软件

通过 ADS.Net 将数组从 C# 发送到 TwinCat 3

倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何让不同的PLC程序分线程运行 TC2

倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何让不同的PLC程序分线程运行 TC3