WINCC 天气预报功能 掌握实时天气

摘要:官网网址https://www.tianapi.com/ 注册-进入控制台-申请天气接口(按照次数收费) wincc 全局脚本-vbs-editor-标准模块添加代码(如下)下面是7日数据的 Sub GetWeather7Days() Dim http, url, response, i...

官网网址https://www.tianapi.com/
注册-进入控制台-申请天气接口(按照次数收费)




wincc 

全局脚本-vbs-editor-标准模块添加代码(如下)下面是7日数据的






Sub GetWeather7Days()
    Dim http, url, response, i
    Dim dateStr, week, weather, lowest, highest, wind, windsc
    Dim block, key, city

    key = "1289916280853cfeb46036fa5b94ad3b"
    city = "济南"
    url = "https://apis.tianapi.com/tianqi/index?key=1289916280853cfeb46036fa5b94ad3b&city=101120101&type=7"

    Set http = CreateObject("MSXML2.XMLHTTP")
    http.Open "GET", url, False
    http.Send

    If http.Status = 200 Then
        response = http.ResponseText

        For i = 1 To 7
            dateStr = ExtractJsonField(response, """date"":""", i)
            week = ExtractJsonField(response, """week"":""", i)
            weather = ExtractJsonField(response, """weather"":""", i)
            lowest = ExtractJsonField(response, """lowest"":""", i)
            highest = ExtractJsonField(response, """highest"":""", i)
            wind = ExtractJsonField(response, """wind"":""", i)
            windsc = ExtractJsonField(response, """windsc"":""", i)

            block = dateStr & " " & week & " " & weather & " " & lowest & "~" & highest  &  "   "  & wind & windsc

            Select Case i
     Case 1: HMIRuntime.ActiveScreen.ScreenItems("Day1").Text = block
    Case 2: HMIRuntime.ActiveScreen.ScreenItems("Day2").Text = block
    Case 3: HMIRuntime.ActiveScreen.ScreenItems("Day3").Text = block
    Case 4: HMIRuntime.ActiveScreen.ScreenItems("Day4").Text = block
    Case 5: HMIRuntime.ActiveScreen.ScreenItems("Day5").Text = block
    Case 6: HMIRuntime.ActiveScreen.ScreenItems("Day6").Text = block
    Case 7: HMIRuntime.ActiveScreen.ScreenItems("Day7").Text = block
            End Select
        Next
    Else
        For i = 1 To 7
           HMIRuntime.ActiveScreen.ScreenItems("Day" & i).Text = "连接失败"
        Next
    End If
End Sub

Function ExtractJsonField(str, field, index)
    Dim pos, count, iStart, iEnd
    count = 0
    pos = 1

    Do
        pos = InStr(pos, str, field)
        If pos = 0 Then
            ExtractJsonField = "N/A"
            Exit Function
        End If
        count = count + 1
        If count = index Then
            iStart = pos + Len(field)
            iEnd = InStr(iStart, str, """")
            ExtractJsonField = Mid(str, iStart, iEnd - iStart)
            Exit Function
        End If
        pos = pos + Len(field)
    Loop
End Function

 

动作里添加触发每分钟执行一次 我是定时每天早上5点触发(脚本如下)

Option Explicit
Function action


Dim nowTime, nowHour, nowMin, todayStr, tagLastRun

nowTime = Now
nowHour = Hour(nowTime)
nowMin = Minute(nowTime)
todayStr = CStr(Date)

' 建议使用内存变量存储上次运行日期,假设变量名为 "LastWeatherRun"
Set tagLastRun = HMIRuntime.Tags("LastWeatherRun")

' 每天 5:00 执行一次
If nowHour = 5 And nowMin = 0 Then
    If tagLastRun.Read <> todayStr Then
        Call GetWeather7Days()
        tagLastRun.Write todayStr
    End If
End If

End Function




页面做静态文本  对象名称 分别Day1,Day2,Day3-7,分别对应7日的天气 (见下图)