OPCDA转restfulAPI,opcDA(wincc或者kepware)与mes或其它第三方通讯服务

opc/DA配置dcom太蛋疼了,所以开发了个小工具,在opc/da服务器上部署一个服务,将opcda协议转成http restful去调用!!!
源码地址:
https://gitee.com/chun22222222/opcda2restful-api-service
下载打包文件:
https://gitee.com/chun22222222/opcda2restful-api-service/releases/tag/v1.0

前台配置截图

在这里插入图片描述

服务使用说明

方式一 直接执行

直接双击打开,首次打开会生成配置:

[config]
[config.App]
Secret = 'ADSDWW1DSADSADSAWJJK' #密钥
HttpPort = 9022  #服务端口
OpcHost = '127.0.0.1'  #opc所在服务器地址,一般部署在opc服务本机上,这样就不用配置复杂的dcom
OpcServer = 'Kepware.KEPServerEX.V6'  #opc服务名称
KeepConn = 1  #1表示单例模式 2表示每次都重新连接

[config.Zaplog]
Director = 'runtime/log'
Level = 'debug'

# 方式二 注册到服务

需要管理员模式

opcConnector-win32.exe install

接口文档

api说明

读取变量

接口地址:

http://[host:port]/Read

接口方法:POST

请求header需要加参数:

Secret:ADSDWW1DSADSADSAWJJK (密钥为服务端配置)

请求body:

{
    "tags":["GONGDUANNAME","AT_02F12R11/1.OosAct#Value"]
}

返回结果:

{"code":0,"data":{"AT_02F12R11/1.OosAct#Value":{"Value":false,"Quality":64,"Timestamp":"2023-06-26T06:33:48Z"},"GONGDUANNAME":{"Value":"酶解","Quality":192,"Timestamp":"2023-06-22T21:46:30Z"}},"msg":"success"}

写入变量

接口地址:

http://[host:port]/Write

接口方法:POST

请求header需要加参数:

Secret:ADSDWW1DSADSADSAWJJK (密钥为服务端配置)

请求body:

{
    "test.dev1.a": 2,
"tag2":1
}

返回结果:

{
    "code": 0,
    "data": {},
    "msg": "success"
}

更多工控或MES相关问题,添加注明来意!

在这里插入图片描述

### 将 OPC DA 换为 RESTful API 的实现方法和技术方案 #### 实现背景 OPC DA(OLE for Process Control Data Access)是一种用于工业自动化领域访问实时数据的标准接口。然而,由于其依赖于 Windows 平台以及 DCOM 配置复杂等问题,现代应用更倾向于采用基于 HTTP 协议的 RESTful API 来替代传统的 OPC DA 接口[^3]。 --- #### 技术实现方式 ##### 方法一:通过中间件服务桥接 一种常见的解决方案是开发一个中间层服务,该服务能够连接到 OPC DA 服务器并将其数据暴露为 RESTful API。这种中间件可以通过以下步骤构建: 1. **建立 OPC DA 的通信** 使用支持 OPC DA 客户端功能的库框架来读取 OPC 数据源中的信息。例如,Kepware Matrikon 提供了成熟的 OPC Server 解决方案[^4]。 2. **设计 RESTful API 层** 中间件应提供标准化的 RESTful API 接口,允许外部客户端通过简单的 HTTP 请求获取所需的数据。这一步骤需遵循 RESTful 设计的最佳实践,如统一资源定位符 (URL) 和状态码的设计[^2]。 3. **封装数据模型** 返回给客户端的数据应当被适当地结构化和序列化为 JSON XML 格式。这样可以确保不同编程语言环境下的兼容性。 ```python from flask import Flask, jsonify import opcua_client # 假设这是一个自定义模块,用于处理 OPC UA 连接 app = Flask(__name__) @app.route('/opcdarest/<tag>', methods=['GET']) def get_opc_data(tag): try: value = opcua_client.read_tag_value(tag) response = { 'status': 'success', 'data': {'tag': tag, 'value': value} } return jsonify(response), 200 except Exception as e: error_response = { 'status': 'error', 'message': str(e) } return jsonify(error_response), 500 if __name__ == '__main__': app.run(debug=True) ``` 上述代码展示了一个基本的服务端逻辑,其中 `opcua_client` 是假设的一个 Python 库,负责从 OPC DA 获取指定标签的数值,并返回 JSON 结果。 --- ##### 方法二:利用开源项目加速开发 如果不想完全自行开发整个系统,则可以选择现有的开源工具作为起点。例如,“opcda2restful-api-service” 是一个已经完成此类换的小型工具。该项目提供了完整的源码下载链接以及预编译版本,开发者可以直接部署至目标环境中测试运行效果。 - **优点**: 开箱即用,减少了重复造轮子的时间成本; - **缺点**: 可能存在定制需求无法满足的情况,此时仍需要二次开发调整。 --- #### 错误分析调试技巧 在实际操作过程中可能会遇到各种异常情况,比如多个控制器映射冲突导致请求失败的问题。下面是一则典型的错误日志解析案例[^5]: ```json { "code": 1002, "msg": "请求失败", "data": "Ambiguous handler methods mapped for '/qzcsbj/v2/users/4'" } ``` 此问题表明路径 `/qzcsbj/v2/users/{id}` 同时匹配到了两个不同的处理器函数 (`findById(Integer)` vs `findByUsername(String)`) 。解决办法是在 URL 参数类型之间做出清晰区分,或者重新规划路由规则以消除歧义。 --- #### 总结 将 OPC DA 换成 RESTful API 不仅简化了跨平台交互流程,还降低了对特定操作系统环境的要求。无论是借助现有成熟产品还是自主搭建专属网关,都需要充分考虑性能优化、安全性保障等因素才能更好地服务于生产现场的实际应用场景。 ---
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值