当前位置: 首页 > news >正文

西门子WinCC Unified PC的GraphQL使用手册

TIA V20版本:添加用户
在这里插入图片描述

添加角色,并充分授权,尤其是GraphQL的读写权限。
在这里插入图片描述
通过SIMATIC Runtime Manager启动wincc unifi工程。
在这里插入图片描述
打开浏览器,访问本地的https://localhost/graphql/,运行正常如图:
在这里插入图片描述

连接外网,打开https://studio.apollographql.com/sandbox/explorer工具,在线调试GraphQL接口:
在这里插入图片描述
打开查询指令窗口
在这里插入图片描述

第一步,请求login获取token:

mutation{
login(username:"wincc",password:"Wincc12345"){
token
user{
fullName
id
}
error{
code
description
}
}
}

在这里插入图片描述
获取token,后面需要添加到headers里:Authorization Bearer e68814f546ed1360cb533ed7ecf77ae0。
如图所示:
在这里插入图片描述
第二步:查询获取变量值Tag_2是变量名称。

query Query{
tagValues(names:["Tag_2"]){
name
value{
value
timestamp
quality{
quality
subStatus
}
}
error{
code
description
}
}
}

在这里插入图片描述
第三步,写入一个值0:

mutation exampleTagValueWrite {
writeTagValues(input:[
{
name:"Tag_2",
value: "0"
}
], quality:{quality: GOOD_NON_CASCADE}){
name
error{
code
description
}
}
}

在这里插入图片描述
第四步,订阅一个变量:

subscription subscription{
tagValues(names:["Tag_2"]){
value{
value
timestamp
quality{
quality
limit
subStatus
}
}
error{
description
}
}
}
}

在这里插入图片描述
GraphQL通过python客户端读取和写入变量:

from gql import gql, Client
from gql.transport.requests import RequestsHTTPTransporturl = 'http://localhost:4000/graphql'
USERNAME = "wincc"
PASSWORD = "Wincc12345"
TAG_NAME = "Tag_2" 
transport = RequestsHTTPTransport(url=url,verify=False, retries=3)
client = Client(transport=transport, fetch_schema_from_transport=True)query = '''
mutation{
login(username:"%s",password:"%s"){
token
user{
fullName
id
}
error{
code
description
}
}
}
'''variable_values = {'Authorization': 'Bearer 2d263aa90155e66bb24f7a4604153ee7'}  # 如果有变量的话
result = client.execute(gql(query % (USERNAME, PASSWORD)), variable_values=variable_values)
token = result['login']['token']
headers={'Authorization': 'Bearer ' + token}
transport = RequestsHTTPTransport(url=url,headers=headers,verify=False, retries=3)
client = Client(transport=transport, fetch_schema_from_transport=True)query = '''
mutation exampleTagValueWrite {
writeTagValues(input:[
{
name:"%s",
value: "0"
}
], quality:{quality: GOOD_NON_CASCADE}){
name
error{
code
description
}
}
}
'''
result = client.execute(gql(query))
print(result)
query = '''
query Query{
tagValues(names:["%s"]){
name
value{
value
timestamp
quality{
quality
subStatus
}
}
error{
code
description
}
}
}
'''
result = client.execute(gql(query % (TAG_NAME)))
print(result)

GraphQL通过python客户端订阅变量:

import asyncio
from gql import Client, gql
from gql.transport.websockets import WebsocketsTransport
from websockets.exceptions import ConnectionClosedGRAPHQL_WS_URL = "wss://localhost:4000/graphql"
TAG_NAME = "Tag_2" 
AUTH_TOKEN = "1a64a7289995f7da6a9baa0cd5eb93db"headers = {'Authorization': 'Bearer ' + AUTH_TOKEN}subscription = gql("""subscription {tagValues(names: ["%s"]) {namevalue {value}notificationReason}}
""" % TAG_NAME)async def main():transport = WebsocketsTransport(GRAPHQL_WS_URL, init_payload=headers)counter = 0try:# Using `async with` on the client will start a connection on the transport# and provide a `session` variable to execute queries on this connectionasync with Client(transport=transport,fetch_schema_from_transport=True,) as session:async for result in session.subscribe(subscription):print(result)counter += 1if counter == 1000:print ("Closing connection from the client")          breakexcept ConnectionClosed:print ("Connection closed by the server")asyncio.run(main())

注意:python依赖库安装pip install gql。

相关文章:

  • [python] python中的魔法方法和属性
  • Spring Boot 博客项目深度分析报告
  • k8s监控方案实践补充(一):部署Metrics Server实现kubectl top和HPA支持
  • iOS WebView和WKWebView怎么调试?
  • 行业趋势与技术创新:驾驭工业元宇宙与绿色智能制造
  • Large-Scale Language Models: In-Depth Principles and Pioneering Innovations
  • 【Linux网络】————详解TCP三次握手四次挥手
  • 【android bluetooth 协议分析 12】【A2DP详解 1】【车机侧蓝牙音乐免切源介绍】
  • AI时代的弯道超车之第八章:具体分享几个AI实际操作方法和案例
  • Kotlin Multiplatform与Flutter、Compose共存:构建高效跨平台应用的完整指南
  • [Spring]-组件的生命周期
  • 碎片笔记|AI生成图像溯源方法源码复现经验(持续更新中……)
  • 设计模式-中介者模式
  • 研读论文《Attention Is All You Need》(4)
  • 【Oracle专栏】清理告警日志、监听日志
  • 如何创建自动工作流程拆分Google Drive中的PDF文件
  • 【kafka】kafka概念,使用技巧go示例
  • 【!!!!终极 Java 中间件实战课:从 0 到 1 构建亿级流量电商系统全链路解决方案!!!!保姆级教程---超细】
  • 试除法判断素数优化【C语言】
  • 解决docker alpine缺少字体的问题 Could not initialize class sun.awt.X11FontManager
  • 上海锦江乐园摩天轮正在拆除中,预计5月底6月初拆完
  • 人民网三评“网络烂梗”:莫让低级趣味围猎青少年
  • 李家超:明日起香港特区护照持有人可免签入境阿联酋
  • 陕西河南山西等地将现“干热风”灾害,小麦产区如何防范?
  • 多地警务新媒体整合:关停交警等系统账号,统一信息发布渠道
  • 体坛联播|安切洛蒂执掌巴西男足,字母哥尝试离开雄鹿