【NodeRed】與PLC通訊

216 阅读1分钟

1. Env

LECPServer是免安装的,直接放到文件夹内即可运行,运行需要下面的支持环境

  • Microsoft .NET Framework 4.6.1或以上
  • Visual C++ Redistributable Packages for Visual Studio 2013

LECPServer: www.lecpserver.com/downloads/L…

Microsoft .NET Framework 4.6.1 : dotnet.microsoft.com/download/do…

Visual C++ Redistributable Packages for Visual Studio 2013 www.microsoft.com/zh-cn/downl…

LECPServer的官网站点 www.lecpserver.com

LECPServer的使用手册 www.lecpserver.com:3001

LECPServer的Github地址 github.com/xeden3/LECP…

2. Js Code

 
// 获取当前时间 yyyy-mm-dd hh:mm:ss 格式
function get_datatime_by_yyyymmddhhmmss() {
    let d = new Date();
    return d.getFullYear() + "-" + d.getMonth() + "-" + d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds();
}
 
// 将获得的值转成echart的data格式
function node_val_to_data(v) {
    let now = new Date();
    return {
        name: now.toString(),
        value: [
            get_datatime_by_yyyymmddhhmmss() ,
            Math.round(v)
        ]
    };
}
 
option = {
    title: {
        text: '动态数据 + 时间坐标轴'
    },
    tooltip: {
        trigger: 'axis',
        formatter: function (params) {
            params = params[0];
            var date = new Date(params.name);
            return date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear() + ' : ' + params.value[1];
        },
        axisPointer: {
            animation: false
        }
    },
    xAxis: {
        type: 'time',
        splitLine: {
            show: true
        }
    },
    yAxis: {
        type: 'value',
        boundaryGap: [0, '100%'],
        splitLine: {
            show: true
        }
    },
    series: [{
        name: '模拟数据',
        type: 'line',
        showSymbol: false,
        hoverAnimation: false,
        data: data
    }]
};
 
// 数据 array
var data = [];
 
setInterval(function () {
    // LECPServer的WebAPI服务地址 端口默认为8088
    let url = "http://127.0.0.1:8088";
    $.ajax({
        url: url,
        // 读取PLC节点数据
        data: JSON.stringify({
            "action":"plc_read_node", 
            "node":"NODES.CP1H.D0000"
        }),
        contentType: "application/x-www-form-urlencoded",
        type: 'POST',
        timeout: 2000,
        success: function (response) {
            // 解析节点数据
            // 数据长度是1,因此拿v[0]的数据即可
            v = JSON.parse(response);
            data.push(node_val_to_data(v['rtval'][0]));
        },
        error: function (x, t, m) {
            console.log(x);
        }
    });
    // 刷新EChart
    myChart.setOption({
        series: [{
            data: data
        }]
    });
}, 500);