在这篇文章中,通过将 S7-1500 设置为具有专用服务器接口和用户身份验证的 OPC UA 服务器来学习如何使用 OPC UA 在两个 PLC 之间进行通信。
在更新的固件版本中,S7-1500 PLC 还具有内置的 OPC UA 客户端。此 OPC UA 客户端可用于与条码扫描仪和打印机等从属设备进行垂直集成。使用 OPC UA 与这些设备通信的 PLC 可以从条形码扫描仪检索条形码或将数据发送到打印机进行打印。
OPC UA 的优势
OPC UA 服务器接口OPC UA 的主要优势在于它独立于制造商。OPC UA 提供了一种在任何制造商制造的设备之间交换数据的开放方式,而无需使用网关设备将通信从一种专有格式转换为另一种。许多制造商支持Modbus/TCP和TCP/IP等其他通信协议 ,但 OPC UA 正迅速成为工业通信的通信协议。由于 OPC UA 基于 TCP/IP,因此可通过以太网进行路由。这意味着不在同一子网中的设备可以通过使用路由器相互通信。其他工业协议(如I-Device 通信)受到限制,因为它们无法通过以太网路由,因此只能用于同一子网中的设备之间的通信。OPC UA 具有内置诊断功能,因此可以在用户程序中检测和处理通信错误。诊断对于在监控系统时解决通信问题也很有用。与旧协议不同,OPC UA 支持使用优化的数据块进行数据交换。这意味着您可以遵循 Siemens 的建议,在两个 PLC 之间进行通信时专门在用户程序中使用优化的数据块。虽然 OPC UA 不是像PUT/GET那样的单面通信协议,但服务器 PLC 不需要编程。服务器 PLC 只是将数据提供给第三方。这使得使用 OPC UA 在两个 PLC 之间设计数据交换变得非常容易。关于从服务器 PLC 公开数据的主题,OPC UA 支持使用配套规范要求。OPC 配套规范是一种订购数据的方式,以便以结构化格式将其提供给客户端。当客户端浏览服务器公开的数据时,数据以结构化方式呈现,标准数据采用标准格式。配套规范通过确保仅公开特定数据来帮助在 OPC UA 连接中提供一些安全性。当然,由于 OPC UA 是一种现代协议,因此 OPC UA 通信可以通过现代互联网标准安全性得到保护。可用于 OPC 通信的安全机制包括数据的加密和数字签名,以确保传输的数据不会被恶意第三方拦截、读取或修改。OPC UA 的缺点
由于 OPC UA 是一种现代的跨平台通信协议,因此使用 OPC UA 进行 PLC 到 PLC 通信几乎没有缺点。我能想到的唯一缺点不是与 OPC UA 本身有关,而是与在 TIA Portal 中启用 OPC UA 服务器的方式有关。在 TIA Portal 中启用 PLC 中的 OPC UA 服务器时,默认情况下,PLC 中的所有数据都会在没有安全性的情况下公开。这意味着在您启用 OPC UA 后,任何 OPC UA 客户端都可以立即连接到 PLC 并浏览和修改该 PLC 中的任何数据,包括数据块、实例数据块、输入、输出和内存位。这实际上比 PUT/GET 等传统通信协议更糟糕,因为 OPC UA 象征性地公开来自 PLC 的数据。由于数据是象征性地公开的,因此恶意行为者可以象征性地浏览标签,以更清楚地了解他们正在访问的确切数据。好消息是,正确设置后,OPC UA 是一种非常安全的通信协议。在接下来的部分中,我将向您展示如何设置 OPC UA 通信以在两个 PLC 之间交换数据,以及如何保护该通信以确保恶意行为者不会干扰通信中涉及的系统。演示
在此演示中,两个 PLC 将通过 OPC UA 交换数据。PLC_2 充当 OPC UA 服务器,将数据公开给 PLC_1,即 OPC UA 客户端。随着演示的进行,我们将逐步提高通信的安全性。在 TIA Portal 中,我创建了一个新项目,添加了两个 PLC,并运行了安全向导。配置服务器
在 PLC_2 中,我将启用 OPC UA 服务器。由于 OPC UA 是许可产品,我需要在 Properties > General > Runtime Licenses 中选择我为 PLC 购买的运行时许可类型。在下拉列表中选择购买的许可证类型。目前,您无需提供实际购买许可证的证明,尽管这在未来可能会发生变化。所需的许可证类型取决于您使用的 CPU。您可以在此SIOS 条目中查看 PLC 需要哪种类型的许可证。在 TIA Portal 中选择 OPC UA 运行时许可证接下来,我通过激活“属性”>“常规”>“OPC UA”>“服务器的可访问性”下的复选框“激活 OPC UA 服务器”来启用 PLC_2 中的 OPC UA 服务器。将弹出一条警告,强调必须正确保护 OPC UA 服务器。仔细阅读后单击“确定”关闭此警告。激活 OPC UA 服务器如果您向下滚动到此窗口的服务器地址部分,您将看到我们有两个 OPC UA 服务器地址。这是因为此 PLC 有两个端口,并且为这两个端口启用了 OPC UA 服务器。OPC UA 服务器地址安全检查 #1
现在,OPC UA 服务器已启用。任何 OPC UA 客户端都可以浏览到该 PLC 并访问通过 OPC UA 服务器公开的数据。这包括输入、输出、内存地址和 DB。为了演示这一点,我在 PLC 中创建了一些输入和输出,并在硬件配置中启用了时钟字节。下载这些更改后,我启动了免费的 OPC UA 客户端UAExpert来浏览 PLC。在UAExpert 中,我单击服务器> 添加并切换到选项卡。在这里,我可以输入我从 PLC_2 的硬件配置中复制的 OPC UA 服务器的端点 URL。单击“确定”添加服务器。在 UA Expert 中配置 OPC UA 服务器OPC UA 服务器被添加到左侧窗格中的项目树中。右键单击服务器并选择连接以连接到 OPC UA 服务器。连接到 OPC UA 服务器弹出一个错误窗口,通知我们 PLC_2 OPC UA 服务器提供的安全证书存在问题。单击信任服务器证书以忽略这些警告。信任 OPC UA 服务器证书后,单击继续连接到 OPC UA 服务器。单击继续连接到 OPC UA 服务器通过连接到 OPC UA 服务器,我们可以浏览左侧地址空间窗格中公开的数据。您可以在这里看到,我们可以象征性地浏览公开的数据,并查看在 PLC 中配置的所有输入、输出和内存区域。我已经选择了输入、输出和内存位并将它们拖到 UA Expert 的中心窗格中。浏览 OPC UA 服务器中的标签现在我可以监控这些标签的值了。我还可以通过双击它们来修改标签的值。在这里,您可以看到我已将输出 Q_01_01_M11_MTR 修改为 True。从 OPC UA 服务器写入标签这是一个非常危险的情况——任何 OPC UA 客户端都可以连接到这个 PLC 来查看和修改任何数据。事实上,这种情况不如使用PUT/GET安全,因为 OPC UA 象征性地公开数据,因此恶意行为者很容易通过 OPC UA 客户端找到将对系统造成大破坏的数据。配置服务器接口
我们可以通过仔细选择向 OPC UA 客户端公开哪些数据来提高 OPC UA 服务器的安全性。为此,我们需要在 PLC_2 的硬件配置中禁用标准服务器接口。标准服务器接口是将来自 PLC 的所有数据公开给 OPC UA 客户端的服务器接口。您可以在属性 > 常规 > OPC UA> 标准服务器接口(SIMATIC 命名空间)中禁用此服务器接口:禁用标准 SIMATIC 服务器接口关闭此服务器接口后,我们可以创建一个新的服务器接口,将 PLC 中的特定数据公开给 OPC UA 客户端。要添加新的服务器接口,请双击项目树中 PLC_2 > OPC UA 通信 > 服务器接口下的添加新服务器接口按钮。为您的服务器接口命名,然后单击确定以创建接口并打开服务器接口编辑器。添加新的 OPC UA 服务器接口在 Server Editor 窗口中,您有两个窗格。在左窗格中,您有 OPC UA 服务器接口命名空间。此命名空间定义了 OPC UA 客户端可访问的所有数据。OPC UA 客户端只能浏览此命名空间中的数据。在右侧,您可以将项目的 OPC UA 元素添加到 OPC UA 服务器接口命名空间中。要将项目中的元素添加到 OPC UA 服务器接口命名空间,您只需将它们从左侧拖放到右侧窗格即可。在此示例中,我已将光电管输入和时钟位标记添加到服务器接口名称空间。向 OPC UA 服务器接口添加标签我将下载这些更改并切换回UAExpert OPC UA 客户端以查看这些更改。安全检查 #2
回到UAExpert,我已经断开并重新连接到OPC UA 服务器。现在我看到数据不再直接通过 PLC 公开,而是我们选择公开的标签通过名为 Server_Interface_1 的新文件夹公开。这是我们在 TIA Portal 中创建的服务器接口命名空间。当您展开此文件夹时,您会看到它包含我们选择公开的所有数据。再一次,我们可以监控和修改通过这个服务器接口命名空间暴露的数据的值。OPC UA 客户端中的服务器接口命名空间现在,我们通过限制向 OPC UA 客户端公开的数据的数量和类型,使连接更加安全。在下一节中,我们将通过实施身份验证来进一步提高连接的安全性,以便只有具有正确用户名和密码的设备才能连接到服务器。配置身份验证
访客身份验证允许任何客户端访问 OPC UA 服务器,而无需在密码中提供用户名。为了实现身份验证,我们希望在 OPC UA 服务器中禁用访客身份验证。您可以在 TIA Portal 中通过取消激活“常规”>“OPC UA”>“访客身份验证”下 PLC 属性中的“启用访客身份验证”复选框来执行此操作禁用 OPC UA 服务器的访客身份验证在本节下方,我们可以通过激活“启用用户名和密码身份验证”复选框来启用用户名和密码身份验证。使用用户名和密码启用身份验证后,您可以定义 OPC 客户端将用于连接到 OPC 服务器的用户名和密码。为 OPC UA 服务器启用身份验证安全检查#3
将更改下载到 PLC 后,我可以返回到UAExpert 并断开并重新连接到 OPC UA 服务器。这次当我尝试连接时,我看到抛出“BadIdentityTokenInvalid”错误。这是因为 OPC UA 服务器不再允许访客身份验证BadIdentityTokenInvalid 错误我们可以在服务器连接属性中配置用于连接到 OPC UA 服务器的用户名和密码。要访问服务器连接属性,请右键单击 OPC UA Demo 并选择 Properties。服务器连接属性在身份验证设置部分,您可以提供用户名和密码以连接到 OPC UA 服务器。您可以选择存储这些凭据,这样您就不必在每次连接到 OPC UA 服务器时都提供它们。UA Expert 中的身份验证设置为 OPC UA Server 提供正确的用户名和密码后,您可以再次连接、浏览服务器接口命名空间中的标签、监控和写入标签值。现在我们已经采取措施保护 OPC UA 服务器,让我们配置 OPC UA 客户端,看看我们如何使用 OPC UA 进行 PLC 到 PLC 的通信。配置 OPC UA 客户端
在 PLC_1 中,我在常规 > OPC UA > 客户端下的 PLC 属性中激活 OPC UA 客户端。激活 OPC UA 客户端同样,我们必须在 PLC 属性中的 General > Runtime Licenses > OPC UA 下指定购买的许可证类型。就像 OPC UA 服务器有一个服务器接口一样,OPC UA 客户端也有一个客户端接口。通过双击项目树中 PLC_1 > OPC UA 通信 > 客户端接口下的“添加新客户端接口”,为 PLC_1 添加客户端接口。名为 Client_Interface_1 的客户端接口会自动创建并打开。添加客户端接口在编辑器的底部窗格中,提供 OPC UA 服务器的 IP 地址和端口(如果已修改)。您将看到带有新信息的服务器地址更新。配置服务器 IP 地址在“安全”选项卡中,向下滚动到“用户身份验证”部分。在用户身份验证下拉菜单中,选择“用户名和密码”。在以下两个框中,提供您之前在 OPC UA 服务器中配置的用户名和密码。为 OPC UA 客户端设置安全性完成这些更改后,将它们下载到 PLC。配置数据交换
接下来,我们可以指定 OPC UA Server 和 Client 之间的数据交换。在“OPC UA 客户端接口”树中,您可以看到有各种数据访问选项,包括读取列表、写入列表和方法列表。读取列表包含从 OPC UA 服务器读取的数据,写入列表包含写入 OPC UA 服务器的数据。在此演示中,我们将从 OPC UA 服务器读取数据。双击“添加新阅读列表”以创建并打开一个名为“阅读列表_1”的新阅读列表。创建一个新的阅读列表现在,我们要将来自服务器接口命名空间的数据添加到读取列表中。我们可以通过以 XML 格式从 PLC_2 导出服务器接口名称空间并将其导入回 PLC_1 中的客户端接口来实现此目的。如果与服务器的在线连接可用,一个更简单的选择是浏览 OPC UA 服务器接口命名空间的数据。为此,请从 OPC UA 服务器接口源下拉列表中选择在线 [],然后单击“在线访问”以浏览 OPC UA 服务器接口。浏览 OPC UA 服务器接口在打开的对话框中,粘贴 OPC UA 服务器的地址,然后单击“查找所选服务器”。找到服务器后,选择安全级别“无安全性”并指定正确的用户身份验证类型以及用户您之前创建的名称和密码。后,单击“连接”以连接到 OPC UA 服务器。连接到 OPC UA 服务器在弹出框中,单击“是”选择信任 OPC UA 服务器的证书。如果一切顺利,您应该能够在 OPC UA 服务器界面窗格中看到 OPC UA 服务器公开的数据。从这里,您可以将要使用的数据拖到 OPC UA 客户端的读取列表中。在此示例中,我将 Clock_1Hz 布尔标记带到客户端的读取列表中。将数据添加到 OPC UA 客户端读取列表后,我们需要轮询数据。为此,我将使用指令 > 通信 > OPC UA > OPC UA 客户端下的 OPC_UA_ReadList_C 块。这是一个紧凑的通信块,这意味着它与 OPC UA 服务器建立连接并处理数据交换。在 Main OB 中创建对指令的调用并启动配置向导。OPC_UA_ReadList_C 的配置向导按照配置向导中的步骤参数化模块并设置 REQ 引脚以循环轮询来自服务器的数据。如果配置正确,您应该会看到块更改值的 STATUS 引脚以表明正在接收数据。完成参数化 OPC_UA_ReadList_C现在,如果我跟踪从服务器接收到的数据(在“Client interface_1_Data”.“Read list_1”.Variable.Clock_1Hz 中可用),我可以看到正在从 OPC UA 服务器接收和更新数据OPC UA 数据跟踪总结
在这篇文章中,介绍了 OPC UA,并解释了使用 OPC UA 作为 PLC 系统中水平和垂直通信的通信协议的一些优点和缺点。展示了如何使用 OPC UA 在两个 PLC 之间进行通信。在此过程中,学习了如何将 S7-1500 PLC 设置为 OPC UA 服务器,以及如何使用服务器接口和用户身份验证正确保护服务器连接。还学习了如何将 S7-1500 PLC 配置为 OPC UA 客户端以及如何使用来自服务器的数据