C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

时间:2024-09-08 14:06:26

前言


本文将使用一个基于开源项目HslCommunication创建的OPC UA网关,方便通过配置创建一个OPC UA的网关中心。具体的操作及支持的设备信息项目参照下面:

开源项目HslCommunication的github地址:https://github.com/dathlin/HslCommunication 如果喜欢可以star或是fork,还可以打赏支持。此项目在工业界非常的流行,用来采集设备的数据以及在多个软件之间进行数据传送,以及一些简单的控件显示。

联系作者及加群方式(激活码在群里发放):http://www.hslcommunication.cn/Cooperation

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

Install-Package HslCommunication

  

NuGet安装教程  http://www.cnblogs.com/dathlin/p/7705014.html

Demo软件下载

HSLSharp.zip

版本将会随着更新功能会有所变化,相应的本博客也会有更新,如下也会做一些更新日志的声明:

v0.0.1

2018年5月1日 13:47:22

预发行版,初步的测试。

特性支持


  • 支持空设备节点,创建单纯的节点以供设备读写
  • 支持三菱PLC的设备节点,针对的MC协议的二进制和ASCII的机制
  • 支持西门子设备节点,支持S7协议,Fetch/Write
  • 支持欧姆龙设备节点,支持FINS/TCP节点
  • 支持Modbus-Tcp设备节点
  • 支持异形Modbus-Tcp设备节点
  • 支持NetSimplify客户端节点,这个协议可以在多个电脑之前传送数据。

使用说明


本软件的OPC UA的节点配置需要要节点配置器和解析规则配置器组成,节点配置器来配置OPC UA的节点分类规则,节点描述等信息,但是具体的数据标签由解析规则配置器组成。

以下就具体说明下程序大致的配置步骤:

  1. 配置客户端分类信息,新增想要的设备,新增设备时需要选择相应的设备类型。
  2. 新建完设备类型之后,需要配置数据请求,指定读取的地址,读取的长度,然后配置解析规则代码。
  3. 如果没有解析规则代码,那就需要先配置规则解析,本系统支持可视化的规则配置,具体的配置方法本文下文会深度讲解。

主界面的简单介绍


打开软件的主界面,如下,在初次使用软件的时候,系统默认了三个固定的根节点

  1. Devices      设备类的根节点
  2. ModbusServer Modbus服务器的节点,目前不支持
  3. ModbusAlien 异形ModbusTcp设备对象

如果没有配置软件节点信息,那就需要先点击 系统配置节点配置 菜单了。主界面如下

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

节点配置的界面如下,此处有个细节,点击节点名称,即可以在右侧的数据列表里显示出来当前选择的节点的详细信息,做左侧节点的操作,通过鼠标右键的菜单来操作:

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

添加节点分类操作


此处简单的演示添加一个简单的分类操作信息。鼠标在Devices上右键即可操作

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

然后就会弹出一个编辑框,这样我们就实现了一个类别节点的添加,注意:类别节点是可以相互嵌套的,可以形成复杂的分类

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

复杂类型节点举例:

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

然后点击 保存文件 菜单,然后关掉当前窗口,回到主界面,点击 启动引擎,点击 测试客户端 菜单,启动一个通用的OPC UA客户端来浏览服务器上有什么数据信息

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

可以看到OPC UA的服务器已经按照我们设想创建好了数据节点信息。然后重启软件,我们重新进入 节点配置器 节点进行操作。

编辑和删除节点操作


想要对哪个节点进行操作,就选择哪个节点,然后右键,发现就2个额外的操作选择,编辑节点 删除节点 。注意,这里的编辑和删除适用于所有分类节点和设备节点,准确的说,除了3个根节点外不能修改外,其他节点都是可修改的。

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

删除节点的时候需要注意有个细节:如果当前删除的节点没有子节点,该节点直接进行删除,如果包含了子节点,将会弹出一个对话框。

新增一个演示设备示例,Modbus-Tcp设备


此处我们演示一个例子,添加一个Modbus-Tcp的设备,为啥要拿这个演示呢,因为基于HslCommunication组件的项目中提供了一个Modbus服务器演示项目,可以方便的进行本机的调试测试等等操作。

下载地址:ModbusTcpServer.zip

在开始开发前,还要说明个事情,虽然HslCommunication组件支持读取线圈,寄存器,输入点操作,但是此处只支持读取寄存器,如果要读取线圈怎么办,可以采用的解决方案是把线圈的数据先挪到寄存器里,再进行解决。

OK,万事俱备,开始吧。

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

然后我们输入好设备的基本信息,比如说名字,描述,IP地址,端口号,客户端的站号等等操作

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

然后点击 确认 。回到节点配置器如下:

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

这样就添加成功了一个设备,我们选中这个节点后,右侧的数据列表就显示了这个设备的相关信息。

先不要急着给设备添加访问请求,因为目前没有 配置解析规则 ,那么接下来的操作是点击上图的 保存文件 按钮操作,然后回到主界面

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

这时候我们进入一个关键的操作,那就是配置解析规则,这个是什么意思呢,我先解释下,我们从设备读取数据通常是字节数据,并不是一些基础的数据类型,比如说short,ushort,int,uint,float.double之类的数据,这个解析规则就是起这样的作用的。比如ModbusTcp我们需要读取20个地址长度的寄存器,那么读取出来以后就是40字节长度,这些寄存器里都有什么数据呢

[      0     -     1       ]   数据一    short类型

[      2     -     3       ]   数据二   ushort类型

[      4     -     7       ]   温度     float类型

[      8     -     31     ]   机器人关节数据    共计6个长度的float数组

[      32   -     39     ]   条码     共计8个字节长度

以上是我们假设的数据,因为我也不知道您实际中会碰到怎样的情况,此处就做了一些比较经验的假设,还假设了一个数组的存在,条码的字符串存在,OK,有了这些信息,我们就可以添加解析规则了。

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

还是老的操作,我们接下来要看看需要我们输入什么信息了。

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

随便输入一个规则名称吧,然后点击 确认

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

接下来我们就需要来添加真正的规则解析了。

先根据上面的信息来填写数据一的信息,索引为0,数据长度为1,因为没有数组。点击确认

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

然后继续添加规则

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

然后添加温度数据

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

然后再添加机器人位置数据,注意,这是一个数组,长度为6,那么按照下面设置,数据长度的信息需要设置为6

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

在添加最后一个数据为条码

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

到这里为止,我们添加了所有的数据了,回到 解析规则器配置界面 ,看看刚刚配置到的成果吧,

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

左边显示了字节的信息,共配置了40个字节的数据,每种数据类型的背景颜色都不一致,用于快速的区分不同种类的数据类型,可视化的界面显示了所有配置的数据信息,类型,已经所在的字节位置。方便的快速检查有没有遗漏的信息。

确认可以之后,点击菜单的 保存文件 按钮,然后回到节点配置器

这下子可以真的完成数据配置界面了,这里再假设我们需要读取的数据在地址0开始的20个地址的寄存器里。

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

接下来就按照我们假设的信息输入

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

这里的请求地址是寄存器的地址,地址规则如下:

  • Modbus协议   就是纯数字的内容
  • 三菱PLC         D100,或是W1A0
  • 西门子PLC     M100,DB20.30之类的
  • 欧姆龙            D100,A100
  • SimplifyNet     纯数字,或是1.0.3

这有什么规律呢,我们可以发现这些地址的格式需要HslCommunication支持,所以在配置前,最好使用HslCommunicationDemo软件进行简单的测试,关于该软件的下载地址:

HslCommunicationDemo.zip

添加完成后,保存。回到软件的主界面。然后点击 启动引擎 ,这时候我们还没开始Modbus服务器,看看有什么效果。

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

下面显示加载的设备信息中发现了一台设备,类型为ModbusTcp设备,这台设备的服务器我们还没有开启,所以在设备监控项里这个设备处于闪烁中,我们把鼠标移动这个小框框里看看,

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

可以看到一些设备的基本信息,名称,状态,上次接收时间,这里的上次接收时间是什么意思呢,初始化的情况下,默认为1天之前,好了,接下来我们开好服务器的软件。

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

我们一点击 启动服务 按钮后,运行日志立马显示有设备连接上来了,

当HslSharp的设备连接上了服务器之后,会怎么样呢。

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

背景颜色已经变绿色了,上次接收时间也更新了,状态也变成了 在线 状态,然后我们在看看OPC UA的客户端,有什么效果。

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

然后我们更改下数据试试,在Modbus服务器的界面,在地址2里写入float类型的数据,123.456试试看

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

然后再去OPC UA的客户端界面刷新数据看看数据效果

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

此处验证成功,再写一个吧,写个条码信息,在地址16-19里,写入ABCDEFGH;

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

我们就可以看到

C# OPC UA服务器 OPC UA网关 三菱 西门子 欧姆龙 Modbus转OPC UA 服务器 可配置的OPC UA服务器网关 HslSharp软件文档

此处有个小BUG,做演示截图的时候来不及改这个BUG了,后面肯定会修复。并在日志里声明

特别说明


你看我们在配置数据解析规则的时候并没有指定数据的大小端,比如三菱是小端在前,大端在后的,西门子是大端在前,小端在后的,Modbus协议和欧姆龙是以字为单位反转的。实际上在本软件中无需理会,我们只要关注什么数据,占了多少长度即可。还是相当方便的。如果有更好的建议,可以联系作者改进。

ModbusTcp异形客户端配置


异形ModbusTcp的配置和大体上和上面的ModbusTCP配置是一样的,但有一些小区别,需要下次完善更新。