使用方法

根据以下说明,创建OPC UA Client的程序。

前提条件:假设使用OPC UA Client的库等。(例:Node.js的node-opcua库、Python的opcua-asyncio库)

创建OPC UA Client的程序,以通过OPC UA获取并利用机器人控制信息数据。OPC UA客户端的数据获取流程如下所示。

设置数据数的上限

可通过DataNum节点,设置从OPC UA Server 1次获取的数据数的最大值。

设置数据获取周期

设置基于OPC UA Server的数据获取周期。可通过SamplingInterval节点设置。请注意,这与基于OPC UA Client的数据获取周期不同。

注意


根据数据数的上限设置和数据获取周期的设置,可能无法获取连续的机器人控制信息数据。此时,请将数据数的上限设为0,将数据获取周期设为更大的值。

Data节点的读取开始时点

请以DataExistsStatus节点的状态为判定条件,开始读取Data节点。也可以订阅注册DataExistsStatus节点。DataExistsStatus节点的值为Stop期间,请使其待机,不要读取。

Data节点的读取

通过浏览Data节点,可按以下章节所述读取数据。请根据需要解码数据。

数据格式

注意


  • 开始读取Data节点后,请继续通过OPC UA Client按10ms~100ms左右的周期获取数据。如果Data节点的读取间隔过长,数据可能缺失。在此情况下,ErrorStatus节点变为Warning。如果变为Warning,请确认时间戳等,并恰当地处理数据。
  • 如要减少上述的数据缺失,请采取加快数据获取周期、将DataNum设置为0或200、增大SamplingInterval值等措施。
  • 为切实地读取数据,请勿订阅注册Data节点。

支持ErrorStatus

通过参考ErrorStatus节点,可以判断是否可以正常获取数据。以下介绍ErrorStatus节点值的含义和处理示例。

ErrorStatus节点 含义 处理示例
None 可以获取正常数据。 继续读取Data节点。
Warning

部分数据缺失。

读取Data节点后ErrorStatus返回None。

注意Warning期间的数据缺失,继续读取数据。
Error

无法通过OPC UA服务器获取机器人控制信息数据。

如果可以获取机器人控制信息数据,则ErrorStatus返回None。

中断读取数据。

下面用伪代码表示获取机器人控制信息数据的程序。请根据使用的OPC UA客户端库的使用方法创建程序。

​# Collect the MotionLog data from OPC UA Server of Epson Robot Controller.
​# * This is pseudo code.

​# Create OPC UA Client
client = create_opcua_client()                  # Create OPC UA Client Instance
client.connect('opc.tcp://192.168.0.1:4840')    # Connect to OPC UA Server

​# Get node object
node_DataNum            = client.getNode('ns=1;i=20313')   # DataNum Node
node_SamplingInterval   = client.getNode('ns=1;i=20314')   # SamplingInterval Node
node_Data               = client.getNode('ns=1;i=20316')   # Data Node
node_LoggingStatus      = client.getNode('ns=1;i=20317')   # MonitorStatus Node
node_DataExistsStatus   = client.getNode('ns=1;i=20318')   # DataExistsStatus Node

​# Setup necessary settings
node_DataNum.setValue(0)                    # set DataNum
node_SamplingInterval.setValue(0)           # set SamplingInterval

​# Start data collection
while True:                                                 # loop for collect data
    while node_DataExistsStatus.getValue() is not 'Ready':  # wait to data Exists
        sleep(0.01)                                         # wait 10ms
   
    binary_data = node_Data.getValue()      # read MotionLog data
    decoded_data = decode(binary_data)      # decode binary data to readable format
    writefile(decoded_data)                 # write data to file