• Stars
    star
    233
  • Rank 171,393 (Top 4 %)
  • Language
    C#
  • License
    GNU Lesser Genera...
  • Created about 6 years ago
  • Updated over 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

一个设备及节点配置类库,基于HslCommunication.dll创建,方便的实现PLC根据配置文件动态创建,并支持自动写入相应的服务器对象。

SharpNodeSettings

Build status NuGet Status NuGet Download Gitter NetFramework Visual Studio License status copyright status

一个设备及节点配置类库,基于 HslCommunication.dll 深度整合创建,用来实现对PLC配置信息的存储和加载解析,同时支持可配置化的PLC数据读取,支持数据显示,其中服务器示例如下:

  • SampleServer 简单的演示了如何启动一个服务器程序,虽然示例是基于 Console 的应用程序,你也可以实现 Winform 或是 Wpf 应用程序,
  • RedisServer 演示了如果创建一个服务器,并且将读取到数据存入Redis的服务器,详细参照下文的说明。
  • OpcUaServer 由于OPC UA在工控界相当火爆,所以此处也集成了这个示例,采用最新的1.4.354.0版本的库实现,主要麻烦的地方在于数据解析,并创建节点,具体参照下文的说明。
Install-Package SharpNodeSettings

How to use

包括服务器和客户端都是围绕配置的Xml文件创建的,示例的Xml文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<Settings>
  <NodeClass Name="Devices" Description="所有的设备的集合对象">
    <NodeClass Name="分厂一" Description="">
      <NodeClass Name="车间一" Description="">
        <DeviceNode Name="测试空设备" Description="此设备安装在角落,编号0001" DeviceType="0" ConnectTimeOut="2000" CreateTime="2018/8/12 9:26:27" InstallationDate="2018/8/12 9:26:27">
          <DeviceRequest Name="数据请求" Description="一次完整的数据请求" Address="0" Length="10" CaptureInterval="1000" PraseRegularCode="B" />
        </DeviceNode>
      </NodeClass>
      <NodeClass Name="车间二" Description="">
        <DeviceNode Name="ModbusTcp客户端" Description="这是描述" DeviceType="10" ConnectTimeOut="1000" CreateTime="2018/8/9 19:58:49" InstallationDate="2018/8/9 19:58:49" IpAddress="127.0.0.1" Port="502" Station="1" IsAddressStartWithZero="true" IsWordReverse="false" IsStringReverse="false">
          <DeviceRequest Name="数据请求" Description="一次完整的数据请求" Address="0" Length="30" CaptureInterval="1000" PraseRegularCode="ABCD" />
        </DeviceNode>
      </NodeClass>
    </NodeClass>
    <NodeClass Name="分厂二" Description="位于西南方">
      <NodeClass Name="车间三" Description="">
        <DeviceNode Name="测试设备二" Description="这是测试设备二的描述" DeviceType="10" ConnectTimeOut="1000" CreateTime="2018/8/10 23:01:28" InstallationDate="2018/8/10 23:01:28" IpAddress="127.0.0.1" Port="502" Station="1" IsAddressStartWithZero="true" IsWordReverse="false" IsStringReverse="false">
          <DeviceRequest Name="数据请求" Description="一次完整的数据请求" Address="100" Length="10" CaptureInterval="500" PraseRegularCode="B" />
        </DeviceNode>
      </NodeClass>
    </NodeClass>
  </NodeClass>
  <NodeClass Name="Server" Description="所有挂载的服务器">
    <ServerNode Name="异形服务器" Description="这是一个异形服务器" CreateTime="2018/8/8 13:29:30" Port="1234" ServerType="2" Password="" />
  </NodeClass>
  <NodeClass Name="Regular" Description="所有的解析规则的信息">
    <RegularNode Name="ABCD" Description="">
      <RegularItemNode Name="温度" Description="" Index="0" TypeCode="3" TypeLength="1" />
      <RegularItemNode Name="风俗" Description="" Index="2" TypeCode="9" TypeLength="1" />
      <RegularItemNode Name="转速" Description="" Index="14" TypeCode="9" TypeLength="1" />
      <RegularItemNode Name="机器人关节" Description="" Index="18" TypeCode="9" TypeLength="6" />
      <RegularItemNode Name="cvsdf" Description="" Index="42" TypeCode="9" TypeLength="1" />
      <RegularItemNode Name="条码" Description="条码信息" Index="6" TypeCode="11" TypeLength="8" />
      <RegularItemNode Name="开关量" Description="设备的开关量信息" Index="368" TypeCode="1" TypeLength="8" />
    </RegularNode>
    <RegularNode Name="B" Description="">
      <RegularItemNode Name="温度" Description="" Index="0" TypeCode="3" TypeLength="1" />
      <RegularItemNode Name="压力" Description="" Index="2" TypeCode="3" TypeLength="1" />
    </RegularNode>
  </NodeClass>
</Settings>

只要创建好这个xml文件,就可以调用 SharpNodeServer 来创建服务器应用了,可以生成相应的节点信息,并且根据配置信息来请求设备,更新对应的数据。创建服务器的代码如下:

SharpNodeServer sharpNodeServer = new SharpNodeServer( );
sharpNodeServer.LoadByXmlFile( "settings.xml" );
sharpNodeServer.ServerStart( 12345 );

这样就启动了一个最简单的服务器,主要包含实例化,加载配置,启动服务器,注意:加载配置必须放置到服务器启动之前。

怎样查看服务器的数据呢?内置了一个默认的 SimplifyNet 服务器,想要知道更多的这个服务器的内容,可以参照下面的博客:https://www.cnblogs.com/dathlin/p/7697782.html

基于 NetSimplifyClient 实现了一个通用的数据节点查看器,需要指定服务器的Ip地址和端口号:

 SharpNodeSettings.View.FormNodeView form = new SharpNodeSettings.View.FormNodeView( "127.0.0.1",12345 )
 form.ShowDialog();

Picture

如果你想实现访问单个的数据,可以使用 NetSimplifyClient 创建的Demo来访问,需要注意的是,此处请求的数据都是序列化的JSON字符串。 Picture

手动配置这样一张表的内容将是灾难性的,所以本库提供了一个可视化的界面配置,代码如下:

Form nodeSettings = new SharpNodeSettings.View.FormNodeSetting( "settings.xml" )
nodeSettings.ShowDialog();

上面的代码的意思是显示一个配置创建,配置文件的路径是当前目录下的 settings.xml 文件。

您也可以这么写,手动获取用户配置过的数据信息,这样可以实现远程的配置信息:

using(SharpNodeSettings.View.FormNodeSetting form = new SharpNodeSettings.View.FormNodeSetting( XElement.Load( "settings.xml" ) ))
{
    if (form.ShowDialog( ) == DialogResult.OK)
    {
        // 配置好的数据信息,在这种方式下可以实现远程配置的操作。
        XElement xElement = form.XmlSettings;
        MessageBox.Show( "success" );
    }
    else
    {
        MessageBox.Show( "failed" );
    }
}

界面效果如下: Picture

在实际开发中,可能你不需要上述的配置功能,你就想实现某个PLC的设备信息是可配置的,那么也可以通过本组件实现:

SharpNodeSettings.View.FormSelectDevice selectDevice = new View.FormSelectDevice( );
if (selectDevice.ShowDialog( ) == DialogResult.OK)
{
    XElement xmlDevice = selectDevice.DeviceXml;
    // 设备的配置对象可用于存储,网络传输等等操作


    // 如果想要通过xml信息创建设备
    SharpNodeSettings.Device.DeviceCore deviceCore = SharpNodeSettings.Util.CreateFromXElement( xmlDevice );
    // 演示读取数据,此处有个问题在于如果是相同种类的PLC,应用还是很方便的,如果是不同种类的,地址模型就比较麻烦。
    HslCommunication.OperateResult<short> read = deviceCore.ReadWriteDevice.ReadInt16( "D100" );
}

Quick Start

按照如下的步骤走,就可以急速体验本项目所传达的核心功能价值,就可以明白本项目是否符合您的需求。启动测试之前,你需要准备个真实的设备:

  • 西门子PLC
  • 三菱PLC
  • 欧姆龙PLC
  • ModbusTcp设备

如果您没有真实的设备,也可以从网上下载个Modbus服务器软件,这里也提供一个下载地址:ModbusTcpServer.zip

下载完成后启动服务器即可。

配置Xml信息

去本项目的目录下配置设备的信息: \SharpNodeSettings\XmlFile 运行 SharpNodeSettings.Tools.exe 进行配置,已经配置了一部分,如果想要快速开始,忽略本步骤也可以。

SampleServer

本示例直接重新生成 SampleServer 项目,启动程序即可。如果想要看实际的数据信息,启动 SharpNodeSettings.NodeView 项目查看 Picture

RedisServer

本示例是在 SampleServer 的基础上添加了Redis服务器,所以需要先安装好Redis服务器,windows版本下载地址: https://github.com/MicrosoftArchive/redis/releases

当然,最好再下载安装一个redis服务器的可视化工具,此处推荐 RedisDesktopManager https://github.com/uglide/RedisDesktopManager/releases

然后基于本项目,重新生成 SharpNodeSettings.RedisServer 项目,启动服务器

上述的 SharpNodeSettings.NodeView 项目依然可以查看,然后下图演示Redis Picture

OpcUaServer

本示例是演示从PLC采集数据并且写入到OPC UA服务器中的示例,重新生成 SharpNodeSettings.OpcUaServer 项目,启动它,如果显示是否增加信任证书时,选择是即可。

然后再启动一个 OPC UA Client的示例项目 Picture

License

  • OpcUa相关的组件的版权归 OPC 基金会所有,使用请遵循相关的协议
  • SharpNodeSettings 组件协议 LGPL3.0 商用需要向作者打赏,金额需要 50 RMB - 100 RMB
  • 示例项目(SampleServer,RedisServer,OpcUaServer,Tools)协议为MIT协议

Support

打赏

More Repositories

1

HslCommunication

A very popular industrial Internet of Things communication plug-in. Using this dll can be very convenient, stable, and fast to obtain data from PLC equipment of multiple brands, and also supports redis, mqtt, websocket, etc., which can let your data on the network Free transmission, reducing enterprise development costs.
C#
1,316
star
2

ClientServerProject

一个C-S模版,该模版由三部分的程序组成,一个服务端运行的程序,一个客户端运行的程序,还有一个公共的组件,实现了基础的账户管理功能,版本控制,软件升级,公告管理,消息群发,共享文件上传下载,批量文件传送功能。具体的操作方法见演示就行。本项目的一个目标是:提供一个基础的中小型系统的C-S框架,客户端有三种模式,无缝集成访问,winform版本,wpf版本,asp.net mvc版本,方便企业进行中小型系统的二次开发和个人学习。同时网络组件方便的支持读写三菱和西门子PLC的数据,详细见Readme
C#
1,226
star
3

OpcUaHelper

一个通用的opc ua客户端类库,基于.net 4.6.1创建,基于官方opc ua基金会跨平台库创建,封装了节点读写,批量节点读写,引用读取,特性读取,历史数据读取,方法调用,节点订阅,批量订阅等操作。还提供了一个节点浏览器工具。
C#
710
star
4

HslControlsDemo

HslControls控件库的使用demo,HslControls是一个工业物联网的控件库,基于C#开发,配套HslCommunication组件可以实现工业上位机软件的快速开发,支持常用的工业图形化控件,快速的集成界面开发。 主要包含了按钮,开关,进度条,信号灯,数码管,时钟,曲线显示控件,仪表盘控件,管道控件,瓶子控件,饼图控件,传送带控件,温度计控件,鼓风机控件,阀门控件,电池控件等等。
C#
595
star
5

RemoteMonitor

本项目是一个利用HslCommunication组件读取PLC的示例项目,演示了后台从PLC循环读取到前台显示,并推送给在线客户端,客户端同步显示并画实时曲线图。支持web端同步的数据显示,支持web端远程操作PLC,安卓端数据显示,远程操作PLC
JavaScript
211
star
6

ModBusTcpTools

一个Modbus的C#开发示例,运用HslCommunication.dll组件库实现,包含了一个服务端的演示和一个客户端演示,客户端可用于进行Modbus测试,详细见ReadMe.md。
C#
66
star
7

HslCommunicationJavaDemo

HslCommunication的Java版本的项目
Java
63
star
8

HslCommunicationPython

HslCommunication的python版本
Python
43
star
9

OpcUaHelperOld

一个OPC UA客户端二次封装类,使用本组件提供的类库,可以简单便捷的读写OPC-UA服务器上的数据,引用,方法等等操作。本版本为旧版,新版请参照:https://github.com/dathlin/OpcUaHelper
C#
31
star
10

NetChatRoom

一个基于HslCommunication实现的局域网实时聊天的项目,采用C-S架构实现,除了实现基本的消息发送,还包括了在线信息的管理,系统消息的查看。
C#
23
star
11

FileManagment

一个使用HslCommunication组件实现了文件管理引擎,在客户端块演示了文件的上传,下载,删除,文件集获取操作。
C#
22
star
12

WebSpiderLearnAndTest

A simple C# web spider application , It catches all the hotels of hangzhou from xiecheng 【一个简单的爬虫程序,提供了一个基础的框架,实现了对AJAX页面爬虫,并测试学习几个例子,详细见README。】
C#
22
star
13

HslRedisDesktop

Redis Winform Desktop
C#
18
star
14

HSLSharp

采集框架第一个版本,如有bug,希望大家发起pull request
C#
17
star
15

ClassicGame

some simple games base on C# ,such as Tetris. [一个简单的C#游戏,以俄罗斯方块为基础,提炼一个简单的游戏框架,方便学习算法,GDI+,C#]
C#
13
star
16

ThriftDemo

一个Thrift的学习测试项目,服务器端实现从PLC进行采集数据,推送到Thrift,以接口的形式对外公开数据,方便客户端获取到服务器的不同数据,并且支持从客户端进行远程操控PLC
C#
8
star
17

HslMRpcLearn

基于HslCommunication的远程读写PLC,JAVA,Python远程读写PLC的示例代码。
C#
7
star
18

OpcUaStudy

A project for personal learning opc ua technology, opc part of the code from the opc Foundation, where only for learning and testing.
C#
7
star
19

Gobang-

a simple computer game, you can play with computer , we designed a simple computer AI , we need you to improve the AI level , to build a more smart AI , and also helps improve our program skills [一个简单的五子棋游戏,实现了初级算法,需要大家一起来努力创建一个更加聪明的电脑AI,也用来方便新手学习。]
C#
6
star
20

MyNuGet

一个基于本地的NuGet服务器,用于本地或是公司的.net的包管理器。
ASP
4
star
21

RoboDKHelper

RoboDK通讯用的C#组件
C#
4
star
22

GameHelper3366

this is a game help tool, help user to play hige score on 3366.com
C#
2
star
23

HslWebApplication

一个用于ASP.NET MVC和ASP.NET CORE学习的项目
CSS
1
star
24

WebApplicationLearn

一个用于自身学习ASP.NET的项目,不具有生产条件,仅用于学习,测试技术
JavaScript
1
star
25

Static

Static Resources For test
C#
1
star