有一个项目,需要用WinCC通过OPC UA读取西门子SINUMERIK数控系统的NC变量,数控系统端全部设置完成,因为数控系统的NC变量有通道和轴之分,所以大部分NC变量都是以两维数组的形式存在;
首先通过SinumerikOpcUaClient_ver2.2客户端可以读取所有想要的NC变量,数组类型也OK,例如读取通道1R参数2,即为"/Channel/Parmeter/R[u1,2]",或者"/Channel/Parmeter/R[2]"皆可,"/Channel/Parmeter/R[3,5]"则读取元素3-5的所有内容,满足项目需求;
回到WinCC,首先软件版本7.5.1.2,正版激活,通过OPU UA连接至SINUMERIK数控系统(服务器端)正常(无加密),能够看见所有NC变量,勾选后通过IO域显示,所有单一地址的变量全部读取显示正常,所有的数组型变量都只能显示第一个元素,参考文档《如何使用 WinCC OPC UA 客户端访问数组元素,编号:109746486》,复制变量后通过地址后面的"..."设置数组索引,例如读取通道1R参数2,地址变为"s=/Channel/Parmeter/R,"11;-1",[2]",但是在IO域中显示该变量却为“!”无法显示,修改地址为"s=/Channel/Parmeter/R,"11;-1",[1,2]"或"s=/Channel/Parmeter/R,"11;-1",[u1,2]"都是一样的“!”,该变量在服务器端的地址为"s=/Channel/Parmeter/R,"11;-1",0",使用该变量在IO域中显示第一个元素读取正常;
《如何使用 WinCC OPC UA 客户端访问数组元素,编号:109746486》该文档内明确有这句话"For example, SINUMERIK? tags (R variables, PLC variables ) cannot be recognized as arrays. This is a limitation of the SINUMERIK? server. Only the array itself (without its elements) can be displayed in the Configuration Studio. Thus, the WinCC user has to create array elements with the Configuration Studio and to modify the tag address manually as described above, in order to specify the NodeId expected by the server."也就是说西门子SINUMERIK数控系统数组的元素确实不会在"Configuration Studio"内显示,需要读取数组就需要手动修改地址的手法,既然有这句话,默认西门子应该是做过相关测试的,为什么我这边还是无法读取?
补充几个条件:
1、尝试用WinCC7.4.1.14做实验,无效;
2、尝试用其它安装WinCC7.5.1.2做实验,无效;
3、文档最末部分,关闭"Enable /Disable OPC UA array writing without Index Range"已关闭;
4、《如何使用 WinCC OPC UA 客户端访问数组元素,编号:109746486》https://support.industry.siemens.com/cs/document/109746486/如何使用-wincc-opc-ua-客户端访问数组元素-?dti=0&lc=zh-CN
5、图1为使用SinumerikOpcUaClient_ver2.2客户端读取所有想要的NC变量;
6、图2为WinCC内的地址(复制,尚未修改);
7、图3为修改的地址的方法;
PS:据实验"s=/Channel/Parmeter/R,"11;-1",0"里面的"11"是代表数据类型,"-1”代表什么意思?
试了很长时间无解,请各位前辈指点,谢谢!同时接下来打算连接S7-1200,通过OPC UA读取数组(一维)试试。
问题补充:
改好的地址应为"s=/Channel/Parmeter/R","11;-1",[2]或"s=/Channel/Parmeter/R","11;-1",[2,5]或"s=/Channel/Parmeter/R","11;-1",0[u1,2],上文写错了,通过图三修改或手动输入地址都可以,最后一个"0"应为单一元素的地址
图片说明:
最佳答案
没有用过SINUMERIK,但是我看了你改完之后的地址,格式已经发生了变化。正常的地址是
"s=/Channel/Parmeter/R","11;-1",0 (两个逗号将其分成三段,前两段为带“”的字符串)
而你改完之后的却是:
"s=/Channel/Parmeter/R,"11;-1",[2]"
"s=/Channel/Parmeter/R,"11;-1",[u1,2]"
结果根本就不一致。
STEP7V15系统手册上说,OPC UA通常采用数组访问方式进行读写操作,即带有下标和长度。一个单变量实际上就是一个特殊的数组(下标为0,长度为1)。所以我认为地址最后面那个0就是下标。你看把它改成1或2是否可行。我也有个疑问,不知道如何辨别是一维还是二维数组。
提问者对于答案的评价:
谢谢
最佳答案作者回复:
问题如何解决的啊?
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc354315.html