SimServer How To #3: 使用OPC UA客户端模拟服务器上的数据更改
21.03.2023
««q»» 在上一篇文章:SimServer How To #2中,我们向您展示了如何通过将NodeSet导入Prosys OPC UA Simulation server并模拟实例来复制真实的OPC UA服务器。
在某些情况下,除了模拟服务器上的实例外,用户还可以根据特定模式或记录的数据来更改服务器上的值。通过这种方式,您可以模拟为服务器提供数据的物理系统;比如机器人或其他工厂车间设备。
目前,我们的模拟服务器没有用于此任务的内置功能。为此,我们在这里为您介绍两种可行的解决方案:
这两个教程都可以作为独立的示例使用,因为您可以使用Prosys OPC UA Simulation Server的免费新安装版本。如果您想从上一教程继续,您将需要专业版。
使用Prosys OPC UA Browser手动更改值
对于这一部分,您将需要以下产品:
- Prosys OPC UA Simulation Server
- 免费版本对于一个简单的例子来说已经足够了
- 您需要专业版才能继续使用上一教程中的示例。如果您还没有专业版许可证,您可以联系我们的销售团队来获得评估许可证。
- Prosys OPC UA Browser
注意:_ 要继续使用免费版的Simulation Server,请跳过步骤5-8。
-
请确保您的服务器正在运行。
-
复制连接地址。(这是可选的;您也可以手动键入服务器的地址。)
-
启动Prosys OPC UA Browser并将连接地址粘贴到顶部的地址栏中。按Enter键或单击在地址栏的右侧的箭头 (→) 建立连接。
-
定义您的首选安全设置。当使用Simulation Server进行测试时,我们可以使用 None 和 Anonymous,但这些不是真正的OPC UA通信的推荐设置。
-
浏览地址空间以查找要更改其值的变量。我们在上一个教程中更改了灯光输出变量,所以让我们再次使用这些变量。我们选择Objects > PLC_1 > Outputs > RedLight。找到一个 AccessLevel 属性为CurrentWrite的变量至关重要的,因为这意味着您可以为该变量写入值。
-
右键单击所选变量,然后选择Write Value。
-
在 Write Value 对话框中,可以为变量设置一个新值。由于 RedLight 是一个布尔变量,我们只能写 True 或 False,这取决于它的当前值。勾选值框以写入 True,然后单击写入。如果写入成功,对话框将关闭,并且该变量的新值应该可见。
-
如果右键单击变量并选择 Monitor Data,则可以观察该值的变化。通过勾选 Data view 右侧的Graph选项,可以查看在图形中绘制的值。这就是RedLight在写了几次之后的图形。
-
让我们尝试一个更令人兴奋的例子。选择 Objects > MyObjects > MyDevice > MyLevel。右键单击并选择Write Value。
-
从DataType中,我们可以看到这个变量有两个值,所以我们可以为这个变量写值。我们将写100,然后单击Write。
-
MyLevel是一个具有模拟值的变量,因此它会由服务器更新。我们仍然可以向它写入新的值,下图显示了这是如何更改模拟值的。
使用Prosys OPC UA SDK for Java创建您自己的OPC UA客户端,以自动更改服务器上的值
对于这一部分,您将需要以下产品:
- Prosys OPC UA Simulation Server
- 免费版本对于一个简单的例子来说已经足够了。
- 您需要专业版才能继续使用上一教程中的示例。如果您还没有评估许可证,可以联系我们的销售团队获得评估许可证。
- Prosys OPC UA SDK for Java
- 您可以通过我们的下载申请表获得本教程所用的SDK的免费评估许可证。
- 要遵循本教程,您必须首先设置您的SDK开发环境。按照您可以在产品下载页面上找到的Prosys OPC UA SDK for Java Starting Guide进行操作。
- Prosys OPC UA Browser
- 这不是必需的,但您可以轻松地监视更新的值。
- Eclipse或其他Java开发环境
注意:如果使用的是免费版本的Simulation Server,请跳过步骤11-13。
-
确保您的SDK for Java已准备好进行开发。按照您可以在产品下载页面上找到的Prosys OPC UA SDK for Java Starting Guide进行正确设置。
-
启动服务器并在Address Space视图中浏览地址空间,然后找到有关要写入的变量的以下详细信息:
- NamespaceIndex (a)
- NodeId的标识符的字符串值(b)
-
在本教程中,我们选择了两个变量并了解了它们的详细信息:
- Objects > MyObjects > MyDevice > MyLevel
- NamespaceIndex: 6
- NodeId’s Identifier: MyLevel
- Objects > PLC_1 > Outputs > RedLight
- NamespaceIndex: 8
- NodeId’s Identifier: “RedLight” (请注意,双引号也必须出现在代码中!)
- Objects > MyObjects > MyDevice > MyLevel
-
转到Eclipse和您已经设置好的项目。
-
右键单击com.prosysopc.ua.samples.client 包,然后选择“新建”>“类”添加一个新类。
-
为新类指定一个名称,然后单击“完成”。我们将类命名为SimpleClient。
-
将以下代码块粘贴到您的类中。
首先,为您的Class导入:
import java.io.IOException; import java.net.UnknownHostException; import java.util.Locale; import com.prosysopc.ua.ApplicationIdentity; import com.prosysopc.ua.SecureIdentityException; import com.prosysopc.ua.client.UaClient; import com.prosysopc.ua.stack.builtintypes.DataValue; import com.prosysopc.ua.stack.builtintypes.LocalizedText; import com.prosysopc.ua.stack.builtintypes.NodeId; import com.prosysopc.ua.stack.builtintypes.UnsignedInteger; import com.prosysopc.ua.stack.core.ApplicationDescription; import com.prosysopc.ua.stack.core.ApplicationType; import com.prosysopc.ua.stack.transport.security.SecurityMode;
类内部的其余代码:
public static void main(String[] args) throws Exception { UaClient client = new UaClient("opc.tcp://localhost:53530/OPCUA/SimulationServer"); // 这些是用户需要更改的变量,默认变量可以用来测试代码的工作方式。 NodeId writeTestNodeId = new NodeId(6, "MyLevel"); int sleeptime = 1000; Double[] writeValues = {-1.0, -3.0, -5.0, -7.0, -9.0}; client.setSecurityMode(SecurityMode.NONE); initialize(client); client.connect(); DataValue value; // 简单循环,遍历要写入变量的预定值列表 for (int i = 0; i < writeValues.length; i++) { // valueOf(13)是硬编码的,因为它是value属性的attributeId。 client.writeAttribute(writeTestNodeId, UnsignedInteger.valueOf(13), writeValues[i], true); value = client.readValue(writeTestNodeId); System.out.println(value.getValue()); // Prints the values that were written Thread.sleep(sleeptime); } client.disconnect(); } protected static void initialize(UaClient client) throws SecureIdentityException, IOException, UnknownHostException { ApplicationDescription appDescription = new ApplicationDescription(); appDescription.setApplicationName(new LocalizedText("SimpleClient", Locale.ENGLISH)); appDescription.setApplicationUri("urn:localhost:UA:SimpleClient"); appDescription.setProductUri("urn:prosysopc.com:UA:SimpleClient"); appDescription.setApplicationType(ApplicationType.Client); final ApplicationIdentity identity = new ApplicationIdentity(); identity.setApplicationDescription(appDescription); client.setApplicationIdentity(identity); }
-
上面的代码有几个关键部分,所以让我们仔细研究一下。
函数initialize()用于初始化客户端。如果您没有将类命名为“SimpleClient”,则必须修改以下行以匹配您的类名:
appDescription.setApplicationName(new LocalizedText("SimpleClient", Locale.ENGLISH)); appDescription.setApplicationUri("urn:localhost:UA:SimpleClient"); appDescription.setProductUri("urn:prosysopc.com:UA:SimpleClient");
此行创建一个用于连接到服务器的客户端。URL应该是服务器的连接地址。
UaClient client = new UaClient("opc.tcp://localhost:53530/OPCUA/SimulationServer");
下面的行中我们要设置更新值的变量。这就是我们需要在步骤2和3中找到的NamespaceIndex和Identifier的地方。
NodeId writeTestNodeId = new NodeId(6, "MyLevel");
由于MyLevel的数据类型是double,因此我们可以创建一个将逐个写入变量的值列表。您还可以从文件中为此检索值列表。
Double[] writeValues = {-1.0, -3.0, -5.0, -7.0, -9.0};
最后,这一行用于将值写入服务器:
client.writeAttribute(writeTestNodeId, UnsignedInteger.valueOf(13), writeValues[i], true);
-
右键单击您的类,然后选择Run As > Java Application。
-
代码应该在控制台上运行并打印写入的值。
-
现在我们可以向RedLight写入值。修改NodeId和值列表,使其适合具有布尔值的变量。
新的代码行如下所示:
NodeId writeTestNodeId = new NodeId(8, "\"RedLight\"");
Boolean[] writeValues = {false, true, false, true, false, true};
-
再次运行客户端应用程序(步骤9)并观察控制台。
-
如果运行Browser并监视变量,则可以看到更改的值。
下一步
在本文中,我们向您展示了在OPC UA服务器上对变量写入值的两种方法。SDK for Java使您能够做更多的事情,因此,如果您有兴趣了解更多关于编写自己的OPC UA客户端的信息,我们建议您查看SDK下载附带的教程和示例文件。
如果您想开始开发自己的客户端或服务器,但感到困惑并需要更多详细信息,请随时通过电子邮件sales@prosysopc.com联系我们寻求帮助或通过我们的网站联系表格。我们提供研讨会和其他材料帮助您开始。
Kaisa Hirvola
Creative Engineer
Email:kaisa.hirvola@prosysopc.com
Tags: OPC UA, Simulation Server, Guides
comments powered by DisqusProsys OPC Ltd
Prosys OPC是OPC和OPC UA软件领域中拥有20年技术经验的行业佼佼者。 OPC和OPC UA(Unified Architecture)是工业和高科技公司使用的通信标准。
最新博客文章
SimServer How To #3: 使用OPC UA客户端模拟服务器上的数据更改
关于如何使用OPC UA客户端在OPC UA服务器上写入新数据的分步教程(分为两部分)。
如何在生产分析项目中取得成功
工业4.0分析项目将在未来几年内成为显著增长的业务。阅读如何绕过最常见的陷阱以及成功交付项目。
Prosys OPC UA Forge为什么是工业4.0工厂的重要组成部分
如今,边缘计算应用程序提供了比OPC UA聚合服务器更广泛的功能。事实上,它是工业4.0工厂的主要组成部分。"