用open62541将值写入PLC标签

问题描述 投票:0回答:1

我正在尝试使用OPC UA作为客户端向运行在[[Siemens S7-1512 PLC上的OPC UA服务器进行写操作,将值[布尔值写入PLC变量(打开或关闭继电器)。客户端必须c / c ++]中实现我尝试了几个不同的GUI客户端,没有问题。

此外,我还尝试了包含

freeopcua

的Python SDK。我有一些小问题,但是在写请求中设置了属性后就可以写值了。但是,使用open62541时,我找不到任何解决方案(状态代码很好,但值未更改

我能够读取值):

Python工作要求:node.set_attribute(ua.AttributeIds.Value, ua.DataValue(not node.get_value()))

下面的C不能正常工作的请求代码:

UA_WriteRequest request; UA_WriteRequest_init(&request); request.nodesToWrite = UA_WriteValue_new(); request.nodesToWriteSize = 1; request.nodesToWrite[0].nodeId = UA_NODEID_STRING_ALLOC(3, "\"VALUE\""); request.nodesToWrite[0].attributeId = UA_ATTRIBUTEID_VALUE; request.nodesToWrite[0].value.hasValue = true; request.nodesToWrite[0].value.value.type = &UA_TYPES[UA_TYPES_BOOLEAN]; request.nodesToWrite[0].value.value.storageType = UA_VARIANT_DATA_NODELETE; request.nodesToWrite[0].value.hasServerTimestamp = true; request.nodesToWrite[0].value.hasSourceTimestamp = true; request.nodesToWrite[0].value.sourceTimestamp = UA_DateTime_now(); request.nodesToWrite[0].value.value.data = val; request.requestHeader.timestamp = UA_DateTime_now(); request.requestHeader.authenticationToken = UA_NODEID_NUMERIC(0, UA_NS0ID_SESSIONAUTHENTICATIONTOKEN); //write to client service UA_WriteResponse wResp = UA_Client_Service_write(client, request);

我希望将PLC标签的值更改为相反的值,或者向我提供有关为什么它不起作用的信息。

我正在尝试使用OPC UA作为将客户机值写入在Siemens S7-1512 PLC上运行的OPC UA服务器的方式,将bool值写入PLC变量(打开或关闭继电器)。客户端必须在我尝试过的c / c ++中实现...
c++ opc opc-ua siemens open62541
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.