1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > JavaScript如何对欧姆龙 三菱 施耐德等PLC进行读写通讯控制

JavaScript如何对欧姆龙 三菱 施耐德等PLC进行读写通讯控制

时间:2020-04-07 03:07:33

相关推荐

JavaScript如何对欧姆龙 三菱 施耐德等PLC进行读写通讯控制

思考

说到 Javascript,大部分人都会将其和网页Web,特效,前端挂钩,但随着UI技术的不断发展,以及计算机摩尔定律的推进, Javascript 也逐步开始承担更多的功能,如支持游戏的3D引擎 Three.js 、Babylon.js,支持深度学习的引擎TensorFlow.js 、keras.js ,还有大型的数据分析和可视化库D3.js 、Aperture JS。所以通过 Javascript 完成的事情会越来越多。

再随着 Node.js的发展,用Javascript来完成一个工业控制领域的专业系统也不是不可能的。

可能传统的思维,对于工业控制和数据分析这部分,一般会使用Java、C#这种老牌的开发工具来进行开发,但明显对于现在的生产环境,Java或者C#的可变性,以及其扩展工具的丰富程度,远没有Javascript、Python这类型的高了,混合编程是个很好的解决方案,但 Java 和 C# 这种开发工具的学习成本,也不得不说比 Javascript 高多了。

我们工业自动化项目组就使用了 PHP 和 Python 完成了一整套MES系统(制造业执行系统),并成功的实施在多个工厂和厂区的项目中,其开发,实施与运维成本分别比传统Java、C#的低上40%、30%、15%;以后在工业自动化的项目上,通过 Javascript出现类似三维家,微信小程序这种行业颠覆的解决方案的公司,也并不是不可能,可能你会在未来不久, 就会看到通过纯 Javascript Webbrowser 机制完成的SCADA系统、MES系统,WCS系统。

目前情况

工业自动化绕不开一个关键元素就是PLC,不管是机器人,采集系统,还是输送线,单机设备,PLC进行电气化控制是现在的金标准,而与互联网的解决方案不一样,PLC并没有一个标准的控制模式,也就是说没有一个标准的通讯协议,每家PLC的厂家都为了打造自己的壁垒,而创建了千奇百怪的通讯协议,如欧姆龙的FINS协议和C-Mode协议,三菱的MC协议,松下的Mewtocol协议,西门子的S7系列的通讯协议,还有施耐德的Modbus协议(题外话,Modbus就是施耐德创立的协议标准),而工业自动化现场,不同的设备厂家会使用不同品牌,不同型号的PLC,而且连接方式也有不同,如RS232链路的,RS485链路的,以太网链路的。

这个时候,通讯的中间件就应运而生,这类型的通讯中间件,也叫组态软件,如知名的 KepServer、Matrikon(好像我也就只知道这两个),其可以通过不同的协议与PLC进行连接,并且通过OPCUA协议开放出读写控制权限给第三方系统,又或者放到数据库某张表上,与其他系统共享点位。

如图 方案1 、方案2;因此,这里的第三方系统,则无法使用Javascript直接完成,因为 Javascript for Browser 并没有OPCUA、OPCDA和数据库的支持

通过Javascript与PLC进行通讯

LECPServer是一个开源项目,他将OPCUA、OPCDA和数据库的中间接口,换成了更有利于互联网方式的 WebAPI 服务,所以只需要通过HTTP POST ,就可以通过纯 JS 代码,完成PLC通讯、数据采集、系统控制和监控展示。

LECPServer 全称 Leanboard Equipment Communication Proxy Server 是一款基于 JLean 框架开发的高性能工业用组态服务软件,可以通过该组态软件,链接市面上90%的PLC,通过HTTP协议通联PLC的读写,使用户能够通过一个直观的用户界面来连接、管理、监视和控制不同的自动化设备和软件应用程序。

安装和环境

首先,可以先到官网下载一个 LECPServer的最新版/downloads/LECPServer.zip

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

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

下载连接我也放在下面

Microsoft .NET Framework 4.6.1/download/dotnet-framework/thank-you/net461-web-installer

Visual C++ Redistributable Packages for Visual Studio /zh-cn/download/details.aspx?id=40784

安装完成后,双击 LECPServer.exe 就可以启动程序了

配置部分(欧姆龙 CP1H)

我们通过以太网连接欧姆龙CP1H,PLC的IP设置为192.168.3.20,本机IP设置为192.168.3.202

通过LECPServer的配置界面,配置对应的参数,如图:

然后点击应用,当你看到设备栏的列表指示为绿色,则说明PLC已经正式连接成功了

这时候我们可以通过HTTP POST的调试工具,如POSTMAN,HTTP Debug来测试下是否能正常读写,我们这里选用LECPServer自带的HTTP调试器。

我们先发送 plc_read_node 命令查看D0000的值,同样,我们也可以通过 plc_write_node 来配置节点的值。

代码部分

直接上 Javascript 的代码:

// 获取当前时间 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}]};// 数据 arrayvar data = [];setInterval(function () {// LECPServer的WebAPI服务地址 端口默认为8088let 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);}});// 刷新EChartmyChart.setOption({series: [{data: data}]});}, 500);

其核心通讯就是ajax部分,获取PLC数据的API接口;代码可以直接放在 EChart 的调试窗口直接运行,如图

传送门

LECPServer的官网站点

LECPServer的使用手册 :3001

LECPServer的Github地址/xeden3/LECPServer

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。