在上一篇文章中,我们讲了如何使用开放用户通信在两个 PLC 之间建立连接,我们使用 TCP 协议在两个 PLC 之间进行连接。 我们在文章中展示了如何使用 TCON 和 TDISCON 等指令来建立此连接。
在 PLC 之间移动数据
在本文中,我们将展示如何开始在上一篇文章连接的 PLC 之间移动数据。 为此,我们将使用 TSEND 和 TRCV 块。
发送数据至 PLC_2
我们将在上一篇文章中创建的项目的基础上进行构建,这意味着我们的项目中已经安装了 TCON 和 TDISCON 块。 我们将通过添加 TSEND 和 TRCV 块来继续我们的项目,以开始在两个 PLC 之间移动数据。
要将数据从 PLC_1 发送到 PLC_2,我们首先创建一个数据块,该数据块将保存我们需要发送到 PLC_2 的所有信息。 见图1。
图 1. 新建一个数据块。
正如我们之前讨论的,更好的做法是为块提供正确的命名,这样就可以轻松直观地弄清楚每个块的用途。
其次,让我们在数据块中添加一些要发送到 PLC_2 的数据。
我们假设我们需要发送三个不同的数据标签。 见图 2。
图 2. 定义一些数据发送到 PLC_2。
为了能够将刚刚创建的数据块发送到 PLC_2,我们还需要做一件事,即确保未选择数据块的优化块访问。
为此,我们需要转到数据块的属性并取消选择该选项。 见图 3 和 4。
图 3. 进入数据块属性。
图 4. 取消选中 “优化块访问” 选项。
确保在使用 TSEND 块之前取消选中此选项,否则它将不起作用。
现在我们已经准备好了要发送到 PLC_2 的数据,让我们实际尝试发送它。 我们将通过使用 TSEND 块来做到这一点。 只需将指令拖放到主 OB1 中即可将其添加到您的逻辑中。 见图 5。
图 5. 添加 TSEND 块。
添加 TSEND 块时,系统会要求您创建一个实例数据块,因为它本质上是一个功能块,再次给它一个适当的名称。见图 6。
图 6. 为 TSEND 创建数据实例。
当 TSEND 块添加到您的逻辑中时,您会发现我们需要进行一些重要的配置。 见图 7。
图 7. TSEND 块。
正如你所看到的,我们需要进行一些配置:
- REQ 信号允许发送数据。
对于 REQ 信号,我们将定义一个标签 SendData,用于启用数据发送。
- 我将用来发送数据的连接的 ID,因为我可以有多个连接,所以我需要指定将使用哪个连接。
在上一篇文章中,我们为 PLC_1 和 PLC_2 之间的连接定义了 ID 1,因此我们将ID设置为 1。
- 我需要发送的数据。 我们已经创建了一个数据块,其中包含我需要发送的所有信息,我们只需将数据块拖放到 TSEND 块中即可。 见图 8。
图 8. 配置 TSEND 块。
从 PLC_1 接收数据
当我们设置 TSEND 将数据发送到 PLC_2 后,我们需要在 PLC_2 内部接收这些数据。为此,我们将使用 TRCV 块。见图9。
图 9. 添加 TRCV 块。
如您所见,只需拖放 TRCV 块即可将其添加到您的逻辑中。 您知道接下来我们需要为该块创建一个数据实例。 见图 10。
图 10. 将数据实例添加到 TRCV 块。
将 TRCV 块调用到您的逻辑中后,我们需要像配置 TSEND 一样配置一些参数。 见图 11。
图 11. TRCV 模块。
如您所见,EN-R 是一个使能信号,必须为真才能允许 TRCV 模块开始接收数据。 ID 是将要使用的连接,DATA 是将存储接收到的数据的位置。
因此,我们需要创建一个数据块来接收其中的数据。 请记住给它一个合适的名称。 见图 12。
图 12. 创建数据块接收数据。
接下来,定义将从 PLC_1 接收的信息标签,最佳实践是确保数据块具有与将接收的数据相同的数据结构。 见图 13。
图 13. 定义数据标签。
对于 EN-R,我们将定义一个 RecieveData 标签来启用数据接收。 对于连接 ID,它是我们之前设置的 1。 见图 14。
图 14. EN-R 信号。
接下来,将我们创建的数据块拖放到 TRCV 块中以完成所有配置。 见图 15。
图 15. 将数据块添加到 TRCV 块中。
当您拖放我们创建的 DB 时,您会注意到 TIA Portal 发出警告,并且它不接受我们刚刚添加的数据块。
这是因为我们没有像对 TSEND 那样取消选中数据块的“优化块访问”。 见图 16。
图 16. 优化的块访问。
正如我们之前所说,我们必须取消选中此选项,否则 TSEND 和 TRCV 将无法工作。 见图 17。
图 17. 取消选中优化块访问选项。
您可以看到,一旦我们取消选中 “优化块访问”,TRCV 指令就会接受数据块。
现在 TSEND 和 TRCV 块的调用和配置已完成。 让我们模拟一下我们的项目,看看数据将如何发送和接收。
首先,我们将创建一个简单的逻辑,确保我们定义的标签有数据值。
自动创建数据值的简单逻辑
我们将创建一个简单的逻辑来自动创建和更新数据值,以便更容易查看两个 PLC 之间的数据传输。 见图 18。
图 18. 简单的逻辑。
这个简单的逻辑将使用时钟位 %M50.5 自动更改 SendToPLC_2 数据块内存储的数据值。
PLC 项目仿真
让我们编译我们的项目并开始模拟。 我们需要做的第一件事是使用我们上一篇文章配置的 TCON 块在两个 PLC 之间建立连接。
请记住,我们需要启用 PLC_2 的连接功能并建立与 PLC_1 的连接。 见图 19、20 和 21。
图 19. PLC 之间无连接
图 20. 启用连接。
图 21. 建立连接。
现在,我们在两个 PLC 之间建立了连接,让我们按照设置将数据从 PLC_1 移动到 PLC_2。
首先,将 SendData 标记设置为 TRUE。 见图 22。
图 22. REQ 信号为真。
您可以看到,即使 SendData 为 TRUE,PLC_1 也没有向 PLC_2 发送数据。 这是因为 TRCV 模块尚未启用以接收任何数据。 见图 23。
图 23. EN-R 信号错误。
如您所见,由于 RecieveData 尚未为 TRUE,因此未启用 TRCV 模块来接收任何数据。 一旦 EN-R 为真,数据将从 PLC_1 的数据块发送到 PLC_2 的数据块。 见图 24。
图 24. EN-R 信号为 True。
一旦 EN-R 为真,您可以看到数据从 PLC_1 移至 PLC_2。
如果你打开工程自己模拟一下,你会发现 PLC_1 中的数据不断更新,并传输到 PLC_2 中。
这就是我们如何在两个 PLC 之间建立通信并使用 TSEND、TRCV 块。