注意:如果 不是先安装的 VS 再安装的 TwinCAT、直接使用的 TwinCAT 自带 IDE、安装 TwinCAT 前未安装【使用 C++ 的桌面开发】 的情况,请卸载后重新安装
安装
注意:Visual Studio 安装 2019,前面的版本都有各自的问题,并且 TwinCAT 最高只支持 2019,不支持以上版本
VS2019 只选择【使用 C++ 的桌面开发】

在 TwinCAT 的安装中自动检测安装 2019 的 VS,注意选择时不要选择使用 XAE 自带的 shell 就行,基本都是按照默认的情况安装,没有什么需要特别注意的地方。具体安装也可以参考:
TwinCAT3_C++_Simulink教程V3.11.pdf
使用
建立工程也可以根据上面的教程创建。相关教程在上面也很详细,后续按照自己的思路进行开发就可以了。后面遇到的一些 bug 和解决思路会在这里补充。
使用 Eigen 库(含 libccd、MR)
注意根据 TwinCAT 所述,默认是无法引入第三方库的,这里的第三方库是指的第三方闭源库,如需要链接.so 文件等。需要购买他们的第三方库的许可证。
但是 Eigen 等一些库是开源的,所以其实是可以考虑引入源码直接构建的。
在我们不考虑超快的计算速度的前提下我们可以考虑引入 Eigen 库帮助我们做矩阵运算:
有人帮忙将 Eigen 库做了裁剪,使其支持 TwinCAT3。我们需要将其源代码放入 C:\TwinCAT\3.1\sdk\Ininclude\ 下,这样我们就可以直接 include 包含库了。
最后记得在 C:\TwinCAT\3.1\sdk\Include\TcMath\math_config.h 文件头部添加宏定义
#define TCMATH_BLOCK_STANDARDLIB 0
问题
inconsistent inheritance of C++-compatibility.missing attribute for ‘ITcUnknowm’

TwinCAT 3 C++ 常见问答: TwinCAT 3 C++ 报错(inconsistent inheritance of C++-compatibility.missing attribute
倍福官方有相关解答,但是你在检查完后如果还没解决请注意删除掉派生相关定义。

structured return value not allowed in external function calls
这里的问题是你 C++ 接口的方法不能返回一个数组或者数组指针这些,包括输入也不允许。
如果真的需要的话就不能使用 PLC 调用 C++ 函数的方法实现(做成 PLC 库的方式,实时性好)。只能使用 TMC File 在.tmc 文件中”Data Areas”中创建 TwinCAT 类似的链接,来实现。也就是使用 C++ 和 PLC 变量映射的方法(多线程,实时性比较上面来看差点)。
在 ADS 中无 C++ 变量,Scope 变量选择中无 C++ 变量
这里是因为数据默认没有在 Data Area 中没有勾选 CS(Create ADS symbol)选项。勾选后便能在 Target Browser 中看见对应的 C++ 变量了。
