ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

基于HslCommunication公开PLC读写给第三方程序 C#,Java,Python分布式读写PLC数据

2021-11-26 17:02:21  阅读:547  来源: 互联网

标签:HslCommunication 读取 C# 读写 PLC 我们


基于HslCommunication公开PLC读写给第三方程序 C#,Java,Python分布式读写PLC数据,包括三菱,西门子,欧姆龙,modbus,ab plc,台达,横河,信捷,松下,汇川,基恩士,富士,LS等等PLC

本文介绍在一些特殊的场景和需求下,使用HslCommunication的可以实现一些比较有意思的功能。例行介绍HSL的安装

 github地址:https://github.com/dathlin/HslCommunication 如果喜欢可以star或是fork,还可以打赏支持,打赏请认准源代码项目。

联系作者及加群方式:Cooperation - HslCommunication 官网 

在Visual Studio 中的NuGet管理器中可以下载安装,也可以直接在NuGet控制台输入下面的指令安装:

1

Install-Package HslCommunication

 如果需要教程:Nuget安装教程:VS使用Nuget教程详解 Visual studio 安装第三方的组件库 - dathlin - 博客园

组件的完整信息和API介绍参照: http://api.hslcommunication.cn  组件的使用限制,更新日志,都在该页面里面。

 本篇文章对应的github的源代码:https://github.com/dathlin/HslMRpcLearn

我们来看看这种系统的架构设计模式。

 我们有一个主的后台服务器来连接现场的各种PLC设备,然后进行数据交互。这个没有问题,很好实现,但是现在有需求,我们在远程客户端界面,或是手机端阶段,等等,需要对远程的PLC进行读写一些数据操作,这时候怎么实现是最简单方便的?

在HSL里,提供了一种简单的可能性。可以辅助你快速实现需要的操作信息。

那就是HSL提供的MRPC注册机制的功能,即使你的客户端是C#语言的,python语言,java语言,(虽然HSL也提供了java语言和python语言的读写PLC功能,但是仅仅是部分的实现,如果java语言和python也想和C#语言一样的功能的话,也可以用当前的方式实现。)

我们开始写代码,我们先假设有1个PLC需要不停的采集,分析数据,做处理。我们新建一个控制台程序,安装HslCommunication组件。为了方便起见,我们假设这个PLC是西门子PLC,实际上无论什么牌子的都是一样的。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

static void Main( string[] args )

{

    SiemensS7Net plc = new SiemensS7Net( SiemensPLCS.S1200, "127.0.0.1" ); // 此处拿了本地虚拟的PLC测试

    plc.SetPersistentConnection( ); // 设置了长连接

    while (true)

    {

        Thread.Sleep( 1000 ); // 每秒读取一次

        OperateResult<short> read = plc.ReadInt16( "M100" );

        if (read.IsSuccess)

        {

            // 读取成功后,进行业务处理,存入数据库,或是其他的分析

        }

        else

        {

            // 读取失败之后,显示下状态

            Console.WriteLine( "读取PLC失败,原因:" + read.Message );

        }

    }

}

  

此处就简化了一些操作信息,反正是要执行一些业务操作的。现在我们需要在客户端的程序里,增加一个按钮,比如功能是锁定机台。这个功能的实现是写入M300.1为True。如果解锁,就是写false

因为我们的客户端是部署在其他电脑的,当然是需要新建一个winform的项目了,如果是WPF也是一样的。也是弄两个按钮出来,然后写事件。

 有了事件之后,我们怎么来写代码呢?

一般的解决方法是,百度看看有没有远程通信,远程RPC的功能实现,比如ZBUS,Thrift都是可选的方案,但是太麻烦了,还需要学习。所以此处推荐HSL的实现,代码非常精简。我们改造下服务器端的实现:

 我们看20,21,22这三行代码,含义就是实例化,注册RPC服务,启动。非常的精简。这就已经实现功能了。当前的服务器提供了什么RPC的接口呢?,我们运行起来。然后用HslCommunication的DEMO程序打开瞧瞧就可以了。
 

服务器端启动之后,就是一直在打印读取成功了。没有其他的内容

我们在打开demo看看

因为我这都是本地测试,所以是直接的127.0.0.1的IP地址信息,点击连接之后,左边就出现了很多的API接口信息。

那么我们就来试试看,选择一个WriteInt16的接口,改变一下M100的值看看

然后我们点击读取后,没有显示错误信息,说明已经成功了。

 

然后我们在回去看看服务器的控制台

 我们发现值已经更改了,这时候,可以尝试下其他API接口,这时候我们就发现一个超级强的功能,对于客户端来说,相当于是无缝读写PLC数据了,可以实现任何自定义的功能,本质上任意的多个远程客户端都通过服务器端的那个plc的对象来读写plc的。

我们再尝试下读取M100的接口

 上面填好数据信息之后,点击读取,我们就读取到了123的信息。

好了,我们现在来看看在客户端里应该怎么进行操作。

 里面第一步和第二步是需要注意的,提前定义好了一个变量信息,然后再来实现锁定解锁的操作。

 然后我们在界面上操作锁定的按钮,这时候,M300.1 应该是为true了。

我们去demo上看看

 果然是这样的。解锁的操作也是一样的。

 

所以,我们这里不仅仅是写入一个bool数据,读写任何的数据都是可以,甚至做业务逻辑都是可以的。当然了,如果你想要安全起见,MQTTServer是可以设置用户名和密码的,防止不安全的连接。

上面演示了第三方程序用C#来做接口请求的示例。下面演示用java来锁定,解锁的操作,打开IDEA,新建一个java项目,这里使用社区版来创建项目

现在mevan安装HslCommunication组件。

在Project Settings里面,选择Libraries菜单,然后点击添加,from maven,然后搜索HslCommunication,选择最新版。

 都勾选了先。

 添加成功了。

我们来看看如何锁定设备

然后我们来运行一下:

 看到显示锁定成功,我们回到demo查看信息

 可以看到,已经成功修改,那么解锁的功能也是类似的。所以此处不再赘述了,我们往深入想一想,现在的java代码是不是具有读写西门子PLC的功能了?现在C#服务器端注册的是西门子PLC,如果是注册别的PLC,比如基于串口的三菱PLC,基于串口的modbus-rtu协议,在java层面实现串口,实现那么多设备是不容易的。现在的这种方式就相当于实现了java对各种各样PLC的读写操作了。

我们再来看看如果我们用的是python语言呢?现在我们来使用VS code来开发

 还是先安装pip的依赖

 我这里设置了阿里云的镜像,所以安装会比较快一点。

然后我们开始写代码

 嗯,没几行代码,所以运行一下看看

 然后我们验证一下:

 写false也是一样的。

 

如果是读取呢?

运行之后,我们得到了true的值。

 

到这里我们发现,python也可以读写任意的PLC了,在C#端还可以进行权限控制,还能执行其他的业务功能。

如果是我还需要建立自己的API的接口呢?

参考这篇文章,已经说的很详细了:C# RPC 远程RPC调用 C#服务器设计 CS架构设计 远程API接口 RPC可视化 MqttRpc实现 HslCommunication远程调用,同步网络访问,进度报告 - dathlin - 博客园

本页面的源代码地址在文章的开头,在github开源。

标签:HslCommunication,读取,C#,读写,PLC,我们
来源: https://blog.csdn.net/jindou910101/article/details/121564144

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有