WINCC處理JSON數據的方法

如今隨着互聯網的發展,很多系統以web爲平臺,基於JSON交換數據,來提供信息服務。本文通過介紹vbs腳本讀取中央氣象臺(http://www.nmc.cn/)提供的氣象數據,掌握wincc處理JSON數據的方法。

 

1.關於JSON

 

 

介紹

 

JSON(JavaScript Object Notation,JavaScript對象表示法)是一種輕量級的數據交換語言,用來傳輸由屬性值或者序列性的值組成的數據對象。JSON 數據格式與語言無關,源於JavaScript。但當前很多編程語言都支持 JSON 格式數據的生成和解析。JSON 的官方 MIME 類型是 application/json,文件擴展名是 .json,被IETF(Internet Engineering Task Force)定義爲RFC 4627標準。

 

語法規則

 

JSON 使用 JavaScript 語法來描述數據對象,其語法是 JavaScript 對象表示語法的子集:

 

  • 數據在名稱/值(key/value)對中

  • 數據由逗號分隔

  • 大括號保存對象

  • 中括號保存數組

 

如瀏覽器訪問http://www.nmc.cn/f/rest/real/58238,返回的JSON數據包含weather等多個對象,weather又包含temperature等多個 key/value(鍵/值)對。其中key 必須是字符串,value 可以是合法的 JSON 數據類型(字符串, 數字, 對象, 數組, 布爾值或 null)。

 

 

應用領域

 

WEB開發:

JSON最開始被廣泛的應用於WEB應用的開發。不過當前JSON使用在JavaScript、Java、Node.js應用的情況比較多,PHP、C#等開發的WEB應用主要還是使用XML。

NoSQL數據庫:

相對於傳統的關係型數據庫,一些基於文檔存儲的NoSQL非關係型數據庫選擇JSON作爲其數據存儲格式,比較出名的產品有:MongoDB、CouchDB、RavenDB等。

 

與XML

 

JSON與XML最大的不同在於XML是一個完整的標記語言,而JSON不是。這使得XML在程序判讀上需要比較多的功夫。主要的原因在於XML的設計理念與JSON不同。XML利用標記語言的特性提供了絕佳的延展性(如XPath),在數據存儲、擴展及高級檢索方面具備對JSON的優勢,而JSON則由於比XML更加小巧,以及瀏覽器的內建快速解析支持,使得其更適用於網絡數據傳輸領域。對於 AJAX 應用程序來說,JSON 比 XML 更快更易使用。

 

2.Vbs解析JSON

 

方法:vbs中調用Microsoft ScriptControl(msscript.ocx)com組件對象,通過ScriptControl接口利用js實現JSON解析。

 

msscript.ocx

 

Microsoft(R) Script 控件使用戶可以創建運行任何 ActiveX(R) scripting 腳本引擎,例如 Microsoft(R) Visual Basic (R) Scripting Edition 或Microsoft(R) JScript(TM) 的應用程序。用戶可以將任何 Automation 對象的對象模型添加到 Script 控件中,這樣該對象的方法和屬性就可以爲 scripting 引擎所使用。

 

ScriptControl接口

 

如下圖,ScriptControl接口包括了一系列方法屬性事件

 

 

一般使用方法:

1、在程序中加入ScriptControl

2、定義一個ScriptControl的實例

3、調用AddCode等方法向腳本引擎中加入要執行的腳本。

4、調用Run執行要執行的腳本函數。

 

vbs腳本

 

爲了方便腳本調用,可以把創建MSScriptControl.ScriptControl對象執行js做成一個函數

 

 

示例腳本:從中央氣象臺(http://www.nmc.cn/)讀取南京地區實時氣溫值

Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)

Dim objHttp
Dim URL
Dim scriptCtrl
Dim Request_JSON_Data
Dim objJSON

URL="http://www.nmc.cn/f/rest/real/58238"

Set objHttp = CreateObject("MSXML2.XMLHTTP.6.0")

On Error Resume Next 

objHttp.open "GET",URL,False 

If Err Then  
  HMIRuntime.Trace Err.Description & " [0x" & Hex(Err.Number) & "]" & vbCrLf
  Err.Clear
End If

objHttp.setRequestHeader "Content-Type", "application/json"
objHttp.send

If Err Then  
  HMIRuntime.Trace Err.Description & " [0x" & Hex(Err.Number) & "]" & vbCrLf 
  Err.Clear
End If

Set objJSON = parseJSON (objHttp.responseText,scriptCtrl)

If Err Then  
  HMIRuntime.Trace Err.Description & " [0x" & Hex(Err.Number) & "]" & vbCrLf
  HMIRuntime.Trace  "............." & vbCrLf
  Err.Clear
End If

HMIRuntime.Trace objJSON.weather.temperature & vbCrLf

If Err Then  
  HMIRuntime.Trace Err.Description & " [0x" & Hex(Err.Number) & "]" & vbCrLf
  Err.Clear
End If

Set objHttp = Nothing 
Set scriptCtrl = Nothing 

End Sub

 

更多精彩內容,可關注本人微信公衆號scadaclub

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章