在之前的文章中,我们开始讨论两个或多个 PLC 之间通信的不同方式,到目前为止,我们讨论了智能设备功能以及西门子 PLC 专用的 PUT 和 GET 命令。
西门子 PLC 与其他 PLC 通讯
在本文中,我们将讨论另一种将两个 PLC 连接在一起的方法,这种方法比我们之前讨论的 PUT 和 GET 命令更具优势,因为与 S7 系列独有的 PUT/GET 命令相反。 这种新方法是一种开放的用户通信,这意味着我们可以使用它在西门子 PLC 和任何其他品牌的 PLC 之间进行通信,甚至不需要是两个 PLC,这种方法可以在 PLC 和任何其他可以理解的设备之间进行通信 TCP 网络协议如 PC、服务器、打印机等
在本文中,我们将展示如何使用 TCON 和 TDISCON 块在两个 PLC 之间建立通信,在下一篇文章中,我们将展示如何在建立连接后在 PLC 之间移动数据。
开放用户通信块 TCON 和 TDISCON
我们使用 TCON 块在两个 PLC 之间建立通信连接。 连接建立后,PLC 将自动维护。
通信双方都调用 TCON 指令来建立通信连接。 这意味着我必须在两个 PLC 中调用 TCON 块,并且我们必须在两个 PLC 中配置该块,正如我们将在示例项目中看到的那样。
在块配置期间,我们将指定哪个伙伴是主动通信端点,哪个是被动通信端点。 这意味着哪个 PLC 将尝试连接,哪个 PLC 将打开通信端口并等待另一个 PLC。
当执行 TDISCON 块或当 CPU 更改为 STOP 模式时,现有连接将终止并删除建立的连接。 要再次建立连接,您需要再次执行 TCON。
使用 TCON 的示例 PLC 项目
正如我们在之前的文章中所解释的,要在两个 PLC 之间建立通信,我们必须建立两件事:
- PLC 之间的通信。
- 两个 PLC 之间的数据传输。
在本文中,我们将使用 TCON 块在两个 PLC 之间建立采用 TCP 协议的开放用户通信。 在下一篇文章中,我们将展示如何在连接完成后移动数据。
首先,我们创建一个新项目并添加两个 PLC。 我们将添加 CPU1516-3PN/DP PLC,并将它们命名为 PLC_1 和 PLC_2,目的是在它们之间建立连接。 见图1。
图1.添加 PLC_1 和 PLC_2。
现在,我们只需将 TCON 块添加到 PLC 逻辑中,正如我们之前提到的,我们需要为两个 PLC 调用 TCON,让我们从 PLC_1 开始。
只需拖放 TCON 块即可在打开的用户通信文件夹中找到该块。 见图2。
图2.拖放 TCON 指令
TCON 块本质上是一个功能块,因此当将其添加到我的主 OB1 时,我们将被要求为该块创建一个数据块实例。
创建数据实例并为其指定适当的名称。 见图3。
图3.创建数据实例。
现在,TCON 块已添加到您的逻辑中,我们需要配置该块的连接参数。
只需按块上方的蓝色小配置图标即可。 见图4。
图 4. 打开配置视图
当您按下蓝色图标时,您将打开 TCON 块的配置视图,我们可以在其中设置连接参数。
您会发现它与 PUT 和 GET 命令的连接参数非常相似。 见图5。
图5. TCON 连接参数。
由于我们使用开放式用户通信,TCON 块中的合作伙伴 PLC 选项比 PUT/GET 命令有更多选项。 见图6。
图 6. 合作伙伴 PLC 选项
从图中可以看出,我们有 4 种不同的选择,它们是:
- PLC_2:如果两个 PLC 位于同一项目中,则此处将显示 PLC_2
- 广播:这将使网络上的任何设备都可以使用连接
- 多播:这将与选定的设备(多个设备但不是所有设备)建立连接
- 未指定:如果 PLC 位于另一个 TIA Portal 项目中。
当选择未指定的选项时,我们会被要求添加 PLC 的 IP 地址,并且还需要添加新的连接数据。 见图7。
图7. 添加新的连接数据
如图所示,要创建新的连接数据,只需单击下拉箭头并按新建即可。 这将创建一个新的连接数据块,并将自动分配给 TCON 块,见图 8。
图8. 连接数据块已创建。
正如您所看到的,连接数据块已创建,现在我需要添加合作伙伴 PLC 的 IP 地址。
我们需要做的另一件事是选择哪个 PLC 将主动建立连接。 这将决定哪个 PLC 将负责建立连接,而另一个 PLC 将仅负责打开连接端口。 见图9。
图 9. 将 PLC_1 指定为主动连接建立。
当我们选择 PLC_1 作为主动连接建立时,PLC_2 将负责打开连接端口,我必须为该端口选择一个值。 它可以是任何值,但在 TIA Portal 中自动分配为 2000,因此我们将保持原样。 见图10。
图 10. 合作伙伴端口。
在上图中可以看到连接参数已经变成绿色,表示所有配置都已完成并接受。
当使用 TCON 在两个 PLC 之间建立连接时,两个 PLC 都必须调用 TCON 指令来建立连接,因此我们现在需要对另一个 PLC_2 执行相同的操作。 将 TCON 块添加到 PLC_2 的主 OB1 中,见图11。
图11. 在 PLC_2 中调用 TCON。
添加 TCON 块后,我们需要像配置 PLC_1 一样配置连接参数。 见图12。
图 12 PLC_2 连接参数
从图中可以看到,我们仍然选择 PLC_1 作为主动建立连接,而 PLC_2 的端口仍然保留为 2000。
两个 PLC 配置的活动连接建立和端口必须相同,否则连接将失败。 至此,两台 PLC 的连接配置完成,见图13。
图 13. 两个 PLC 中的 TCON 块。
从图中我们可以看出,我们还需要一件事,那就是为两个 PLC 定义 REQ。
我们为 PLC_2 创建了AllowConnection,为 PLC_1 创建了 StartConnection。 见图 14。
图 14. 定义 REQ 信号。
现在两个 PLC 之间的连接已经完成,如下:
当 REQ 信号有效时,PLC_1 将尝试与 PLC_2 建立连接,但直到 PLC_2 启用连接功能后才能这样做,并且当 PLC_1 的 TCON 块收到 REQ 信号时才会完成。
- PLC_2 的 TCON 的 REQ 信号有效以启用连接(这意味着 PLC_2 将打开端口 2000 等待连接)
- REQ 信号有效,PLC_1 的 TCON 开始连接(这将允许 PLC_1 通过端口 2000 与 PLC_2 建立连接)
项目模拟
让我们编译我们的项目并开始模拟,看看如何建立连接。
要查看任何 PLC 以及 PLC 之间的连接,可以打开网络视图并打开连接选项卡以查看所有活动的和已建立的连接。 见图15。
图 15.PLC_2 正在等待连接。
当 REQ 为 True 时,PLC_2 将打开连接,您可以看到 STATUS 值为 7002 _ 如果您检查 TCON 块的帮助,状态 7002 表示正在等待连接_。 您还可以从网络视图的图片中看到 PLC_2 正在等待连接。
当 PLC_1 TCON 块的 REQ 为真时,PLC_1 将尝试与 PLC_2 建立连接,并且由于 PLC_2 已打开并等待连接,因此 PLC_1 将能够找到并与 PLC_2 建立连接。 见图16。
图 16. PLC_1 建立连接。
请注意,网络视图中的所有连接现在均呈绿色,表示 PLC_1 和 PLC_2 之间的连接正常且正在进行。
正如我们之前提到的,一旦连接建立并建立,它就会自动维护。 因此,即使 REQ 信号变为假,两个 PLC 之间的连接也将保持。 见图17。
图 17。连接仍在进行中。
但是,如果转动 REQ 信号并不能断开连接,如果我想断开连接,该如何断开呢?
断路块 TDISCON
要断开两个 PLC 之间的连接,我们可以将 PLC 置于 STOP 模式,但这在运行过程中是不实用的。 我们还可以使用断开块或 TDISCON。
要添加 TDISCON 模块,只需将其拖放到您的逻辑中,见图 18。
图 18. 添加 TDISCON 块
正如您所看到的,添加 TDISCON 块将需要一个数据块实例,一旦将该块添加到您的逻辑中,您所需要做的就是分配您需要断开连接的连接 ID,并且您还需要为其分配一个 REQ 信号 启动连接终止。 见图19。
图 19. TDISCON 块。
现在,让我们在另一个 PLC 中添加一个 TDISCON 块,这样我们就能够断开连接。 参见图 20。对于 PLC_1 的 TDISCON 块。
图 20. PLC_1 中的 TDISCON
让我们回到仿真,看看如何使用 TDISCON 模块,见图 21。
图 21. 连接仍处于活动状态。
从图中可以看出,PLC 之间的连接仍然有效,TDISCON 的 REQ 信号仍然为假。
如果 PLC_1 的 REQ 变为 TRUE,连接将被终止,但您会注意到 PLC_2 仍在等待连接,见图 22。
图 22. PLC_1 的 REQ 为真。
当 PLC_2 TDISCON 块的 REQ 为真时,PLC_2 将不再等待连接。 见图23。
图 23. 连接终止。
我们在本文中展示了如何使用 TCON 和 TDISCON 块在两个 PLC 之间建立连接。