如何使用HTTP协议,读写PLC点位状态(含欧姆龙、三菱、西门子、施耐德、松下等PLC)

前言

现代工业产线,与以往的技术方向发生了很大变化,更多的互联网元素(REST,HTTP,H5,WEB),更多的编程语言(JAVASCRIPT,PYTHON,GO,Node.js)融入了工业生成的应用中,为工业互联网添砖加瓦;但随之产生的问题就是,老旧的PLC和PC开发方法,无法快速,简便的将数据流与上位系统,如SCADA、MES、HIM快速互联;

传统的模式是,通过C#针对不同的PLC开发对应的接口程序,然后将数据采集和控制,使用自定义协议,与上位系统对接,这种方法开发难度困难,而且维护和稳定性都有缺陷。

为了解决这个问题,近些年国内也有很多企业研发了通过单片机将PLC协议转译为HTTP,MQTT,MODBUS的通讯硬件,俗称PLC云网关;这种解决方案优势是显而易见的,首先解决了第一种方法的开发难度问题,其次稳定性也得到了很大的提升,但问题还是有的,就是成本,一般的云网关,一个大概在1-2k人民币左右,其次就是配置,由于是独立硬件,因此对于一个PLC就需要独立配置一次,现场数量少的话还好,如果现场PLC上几十台,配置本身成本也是个巨大的开销。

方案

目前还有一种比较前沿的做法,就是通过一个工控机或服务器,通过网口或者串口,直接与PLC进行挂接,然后将PLC的点位信息转存到上位系统,代表软件是付费的KepServer和免费的LECPServer。

软件中间件通讯框架图

我们这里选免费的LECPServer来做演示,需要说明的是,KepServer使用的是OPCUA和MQTT进行上位转译,具体的可以查看KepServer的使用说明。

配置说明

LECPServer的使用和配置还是比较简单的

首先是LECPServer的运行环境,.NET和VC2013是必须前置安装的

Microsoft .NET Framework 4.6.1 Download .NET Framework 4.6.1 Web Installer

Visual C++ Redistributable Packages for Visual Studio 2013 Download Visual C++ Redistributable Packages for Visual Studio 2013 from Official Microsoft Download Center

打开LECPServer图标,就是主界面

我们选用欧姆龙的PLC作为例子,在设备选项上点击“新加设备”,并且填入设备名称,这里我们填写 OFINS ,在设备栏的PLC_DEVICE里面选中OmronFinsNet,则使用欧姆龙的FinsTCP协议进行通讯,配置好PLC端的IP和端口,还有SA1、DA2值(SA1代表本机IP地址的最后部分,如本机IP地址是192.168.123.203,那SA1就填写203,DA2一般填写0或者1,这个根据PLC的UNIT号设置),点击设备配置的“应用”按钮,则提示保存成功,这样我们就成功添加了一个欧姆龙的PLC进去了。

  

 接下来我们开始配置需要控制的PLC地址(则点位)

点击“+”号,添加一个节点,输入节点名称,如D100,在地址栏目填写D100,则这个地址栏定位到PLC的D100,选择节点的类型,这里我们选择FLOAT,浮点类型(32bit);长度,他们设置为5,则表明D100开始,由5个元素长度构成的FLOAT数组,实际使用到的32bit*5地址长度作为存储空间;配置完成后,点击“应用”,则可以看到连接标记的绿色色条亮起,并且值上有数据,则表明连接成功。

 

读写说明

接下来就是SCADA,MES通过HTTP协议去读写PLC点位的说明。

在LECPServer 1.0.9版本之后,提供了一个HTTP调试器工具,这个工具可以很方便的调试点位的读写,当然,你也可以使用第三方工具,如POSTMAN这种,甚至使用原生JS,Python程序达到同样的效果。

URL输入默认服务器地址 http://127.0.0.1:8088

发送内容写入

{
    "action":"plc_read_node", 
    "node":"NODES.OFINS.D100"
}

点击发送,你可以看到返回值即是D100的点位数据

{
    "errcode":"0", 
    "errmsg":"",
    "rtval":[0, 34.3, 33.1, 0, 0]
}

当然你也可以批量的对点位进行读写操作,这里就不再赘诉了,具体操作可以参考LECPServer的使用说明。

 

关于效率

解决方案是否合适,读写效率可能是大家重点关心的话题,由于LECPServer使用的JLean框架编写,对于单个LECPServer读写效率,可以达到ms级别,官方做过一个基准测试,测试方法如下

  1. 给PLC设置一个BOOL点位C0000和一个WORD点位H0000,开启50个读线程和50个写线程,运行 plc_read_node 和 plc_write_node 命令,测试两个命令的响应速度
  2. 给PLC设置一个BOOL点位C0000和一个WORD点位H0000,开启50个读线程和50个写线程,运行 plc_read_nodes 和 plc_write_nodes 命令,测试两个命令的响应速度

结论,第一组测试结果,50个读线程和50个写线程,针对单个线程的读写返回时间在10ms-13ms,第二组测试结果,50个读线程和50个写线程,针对单个读写返回时间在20ms-24ms

 

后话:由于LECPServer是开源项目,你可以很轻松的在Github找到他的资料,并对他进行二次开发。

  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android Studio是一款功能强大的集成开发环境,可以用于开发Android应用程序。Modbus是一种通信协议,用于在工业控制系统中传输数据。使用Android Studio可以很方便地读写PLC设备,以下是具体步骤: 1. 首先,要在Android Studio中创建一个新的工程,可以选择空白Activity模板。 2. 接下来,需要导入Modbus通信库,可以使用Java Modbus库,通过在build.gradle文件中添加相应的依赖来实现。 3. 在代码中,需要使用Modbus协议来与PLC进行通信。可以创建一个Modbus通信类,其中包括连接到PLC设备、读取和写入数据的方法。 4. 在连接PLC设备之前,需要获取PLC的IP地址和端口号。可以在代码中定义这些变量,并在连接时使用。 5. 使用Modbus协议读取PLC的数据,可以使用readCoils()、readDiscreteInputs()、readHoldingRegisters()等方法,根据PLC设备上数据的类型和位置进行相应的读取操作。 6. 使用Modbus协议写入PLC的数据,可以使用writeCoil()、writeRegister()等方法,根据PLC设备上数据的类型和位置进行相应的写入操作。 需要注意的是,使用Modbus协议读写PLC需要确保Android设备能够与PLC设备通信,例如通过Wi-Fi或以太网连接。另外,需要了解PLC设备的Modbus寄存器地址和数据类型,以确保读取和写入的数据正确。 通过以上步骤,可以在Android Studio中使用Modbus协议读写PLC设备,实现与工业控制系统的数据交互。这样可以方便地监控和控制PLC设备,实现自动化控制和数据采集等功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值