背景基础
数据采集与监视控制系统 SCADA(Supervisory Control And Data Acquisition),作为现代基础的工业控制系统,已经在工业自动化领域得到了广泛的应用。
SCADA主要由三方面组成
- 数据采集
- 数据分析
- 设备控制
数据分析需要大大增加
现代自动化工业控制,对工业自动化的数据量,实时性,以及数据深度的要求逐渐增加,传统的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
}
以下是 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 的性能测试,测试环境如下:
- CPU INTEL Core I7-1065G7 1.30Ghz处理器
- 16GB DDR4 内存
- SSD M2 磁盘
- Windows10 专业版 1909 64bit 操作系统
- 施耐德 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 是完全开源免费的。