opc-ua - 在 WINDEV 上使用 OPC UA 将一个数组(实数)写入 Siemens 1500
问题描述
(对不起我用法语写英文的方式)
嗨,经过对网络和文档的大量研究,我无法解决我的问题
我尝试使用 OPC UA 向 siemens 写入 150 个实数的数组:
PROCÉDURE WriteArrayToNode(NodeIdTxt is string)
Trace("lets write")
myNodeId is NodeId(gsNotreBD+"."+NodeIdTxt)
nodesToWrite is WriteValueCollection <- new WriteValueCollection()
nodeToWrite is WriteValue <- new WriteValue()
nodeToWrite.NodeId = myNodeId
nodeToWrite.AttributeId = Attributes.Value
Trace(Attributes.ValueRank,Attributes.Value,Attributes.ArrayDimensions)
vTemp is Opc.Ua.variant(gTab_W_PARA) //gTab_W_PARA is the array of 150 real i trying to write
clDataValue1 is DataValue <- new DataValue(vTemp);
nodeToWrite.Value=clDataValue1
nodeToWrite.IndexRange="1:150"
nodesToWrite.Add(nodeToWrite);
clRequestHeader is RequestHeader <- new RequestHeader()
myResults is StatusCodeCollection dynamic = new StatusCodeCollection
myDiagsInfo is DiagnosticInfoCollection dynamic = new DiagnosticInfoCollection
request is RequestHeader dynamic = new RequestHeader
gmySession.Write(request,nodesToWrite,myResults,myDiagsInfo)
Trace(myDiagsInfo.get_Count())
Trace("scribe ? ")
RETURN True
Trace(" yes scribe ")
CASE ERROR:
Trace("erreur",ExceptionInfo)
RETURN False
CASE EXCEPTION:
Trace("exception",ExceptionInfo)
RETURN False
TRACE 给出:
lets write //start of process
15 13 16 // Attributes.ValueRank,Attributes.Value,Attributes.ArrayDimensions I don't understand :
// With doc, I admit it say Attributes is 15 dimensional array with value of 13 ? and 16
// index, but who is Attributes ? I never use array like that
0
scribe ? //it return true, so there is no error ?
但是在西门子我的数组没有改变,所以写入不起作用?我尝试像在许多示例中一样使用变体和 Datavalue,但我不确定它是否是好方法。如果有人可以帮助我提前感谢他
解决方案
可能您对 IndexRange 的使用是错误的。
假设您只使用 OneDimensional S7 Array REAL[1..150](dataVariable 表示属性 ValueRank 和 ArrayDimensions)
不要将 S7 范围语法与 OPC UA IndexRange 一起使用!
- 来自 UA 规范:
“所有索引都从 0 开始。任何索引的最大值都比维度的长度小一。”
所以“1:150”地址范围是服务器上不存在的。“0:149”是正确的。
如果您寻址整个数组,则根本不要使用 IndexRange。事实上,这会在服务器上产生一些性能问题。
写入时,可能 S7-1500 OPC Server 根本不支持 IndexRange。但它应该返回一个错误。
推荐阅读
- python - 如何根据时间戳取数据框中各列的平均值来绘制图?
- passwords - 标识符“密码”已被声明
- android - 在 react-native NativeModule 中使用时解析 registerForActivityResult 时出错
- python - 由于树模块,无法导入 tensorflow_probability
- python - 尝试获取根目录时获取绝对路径
- r - 试图将连续变量变成大小不等的分类变量
- json - 渲染错误:“SyntaxError:JSON 中位置 0 的意外标记 u”Vue - Laravel
- visual-studio-2019 - 我无法将 Visual Studio 2019 中 C# .NET Framework 类库的目标框架从 .NET 5.0 更改为 .NET 4.8
- api - 通过 Bitbucket REST API 获取所有拉取请求评论
- python - 在python中以变量名存储目录中的文件