OPC
OPC 插件可用于访问并采集自动化行业 OPC 服务器的数据。OPC DA 插件实现了 OPC DA 2.05A 版本规范。
目前支持版本:relsease200, release130, relsease120, release110。
在插件市场安装插件
版本要求
- DolphinDB Server: 2.00.10及更高版本
安装步骤
在DolphinDB 客户端中使用 listRemotePlugins 命令查看插件仓库中的插件信息。
login("admin", "123456") listRemotePlugins(, "http://plugins.dolphindb.cn/plugins/")
使用 installPlugin 命令完成插件安装。
installPlugin("opc")
返回:<path_to_Opc_plugin>/PluginOpc.txt
使用 loadPlugin 命令加载插件(即上一步返回的.txt文件)。
loadPlugin("<path_to_Opc_plugin>/PluginOpc.txt")
注意:若使用 Windows 插件,加载时必须指定绝对路径,且路径中使用"\\"或"/"代替"\"。
接口说明
目前只支持 OPC 2.0协议,且不支持异步读写。
获取OPC Server
语法
opc::getServerList(host)
参数
- host 是字符串,表示 IP 地址,如127.0.0.1。
详情
获取 OPC server。返回的结果是一个包含两列的表,一列是 progID,表示 server 的标志符,另一列是该 server 对应的 CLSID。注意获取远程 OPC 服务器前,需要对 OPC Server 和 OPC Client 两侧都进行 DCOM 配置。详细配置可搜索网上的教程,例如:远程连接 opc 服务器设置。
例子
opc::getOpcServerList("desk9")
连接
语法
opc::connect(host, serverName,[reqUpdateRate_ms=100])
参数
host 是字符串,表示 IP 地址。
serverName 是字符串,表示 OPC Server 的名称。
reqUpdateRate_ms 为请求更新频率(毫秒),可选参数,默认为100。
详情
连接 OPC server。返回的结果是一个connection,可以显式的调用 close
函数去关闭,也可以在 reference count 为0的时候自动释放。注意连接远程 OPC 服务器前,需要对 OPC Server 和 OPC Client 两侧都进行 DCOM 配置。详细配置可搜索网上的教程,比如远程连接opc服务器设置。
例子
connection=opc::connect(`127.0.0.1,`Matrikon.OPC.Simulation.1,100)
读取 tag(同步)
语法
opc::readTag(connection, tagName, [table])
参数
- connection 是
connect
函数返回的值。 - tagName 是字符串或字符串的数组,表示 tag 的名称。
- table 是表或表的数组(为数组时,表的个数须与 tag 个数相同),用于存放读取的结果。若是一个表,将所有 tag 的值都插入这张表中;若是多个表,将每个 tag 读取的值分别插入这些表中。若不指定,则返回一张表,表的记录是读取的 tag 值。
详情
读取一个tag的值,使用前需要先建立一个 OPC 连接。
例子
t = table(200:0,`tag`time`value`quality, [SYMBOL,TIMESTAMP, DOUBLE, INT])
opc::readTag(conn, "testwrite.test9",t)
opc::readTag(conn, ["testwrite.test5","testwrite.test8", "testwrite.test9"],t)
tm = table(200:0,`time`tag1`quality1`tag2`quality2, [TIMESTAMP,STRING, INT,INT,INT])
opc::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])
opc::readTag(conn, ["testwrite.test1","testwrite.test4", "testwrite.test9"],[t1,t2,t3])
写入 tag(同步)
语法
opc::writeTag(connection, tagName, value)
参数
- connection 是
connect
函数返回的值。 - tagName 是字符串或数组,表示tag的名称。
- value 是tag的值或数组。
详情
写入一个或一组tag的值。如果写入类型错误,会报异常。
例子
opc::writeTag(conn,"testwrite.test1",[1.112,0.123,0.1234])
opc::writeTag(conn,["testwrite.test5","testwrite.test6"],[33,11])
订阅
语法
opc::subscribe(connection, tagName, handler)
参数
- connection 是connect函数返回的值。
- tagName 是一个字符串或字符串数组,表示tag的名称。
- handler 是数据发生变化时调用的回调函数或表。
详情
订阅tag的值
例子
t1 = table(200:0,`tag`time`value`quality, [SYMBOL,TIMESTAMP, STRING, INT])
conn1=opc::connect(`127.0.0.1,`Matrikon.OPC.Simulation.1,100)
opc::subscribe(conn1,".testString", t1)
t2 = table(200:0,`tag`time`value`quality, [SYMBOL,TIMESTAMP, DOUBLE, INT])
conn2=opc::connect(`127.0.0.1,`Matrikon.OPC.Simulation.1,100)
opc::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 = opc::connect(`127.0.0.1,`Matrikon.OPC.Simulation.1,10)
opc::subscribe(conn10,".testBool", callback1{t3})
查询订阅
语法
opc::getSubscriberStat()
参数
- 无。
详情
查询所有订阅信息。返回的结果是一个包含8列的表,分别是:"subscriptionId", 表示订阅标识符;"user",表示建立订阅的会话用户; "host", 表示 OPC server 的地址; "serverName", 表示 OPC server 的名称; "tag", 表示订阅标签; "createTimestamp", 表示可以订阅建立时间;"receivedPackets",表示订阅收到的消息报文数;"errorMsg",表示订阅的最新错误信息。
例子
t=opc::getSubscriberStat()
for(sub in t[`subscriptionId]){
opc::unsubscribe(sub)
}
取消订阅
语法
opc::unsubcribe(subscription)
参数
- subscription是
connect
函数返回的值或getSubscriberStat
返回的订阅标识符。
详情
取消client的订阅。
例子
opc::unsubcribe(connection)
关闭连接
语法
opc::close(connection)
参数
- connection 是
connect
函数返回的值。
详情
断开与OPC server的连接。
例子
opc::close(connection)
附录:(预)编译安装(可选)
如果不通过插件市场安装插件,也可以选择预编译安装或编译安装方式。OPC插件依赖OPC核心组件,两种方式都要先安装 OPC 核心组件。
OPC核心组件安装
插件依赖 OPC Core Components Redistributable 3.0.106及以上版本。可从 opc core 目录下载 OPC Core Components Redistributable 压缩包。下载后解压,双击 msi 文件即可安装。
预编译安装
用户可以导入预编译好的在Linux 版本 opc 或 Windows 版本 opc 目录下的 OPC 插件。
在 DolphinDB 中执行以下命令加载 OPC 插件(假设安装在 C 盘上):
loadPlugin("C:/path/to/opc/PluginOpc.txt")
请注意,必须指定绝对路径,且路径中使用\\\\
或/
代替\\
编译安装
通过 cmake 和 MinGW 编译
安装cmake。cmake 一个流行的项目构建工具,可以帮你轻松的解决第三方依赖的问题。
安装MinGW环境,带有com 库(应该尽量选择新的版本),目前在64位 win10上用 MinGW-W64-builds-4.3.3版本编译通过。
把 MingGW 和 cmake 的 bin 目录加入 Windows 系统 Path 路径。
git clone https://github.com/dolphindb/DolphinDBPlugin.git
cd DolphinDBPlugin
mkdir build
cd build
cmake ../opc -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release
copy /YOURPATH/libDolphinDB.dll .
mingw32-make clean
mingw32-make
注意 :如果需要指定特定的 MingW 路径,请在 CmakeList.txt 中修改以下语句。
set(MINGW32_LOCATION C://MinGW/MinGW/)
编译之后目录下会产生 libPluginOPC.dll 文件,然后按预编译安装方法导入并加载。