Siemens TIA使用OPC UA完成2台PLC通讯
在这篇文章中,通过将 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 服务器,而无需在密码中提供用户名。为了实现身份验证,我们希望在 OPCUA 服务器中禁用访客身份验证。您可以在 TIA Portal 中通过取消激活“常规”>“OPCUA”>“访客身份验证”下 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 > OPCUA 下指定购买的许可证类型。就像 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”.“Readlist_1”.Variable.Clock_1Hz 中可用),我可以看到正在从 OPC UA服务器接收和更新数据OPC UA 数据跟踪