OPC
OPC 是一项应用于自动化行业及其他行业的数据安全交换可互操作性标准。DolphinDB 的 OPC 插件可用于访问并采集自动化行业 OPC 服务器的数据。OPC DA 插件实现了 OPC DA 2.05A 版本规范。
安装插件
版本要求
DolphinDB Server:Window、2.00.10 及更高版本。
安装步骤
在 DolphinDB 客户端中使用
listRemotePlugins
命令查看插件仓库中的插件信息。注意:仅展示当前操作系统和 server 版本支持的插件。若无预期插件,可自行编译(请自行选择对应分支下的插件)或在 DolphinDB 用户社区进行反馈。
login("admin", "123456") listRemotePlugins()
使用
installPlugin
命令完成插件安装。installPlugin("opc")
使用
loadPlugin
命令加载插件。loadPlugin("opc")
接口说明
目前只支持 OPC 2.0 协议,且不支持异步读写。
getServerList
语法
getServerList(host)
详情
获取 OPC server。
返回的结果是一个包含两列的表,一列是 progID,表示 server 的标志符;另一列是该 server 对应的 CLSID。
注意:获取远程 OPC 服务器前,需要对 OPC Server 和 OPC Client 两侧都进行 DCOM 配置。详细配置可参考远程连接 opc 服务器设置。
参数
host STRING 类型标量,表示 IP 地址,如 "127.0.0.1"。
例子
getOpcServerList("desk9")
connect
语法
connect(host, serverName,[reqUpdateRate_ms=100])
详情
连接 OPC server。
返回的结果是一个 connection,可以显式的调用 close 函数去关闭,也可以在 reference count 为 0 的时候自动释放。
注意:获取远程 OPC 服务器前,需要对 OPC Server 和 OPC Client 两侧都进行 DCOM 配置。详细配置可参考远程连接 opc 服务器设置。
参数
host STRING 类型标量,表示 IP 地址。
serverName STRING 类型标量,表示 OPC Server 的名称。
reqUpdateRate_ms INT 类型标量,表示请求更新频率,单位为毫秒,默认为 100。可选参数。
例子
connection=connect(`127.0.0.1,`Matrikon.OPC.Simulation.1,100)
readTag
语法
readTag(connection, tagName, [table])
详情
读取一个 tag 的值,使用前需要先建立一个 OPC 连接。
参数
connection 接口connect
的返回。
tagName STRING 类型标量或向量,表示 tag 的名称。
table 是表或表的数组(为数组时,表的个数须与 tag 个数相同),用于存放读取的结果。
- 若是一个表,将所有 tag 的值都插入这张表中。
- 若是多个表,将每个 tag 读取的值分别插入这些表中。
- 若不指定,则返回一张表,表的记录是读取的 tag 值。
例子
t = table(200:0,`tag`time`value`quality, [SYMBOL,TIMESTAMP, DOUBLE, INT])
readTag(conn, "testwrite.test9",t)
readTag(conn, ["testwrite.test5","testwrite.test8", "testwrite.test9"],t)
tm = table(200:0,`time`tag1`quality1`tag2`quality2, [TIMESTAMP,STRING, INT,INT,INT])
readTag(conn, ["testwrite.test1","testwrite.test4"],tm)
t1 = table(200:0,`tag`time`value`quality, [SYMBOL,TIMESTAMP, STRING, INT])
t2 = table(200:0,`tag`time`value`quality, [SYMBOL,TIMESTAMP, INT, INT])
t3 = table(200:0,`tag`time`value`quality, [SYMBOL,TIMESTAMP, DOUBLE, INT])
readTag(conn, ["testwrite.test1","testwrite.test4", "testwrite.test9"],[t1,t2,t3])
writeTag
语法
writeTag(connection, tagName, value)
参数
connection 接口connect
的返回。
tagName STRING 类型标量或向量,表示 tag 的名称。
value 表示 tag 的值或数组。
详情
写入一个或一组 tag 的值。
例子
writeTag(conn,"testwrite.test1",[1.112,0.123,0.1234])
writeTag(conn,["testwrite.test5","testwrite.test6"],[33,11])
subscribe
语法
subscribe(connection, tagName, handler)
详情
订阅 tag 的值。
参数
connection 接口connect
的返回。
tagName STRING 类型标量或向量,表示 tag 的名称。
handler 一个函数或表。当数据变化时,会调用 handler 函数或直接将数据写入 handler 指定的表。
例子
t1 = table(200:0,`tag`time`value`quality, [SYMBOL,TIMESTAMP, STRING, INT])
conn1=connect(`127.0.0.1,`Matrikon.OPC.Simulation.1,100)
subscribe(conn1,".testString", t1)
t2 = table(200:0,`tag`time`value`quality, [SYMBOL,TIMESTAMP, DOUBLE, INT])
conn2=connect(`127.0.0.1,`Matrikon.OPC.Simulation.1,100)
subscribe(conn2,[".testReal8",".testReal4"], t2)
def callback1(mutable t, d) {
t.append!(d)
}
t3 = table(200:0,`tag`time`value`quality, [SYMBOL,TIMESTAMP, BOOL, INT])
conn10 = connect(`127.0.0.1,`Matrikon.OPC.Simulation.1,10)
subscribe(conn10,".testBool", callback1{t3})
getSubscriberStat
语法
getSubscriberStat()
详情
查询所有订阅信息。
返回的结果是一个包含 8 列的表,其结构为:
- subscriptionId, 表示订阅标识符
- user, 表示建立订阅的会话用户
- host, 表示 OPC server 的地址
- serverName, 表示 OPC server 的名称
- tag, 表示订阅标签
- createTimestamp, 表示可以订阅建立时间
- receivedPackets, 表示订阅收到的消息报文数
- errorMsg, 表示订阅的最新错误信息
参数
无
例子
t=getSubscriberStat()for(sub in t[`subscriptionId]){ unsubscribe(sub)}
unsubcribe
语法
unsubcribe(subscription)
详情
取消 client 的订阅。
参数
subscription 接口connect
的返回或 getSubscriberStat
返回的订阅标识符。
例子
unsubcribe(connection)
close
语法
close(connection)
详情
断开与 OPC server 的连接。
参数
connection 接口connect
的返回。
例子
close(connection)