西門子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。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905443.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905443.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905443.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開源長期主義:淺談DeepSeek技術主張與早期論文

開源、長期主義與DeepSeek的技術愿景 ©作者|格林 來源|神州問學 導入:Deepseek在早期就開源了許多優秀的指令模型與對話模型,并發布了多篇論文。以下,我們將基于Deepseek在早期發布的6篇論文,來梳理Deepseek公司的技術路徑與…

TTS-Web-Vue系列:Vue3實現內嵌iframe文檔顯示功能

🖼? 本文是TTS-Web-Vue系列的新篇章,重點介紹如何在Vue3項目中優雅地實現內嵌iframe功能,用于加載外部文檔內容。通過Vue3的響應式系統和組件化設計,我們實現了一個功能完善、用戶體驗友好的文檔嵌入方案,包括加載狀態…

Elasticsearch索引設計與調優

一、分片策略設計 1.?分片容量規劃 單分片容量建議30GB(日志場景可放寬至100GB),避免超大分片引發查詢延遲。分片總數計算公式:總數據量 / 30GB 1.2(20%余量應對未來增長)。主分片數創建后不可修改,副本分片數支持動態調整。2.?分片分布優化 PUT logs-2025 { &qu…

Spring AI 集成 Mistral AI:構建高效多語言對話助手的實戰指南

Spring AI 集成 Mistral AI:構建高效多語言對話助手的實戰指南 前言 在人工智能應用開發領域,選擇合適的大語言模型(LLM)與開發框架至關重要。Mistral AI 憑借其高效的多語言模型(如 Mistral-7B、Mixtral-8x7B 等&am…

從新手到高手:全面解析 AI 時代的「魔法咒語」——Prompt

引言:AI 時代的「語言煉金術」 在人工智能技術突飛猛進的今天,我們正在經歷一場堪比工業革命的生產力變革。從聊天機器人到圖像生成,從數據分析到自動化寫作,AI 模型正在重塑人類與信息交互的方式。而在這一切背后,隱…

MySQL 8.0安裝(壓縮包方式)

MySQL 8.0安裝(壓縮包方式) 下載安裝包并解壓 下載 https://dev.mysql.com/downloads/mysql/可關注“后端碼匠”回復“MySQL8”關鍵字獲取 解壓(我解壓到D:\dev\mysql-8.4.5-winx64目錄下) 創建mysql服務 注意,這步之前一定要保證自己電…

免費Ollama大模型集成系統——Golang

Ollama Free V2 Web 功能實現:界面交互與后端邏輯 一、Web 界面概述 Ollama Free V2 的 Web 界面提供了豐富的交互功能,包括模型選擇、圖片上傳、歷史記錄查看等。界面使用 Bootstrap 進行布局,結合 JavaScript 實現動態交互。 二、前端界…

【AI】人工智能數據標注細分和商業機會

一、數據標注的常見方法 數據標注是為人工智能模型訓練提供高質量標簽的過程,根據數據類型(圖像、文本、音頻、視頻等)的不同,標注方法也有所差異: 1. 圖像標注 分類標注:為圖像分配類別標簽&#xff08…

lanqiaoOJ 652:一步之遙 ← 擴展歐幾里得定理

【題目來源】 https://www.lanqiao.cn/problems/652/learning/ 【題目背景】 本題為填空題,只需要算出結果后,在代碼中使用輸出語句將所填結果輸出即可。 【題目描述】 從昏迷中醒來,小明發現自己被關在X星球的廢礦車里。礦車停在平直的廢棄…

HTTP / HTTPS 協議

目錄 一、前言: 二、Fiddler 抓包工具: 三、http 協議: 1、http 請求: 1.(1)請求行: 1、(2) 請求頭: 1、(3) 請求正文: 2、http 響應: 2、(1) 狀態碼&#x…

使用泛型加載保存數據

文章速覽 泛型泛型概述定義優點 實例加載數據保存數據 一個贊,專屬于你的足跡! 泛型 泛型概述 泛型(Generics)是 C# 中一種重要的編程特性,它允許程序員編寫靈活且類型安全的代碼。通過使用泛型,可以創建…

Redis內存淘汰策略和過期鍵刪除策略有哪些?

Redis 提供 8 種內存淘汰策略,以下是詳細解析及場景建議: 一、核心策略解析 noeviction (默認策略) 機制:內存滿時拒絕新寫入操作,返回錯誤優勢:絕對數據安全場景:金融交易系統、醫療數據存儲 allkeys-lr…

【C/C++】自定義類型:結構體

文章目錄 前言自定義類型:結構體1.結構體類型的聲明1.1 結構體回顧1.1.1 結構的聲明 1.1.2 結構體變量的創建和初始化1.2 結構的特殊聲明1.3 結構的自引用 2.結構體內存對齊2.1 對?規則2.2 為什么存在內存對齊?2.3 修改默認對?數 3. 結構體傳參4.結構體…

PPO算法:一種先進的強化學習策略

什么是PPO算法? PPO(Proximal Policy Optimization)是一種增強學習算法,主要應用于解決連續控制任務。PPO算法在2017年由OpenAI提出,旨在解決傳統策略梯度方法在連續控制任務中面臨的挑戰。PPO算法通過引入一個近似目…

OpenCV實現數字水印的相關函數和示例代碼

OpenCV計算機視覺開發實踐:基于Qt C - 商品搜索 - 京東 實現數字水印的相關函數 用OpenCV來實現數字水印功能,需要使用一些位操作函數,我們需要先了解一下這些函數。 1. bitwise_and函數 bitwise_and函數是OpenCV中的位運算函數之一&…

基于Python的計算機科學研究話題管理系統的設計與實現 - 爬蟲

標題:基于Python的計算機科學研究話題管理系統的設計與實現 - 爬蟲 內容:1.摘要 本文聚焦于基于Python的計算機科學研究話題管理系統的爬蟲部分。背景是隨著計算機科學研究的快速發展,相關話題數據海量且分散,人工管理效率低。目的是設計并實現一個能高…

告別手動解析!借助 CodeBuddy 快速開發網頁源碼提取工具

作為一名長期從事 Web 開發的程序員,我們在日常工作中,時不時會需要查看網頁的源代碼。這么做的目的通常是為了排查前端渲染的問題、分析接口返回的數據結構,或者就是單純地想快速提取頁面中的某些信息,比如文章鏈接、圖片地址&am…

為什么要在 input() 后加 .strip()?

strip() 是 Python 字符串的一個方法,用于去除字符串開頭和結尾的空白字符(包括空格、制表符 \t、換行符 \n 等)。 為什么要在 input() 后加 .strip()? 用戶在輸入時,可能會不小心在開頭或結尾輸入空格,例…

【日擼 Java 300行】Day 14(棧)

目錄 Day 14:棧 一、棧的基本知識 二、棧的方法 1. 順序表實現棧 2. 入棧 3. 出棧 三、代碼及測試 拓展: 小結 Day 14:棧 Task: push 和 pop 均只能在棧頂操作.沒有循環, 時間復雜度為 O(1). 一、棧的基本知識 詳細的介…

dotnet core c#調用Linux c++導出函數

1.聲明C++導出函數 platform_export.h // // Created by dev on 5/6/25. //#ifndef PLATFORM_EXPORT_H #define PLATFORM_EXPORT_H #if defined(_WIN32)#ifdef LIB_EXPORTS#define LIB_API __declspec(dllimport)#else#define LIB_API __declspec(dllimport)#endif #else#ifde…