数采系统SCADA如何批量快速采集PLC数据

背景基础

数据采集与监视控制系统 SCADA(Supervisory Control And Data Acquisition),作为现代基础的工业控制系统,已经在工业自动化领域得到了广泛的应用。

SCADA主要由三方面组成

  1. 数据采集
  2. 数据分析
  3. 设备控制

数据分析需要大大增加

现代自动化工业控制,对工业自动化的数据量,实时性,以及数据深度的要求逐渐增加,传统的SCADA系统已经开始捉襟见肘了。

问题出现的原因,主要是传统的SCADA系统,基于当时的弱数据分析考量,同时可连接PLC的编程平台比较单一,一般采用JAVA、C#、C++、甚至是VB、Delphi 等偏底层控制的语言进行编写,而这类型语言,在数据分析上(当然和社区群体有很大关系),是偏弱的,远不及2008年后异军突起的Python对数据的分析功能,以及这两年Node.js这类型的强UI语言,可以很容易的对采集到的数进行二次分析和大数据提取。

如果需要用两套或者两套以上的开发语言对SCADA系统进行编码,让数据采集和数据分析鱼与熊掌均可兼得,对于小型的SCADA系统来说,成本意味着成倍的增加。

采集场景的要求

和传统的SCADA系统不同,现在我们需要面临不同类型,不同接口,不同品牌的PLC进行同时数据采集和简单监控,而传统的SCADA可能只针对小部分类型的PLC,从0开始编写底层通讯逻辑,如欧姆龙的PLC,需要编写FINS协议逻辑,三菱的PLC,需要编写MC协议通讯逻辑,传统的SCADA可能只需要面对2~3种PLC,而大型的工控现场,涉及到的PLC种类和品牌可能去到上10种,如果给这些PLC都重新编写通讯逻辑,那无疑是个很大的工作量。

解决方案

LECPServer(Leanboard Equipment Communication Proxy Server)基于 HTTP 服务的PLC读写通讯中间件,可以满足数据高速采集和数据分析,UI编写简单化的需求。

如果你用Python、Node.js、Go,又或者是PHP、R、甚至是 Objece-c 和 MATLAB 这种特殊类型的语言,均可以通过 LECPServer 中间件完成与PLC的读写通讯。

只要这个语言本身携带或者拥有 HTTP Client POST功能的扩展,就可以使用LECPServer了,使用方法也很简单,只需要遵循HTTP POST原则,通过API plc_read_node、plc_read_nodes、plc_write_node、plc_write_nodes,就可高速的对PLC进行数据采集和点位控制了。

使用方法

LECPServer的使用方法也很简单,在设备界面上添加设备,然后通过PLC_DRIVER选择对应的PLC类型和通讯协议,目前LECPServer已经囊括了大部分的PLC通讯协议,包括以下协议

  • OmronFinsNet
  • OmronFinsUdp
  • OmronHostLinkSerial
  • OmronHostLinkCMode
  • MelsecMcNet
  • MelsecMcUdp
  • SiemensS1200Net
  • SiemensS1500Net
  • SiemensS200Net
  • SiemensS200SMARTNet
  • SiemensS400TNet
  • KeyenceMcNet
  • PanasonicMcNet
  • PanasonicMewtocol
  • SchneiderModbusNet

选取了通讯协议后,按照指引,修改设备配置,然后添加需要进行读写的PLC点位,选择点位类型,即可。

接下来我们就可以通过API命令来对PLC点位进行读写了

// 读PLC节点X0000状态
{
    "action":"plc_read_node",
    "node":"NODES.PanMC.X0000"
}

// 写入PLC节点X0000状态为true
{
    "action":"plc_write_node",
    "node":"NODES.PanMC.X0000", 
    "value":true
}

 

LECPServer添加松下PLC设备

 

LECPServer添加松下PLC设备节点

 

LECPServer读写通讯

 以下是 Javascript 通过 LECPServer 读写施耐德M200PLC的点位样例。

// Http 通讯
function http_request_await(url, data) {
    return new Promise((resolve, reject) => {
        $.ajax({
            url: url,
            data: JSON.stringify(data),
            contentType: "application/x-www-form-urlencoded",
            type: 'POST',
            timeout: 2000,
            success: function (response) {
                resolve(response);
            },
            error: function (x, t, m) {
                if (t === "timeout") {
                    reject(t);
                } else {
                    reject(t);
                }
            }
        });
    });
}

// 读取PLC X0000点位,并进行判断
async function plc_read_and_check(){
    try{
        // LECPServer 默认服务端口为 8088
        let rt = http_request_await("http://127.0.0.1:8088", 
                    {
                        "action":"plc_read_node", 
                        "node":"NODES.MODBUS.C0000"
                    });
        rt = JSON.pares(rt);
        if(rt['errcode']==0){
            if(rt['rtval'][0] == true){
                alert("开关打开");
            }else{
                alert("开关关闭");
            }
        }
    }catch(e){
        alert(e);
    }
}

采集速度

官方也提供了 LECPServer 的性能测试,测试环境如下:

  1. CPU INTEL Core I7-1065G7 1.30Ghz处理器
  2. 16GB DDR4 内存
  3. SSD M2 磁盘
  4. Windows10 专业版 1909 64bit 操作系统
  5. 施耐德 TM200CE24R PLC

50个读线程和50个写线程,对于plc_read_node和plc_write_node命令,针对单个读写返回时间在10ms-13ms

50个读线程和50个写线程,对于plc_read_nodes和plc_write_nodes命令,一次控制4个节点,针对单个读写返回时间在20ms-24ms

下载地址与资料

LECPServer的官网站点 http://www.lecpserver.com

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

LECPServer的Github地址 https://github.com/xeden3/LECPServer 

是的,没看错,LECPServer 是完全开源免费的。

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值