- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在github上找到了一个比较好的项目node-opcua,使用这个项目的简单例子可以创建一个opc server和client,并且在本地可以访问,我现在需要访问一个远程opc server,提供几个参数是:IP网络 Node (比如10.195.156.150),opc服务(比如ArchestrA.FSGateway),opc组(比如ArchestrA),opc TagName(比如HXi1_P201_00.ia),我可以用node-opcua访问吗?谢谢!
示例服务器代码:
var opcua = require("node-opcua");
var os = require("os");
// Let's create an instance of OPCUAServer
var server = new opcua.OPCUAServer({port: 4334});
var siteName = 'site01';
var var1 = {nodeId: 'ns=4;s=hook_weight', browseName: 'hook_weight', dataType: 'Double'};
var var2 = {nodeId: 'ns=4;s=rpm', browseName: 'rpm', dataType: 'Double'};
var var3 = {nodeId: 'ns=1;s=free_memory', browseName: 'free_memory', dataType: 'Double'};
function post_initialize(){
console.log("server initialized");
function construct_my_address_space(server) {
server.engine.createFolder("RootFolder",{ browseName: siteName});
// emulate variable1 changing every 500 ms
var variable1 = 1;
setInterval(function(){ variable1 += 1; }, 1000);
var1.value = {
get: function(){
return new opcua.Variant({dataType: opcua.DataType.Double, value: variable1 });
}
};
server.var1 = server.engine.addVariableInFolder(siteName, var1);
var2.value = {
get: function(){
return new opcua.Variant({dataType: opcua.DataType.Double, value: 10});
}
};
server.var2 = server.engine.addVariableInFolder(siteName, var2);
/**
/**
* returns the percentage of free memory on the running machine
* @return {double}
*/
function available_memory() {
// var value = process.memoryUsage().heapUsed / 1000000;
var percentageMemUsed = os.freemem() / os.totalmem() * 100.0;
return percentageMemUsed;
}
var3.value = {
get: function(){
return new opcua.Variant({dataType: opcua.DataType.Double, value: available_memory()});
}
};
server.var3 = server.engine.addVariableInFolder(siteName, var3);
}
construct_my_address_space(server);
server.start(function() {
console.log("Server is now listening ... ( press CTRL+C to stop)");
console.log("port ", server.endpoints[0].port);
var endpointUrl = server.endpoints[0].endpointDescription().endpointUrl;
console.log(" the primary server endpoint url is ", endpointUrl );
});
}
server.initialize(post_initialize);
sample_client 代码:
var opcua = require("node-opcua");
var async = require("async");
var client = new opcua.OPCUAClient();
var endpointUrl = "opc.tcp://" + require("os").hostname().toLowerCase() + ":4334/UA/SampleServer";
var session, subscription;
async.series([
// step 1 : connect to
function(callback) {
client.connect(endpointUrl,function (err) {
if(err) { console.log(" cannot connect to endpoint :" , endpointUrl ); }
else { console.log("connected !"); }
callback(err);
});
},
// step 2 : createSession
function(callback) {
client.createSession( function(err, _session) {
if(!err) { session = _session; }
callback(err);
});
},
// step 5: install a subscription and install a monitored item for 10 seconds
function(callback) {
subscription=new opcua.ClientSubscription(session,{
requestedPublishingInterval: 1000,
requestedLifetimeCount: 10,
requestedMaxKeepAliveCount: 2,
maxNotificationsPerPublish: 10,
publishingEnabled: true,
priority: 10
});
subscription.on("started",function(){
console.log("subscriptionId=", subscription.subscriptionId);
}).on("keepalive",function(){ console.log(); })
.on("terminated",function(){ callback(); });
setTimeout(function () {
subscription.terminate();
}, 10000);
// install monitored item
var monitoredItem = subscription.monitor({
nodeId: opcua.resolveNodeId("ns=1;s=free_memory"),
attributeId: opcua.AttributeIds.Value
},
{
samplingInterval: 100,
discardOldest: true,
queueSize: 100
},
opcua.read_service.TimestampsToReturn.Both
);
console.log("-------------------------------------");
monitoredItem.on("changed", function (dataValue) {
console.log(" % free mem = ", dataValue.value.value);
});
},
// close session
function (callback) {
// _"closing session"
session.close(function (err) {
if (err) {
console.log("session closed failed ?");
}
callback();
});
}
],
function(err) {
if (err) { console.log(" failure ",err); }
else { console.log('done!'); }
client.disconnect(function(){});
});
最佳答案
恐怕 Archestra 没有 OPC UA 服务器,因此要从 node-opcua 访问它,您需要使用 OPC UA 网关,例如 https://www.prosysopc.com/products/opc-ua-gateway/ ,它可以将 OPC DA 转换为 OPC UA。
关于javascript - nodejs-如何使用node-opcua访问远程opc服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45603130/
请解释 OPC UA 和 OPC DA 之间的区别是什么? 在哪种情况下应该使用哪个,如果可以为 OPC UA 和 OPC DA 提供任何示例,这将有所帮助 最佳答案 OPC UA 不仅适用于 OPC
我有一个 Kepware OPC 服务器,我能够连接到我的客户端(OPC Foundation UA lib)。我在 Kepware 中创建了一个设备,并在其中创建了一个组。我想从数据库中读取 opc
我想从头开始实现我自己的 OPC DA 客户端(版本 2.02、2.05a、3.00),但不使用任何第三方。我还想利用 OPCEnum.exe 服务来获取已安装 OPC 服务器的列表。是否有任何类型的
我想从头开始实现我自己的 OPC DA 客户端(版本 2.02、2.05a、3.00),但不使用任何第三方。我还想利用 OPCEnum.exe 服务来获取已安装 OPC 服务器的列表。是否有任何类型的
我是 OPC 统一架构世界的新手,我正在从基础开始学习它。命名空间到底是什么?为什么它总是附加 NodeID? 最佳答案 OPC UA 中的命名空间就像节点 ID 的容器。OPC 基金会有索引为 0
我正在尝试通过 openscada 连接到 OPC 服务器。 我已经知道 MatrikonOPC explorer 给出的 OPC 服务器程序 ID,但连接不工作可能是由于错误的 DCOM 配置。在更
我一直在互联网上阅读,以很好地解释 OPC-UA 中的节点。似乎有一些库可以用于它,但实际上没有一个解释节点。 OPC-UA 中节点的用途是什么? 注意:此处为 OPC 和 OPC-UA 菜鸟 最佳答
在我的公司中,我们有许多分布式站点,每个站点都使用一个单一的 Scada 系统供应商(一个使用 Wincc,其他地方使用另一个......)并且该系统使用几乎相同类型的信息。 我们需要从这些系统中检索
我对 OPC-UA 世界完全陌生。 我需要建立一个关于如何让我们的 ERP 与 PLC 通信的概念证明。我正在评估充当 OPC-UA 服务器的软件(它正在运行)。我发现了 Milo 并让代码在 Ecl
我注意到所有 OPC 标记 ID 都以 ns=2;s= 为前缀. 可能的 NodeId 值的一些示例是: ns=2;s=AcquisitionTimeRemaining ns=2;s=Status n
我是 OPC UA 新手,我正在使用 milo OPC Subscriber client连接到本地发现服务。我有 Prosys 模拟服务器,它连接到我的本地发现服务。 注意:如果我直接连接到 pro
我想使用 OPC UA 服务器将我的应用程序生成的数据发送到 OPC UA 客户端。我已经完成了 Eclipse Milo 项目,这是一个很好的资源。但我不知道如何将它集成到我们的应用程序中。应用程序
我有一个应用程序,我需要将数据从 PLC 读取到数据库中,因此我需要开发自己的应用程序来执行此操作。我只需要从 PLC 读取 5 个值并将其记录到数据库中。我有一个正在运行的演示 OPC 服务器,可以
我是一名 OPC-UA 新手,使用 Milo 堆栈将非 OPC-UA 系统集成到 OPC-UA 服务器。其中一部分包括将值写入 OPC-UA 服务器中的节点。我的问题之一是来自其他系统的值以 Java
我已经减少并检查了 SamplingInterval 和 PublishingInterval..values 没有影响。你能提出任何建议吗?让我知道。 最佳答案 如前所述,SamplingInter
我正在使用 opc.net api 部分开发 opc 客户端应用程序,但在连接远程 opc 服务器时遇到了一些问题。下面请看我写的连接opc服务器的代码。 Opc. URL url = new Opc
我正在开发一个 OPC UA 客户端应用程序,它读取存储在 OPC UA 服务器上的文件。出于测试目的,我需要一个 OPC UA 服务器模拟器,我可以在其中添加 FileType 节点并配置这些节点。
我是 OPC-UA 世界和 Eclipse Milo 的新手。我不明白这里的保安是如何运作的,讨论eclipse-milo提供的client-example 我发现连接 OPCUA 服务器时使用了一些
我正在尝试使用 unifiedautomation 的 opc ua DLL 从 Opc ua 服务器(西门子)读取日期和时间 (#DT)。但是我得到了错误的值: 西门子 S7 1500 opc ua
我正在尝试遵循这些教程: https://sandervandevelde.wordpress.com/2018/11/06/getting-started-with-opc-ua-on-azure-
我是一名优秀的程序员,十分优秀!