python3和nodejs可用的OPC-DA客户端(在自己使用的过程中进行了一些更新)
更新内容如下
之前写入值需要知道索引,现在直接key-value即可
之前读取的值是字符串,浮点数还需要设置小数点几位,现在是直接引用OPC_Client.dll变量
删除所有无关紧要的文件,仅仅保留OPC_Client.dll和2个示例。
使用方法
下载附件中的“OPC_Client.dll”,然后按下方python和nodejs例程使用即可(必须安装32位软件):
python3示例( 版本需要pythonnet支持,目前最高python3.11 )
python3 32位需要的库 : pip install pythonnet
# pip install pythonnet
import time
import clr
clr.AddReference("OPC_Client")
if True: # 防止格式化,跑到上面去了
import OPC_Client
opc = OPC_Client.Startup()
opc.serverip = "localhost" # 远程访问填写ip
opc.servername = "Knight.OPC.Server.Demo"
opc.updaterate = 500 # 更新速率ms
opc.items = ["a.a.a", "a.a.b", "a.a.c", "a.a.d"] # 变量名列表
opc.OpcConnect()
while True:
time.sleep(0.5)
opc.PyWrite([("a.a.d", 1), ("a.a.c", 1)]) # 写入opc
print(opc.values["a.a.a"]) # 常规取值
for v in opc.values: # 如果需要遍历,如下
print(v.Key, v.Value)
opc.StopOpc() # 断开opc连接
nodejs示例(支持最新nodejs)
nodejs :npm i edge-js
// npm i edge-js
const edge = require('edge-js');
const opc = edge.func('OPC_Client.dll');
const start = {
evt: 'start',
serverip: 'localhost', //远程访问填写IP
servername: 'Knight.OPC.Server.Demo',
updaterate: 500, //更新速度
items: ["a.c.f", "a.c.d", "a.c.c", "a.b.d", "a.b.f", "a.b.e", "a.b.h", "a.b.b"],
onDataChange: DataChange //注册回调函数
}
opc(start)
function DataChange(res) {
console.log(res);
}
setInterval(() => {
opc({ evt: 'write', items: { 'a.c.f': 0.0 } })
}, 1000);
// opc({ evt: 'stop'})