从Siemens S7 1500 PLC上的Web服务器页面读取JSON结构

时间:2015-09-16 19:48:18

标签: javascript html json plc siemens

我一直在使用HTML和javascript来创建图形网页,以显示来自Siemens S7 1500 PLC的数据。当请求信息的网页由PLC Web服务器提供并且与具有JSON结构的文件在同一目录中时,我一直在使用$ .getJSON命令成功读取PLC中的值。期望值。

我有一台PC通过以太网连接到我的PLC,并希望在PC上本地运行一个网页,并从PLC网络服务器读取页面提供的值。

当前要读取的数据位于Web服务器上的同一目录中时,我当前用于读取值的代码如下所示:

<script type="text/javascript">
$(document).ready(function(){

    $.ajaxSetup({ cache: false });

    setInterval(function() {
        $.getJSON("inputs.htm", function(data){

            // Variable Declaration
            engineSpeed =                       data.engineSpeed;
            engineFuelLevelScaled =             data.engineFuelLevelScaled;
            powerEndDischargePressurePSI =      data.powerEndDischargePressurePSI;
            powerEndDischargeFlowRateBBLM =     data.powerEndDischargeFlowRateBBLM;
            powerEndSuctionPressurePSI =        data.powerEndSuctionPressurePSI;
        });

    },1000);
});

</script>

&#34; inputs.htm&#34;文件很简单:

{
"engineSpeed" : ":="WebData".engineSpeed:",
"engineFuelLevelScaled" : ":="WebData".engineFuelLevelScaled:",
"powerEndDischargePressurePSI" : ":="WebData".powerEndDischargePressurePSI:",
"powerEndDischargeFlowRateBBLM" : ":="WebData".powerEndDischargeFlowRateBBLM:",
"powerEndSuctionPressurePSI" : ":="WebData".powerEndSuctionPressurePSI:"
}

其中&#34; WebData&#34;是一个使用我的PLC上的值更新的数据块。

我很满意这是如何运作的,但当我尝试在本地运行一个页面来查看&#34; inputs.htm&#34;页面,它没有工作。

我的PLC的IP地址为172.17.2.11,我已将$ .getJSON更改为:

$.getJSON("http://172.17.2.11/awp/GeminiOnline/inputs.htm", function(data){

$.getJSON("172.17.2.11/awp/GeminiOnline/inputs.htm", function(data){

虽然两者都没有奏效。我知道这些是正确的网址,因为我可以访问其中任何一个并阅读我试图访问的值。

我在PLC的Web服务器上设置了权限,允许所有用户完全访问,因此不再需要登录。我想知道是否有一个缺失的步骤或$ .getJSON结构的某些限制阻止我这样阅读。

任何输入都将不胜感激。如果您有任何其他方法可以在PC上本地托管的页面中读取当前的PLC值,这也是有用的。

提前致谢。

1 个答案:

答案 0 :(得分:2)

我最终解决了我的问题,尽管它需要一种完全不同的方法来攻击它。它不喜欢我的跨域请求,并尝试让JSONp工作,我无法管理它。在同事的帮助下,我们开发了以下内容:

<script>
    function httpGet(theUrl)
    {
    // Calls the initial request
        xmlhttp = new XMLHttpRequest();
        var date = new Date();
        xmlhttp.open("GET", theUrl + "?" + date.getTime(), false ); // Note that the + "?" + data.getTime() is used to trick the browser from using the cached results from a previous page request
        xmlhttp.send(); 

        // Sets a timing interval
        setInterval(function(){
        // If the request was successful, then parse the string and start a new request
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                // Extract the JSON String
                var jsonString = xmlhttp.responseText;
                data = $.parseJSON(jsonString);
                //YOUR CODE CAN GO HERE, USING THE DATA AS YOU WOULD REGULARLY
            }
        }, 1000);
    }

    httpGet("http://172.17.2.10/awp/GeminiOnline/inputs.htm");

无论如何,使用XMLHttpRequest()和其他函数,我能够从我的其他页面读取数据,就像我之前使用的.getJSON()一样。