TwinCAT3+MATLAB

现有技术方案分析

主要实现方案

  • TwinCAT Target for Simulink/MATLAB(TE1400/TE1401)
    允许在 Simulink 和 MATALB 中设计控制算法,并将其直接集成到 TwinCAT 实时环境中。
    使用 TE1401,可以在 TwinCAT 3 中利用 MATLAB 脚本语言开发的函数。这些函数通过 MATLAB Coder 的帮助自动转换为 C/C++ 代码,并使用 TwinCAT 3 Target for MATLAB 编译成 TwinCAT 对象。
    使用 TE1400,可以在 TwinCAT 3 中利用在 Simulink 中开发的模型。各种工具箱,如 Simscape、Stateflow 或 MATLAB 功能块,可以嵌入到 Simulink 中。这些模型通过 Simulink Coder 的帮助自动转换为 C/C++ 代码,并使用 TwinCAT 3 Target for Simulink 编译成 TwinCAT 对象。
    这些对象可以在 TwinCAT 3 工程中无缝使用,例如扩展 PLC 源代码以构建整个项目,进行调试,并与现场总线设备连接。自动生成的模块可以作为 TcCOM 对象和 PLC 功能块集成到 TwinCAT 解决方案中。插入的模块会随完整的 TwinCAT 项目一起下载到 TwinCAT 3 运行时中,并在实时环境中像其他所有对象一样被执行。

他们本质都是将 MATLAB 代码转成 C++,然后使用 TE140x 模块编译成 TwinCAT 对象。所以其实 MATLAB 代码或 Simulink 转成 C++ 后集成到 TwinCAT 中也是一种方案。但是编译阶段可能会遇到一些问题

  • 通过 ADS 通信接口 TwinCAT 3 Interface for MATLAB and Simulink(TE1410)
    TwinCAT 支持 ADS(Automation Device Specification)通信协议,MATLAB 可以通过 Beckhoff 提供的 ADS API 访问 TwinCAT 的变量,实现数据交互。
    TwinCAT 3 Interface for MATLAB and Simulink 使得 MATLAB 和 TwinCAT 运行时之间以及 Simulink 和 TwinCAT 运行时之间的数据交换成为可能。对于 Simulink,Simulink 库中提供了可以在 Simulink 项目中简单集成和配置的 ADS 客户端块。因此,可以从 Simulink 环境中写入数据到 TwinCAT 运行时,或者从中读取数据。在 Simulink 中使用 ADS 块的一个应用示例是软件在环仿真,其中在 TwinCAT 运行时执行的控制或反馈控制算法与在 Simulink 中执行的模型相连。
    对于 MATLAB,提供了一个可以在脚本环境中使用的 ADS Port 对象。该对象提供了多种方法用于 MATLAB 和 TwinCAT 运行时之间的数据交换。除了在 MATLAB 中使用 ADS 客户端(即 MATLAB 环境发起数据交换)之外,还可以在 MATLAB 中使用 ADS 服务器。后者提供了在 MATLAB 环境中编写 MATLAB 函数并通过 ADS 命令从 TwinCAT 调用它们的选项。在 MATLAB 中使用 ADS 客户端的一个应用示例是创建图形操作和监控界面,例如基于 MATLAB 应用程序。ADS 服务器可以用来执行非实时相关的任务,例如预测性维护系统或参数优化的组件。可以使用 MATLAB Compiler 来执行作为独立应用程序创建的程序在现场环境中,例如在边缘设备或直接在工业 PC 上。

在搜集资料的时候看见也有人使用 MATLAB 的 simulink PLC coder,把模型直接转成 ST 语言进行使用。

  • 通过 OPC UA 协议进行通信
    TwinCAT 提供 OPC UA 服务,MATLAB 支持 OPC UA 客户端功能,可以通过 OPC UA 协议实现两者之间的数据通信。
  • 通过 TCP/UDP 通信实现自定义协议
    在某些情况下,您可能需要使用自定义协议进行通信。可以利用 MATLAB 的 TCP/UDP 功能与 TwinCAT 建立通信。
  • 通过共享文件实现离线数据交换
    对于实时性要求不高的应用,可以通过共享文件的方式在 MATLAB 和 TwinCAT 之间交换数据。
  • 通过 MATLAB Automation Server 调用
    TwinCAT 还可以通过外部程序接口调用 MATLAB 的 Automation Server 功能,适用于需要在 TwinCAT 任务中运行 MATLAB 算法的场景。

协议原理

TwinCAT ADS

TE1400/TE1401

安装

我们的 TE14xx 相关的组件其实已经被封装到了一个 exe 里面,但是 TE14xx 的本质是依赖于 C++ 的一些组件的,所以需要依赖于微软的 C++ 编译组件,因此需要安装 VS 进行开发,后续内容将根据官方的手册安装:

TE1400_TC3_SIMULINK_ZH.pdf

因为我是先直接安装 TC3,没有先安装过 VS 的 C++ 组件,所以官方要求需要卸载 TC3 后重新安装,这里我根据卸载后安装的思路进行。

注意,TC3 最高支持 VS2019,请勿安装更高版本

TE40xx 只是一个安装包,安装后你能在 C:\TwinCAT\Functions\TE14xx-ToolsForMatlabAndSimulink 中找到。matlab 的 p 文件也是在其中,按照手册中的教程安装就行

授权和签名

最麻烦的地方也就在这里,授权使用试用授权就行了,在我们 Twincat 项目中的 System->License 中选择 TC1220 和 TF1400 就行了。

接下来是最麻烦的签名,不管后续是使用 C++ 还是 Matlab 的 ADS 还是将模型导入到 Twincat 中都需要签名(本质上导入的模型也是 C++)。因为其依赖的是 Twincat 的 TcCOM 进行在这里我们把他简单的理解为一个一个库就行。但是为了保证安全(为了卖钱),倍福需要每个模块都是进过签名的,保证确实来源于这些公司,所以会有 OEM 证书这一步。正常情况下如果要跑在实际的项目中,我们需要向倍福申请 TC0008 产品来购买自己厂商的 OEM 证书。当然也提供了试用的方式,但是要让操作系统进入测试模式,比较麻烦,资料也较少,我们一起来实践一下。

主要是三步:

  • 生成自己的证书
  • 打开测试模式
  • 给自己的模型签名

生成证书

我们首先需要用到倍福自己的证书生成工具,在 Twincat 中的 TwinCAT->Software Protection,CreatNew 证书。

OEM 的名字比如填 test,邮箱填你自己的,然后就能生成了。注意版本要选二代并把 C++ 包含进去。

如果需要将别人的产品导入到工程中,其实你只需要包含别人给你的 OEM 证书,在这里导入后就可以是用了。

打开测试模式

如果购买了 TE0008 的厂商或者其他厂商的就不需要打开测试模式了,主要是在测试模式中 Twincat 不检验证书

bcdedit /set testsigning yes

完成后重启电脑。重启后右下角会出现以下标志:

给自己的模型签名

这里之后的需要你已经将模型生成出来了。

这里使用倍福官方的工具 TcSigntool

一般是放在 C:\TwinCAT\3.1\sdk\Bin 文件夹下,然后运行:

TcSignTool sign /f "C:\TwinCAT\3.1\CustomConfig\Certificates\<OEM>.tccert" /p <password> "<filepath>\<driver-name>.tmx"

密码和证书名就是你刚刚设置的,至于生成的模型应该在 C:\TwinCAT\3.1\Repository 下,只需要对模型 TwinCAT RT (x64) 运行时文件夹下的 tmx 文件进行签名就行。

编辑注册表

其实你做完上面几步你继续进行编译或者运行还是会报错,会提示没有相关注册表。

文件会在项目第一次点击运行后报错后生成!

这里请后续第一次运行项目的时候进行操作。主要会弹出以下错误:

需要如图蓝色位置去运行注册表文件,将相关注册表添加到系统中。至此重启项目,再次运行,就可以发现系统正常运行,出现以下警告:

测试模式下忽略签名认证,至此,相关对象正常运行。

示例代码和学习

在 matlab 中使用 TwinCAT.ModuleGenerator.Samples.List 命令即可调出所有例程,可开始学习相关例程与生成方式。

TE1410

对于 TE1410 和前面的 TE140x 的安装一样,其实你在安装 TE140x 的时候就已经将 TE1410 安装好了。包括证授权都与前面一模一样,TE1410 其实主要就是在 Twincat 中集成了 ADS 通信的相关接口。他能帮我们减少我们自己用 C++ 实现 ADS 接口的开发量,并且能直接读取后在 matlab 中分析。

安装

对于检查是否已经成功安装上了 TE1410,最简单的方法就是查看 Simulink 中是否有相关库,里面有一部读写函数和相关模块:

至于在 Matlab 命令行中的模块主要就是 TwinCAT.ADS 模块。

基本使用方法

中文网站上的相关资料也比较少,所以在这里介绍一下 Simulink 中 ADS 的使用。更多的资料可以前往倍福官方:Beckhoff Information System – English

课程: TwinCAT 3 MATLAB/Simulink 编程入门 | 倍福虚拟学院

推荐:MATLAB 的 help 界面中选择 Supplemental Software 下的 TwinCAT Interface for MATLAB 进行学习。

注意:为了保持 Simulink 和 Twincat 的运行节奏一致,将 Simulink 的步长最好调整成定步长,并且将其周期调成与 Twincat 任务一致。但是因为 ADS 也不是实时通信协议,所以不改也没有什么问题,可以根据自己的需求调整

  • Tc Symbol Interface

这个是我们实际使用中最重要的模块,我们拖出来后就可以直接连接到 Twincat 并直接看见其中的变量:

具体也可以通过 Twincat 的 Target Browser 下看到相关的变量

我们使用方法就是将变量像 Simulink 一样拖到输入或者输出,他就可以获取对应变量的值了:

当然如果想调整一些具体的配置可以直接使用 Edit 去图形化编辑每个链接的变量。

这是一个最简单的 demo,就已经能实现基本的数据采集了。

  • Async ADS Read\Write\ReadWrite

这三个模块本质上是将 ADS 的配置接口暴露出来了将 ADS 的 NetId 和 Prot 都暴露出来了,可以根据自己的需求去配置什么时候采集数据,什么时候数据采集完成了。

这是一个简单的 demo 用异步采集数据:

上一篇
下一篇