点击或拖拽改变大小

HslCommunication 命名空间

一个工业物联网的底层架构框架,专注于底层的技术通信及跨平台,跨语言通信功能,实现各种主流的PLC数据读写,实现modbus,机器人的各种协议读写等等, 支持快速搭建工业上位机软件,组态软件,SCADA软件,工厂MES系统,助力企业工业4.0腾飞,实现智能制造,智慧工厂的目标。

本组件付费开源,使用之前请认真的阅读本API文档,对于本文档中警告部分的内容务必理解,部署生产之前请详细测试,如果在测试的过程中, 发现了BUG,或是有问题的地方,欢迎联系作者进行修改,或是直接在github上进行提问。未经测试,直接部署,对设备,工厂造成了损失,作者概不负责。

官方网站:http://www.hslcommunication.cn/,包含组件的在线API地址以及一个MES DEMO的项目展示。

重要事项 重要事项
本组件的目标是集成一个框架,统一所有的设备读写方法,抽象成统一的接口IReadWriteNet,对于上层操作只需要关注地址,读取类型即可,另一个目标是使用本框架轻松实现C#后台+C#客户端+web浏览器+android手机的全方位功能实现。
本库提供了C#版本和java版本和python版本,java,python版本的使用和C#几乎是一模一样的,都是可以相互通讯的。
在使用本通讯库之前,需要学会如何使用nuget来安装当前的通讯库,可以参考如下的博文:http://www.cnblogs.com/dathlin/p/7705014.html

先整体介绍下如何使用本组件库的基本思路,基本上是引用库,从nuget安装的库会自动添加引用到项目中的,就可以直接进行using操作了,当然了在使用之前,需要先激活一下,激活的方式如下:
激活示例
// 授权示例 Authorization example
if (!HslCommunication.Authorization.SetAuthorizationCode( "Your Code" ))
{
    Console.WriteLine( "Authorization failed! The current program can only be used for 8 hours!" );
    return;   // 激活失败应该退出系统
}
在你的应用程序刚开起来的时候,激活一次即可,后续都不需要再重复激活了。接下来就可以开始写代码了。任何的设备的操作基本是相同的,实例化,配置参数(有些plc默认的参数即可),连接设备,读写操作,关闭
关于Hsl的日志功能,贯穿整个hslcommunication的项目,所有的网络类,都包含了ILogNet日志功能,当然你也可以继承接口实现你自己的日志,在hsl里提供了三种常见的简单实用的日志
单文件实例化
// 实例化一个日志后,就可以使用了
ILogNet logNet = new LogNetSingle( "D:\\123.txt" );
日志基本的使用
// 然后我们的代码就可以调用下面的方法来存储日志了,支持下面的5个等级的
logNet.WriteDebug( "Debug log test" );
logNet.WriteInfo( "Info log test" );
logNet.WriteWarn( "Warn log test" );
logNet.WriteError( "Error log test" );
logNet.WriteFatal( "Fatal log test" );

// 还有下面的几种额外的情况
logNet.WriteNewLine( );                       // 追加一行空行
logNet.WriteDescrition( "test" );             // 写入额外的注释的信息
logNet.WriteAnyString( "any string" );        // 写任意的数据,不受格式化影响

// 此处的5个等级有高低之分 debug < info < warn < error < fatal < all
// 如果我们需要屏蔽debug等级的话
logNet.SetMessageDegree( HslMessageDegree.INFO );

// 如果我们需要屏蔽debug及info等级的
logNet.SetMessageDegree( HslMessageDegree.WARN );

// 如果所有的日志在记录之前需要在控制台显示出来
logNet.BeforeSaveToFile += (object sender, HslEventArgs e) =>
{
    Console.WriteLine( e.HslMessage.ToString( ) );
};

// 带关键字的功能
logNet.WriteDebug( "A","Debug log test" );
logNet.WriteInfo( "B", "Info log test" );
logNet.WriteWarn( "C", "Warn log test" );
logNet.WriteError( "A", "Error log test" );
logNet.WriteFatal( "B", "Fatal log test" );

// 有了关键字之后,我们就可以根据关键字过滤了
logNet.FiltrateKeyword( "B" ); // 我们不需要B的关键字的日志
logNet.RemoveFiltrate( "B" );  // 重新需要B的关键字的日志

再开始讲解基本的代码通讯之前,先来了解两个基本的概念,长连接,短连接。为了更好的说明当前的通信情况,我把所有的通信拆分为四个部分,连接,发,收,断开。
短连接:连接,发,收,断开,连接,发,收,断开,连接,发,收,断开,连接,发,收,断开...无限循环
长连接:连接,发,收,发,收,发,收,发,收,发,收,发,收,发,收,发,收,发,收....断开
然后我们来看看异常的情况,短连接的异常比较好处理,反正每次请求都是先连接,关键来看长连接的异常
长连接:连接,发,收,发,收...异常,连接,发,收,发,收,异常,连接,连接,连接...收,发,收,发,收,发,收,发,收....断开
这里第一个异常发生后,第二次读写立即连接上去并且成功,第二个异常触发后,一直读写失败,说明就是一直连接不上去。
对于HSL组件来说,不需要重复连接服务器或是plc,无论是短连接还是长连接,都只需要一直读写就OK了,对读写的结果进行判定,即使发生异常了,读写失败了,也要一直坚持,网络好的时候,读写会恢复成功的。

我们以三菱的PLC为示例,其他的plc调用方式基本是一模一样的,就是调用的类不一样,参数配置不一样而已。以下的逻辑都是适用的。
简单的短连接使用
// 实例化对象,指定PLC的ip地址和端口号
MelsecMcNet melsecMc = new MelsecMcNet( "192.168.1.110", 6000 );
// 举例读取D100的值
short D100 = melsecMc.ReadInt16( "D100" ).Content;
简单的长连接使用
// 实例化对象,指定PLC的ip地址和端口号
MelsecMcNet melsecMc = new MelsecMcNet( "192.168.1.110", 6000 );

// 连接对象
OperateResult connect = melsecMc.ConnectServer( );
if (!connect.IsSuccess)
{
    Console.WriteLine( "connect failed:" + connect.Message );
    return;
}

// 举例读取D100的值
short D100 = melsecMc.ReadInt16( "D100" ).Content;

// 实际上所有的读写都是返回是否成功的标记的,在实际的开发中,需要严格的判定,怎么判定呢?如下的代码
// In fact, all reads and writes return the flags of success. In actual development, strict judgment is required. How to judge? The following code
OperateResult<short> readD100 = melsecMc.ReadInt16( "D100" );
if (readD100.IsSuccess)
{
    // 读取成功,这时候获取Content才是正确的值
    // The reading is successful, and the Content is the correct value at this time.
    short value = readD100.Content;
}
else
{
    // 读取失败,如果仍然坚持去获取Content的值,就为0
    // Failed to read, if it still persists to get the value of Content, it is 0
}

// 读写是否成功的情况,应用于几乎所有的读写代码,只要看清楚返回的数据类型即可
// Whether the reading and writing is successful is applied to almost all reading and writing codes, as long as the type of data returned is clear

melsecMc.ConnectClose( );
基本的读取示例
MelsecMcNet melsec_net = new MelsecMcNet( "192.168.0.100", 6000 );
melsec_net.SetPersistentConnection( );                                           // 设置长连接的操作

// 此处以D寄存器作为示例,此处没有判断是否读写成功,所以是有风险的,如果通讯失败,所有的值都不是正确的
// The D register is used as an example here. There is no judgment whether the read or write is successful, so it is risky. 
// If the communication fails, all values are incorrect
short short_D1000 = melsec_net.ReadInt16( "D1000" ).Content;                     // 读取D1000的short值 
ushort ushort_D1000 = melsec_net.ReadUInt16( "D1000" ).Content;                  // 读取D1000的ushort值
int int_D1000 = melsec_net.ReadInt32( "D1000" ).Content;                         // 读取D1000-D1001组成的int数据
uint uint_D1000 = melsec_net.ReadUInt32( "D1000" ).Content;                      // 读取D1000-D1001组成的uint数据
float float_D1000 = melsec_net.ReadFloat( "D1000" ).Content;                     // 读取D1000-D1001组成的float数据
long long_D1000 = melsec_net.ReadInt64( "D1000" ).Content;                       // 读取D1000-D1003组成的long数据
ulong ulong_D1000 = melsec_net.ReadUInt64( "D1000" ).Content;                    // 读取D1000-D1003组成的long数据
double double_D1000 = melsec_net.ReadDouble( "D1000" ).Content;                  // 读取D1000-D1003组成的double数据
string str_D1000 = melsec_net.ReadString( "D1000", 10 ).Content;                 // 读取D1000-D1009组成的条码数据

// 读取数组
short[] short_D1000_array = melsec_net.ReadInt16( "D1000", 10 ).Content;         // 读取D1000的short值 
ushort[] ushort_D1000_array = melsec_net.ReadUInt16( "D1000", 10 ).Content;      // 读取D1000的ushort值
int[] int_D1000_array = melsec_net.ReadInt32( "D1000", 10 ).Content;             // 读取D1000-D1001组成的int数据
uint[] uint_D1000_array = melsec_net.ReadUInt32( "D1000", 10 ).Content;          // 读取D1000-D1001组成的uint数据
float[] float_D1000_array = melsec_net.ReadFloat( "D1000", 10 ).Content;         // 读取D1000-D1001组成的float数据
long[] long_D1000_array = melsec_net.ReadInt64( "D1000", 10 ).Content;           // 读取D1000-D1003组成的long数据
ulong[] ulong_D1000_array = melsec_net.ReadUInt64( "D1000", 10 ).Content;        // 读取D1000-D1003组成的long数据
double[] double_D1000_array = melsec_net.ReadDouble( "D1000", 10 ).Content;      // 读取D1000-D1003组成的double数据

// 正常的安全的操作如下,每一行都需要转变下面的代码
// The normal and safe operation is as follows, each line needs to change the following code
OperateResult<short> resultD1000 = melsec_net.ReadInt16( "D1000" );
if (resultD1000.IsSuccess)
{
    Console.WriteLine( resultD1000.Content );
}
批量读取示例
MelsecMcNet melsec_net = new MelsecMcNet( "192.168.0.100", 6000 );

OperateResult<byte[]> read = melsec_net.Read( "D100", 4 );
if(read.IsSuccess)
{
    float temp = melsec_net.ByteTransform.TransInt16( read.Content, 0 ) / 10f;
    float press = melsec_net.ByteTransform.TransInt16( read.Content, 2 ) / 100f;
    int count = melsec_net.ByteTransform.TransInt32( read.Content, 2 );

    // do something
}
else
{
    // failed
}
需要注意的事,在实际的开发中,我们的一个窗体程序(或是控制台,原理都是一样的),会定时或是不定时的去读写PLC的操作(调用Read或是Write方法),这个本身是没有任何问题的, 但是总会有这样的需求,我们需要在界面上,或是系统里实时体现当前的PLC的在线情况,我相信不少小伙伴会有这样的问题的。所以就出现了下面的代码:
检查连接状态
// 定义在外面的
MelsecMcNet melsec_net = new MelsecMcNet( "192.168.0.100", 6000 );
System.Threading.Timer timer;                                          // 定时器

/// <summary>
/// 启动定时器,我们一般会在窗体打开的时候调用,或是系统启动的时候调用,此处示例5秒检测一次
/// </summary>
public void StartTimer( )
{
    timer = new System.Threading.Timer( ThreadCheck, null, 1000, 5000 );
}

public void ThreadCheck(object obj )
{
    OperateResult connect = melsec_net.ConnectServer( );
    if (connect.IsSuccess)
    {
        // 进行相关的操作,显示绿灯啥的
    }
    else
    {
        // 进行相关的操作,显示红灯啥的
    }
}
实际这种操作是非常不可取的,为什么这么说,下面说说原因:
警告 警告:
首先说明下ConnectServer方法里发生了什么?这个方法首先会关闭连接,然后重新连接,连接成功,就发送初始化指令(有些PLC就需要握手确认),初始化握手成功,才返回真正的成功!
那么这里为什么不行呢?因为Read和Write方法是有混合锁实现互斥操作的,这样的好处就是多线程调用互不影响,但是ConnectServer方法,并没有互斥锁,如果调用的时候同时在读写,那就会导致异常, 那么为什么没有加互斥锁呢?因为为了实现读写方法的时候,支持自动重连操作,所以连接方法已经在互斥锁了。如果再加互斥锁,会发生死锁,所以综合考虑,就设计成了现在的样子。
既然上面的代码不能使用,那么怎么来看当前的连接状态呢?这里有一点需要注意,ConnectServer只需要调用0次或1次即可。
检查连接状态
// 定义在外面的
MelsecMcNet melsec_net = new MelsecMcNet( "192.168.0.100", 6000 );
System.Threading.Timer timer;                                          // 定时器

/// <summary>
/// 启动定时器,我们一般会在窗体打开的时候调用,或是系统启动的时候调用,此处示例5秒检测一次
/// </summary>
public void StartTimer( )
{
    melsec_net.SetPersistentConnection( ); // 设置长连接的操作,这样就不需要调用connectserver方法了。什么时候调用方法呢?实例化之后,或是读写之前就可以调用了
    timer = new System.Threading.Timer( ThreadCheck, null, 1000, 5000 );
}

public void ThreadCheck( object obj )
{
    OperateResult<short> connect = melsec_net.ReadInt16( "D100" );
    if (connect.IsSuccess)
    {
        // 进行相关的操作,显示绿灯啥的
    }
    else
    {
        // 进行相关的操作,显示红灯啥的
    }
}
如果你本来就在每秒读取PLC的数据信息了,那么连检测的定时器都不用写了,你每次读取数据的时候顺便判定下,结果就出来了。

其他相关的代码示例需要到各自的目录里查找,下面只列举了一些常见的代码示例
重要事项 重要事项
相关的代码示例,可以翻阅左侧的命名空间,基本是按照功能来区分的,只要点进去多看看即可
  说明
公共类Authorization
系统的基本授权类
公共类HslExtension
扩展的辅助类方法
公共类OperateResult
操作结果的类,只带有成功标志和错误信息
The class that operates the result, with only success flags and error messages
公共类OperateResultT
操作结果的泛型类,允许带一个用户自定义的泛型对象,推荐使用这个类
公共类OperateResultT1, T2, T3, T4, T5, T6, T7, T8, T9, T10
操作结果的泛型类,允许带十个用户自定义的泛型对象,推荐使用这个类
公共类OperateResultT1, T2
操作结果的泛型类,允许带两个用户自定义的泛型对象,推荐使用这个类
公共类OperateResultT1, T2, T3
操作结果的泛型类,允许带三个用户自定义的泛型对象,推荐使用这个类
公共类OperateResultT1, T2, T3, T4
操作结果的泛型类,允许带四个用户自定义的泛型对象,推荐使用这个类
公共类OperateResultT1, T2, T3, T4, T5
操作结果的泛型类,允许带五个用户自定义的泛型对象,推荐使用这个类
公共类OperateResultT1, T2, T3, T4, T5, T6
操作结果的泛型类,允许带六个用户自定义的泛型对象,推荐使用这个类
公共类OperateResultT1, T2, T3, T4, T5, T6, T7
操作结果的泛型类,允许带七个用户自定义的泛型对象,推荐使用这个类
公共类OperateResultT1, T2, T3, T4, T5, T6, T7, T8
操作结果的泛型类,允许带八个用户自定义的泛型对象,推荐使用这个类
公共类OperateResultT1, T2, T3, T4, T5, T6, T7, T8, T9
操作结果的泛型类,允许带九个用户自定义的泛型对象,推荐使用这个类
公共类StringResources
系统的字符串资源及多语言管理中心
System string resource and multi-language management Center
结构
  结构说明
公共结构代码示例NetHandle
用于网络传递的信息头,使用上等同于int
接口
  接口说明
公共接口代码示例IDataTransfer
用于PLC通讯及ModBus自定义数据类型的读写操作
备注
本软件著作权归Richard.Hu所有。
博客地址:https://www.cnblogs.com/dathlin/p/7703805.html
授权付费模式:超级VIP群 : 189972948
  • 本群提供专业版通讯库的所有更新版的 HslCommunication 源代码。包含 .Net Java Python 三大平台。
  • 本群支持对特殊需求而进行修改,更新源代码的服务,配合企业客户修复源代码错误的服务。
  • 本群成员拥有对通讯库商用的权利,拥有自己修改源代码并商业使用的权利,组件版权仍归属原作者。
  • 本群成员需要对源代码保密。禁止公开源代码,禁止对源代码的商业用途。
  • 本群成员可以免费获得官网的 MES DEMO源代码。
  • 本群成员可以免费体验作者采集框架程序。
  • 企业商业授权 企业付费 8000 rmb,公司即可拥有商用版权,支持任意的开发人员数量,项目数量,支持源代码更新,长期支持,商用软件必须冠名公司标识,官网显示合作伙伴logo。
  • 支持专业的一对一培训业务,一小时1000 rmb,一天8小时为5000 rmb
付费二维码:
版本历史
日期版本说明
2017-10-213.7.10
  • 正式发布库到互联网上去。
2017-10-213.7.11
  • 添加xml文档
2017-10-313.7.12
  • 重新设计西门子的数据读取机制,提供一个更改类型的方法。
2017-11-063.7.13
  • 提供一个ModBus的服务端引擎。
2017-11-073.7.14
  • 紧急修复了西门子批量访问时出现的BUG。
2017-11-123.7.15
  • 完善CRC16校验码功能,完善数据库辅助类方法。
2017-11-133.7.16
  • 西门子访问类,提供一个批量bool数据写入,但该写入存在安全隐患,具体见博客。
2017-11-214.0.0
  • 与3.X版本不兼容,谨慎升级。如果要升级,主要涉及的代码包含PLC的数据访问和同步数据通信。
  • 删除了2个类,OperateResultBytes和OperateResultString类,提供了更加强大方便的泛型继承类,多达10个泛型参数。地址见http://www.cnblogs.com/dathlin/p/7865682.html
  • 将部分类从HslCommunication命名空间下移动到HslCommunication.Core下面。
  • 提供了一个通用的ModBus TCP的客户端类,方便和服务器交互。
  • 完善了HslCommunication.BasicFramework.SoftBaisc下面的辅助用的静态方法,提供了一些方便的数据转化,在上面进行公开。
2017-11-244.0.1
  • 更新了三菱的读取接口,提供了一个额外的字符串表示的方式,OperateResult<byte[]> read = melsecNet.ReadFromPLC("M100", 5);
  • 更新了西门子的数据访问类和modbus tcp类提供双模式运行,按照之前版本的写法是默认模式,每次请求重新创建网络连接,新增模式二,在代码里先进行连接服务器方法,自动切换到模式二,每次请求都共用一个网络连接,内部已经同步处理,加速数据访问,如果访问失败,自动在下次请求是重新连接,如果调用关闭连接服务器,自动切换到模式一。
2017-11-254.0.2
  • 修复Modbus tcp批量写入寄存器时,数据解析异常的BUG。
  • 三菱访问器新增长连接模式。
  • 三菱访问器支持单个M写入,在数组中指定一个就行。
  • 三菱访问器提供了float[]数组写入的API。
  • 三菱访问器支持F报警器,B链接继电器,S步进继电器,V边沿继电器,R文件寄存器读写,不过还需要大面积测试。
  • 三菱访问器的读写地址支持字符串形式传入。
  • 其他的细节优化。
  • 感谢 hwdq0012 网友的测试和建议。
  • 感谢 吃饱睡好 好朋友的测试
2017-11-274.0.3
  • 三菱,西门子,Modbus tcp客户端内核优化重构。
  • 三菱,西门子,Modbus tcp客户端提供统一的报文测试方法,该方法也是通信核心,所有API都是基于此扩展起来的。
  • 三菱,西门子,Modbus tcp客户端提供了一些便捷的读写API,详细参见对应博客。
  • 三菱的地址区分十进制和十六进制。
  • 优化三菱的位读写操作。
2017-11-284.1.0
  • 修复西门子读取的地址偏大会出现异常的BUG。
  • 完善统一了所有三菱,西门子,modbus客户端类的读写方法,已经更新到博客。
2017-12-024.1.1
  • 完善日志记录,提供关键字记录操作。
  • 三菱,西门子,modbus tcp客户端提供自定义数据读写。
  • modbus tcp服务端提供数据池功能,并支持数据订阅操作。
  • 提供一个纵向的进度控件。
2017-12-044.1.2
  • 完善Modbus tcp服务器端的数据订阅功能。
  • 进度条控件支持水平方向和垂直方向两个模式。
2017-12-054.1.3
  • 进度条控件修复初始颜色为空的BUG。
  • 进度条控件文本锯齿修复。
  • 按钮控件无法使用灰色按钮精灵破解。
2017-12-134.1.4
  • modbus tcp提供读取short数组的和ushort数组方法。
2017-12-134.1.5
  • 修复流水号生成器无法生成不带日期格式的流水号BUG。
2017-12-184.1.6
  • OperateResult成功时,消息为成功。
  • 数据库辅助类API添加,方便的读取聚合函数。
  • 日志类分析工具界面,显示文本微调。
2017-12-254.1.7
  • 进度条控件新增一个新的属性对象,是否使用动画。
2017-12-274.1.8
  • 新增一个饼图控件。
2017-12-284.1.9
  • 饼图显示优化,新增是否显示百分比的选择。
2017-12-314.2.0
  • 新增一个仪表盘控件。
2018-01-034.2.1
  • 饼图控件新增一个是否显示占比很小的信息文本。
  • 新增一个旋转开关控件。
  • 新增一个信号灯控件。
2018-01-054.2.2
  • 修复modbus tcp客户端读取 float, int, long,的BUG。
2018-01-084.2.3
  • 修复modbus tcp客户端读取某些特殊设备会读取不到数据的BUG。
2018-01-154.2.4
  • 双模式的网络基类中新增一个读取超时的时间设置,如果为负数,那么就不验证返回。
2018-01-244.3.0
  • 信号灯控件显示优化。
  • Modbus Tcp服务端类修复内存暴涨问题。
  • winfrom客户端提供一个曲线控件,方便显示实时数据,多曲线数据。
2018-02-054.3.1
  • 优化modbus tcp客户端的访问类,支持服务器返回错误信息。
  • 优化曲线控件,支持横轴文本显示,支持辅助线标记,详细见对应博客。
2018-02-224.3.2
  • 曲线控件最新时间显示BUG修复。
  • Modbus tcp错误码BUG修复。
  • 三菱访问类完善long类型读写。
  • 西门子访问类支持1500系列,支持读取订货号。
2018-03-054.3.3
  • 曲线控件增加一个新的属性,图标标题。
  • Modbus tcp服务器端的读写BUG修复。
  • 西门子访问类重新支持200smart。
2018-03-074.3.4
  • Json组件更新至11.0.1版本。
  • 紧急修复日志类的BeforeSaveToFile事件在特殊情况的触发BUG。
2018-03-194.3.5
  • 修复Modbus-tcp服务器接收异常的BUG。
  • 修复SoftBasic.ByteTo[U]ShortArray两个方法异常。
2018-04-055.0.0
  • 网络核心层重新开发,完全的基于异步IO实现。
  • 所有双模式客户端类进行代码重构,接口统一。
  • 完善并扩充OperateResult对象的类型支持。
  • 提炼一些基础的更加通用的接口方法,在SoftBasic里面。
  • 支持欧姆龙PLC的数据交互。
  • 支持三菱的1E帧数据格式。
  • 不兼容升级,谨慎操作。
2018-04-105.0.1
  • OperateResult静态方法扩充。
  • 文件引擎提升缓存空间到100K,加速文件传输。
  • 三菱添加读取单个bool数据。
  • Modbus-tcp客户端支持配置起始地址不是0的服务器。
  • 其他代码优化。
2018-04-145.0.2
  • ComplexNet服务器代码精简优化,移除客户端的在线信息维护代码。
  • 西门子访问类第一次握手信号18字节改为0x02。
  • 更新JSON组件到11.0.2版本。
  • 日志存储类优化,支持过滤存储特殊关键字的日志。
  • Demo项目新增控件介绍信息。
2018-04-205.0.3
  • 修复Modbus-Tcp服务器的空异常。
  • 修复西门子类写入float,double,long数据异常。
  • 修复modbus-tcp客户端读写字符串颠倒异常。
  • 修复三菱多读取数据字节的问题。
  • 双模式客户端新增异形客户端模式,变成了三模式客户端。
  • 提供异形modbus服务器和客户端Demo方便测试。
2018-04-255.0.4
  • Modbus-tcp服务器同时支持RTU数据交互。
  • 异形客户端新增在线监测,自动剔除访问异常设备。
  • modbus-tcp支持读取输入点。
  • 所有客户端设备的连接超时判断增加休眠,降低CPU负载。
  • 西门子批量读取上限为19个数组。
  • 其他小幅度的代码优化。
2018-04-305.0.5
  • Modbus相关的代码优化。
  • 新增Modbus-Rtu客户端模式,配合服务器的串口支持,已经可以实现电脑本机的通讯测试了。
2018-05-045.0.6
  • 提炼数据转换基类,优化代码,修复WordReverse类对字符串的BUG,相当于修复modbus和omron读写字符串的异常。
  • 新增一个全新的功能类,数据的推送类,轻量级的高效的订阅发布数据信息。具体参照Demo。
2018-05-075.0.7
  • Modbus服务器提供在线客户端数量属性。
  • 所有服务器基类添加端口缓存。
  • 双模式客户端完善连接失败,请求超时的消息提示。
  • 修复双模式客户端某些特殊情况下的头子节NULL异常。
  • 修复三菱交互类的ASCII协议下的写入数据异常。
2018-05-125.0.8
  • 新增一个埃夫特机器人的数据访问类。
  • 双模式客户端的长连接支持延迟连接操作,通过一个新方法完成。
2018-05-215.0.9
  • 优化ComplexNet客户端的代码。
  • 更新埃夫特机器人的读取机制到最新版。
  • Modbus Rtu及串口基类支持接收超时时间设置,不会一直卡死。
  • Modbus Tcp及Rtu都支持带功能码输入,比如读取100地址,等同于03X100。(注意:该多功能地址仅仅适用于Read及相关的方法
2018-05-225.0.10
  • Modbus Tcp及Rtu支持手动更改站号。也就是支持动态站号调整。
  • 修复上个版本遗留的Modbus在地址偏移情况下会多减1的BUG。
2018-06-055.1.0
  • Modbus服务器支持串口发送数据时也会触发消息接收。
  • IReadWriteNet接口新增Read(string address,ushort length)方法。
  • 提炼统一的设备基类,支持Read方法及其扩展的子方法。
  • 修复埃夫特机器人的读取BUG。
  • 三菱PLC支持读取定时器,计数器的值,地址格式为"T100","C100"。
  • 新增快速离散的傅立叶频谱变换算法,并在Demo中测试三种周期信号。
2018-06-165.1.1
  • 修复西门子fetch/write协议对db块,定时器,计数器读写的BUG。
  • 埃夫特机器人修复tostring()的方法。
  • modbus客户端新增两个属性,指示是否字节颠倒和字符串颠倒,根据不同的服务器配置。
  • IReadWriteNet接口补充几个数组读取的方法。
  • 新增一个全新的连接池功能类,详细请参见 https://www.cnblogs.com/dathlin/p/9191211.html
  • 其他的小bug修复,细节优化。
2018-06-275.1.2
  • IByteTransform接口新增bool[]数组转换的2个方法。
  • Modbus Server类新增离散输入数据池和输入寄存器数据池,可以在服务器端读写,在客户端读。
  • Modbus Tcp及Modbus Rtu及java的modbus tcp支持富地址表示,比如"s=2;100"为站号2的地址100信息。
  • Modbus Server修复一个偶尔出现多次异常下线的BUG。
  • 其他注释修正。
2018-07-135.1.3
  • Modbus服务器新增数据大小端配置。
  • Modbus服务器支持数据存储本地及从本地加载。
  • 修复modbus服务器边界读写bug。
  • ByteTransformBase的double转换bug修复。
  • 修复ReverseWordTransform批量字节转换时隐藏的一些bug。
  • SoftBasic移除2个数据转换的方法。
  • 修复modbus写入单个寄存器的高地位倒置的bug。
  • 修复串口通信过程中字节接收不完整的异常。包含modbus服务器和modbus-rtu。
  • 添加了.net 4.5项目,并且其他项目源代码引用该项目。添加了单元测试,逐步新增测试方法。
2018-07-275.2.0
  • 项目新增api文档,提供离线版和在线版,文档提供了一些示例代码。
  • modbus-rtu新增批量的数组读取方法。
  • modbus-rtu公开ByteTransform属性,方便的进行数据转换。
  • SoftMail删除发送失败10次不能继续发送的机制。
  • modbus server新增站号属性,站号不对的话,不响应rtu反馈。
  • modbus server修复读取65524和65535地址提示越界的bug。
  • Demo项目提供了tcp/ip的调试工具。
2018-08-085.2.1
  • API文档中西门子FW协议示例代码修复。
  • modbus-rtu修复读取线圈和输入线圈的值错误的bug。
2018-08-235.2.2
  • Demo中三菱A-1E帧,修复bool读取显示失败的BUG。
  • 数据订阅类客户端连接上服务器后,服务器立即推送一次。
  • 串口设备基类代码提炼,提供了多种数据类型的读写支持。
  • 仪表盘新增属性IsBigSemiCircle,设置为true之后,仪表盘可显示大于半圆的视图。
  • 提供了一个新的三菱串口类,用于采集FX系列的PLC,MelsecFxSerial
2018-08-245.2.3
  • 修复双模式基类的一个bug,支持不接受反馈数据。
  • 修复三菱串口类的读写bug,包括写入位,和读取字和位。
  • 相关代码重构优化。
2018-09-085.3.0
  • 串口基类接收数据优化,保证接收一次完整的数据内容。
  • 新增一个容器罐子的控件,可以调整背景颜色。
  • OperateResult成功时的错误码调整为0。
  • 修复modbus-tcp及modbus-rtu读取coil及discrete的1个位时解析异常的bug。
  • 授权类公开一个属性,终极秘钥的属性,感谢 洛阳-LYG 的建议。
  • 修复transbool方法在特殊情况下的bug
  • NetworkDeviceBase 写入的方法设置为了虚方法,允许子类进行重写。
  • SoftBasic: 新增三个字节处理的方法,移除前端字节,移除后端字节,移除两端字节。
  • 新增串口应用的LRC校验方法。还未实际测试。
  • Siemens的s7协议支持V区自动转换,方便数据读取。
  • 新增ab plc的类AllenBradleyNet,已测试读写,bool写入仍存在一点问题。
  • 新增modbus-Ascii类,该类库还未仔细测试。
  • 埃夫特机器人更新,适配最新版本数据采集。
  • 其他的代码优化,重构精简
2018-09-105.3.1
  • 修复埃夫特机器人读取数据的bug,已测试通过。
  • ByteTransform数据转换层新增一个DataFormat属性,可选ABCD,BADC,CDAB,DCBA
  • 三个modbus协议均适配了ByteTransform并提供了直接修改的属性,默认ABCD
  • 注意:如果您的旧项目使用的Modbus类,请务必重新测试适配。给你带来的不便,敬请谅解。
2018-09-215.3.2
  • 所有显示字符串支持中英文,支持切换,默认为系统语言。
  • Json组件依赖设置为不依赖指定版本。
  • modbus-ascii类库测试通过。
  • 新增松下的plc串口读写类,还未测试。
  • 西门子s7类写入byte数组长度不受限制,原先大概250个字节左右。
  • demo界面进行了部分的中英文适配。
  • OperateResult类新增了一些额外的构造方法。
  • SoftBasic新增了几个字节数组操作相关的通用方法。
  • 其他大量的细节的代码优化,重构。
2018-09-275.3.3
  • DeviceNet层添加异步的API,支持async+await调用。
  • java修复西门子的写入成功却提示失败的bug。
  • java代码重构,和C#基本保持一致。
  • python版本发布,支持三菱,西门子,欧姆龙,modbus,数据订阅,同步访问。
  • 其他的代码优化,重构精简。
2018-10-205.4.0
  • python和java的代码优化,完善,添加三菱A-1E类。
  • 修复仪表盘控件,最大值小于0会产生的特殊Bug。
  • NetSimplifyClient: 提供高级.net的异步版本方法。
  • serialBase: 新增初始化和结束的保护方法,允许重写实现额外的操作。
  • softBuffer: 添加一个线程安全的buffer内存读写。
  • 添加西门子ppi协议类,针对s7-200,需要最终测试。
  • Panasonic: 修复松下plc的读取读取数据异常。
  • 修复fx协议批量读取bool时意外的Bug。
  • NetSimplifyClient: 新增带用户int数据返回的读取接口。
2018-10-245.4.1
  • 新增一个温度采集模块的类,基于modbus-rtu实现,阿尔泰科技发展有限公司的DAM3601模块。
2018-10-255.4.2
  • 三菱的mc协议新增支持读取ZR文件寄存器功能。
2018-10-305.4.3
  • 修复AB PLC的bool和byte写入失败的bug,感谢 北京-XLang 提供的思路。
2018-11-15.5.0
  • 新增西门子PPI通讯类库,支持200,200smart等串口通信,感谢 合肥-加劲 和 江阴- ∮溪风-⊙_⌒ 的测试
2018-11-55.5.1
  • 新增三菱计算机链接协议通讯库,支持485组网,有效距离达50米,感谢珠海-刀客的测试。
  • 串口协议的基类提供了检测当前串口是否处于打开的方法接口。
  • 西门子S7协议新增槽号为3的s7-400的PLC选项,等待测试。
2018-11-95.5.2
  • 西门子PPI写入bool方法名重载到了Write方法里。
  • 松下写入bool方法名重载到了Write方法里。
  • 修复CRC16验证码在某些特殊情况下的溢出bug。
  • 西门子类添加槽号和机架号属性,只针对400PLC有效,初步测试可读写。
  • ab plc支持对数组的读写操作,支持数组长度为0-246,超过246即失败。
  • 三菱的编程口协议修复某些特殊情况读取失败,却提示成功的bug。
  • 串口基类提高缓存空间到4096,并在数据交互时捕获COM口的异常。
2018-11-165.6.0
  • 修复欧姆龙的数据格式错误,修改为CDAB。
  • 新增一个瓶子的控件。
  • 新增一个管道的控件。
  • 初步新增一个redis的类,初步实现了读写关键字。
2018-11-215.6.1
  • AB PLC读取数组过长时提示错误信息。
  • 正式发布redis客户端,支持一些常用的操作,并提供一个浏览器。博客:https://www.cnblogs.com/dathlin/p/9998013.html
2018-11-245.6.2
  • 曲线控件的曲线支持隐藏其中的一条或是多条曲线,可以用来实现手动选择显示曲线的功能。
  • Redis功能块代码优化,支持通知服务器进行数据快照保存,包括同步异步。
  • Redis新增订阅客户端类,可以实现订阅一个或是多个频道数据。
2018-11-305.6.3
  • 串口数据接收的底层机制重新设计。
  • 串口底层循环验证缓冲区是否有数据的间隔可更改,默认20ms。
  • 串口底层新增一个清除缓冲区数据的方法。
  • 串口底层新增一个属性,用于配置是否在每次读写前清除缓冲区的脏数据。
  • 新增了一个SharpList类,用于超高性能的管理固定长度的数组。博客:https://www.cnblogs.com/dathlin/p/10042801.html
2018-12-35.6.4
  • Networkbase: 接收方法的一个多余对象删除。
  • 修复UserDrum控件的默认的text生成,及复制问题。
  • UserDrum修复属性在设计界面没有注释的bug。
2018-12-55.6.5
  • 修复Demo程序在某些特殊情况下无法在线更新的bug。
  • 修复曲线控件隐藏曲线时在某些特殊情况的不隐藏的bug。
  • modbus协议无论读写都支持富地址格式。
  • 修复连接池清理资源的一个bug,感谢 泉州-邱蕃金
  • 修复java的modbus代码读取线圈异常的操作。
  • Demo程序新增免责条款。
2018-12-115.6.6
  • 修复redis客户端对键值进行自增自减指令操作时的类型错误bug。
  • 修复redis客户端对哈希值进行自增自减指令操作时的类型错误bug。
  • 推送的客户端可选委托或是事件的方式,方便labview调用。
  • 推送的客户端修复当服务器的关键字不存在时连接未关闭的Bug。
  • Demo程序里,欧姆龙测试界面新增数据格式功能。
2018-12-195.6.7
  • ByteTransfer数据转换类新增了一个重载的构造方法。
  • Redis客户提供了一个写键值并发布订阅的方法。
  • AB-PLC支持槽号选择,默认为0。
  • PushNet推送服务器新增一个配置,可用于设置是否在客户端刚上线的时候推送缓存数据。
  • PushNet推送服务器对客户端的上下限管理的小bug修复。
  • 本版本开始,组件将使用强签名。
  • 本版本开始,组件的控件库将不再维护更新,所有的控件在新的控件库重新实现和功能增强,VIP群将免费使用控件库。
  • VIP群的进入资格调整为赞助200Rmb,谢谢支持。
2018-12-275.7.0
  • 修复modbus服务器地址写入的bug,之前写入地址数据后无效,必须带x=3;100才可以。
  • 修复极少数情况内核对象申请失败的bug,之前会引发资源耗尽的bug。
  • SoftBasic的ByteToBoolArray新增一个转换所有位的重载方法,不需要再传递位数。
  • 埃夫特机器人新增旧版的访问类对象,达到兼容的目的。
  • Demo程序新增作者简介。
  • 修复Demo程序的redis订阅界面在设置密码下无效的bug。
  • Demo程序的免责界面新增demo在全球的使用情况。
  • VIP群将免费使用全新的控件库,谢谢支持。地址:https://github.com/dathlin/HslControlsDemo
2018-12-315.7.1
  • 修复modbus服务器地址读取的bug,之前读取地址数据后无效,必须带x=3;100才可以。
  • NetPush功能里,当客户端订阅关键字时,服务器即使没有该关键字,也成功。
  • 三菱的通讯类支持所有的字读取。例如读取M100的short数据表示M100-M115。
  • VIP群将免费使用全新的控件库,谢谢支持。地址:https://github.com/dathlin/HslControlsDemo
2019-1-155.7.2
  • 修复三菱A-1E协议的读取数据的BUG错误,给大家造成的不便,非常抱歉。
  • VIP群将免费使用全新的控件库,谢谢支持。地址:https://github.com/dathlin/HslControlsDemo
2019-2-75.7.3
  • 欧姆龙读写机制更改,报警的异常不再视为失败,仍然可以解析数据。
  • Modbus地址优化,Modbus服务器的地址读写优化。
  • 新增一个数据池类,SoftBuffer,主要用来缓存字节数组内存的,支持BCL数据类型读写。
  • Modbus服务器的数据池更新,使用了最新的数据池类SoftBuffer。
  • SoftBasic类新增一个GetEnumFromString方法,支持从字符串直接生成枚举值,已通过单元测试。
  • 新增一个机器人的读取接口信息IRobotNet,统一化所有的机器人的数据读取。
  • Demo程序中增加modbus的服务器功能。
  • VIP群将免费使用全新的控件库,谢谢支持。地址:https://github.com/dathlin/HslControlsDemo
2019-2-135.7.4
  • 日志存储的线程号格式化改为D3,也即三位有效数字。
  • 日志存储事件BeforeSaveToFile里允许设置日志Cancel属性,强制当前的记录不存储。
  • JSON库更新到12.0.1版本。
  • SoftBasic新增一个GetTimeSpanDescription方法,用来将时间差转换成文本的方法。
  • 调整日志分析控件不随字体变化而变化。
  • 其他的代码精简优化。
  • VIP群将免费使用全新的控件库,谢谢支持。地址:https://github.com/dathlin/HslControlsDemo
2019-2-215.8.0
  • SoftBasic修复AddArrayData方法批量添加数据异常的bug,导致曲线控件显示异常。
  • 提炼一个公共的欧姆龙辅助类,准备为串口协议做基础的通用支持。
  • RedisHelper类代码优化精简,提炼部分的公共逻辑到NetSupport。
  • SoftBuffer: 新增读写单个的位操作,通过位的与或非来实现。
  • SiemensS7Server:新增一个s7协议的服务器,可以模拟PLC,进行通讯测试或是虚拟开发。
  • 其他的代码精简优化。
  • VIP群将免费使用全新的控件库,谢谢支持。地址:https://github.com/dathlin/HslControlsDemo
2019-3-46.0.0
  • 西门子虚拟PLC的ToString()方法重新实现。
  • 埃夫特机器人的json格式化修正换行符。
  • IReadWriteNet接口添加Write(address, bytes)的方法。
  • Modbus虚拟服务器修复写入位操作时影响后面3个位的bug。
  • SoftBuffer内存数据池类的SetValue(byte,index)的bug修复。
  • 西门子虚拟PLC和Modbus服务器新增客户端管理,关闭时也即断开所有连接。
  • 三菱编程口协议的读取结果添加错误说明,显示原始返回信号,便于分析。
  • 三菱MC协议新增远程启动,停止,读取PLC型号的接口。
  • 新增三菱MC协议的串口的A-3C协议支持,允许读写三菱PLC的数据。
  • 新增欧姆龙HostLink协议支持,允许读写PLC数据。
  • 新增基恩士PLC的MC协议支持,包括二进制和ASCII格式,支持读写PLC的数据。
  • 所有PLC的地址说明重新规划,统一在API文档中查询。
  • 注意:三菱PLC的地址升级,有一些地址格式进行了更改,比如定时器和计数器,谨慎更新,详细地址参考最新文档。
  • 如果有公司使用了本库并愿意公开logo的,将在官网及git上进行统一显示,有意愿的联系作者。
  • VIP群将免费使用全新的控件库,谢谢支持。地址:https://github.com/dathlin/HslControlsDemo
2019-3-106.0.1
  • 修复代码注释上的一些bug,三菱的注释修复。
  • 调整三菱和基恩士D区数据和W区数据的地址范围,原来只支持到65535。
  • SoftIncrementCount: 修复不持久化的序号自增类的数据复原的bug,并添加totring方法。
  • IRobot接口更改。针对埃夫特机器人进行重新实现。
  • RedisClient: 修复redis类在带有密码的情况下锁死的bug。
  • 初步添加Kuka机器人的通讯类,等待测试。
  • 西门子的s7协议读写字符串重新实现,根据西门子的底层存储规则来操作。
  • Demo的绝大多的界面进行重构。更友好的支持英文版的显示风格。
  • 如果有公司使用了本库并愿意公开logo的,将在官网及git上进行统一显示,有意愿的联系作者。
2019-3-216.0.2
  • 修复西门子s7协议读写200smart字符串的bug。
  • 重构优化NetworkBase及NetwordDoubleBase网络类的代码。
  • 新增欧姆龙的FinsUdp的实现,DA1【PLC节点号】在配置Ip地址的时候自动赋值,不需要额外配置。
  • FinsTcp类的DA1【PLC节点号】在配置Ip地址的时候自动赋值,不需要额外配置。
2019-3-286.0.3
  • NetPushServer推送服务器修复某些情况下的推送卡死的bug。
  • SoftBuffer内存数据类修复Double转换时出现的错误bug。
  • 修复Kuka机器人读写数据错误的bug,已通过测试。
  • 修复三菱的MelsecMcAsciiNet类写入bool值及数组会导致异常的bug,已通过单元测试。
  • SoftBasic新增从字符串计算MD5码的方法。
2019-4-46.0.4
  • 修复java的NetPushClient掉线重复连接的bug。
  • 发布java的全新测试Demo。
  • Kuka机器人Demo修改帮助链接。
  • 西门子新增s200的以太网模块连接对象。
  • 修复文件引擎在上传文件时意外失败,服务器仍然识别为成功的bug。
2019-4-176.1.0
  • 修复日志存储自身异常时,时间没有初始化的bug。
  • NetworkBase: 新增UseSynchronousNet属性,默认为true,通过同步的网络进行读写数据,异步手动设置为false。
  • 修复西门子的读写字符串的bug。
  • 添加KeyenceNanoSerial以支持基恩士Nano系列串口通信。
  • 其他的代码优化。
  • 发布一个基于xamarin的安卓测试demo。
  • 发布官方论坛: http://bbs.hslcommunication.cn/
2019-4-246.1.1
  • 修复基恩士MC协议读取D区数据索引不能大于100000的bug。
  • 修复基恩士串口协议读写bool数据的异常bug。
  • 修复数据推送服务器在客户端异常断开时的奔溃bug,界面卡死bug。
  • SoftNumericalOrder类新增数据重置和,最大数限制 。
  • ModbusTcp客户端公开属性SoftIncrementCount,可以强制消息号不变,或是最大值。
  • NetworkBase: 异步的方法针对Net451及standard版本重写。
  • 串口基类serialbase的初始化方法新增多个重载方法,方便VB和labview调用。
  • NetworkBase: 默认的机制任然使用异步实现,UseSynchronousNet=false。
  • 发布官方论坛: http://bbs.hslcommunication.cn/
2019-4-256.1.2
  • 紧急修复在NET451和Core里的异步读取的bug。
  • 紧急修复PushNetServer的发送回调bug。
  • 发布官方论坛: http://bbs.hslcommunication.cn/
2019-5-66.2.0
  • SoftBuffer缓存类支持bool数据的读写,bool数组的读写,并修复double读写的bug。
  • Modbus虚拟服务器代码重构实现,继承自NetworkDataServerBase类。
  • 新增韩国品牌LS的Fast Enet协议
  • 新增韩国品牌LS的Cnet协议
  • 新增三菱mc协议的虚拟服务器,仅支持二进制格式的机制。
  • LogNet支持写入任意的字符串格式。
  • 其他的注释添加及代码优化。
  • 发布官方论坛: http://bbs.hslcommunication.cn/
2019-5-96.2.1
  • 修复三菱读写PLC位时的bug。
  • 修复Modbus读写线圈及离散的变量bug。
  • 强烈建议更新,不能使用6.2.0版本!或是回退更低的版本。
  • 有问题先上论坛: http://bbs.hslcommunication.cn/
2019-5-106.2.2
  • 修复上个版本modbus的致命bug,已通过单元测试。
  • 新增松下的mc协议,demo已经新增,等待测试。
  • github源代码里的支持的型号需要大家一起完善。
2019-5-316.2.3
  • Ls的Fast Enet协议问题修复,感谢来自埃及朋友。
  • Ls的CEnet协议问题修复,感谢来自埃及朋友。
  • Ls新增虚拟的PLC服务器,感谢来自埃及朋友。
  • 改进了机器码获取的方法,获取实际的硬盘串号。
  • 日志的等级为None的情况,不再格式化字符串,原生写入日志。
  • IReadWriteNet接口测试西门子的写入,没有问题。
  • 松下MC协议修复LD数据库的读写bug。
  • Redis的DEMO界面新增删除key功能。
2019-6-36.2.4
  • Redis新增读取服务器的时间接口,可用于客户端的时间同步。
2019-6-66.2.5
  • 西门子的SiemensS7Net类当读取PLC配置长度的DB块数据时,将提示错误信息。
2019-6-22 7.0.0
  • 新增安川机器人通信类,未测试。
  • 西门子的多地址读取的长度不再限制为19个,而是无限制个。
  • NetworkDoubleBase: 实现IDispose接口,方便手动释放资源。
  • SerialBase: 实现IDispose接口,方便手动释放资源。
  • NetSimplifyClient:新增一个async...await方法。
  • NetSimplifyClient:新增读取字符串数组。
  • ModbusServer:新增支持账户密码登录,用于构建安全的服务器,仅支持hsl组件的modbus安全访问。
  • NetSimplifyServer:新增支持账户密码登录。
  • 新增永宏PLC的编程口协议。
  • 新增富士PLC的串口通信,未测试。
  • 新增欧姆龙PLC的CIP协议通讯。
  • 初步添加OpenProtocol协议,还未完成,为测试。
  • MelsecMcNet:字单位的批量读取长度突破960长度的限制,支持读取任意长度。
  • MelsecMcAsciiNet:字单位的批量读取长度突破480长度的限制,支持读取任意长度。
  • AllenBradleyNet:读取地址优化,支持读取数组任意起始位置,任意长度,支持结构体嵌套读取。
  • 其他大量的代码细节优化。
2019-6-257.0.1
  • IReadWriteNet完善几个忘记添加的Write不同类型参数的重载方法。
  • IReadWriteNet新增ReadBool方法,Write(string address, bool value)方法,是否支持操作需要看plc是否支持,不支持返回操作不支持的错误。
  • OmronFinsNet:新增一个属性,IsChangeSA1AfterReadFailed,当设置为True时,通信失败后,就会自动修改SA1的值,这样就能快速链接上PLC了。
  • OmronFinsNet:新增读写E区的能力,地址示例E0.0,EF.100,E12.200。
  • 新增HslDeviceAddress特性类,现在支持直接基于对象的读写操作,提供了一种更加便捷的读写数据的机制,详细的关注后续的论坛。
2019-9-108.0.0
  • SimpleHybirdLock: 简单混合锁的性能优化,基元对象采用懒加载的机制实现,同时增加了高级混合锁的类,支持自旋,线程拥有权,在高竞争的情况下性能大幅增加。
  • NetSoftUpdateServer: 软件自动更新的服务器端支持传送指定目录下的文件及其子文件夹下的所有文件内容,都将更新到客户端的电脑上去。
  • AllenBradleyNet: 修复字符串的读写bug,支持读写任意长度的字符串信息。
  • MelsecFxSerial: 三菱编程口协议支持读写D1024以上地址的数据,感谢 厦门-Mr.T 的贡献。
  • PIDHelper: 新增一个Pid的辅助类,用于模拟pid的波形情况。
  • NetPushClient: 修改一个时间的注释,追加单位信息,时间的单位是毫秒。
  • XGBFastEnet: 感谢埃及的朋友,修复了一些bug信息。
  • MelsecFxSerialOverTcp: 新增基于网口透传的三菱的编程口通讯类。
  • MelsecFxLinksOverTcp: 新增基于网口透传的三菱的计算机链接协议的通讯类。
  • MelsecA3CNet1OverTcp: 新增基于网口透传的三菱的A-3C的协议的通讯类。
  • OmronHostLinkOverTcp: 新增基于网口透传的欧姆龙的hostLink协议的通讯类。
  • PanasonicMewtocolOverTcp: 新增基于网口透传的松下的Mewtocol协议的通讯类。
  • SiemensPPIOverTcp: 新增基于网口透传的西门子PPi协议的通讯类。
  • XGBCnetOverTcp: 新增基于网口透传的Lsis的XGBCnet协议的通讯类。
  • KeyenceNanoSerialOverTcp: 新增基于网口透传的基恩士的NanoSerial串口协议的通讯类。
  • FujiSPBOverTcp: 新增基于网口透传的富士的SPB串口协议的通讯类。
  • ModbusRtuOverTcp: 新增基于网口透传的Modbus rtu协议的通讯类。
  • Modbus相关的功能类进行代码精简,重构,优化,api标准化为ReadBool,WriteBool,Read,Write,移除了一些特殊的方法api,本次升级不兼容。
  • FFTFilter: 新增一个基于FFT(快速离散傅立叶变换)的滤波功能,可以作为一个高级的曲线拟合方案,详细参照demo,感谢 北京-monk 网友的支持。
  • KnxUdp: 新增一个KnxUdp的数据通讯类,感谢上海-null的支持。
  • ABBWebApiClient: 新增ABB机器人的基于web api的访问机制的通讯类。
  • SickIcrTcpServer: 新增一个sick的条码读取类,支持被动连接,主动连接,经过测试,同时支持海康,基恩士,DATELOGIC扫码器。
  • Demo: Demo工具新增了一个基于tcp的服务器的测试界面。
  • 本组件从v8.0.0开始进入付费模式,谨慎升级,未激活的将只能使用8小时,普通vip群发放激活码,仅支持个人用途使用,禁止破解,感谢对正版的支持。
  • 个人商业用途及源代码需要申请加入超级vip群,群号:189972948,入群费:2400rmb。时间为无期限,永久支持,不限制项目数量。
  • 企业商业用途需要加入超级vip群,群号:189972948,入群费:5000rmb,商业授权为10年,期间开放源代码,不限制开发人数,项目数量,企业logo在将官网展示。
  • 今天是2019年9月10日,祝天下所有的教师节日快乐。
2019-9-178.0.1
  • 所有网口透传类对象完善实例化的方法,都新增一个指定ip及端口的实例方法。
  • ABBWebClient: 完善实例化方法,修改ToString的格式化内容,提炼了webapi的基类,开放ip地址和端口。
  • ABBWebClient: 新增提供了机器人自身IO,扩展IO,最新的报警日志的数据读取API。
  • NetSimplifyClient: 修复了当ReceiveTimeOut小于0,但是实际接收时会发生奔溃的bug。
  • NetPlainSocket: 新增一个基于socket的明文的网络发送和接收类,采用事件驱动的机制。
  • LogNet: 日志类对象新增一个特性,当日志的文件名设置为空的时候,将不会创建文件,仅仅触发 BeforSaveToFile 事件,方便日志显示。
  • XGBCnet: Lsis的plc的串口类修复一个bug,感谢埃及朋友的贡献。
  • SoftIncrementCount: 消息号自增类新增一个方法,重置当前的消息号。
  • PanasonicMewtocol: 修复松下的串口类读写单个bool时异常的bug,地址支持字+位的表示方式,R33=R2.1,方便大家输入测试。
  • MqttClient: 新增一个Mqtt协议的客户端类,支持用户名密码,支持发布,支持订阅,支持重连,欢迎一起测试。
  • 本组件从v8.0.0开始进入付费授权模式,详细参考官方:http://www.hslcommunication.cn 。
2019-9-198.0.2
  • ABBWebClient: abb机器人的api读取日志的接口新增一个参数,读取最近的日志数量。默认为10条。
  • MQTTClient: 修复mqtt客户端类的消息重复bug,修复发送空订阅的bug。
  • SiemensS7Net: 西门子的s7协议的类新增一个api,支持时间的读写,支持异步,时间格式和s7net一致。
  • 本组件从v8.0.0开始进入付费授权模式,详细参考官方:http://www.hslcommunication.cn 。
2019-9-268.0.3
  • Networkbase: 修复套接字网络授权失败时不关闭网络的bug。
  • SoftBasic: 新增一个数组数据格式化的方法信息。
  • MqttServer: 新增一个mqtt的服务器,初步支持订阅,发布订阅,强制发布订阅,在线客户端数量功能等等。
  • Demo: 所有的PLC的demo和modbus协议的demo,支持批量读取各种类型的数组数据。
  • Nuget: 新增本项目的图标,在nuget上搜索时会显示图标。
  • 本组件从v8.0.0开始进入付费授权模式,详细参考官方:http://www.hslcommunication.cn 。
2019-10-78.1.0
  • ModbusUdp: 新增一个Modbus的基于udp的协议类,使用的tcp的报文的机制。
  • HttpServer: 新增一个http的服务器封装类,方便实现基于webapi的后台功能,集成GET,POST的接口操作。
  • Serial Ports: standard项目依赖官方串口库,实现所有的设备的串口支持,可应用于跨平台。
  • standard: 在nuget上提供.net standard2.1版本的库。
  • 本组件从v8.0.0开始进入付费授权模式,详细参考官方:http://www.hslcommunication.cn 。
2019-10-118.1.1
  • Lsis: 感谢埃及朋友的支持,修复了一些bug,支持了bool的操作。
  • Redis: 新增db块属性设置,修复短连接下切换db块无效的bug,因为db块是跟随连接的。
  • MQTT: 修复客户端和服务器的长度计算bug,支持和其他mqtt组件混合使用。
  • MQTT Demo: 优化demo功能,支持文本追加或是覆盖选择,文本格式化查看选择。
  • Http Server: 支持跨域属性选择,编码统一为utf-8,兼容浏览器和postman,demo中增加返回类型示例。
  • Modbus server及Lsis Server: 针对.net standard版本,开放串口。
  • 个人商用认定调整,个人用户在一个自然年里所有使用本组件的项目销售总额小于3000元整的不算个人商用,获得激活码即可。
  • 企业商用的使用年限及开放源代码年限调整为20年,感谢所有付费用户的支持。
  • 本组件从v8.0.0开始进入付费授权模式,详细参考官方:http://www.hslcommunication.cn 。
2019-10-168.1.2
  • Lsis: 感谢埃及朋友的支持,demo增加了bool操作。
  • Knx驱动:增加测试demo,完善驱动,测试通过,有需要的朋友可以查看信息。
  • IntegrationFileClient: 完善文件的收发类,新增重载的构造方法,传入ip地址及端口即可。
  • melsec: 三菱的MC协议部分错误代码关联了文本信息,在测试的时候即可弹出错误信息,方便排查,常见了已经绑定。
  • melsec: 新增3e协议的随机字批量读取操作,支持跨地址,跨数据类型混合交叉读取,一次即可读完。
  • fileserver: 修复linux下的bug,新增上传文件后的触发事件,将文件的信息都传递给调用者。
  • SiemensMpi: 添加MPI协议,并完善demo,等待测试。
  • 本组件从v8.0.0开始进入付费授权模式,详细参考官方:http://www.hslcommunication.cn 。
2019-10-248.1.3
  • Lsis: 感谢埃及朋友的支持,demo完善了cpu类型的选择。
  • LogNet:新增移除关键字的接口方法,修复linux运行路径解析的bug,完善api文档的示例代码。
  • 大量的细节优化,变量名称单次拼写错误的修复。
  • Modbus: 当地址为x=3;100时,读正常,写入异常的问题修复,功能码自动替换为0x10。
  • FileNet: 修复高并发下载时的下载异常的问题,调整指令头的超时时间。
  • AB plc: 公开一个新的api接口,运行配置一些比较高级的数据。
  • 接下来计划:1.完善hsl的demo,api文档,准备基础的入门视频;2.开始完善java版本的代码,java版本只对超级VIP群开放。
  • 本组件从v8.0.0开始进入付费授权模式,详细参考官方:http://www.hslcommunication.cn 。
2019-12-38.2.0
  • 三菱的MC协议支持读取SM和SD,特殊连接继电器,特殊寄存器。
  • PushNet优化相关代码。
  • MelsecMcUdp: 新增三菱的MC协议的UDP通讯类。
  • MelsecMcAsciiUdp: 新增三菱的MC协议的ASCII格式的UDP通讯类。
  • MelsecMcServer: 三菱的虚拟服务器修复数据存储加载的bug。
  • Serial: 串口的基类公开了一个Rts属性,用于某些串口无法读取的设备的情况。
  • OmronFinsServer: 新增欧姆龙的虚拟plc,支持和hsl自身的通讯,支持cio,h区,ar区,d区的通信,不支持E区。
  • AllenBradleyServer: 新增ab plc的虚拟plc,支持和hsl的自身的通讯,在demo里预设了4个变量值。不支持结构体和二维及以上数组读写。
  • Aline: 异形的服务器对象新增一个设置属性,是否反馈注册结果,默认为True。
  • SoftBasic: 数组格式化操作新增格式化的字符串说明。
  • Modbus: 调整Write( string address, bool value )采用05功能码写入,而参数为bool[]的话,采用0F功能码。
  • Modbus: 提供WriteOneRegister方法,写入单个的寄存器,使用06功能码。
  • LogNet: 日志在实例化的时候,添加对当前设置的目录的是否存在的检查,如果不存在,则自动创建目录。
  • Python: 大量代码更新,新增了一个欧姆龙的fins-tcp通信。
  • Java: 大量代码更新,新增了一个AB plc的读写类。
  • 付费调整,,从2019年12月5日起,个人永久授权,2500rmb;企业永久授权:6500rmb,感谢支持,原先已经签合同的以合同价格为准。个人和企业均需签合同。是否含有商用权利以合同为准。
2019-12-118.2.1
  • Cip协议:cip协议开放Eip指令自定义输入,优化指令生成算法。
  • Cip协议:Write(string address, byte[] data)方法提示使用WriteTag信息。
  • NetworkDoubleBase: 修复bool异步读写提示不支持的bug,现在可以使用异步了。
  • SAMSerial:新增身份证阅读器的串口协议,支持读取身份证信息,头像信息还未解密。
  • SAMTcpNet:新增身份证阅读器的串口透传协议,支持读取身份证信息,头像信息还未解密。
  • BeckhoffAdsNet:新增倍福plc的协议,还未通过测试。
2020-1-38.2.2
  • lsis的plc优化,感谢埃及朋友的提供的技术支持。
  • Panasonic: 松下的Mewtocol协议增加SR区的支持,解析地址的方法修改为Public,方便外面调用。
  • Panasonic: 松下的Mewtocol协议批量读取bool方法是按字为单位,读取长度按照位为单位,地址写Y0,Y1,不能写Y0.4。
  • ab-plc: 虚拟服务器修复上个版本造成的bug,导致读写数据成功,但是数据实际没有更改。
  • ab-plc: 支持超长的数组读取,可以一次性读取任意长度的数组内容,不再需要手动切片。
  • ab-plc: 新增一个api接口,可以遍历所有的ab-plc的变量名称。
  • beckoff: 倍福的plc通信通过测试,需要设置正确各种网络号才可以,优化了标签缓存。
  • java: java版本的ab-plc类优化,支持超长的数组读取。
  • python: python版本的代码新增ab-plc的读取类。
  • demo: 安卓的demo增加lsis,mqtt协议的界面。
  • Melsec: 三菱PLC的多块批量读取目前只支持字地址,后续继续优化。
  • 其他的代码优化和重构。
  • java版本的源代码及demo,python版本的源代码及demo仅对商业授权用户开放,谢谢支持。
  • 作者于2020年1月5日和王女士结婚,地址是浙江省金华市兰溪市马涧镇,欢迎有空的老铁们来坐坐,带红包就行。
2020-2-139.0.0
  • 宣布V9版本脱胎换骨,浴火重生,C#版本的组件库底层网络大幅重构,删除一直以来的伪异步,原先的通过改为纯同步,并从底层提供完整的异步方法。
  • 注意:不兼容升级,影响范围,MQTT协议的事件,网络的同步设置,西门子的PPI协议取消WriteByte方法,改为和其他一样的Write(string address,byte value)重载了,升级请谨慎测试。
  • 所有的PLC通讯类,机器人类通讯类,Modbus通讯类,身份证类,包括 IReadWriteNet 接口都实现了异步的操作,针对NET45以上及Standard平台。
  • MQTT协议修改触发的消息事件,返回session信息,支持自定义返回数据信息,支持当前消息的发布拦截操作,服务器主送发布的消息支持是否驻留,默认主题驻留。
  • 新增websocket协议的服务器,客户端,问答客户端。支持直接从C#的后台发送数据到网页前端,支持订阅操作。详细见demo的操作。
  • ComplexNet,SimplifyNet,PushNet,FileNet这几个网络引擎代码优化,初步测试OK。
  • SoftBasic: 新增方法SpliceStringArray,用来合并字符串信息。增加了ByteToHexString的空校验。
  • HttpServer: 异步优化,修复读取数据时可能长度不足的bug。
  • YRC1000: 安川机器人修改无法读取的bug,目前已经测试通过,感谢网友的支持。
  • Java: 修复ab-plc读取失败的错误信息,原因来自一个强制转换失败的错误。
  • 本版本改动较多,尽管我已经仔细测试过,但是仍然不可避免存在一些bug,欢迎大家使用,测试,有问题可以报告给我,相信hsl组件会变的更加强大。
  • 本版本依然是商业授权的,如果需要测试,可以付费240rmb,加入vip群,可以将hsl用于测试环境和研究学术用途,欢迎大家加我的支付宝好友,hsl200909@163.com
  • 加油,武汉!加油,中国!疫情之后,无人自动化工厂将会获得更大的关注和发展,我辈当自强。
2020-2-199.0.1
  • 底层的网络在对方关闭连接后,不再等待接收,直接返回对方已关闭的错误信息,提供通信的性能。
  • 四个服务器类,complexserver, simplifyserver,mqttserver,websocketserver开发关闭客户端连接的方法,调用者可以手动操作关闭。
  • MQTT服务器新增一个客户端上线事件,包含客户端的会话参数,方便实现一些特殊的场景需求,在api文档中增加调用示例。
  • Websocket服务器新增一个客户端上线事件,包含客户端的会话参数,方便实现一些特殊的场景需求。
  • Websocket服务器添加0x0A的心跳返回,用于有些客户端的心跳验证操作。
  • RedisClient: redis相关的代码优化,调整,添加了异步api接口,本机性能测试不如同步,有待优化。
  • RedisClient: 新增基于特性的读写,自动组合键批量读取,组合哈希键批量读取操作,提升性能,详细参考api文档。写入操作不支持列表相关的特性。
  • Demo的写入byte操作的反射代码获取失败的bug修复。
2020-2-259.0.2
  • 修复websocket对某些浏览器的请求验证失败的bug,改为正则表达式验证,适用的范围更加广阔。
  • 三菱的mc协议的错误信息更加明确化,将提供更加确切的错误描述,方便大家查找错误。
  • websocket客户端新增连接服务器成功的事件,方便实现类似订阅的功能。
  • Websocket服务器添加心跳检测功能,将会定期(可以自定义)发送心跳包给客户端,在检测客户端是否在线。
  • 文件的服务器和客户端开放文件缓存大小的属性,默认100K,越大的话,性能越高,越占内存。
  • Modbus协议功能调整,Write(string,short)和Write(string,ushort)功能码调整为06,如果需要0x10功能码,使用Write(string,short[])和Write(string,ushort[])
  • 新增汇川PLC的通讯类,基于modbus协议,但是实现了地址的自动解析,输入D100即可自动转为modbus的地址,包含AM系列,H3U系列,H5U系列等
  • 在示例文档中,新增大量的代码说明,完善注释,如果有任何的问题,优先参考api文档。
  • 官网新增一个来自上海亦仕智能科技有限公司 MES DEMO: http://111.229.255.209 账号SF 密码 123
2020-3-39.0.3
  • 修复汇川PLC的地址示例文档写错的bug。
  • IReadWriteNet标准化字符串读写操作,新增定制编码的字符串读写。netDeviceBase移除之前的writeunicode的方法。这点如果有使用,谨慎更新。
  • 串口基类和UDP基类的数据交互方法新增日志记录,对发送的数据和接收的数据写入debug等级的日志。
  • 数据服务器(主要是三菱虚拟plc,西门子虚拟plc,modbus服务器等)实现IReadWriteNet接口。
  • 关于ab-plc,新增MicroCip协议,适用于Micro800系列读写操作。
  • 关于序号生成器类SoftIncrement,重置最大值的方法名称更新,添加了重置当前值,重置初始值,支持反向序列,跳跃序列的功能,详细参考api文档。
  • 文件的服务器类,新增一些日志记录,关于文件何时被读取,何时读取结束的日志信息,等级为debug。
  • NuGet组件更新,json组件更新到12.0.3版本,IO.port更新到4.7.0版本。单元测试框架更新。
  • Demo的redis示例,支持不同的db块选择,当你选择数据后自动切换,键值类数据增加格式化显示。
  • NetworkBase: 网络基类的连接服务器改为如果连接立即失败(500ms内),将会休眠100ms后,立即再尝试一次,提高连接的成功率。影响范围为所有客户端类。
  • 三菱二进制MC协议:地址里面新增标签访问,缓冲存储器访问,扩展的地址访问的方式,目前开放二进制的mc协议,欢迎测试,顺利的话,完善写入和ascii格式的。
  • 大量的代码注释添加,主流的常用的代码添加中英文注释,后续逐步全都改为中英文,方便国外客户阅读。
  • 240元的普通vip群的激活码时间调整,改为20年,中间软件重启一次,就又是20年,感谢大家的理解和支持。
  • http://www.hslcommunication.cn/MesDemo 官网的地址以后作为优秀的MES产品展示平台,欢迎大家关注。
2020-3-159.1.0
  • MQTT: 服务器增加定时检测客户端在线情况,超过设置的时间不活跃,强制下线,开放OnlineSession属性,获取在线客户端,查看ip,端口,在线时间等信息。
  • WebSocket: 服务器开放OnlineSession属性,获取在线客户端,查看ip,端口,在线时间等信息。
  • Language: 组件的语言系统修复设置英文后,无法切换回中文的bug。
  • SoftBasic: 添加SpliceByteArray(params byte[][] bytes)方法,用来将任意个byte[]进行拼接成一个byte[]。
  • SoftBasic: 添加BoolOnByteIndex方法,用来获取byte数据的指定位的bool值。
  • Panasonic: 松下的mc地址和串口地址统一表示方式:R101=R10.1=[10*16+1],R10.F=R10.15(这两种表示方式都可以)
  • 发布基于HSL扩展组件HslCppExtension,将写入的重载方法名按照类型重写一遍,方便C++调用。
  • VC++的demo示例,新增写入数据的例子,基于扩展组件HslCppExtension实现,详细参照demo源代码。
  • SoftBasic: 针对byte数组的切割,选择头,尾,中间,移除头,尾的方法全部更改成泛型版本,方法名字已经变更,如果有调用,谨慎更新。
  • FanucInterfaceNet: 新增读取fanuc机器人的通讯类,支持读写任意地址数据的功能,详细参考api文档,写入操作谨慎测试。
  • FanucRobotServer: 新增fanuc机器人的虚拟服务器,方便进行测试,初始数据来自真实机器人,支持D,I,Q,AI,AQ,M数据区。
  • Fanuc: 目前测试通过的型号为R-30iB mate plus,其他型号暂时不清楚支持范围。
  • 代码注释优化,api文档大量的更新,添加一些示例代码,包含如果检测状态,长短连接,使用前请仔细阅读下面的信息:http://api.hslcommunication.cn
  • http://www.hslcommunication.cn/MesDemo 官网的地址以后作为优秀的MES产品展示平台,欢迎大家关注。
  • 三年磨一剑,直插工业互联网的心脏。软件开发之艰辛,如人饮水冷暖自知。感谢所有支持的朋友。
2020-3-229.1.1
  • feat(SAM): 身份证阅读器修复在某些状态下接受数据不完整的bug,将校验数据的完整性。
  • feat(ab-plc): 虚拟服务器的地址支持小数点的形式,支持单个的bool读写,支持string的读写操作,和客户端的体验一致。
  • feat(softbasic): 方法针对数组切割的方法,增加扩展方法支持,byte[] a; byte[] b= a.RemoveBegin(2);意思就是移除最前面的2个元素。
  • feat(softbasic): Hex字符串和byte[]的转化也支持扩展方法。byte[] a.ToHexString()。
  • feat(melsec): 三菱的a-1e协议之前的,x,y地址采用8进制,先修改为自定义,如果要八进制,地址前面加0,例如X017,如果不加就是十六进制,例如X17,默认十六进制,升级需注意。
  • feat(melsec): 三菱的a-1e协议增加了F报警继电器,B链接继电器,W链接寄存器,定时器和计数器的线圈,触点,当前值的读取,地址参见api文档说明。
  • feat(melsec): 添加a-1e协议的ASCII版本,地址格式和二进制版本是一致的,支持的地址类型也是一致的,还未仔细测试,欢迎老铁们测试。
  • feat(melsec): 三菱的mc虚拟服务器支持二进制和ascii,实例化的时候选择,支持和HSL组件自身的通讯。
  • lsis: cnet和fenet地址的解析bug修复,感谢埃及朋友的支持。
  • 代码注释优化,使用前请仔细阅读下面的信息:http://api.hslcommunication.cn
  • http://www.hslcommunication.cn/MesDemo 官网的地址以后作为优秀的MES产品展示平台,欢迎大家关注。
  • HSL的目标是打造成工业互联网的利器,工业大数据的基础,打造边缘计算平台。企业授权费:8000元,感谢老铁们询价,介绍人给与奖励。
2020-3-299.1.2
  • ModbusAscii: 修复和rtu指令转换时的bug,之前会发生读写失败,目前已经在台达PLC上测试通过。
  • MelsecA1EAscii:修复三菱的A1E协议的ascii格式类写入单个bool异常的bug。
  • NetworkUdpServerBase:新增基于UDP协议的服务器基类,后台线程循环接收数据实现。
  • CipServer: 虚拟的ab-plc服务器新增字符串数组对象的读写操作,demo相关的完善。
  • HyundaiUdpNet: 新增现代机器人的姿态跟踪网络通讯类,
  • 代码注释优化,使用前请仔细阅读下面的信息:http://api.hslcommunication.cn
  • http://www.hslcommunication.cn/MesDemo 官网的地址以后作为优秀的MES产品展示平台,欢迎大家关注。
  • HSL的目标是打造成工业互联网的利器,工业大数据的基础,打造边缘计算平台。企业授权费:8000元,感谢老铁们询价,介绍人给与奖励。
2020-4-69.1.3
  • HslExtension: 完善一些转化的api,方便数组和字符串转化,完善对象转JSON字符串。
  • LogNet:消息格式化文本的消息等级追随HSL的语言设定,如果是中文,就显示调试,信息,警告,错误,致命。
  • Redis: 修复ExpireKey,生存时间参数丢失的bug,完善了说明文档。
  • OmronCip: 欧姆龙的CIP协议的类库,修复数组读取的bug,修复字符串写入bug,字符串写入还需要测试。
  • Toledo:新增托利多电子秤的串口类及网口服务器类,方便接收标准的数据流,等待测试。
  • Java:增加了单元测试的内容,对一些已经完成的类添加单元测试。
  • Python:实现了python版本的HslCommunication程序,基于pyqt实现,初步添加了一些PLC的调试界面。
  • 代码注释优化,使用前请仔细阅读下面的信息:http://api.hslcommunication.cn
  • http://www.hslcommunication.cn/MesDemo 官网的地址以后作为优秀的MES产品展示平台,欢迎大家关注。
  • HSL的目标是打造成工业互联网的利器,工业大数据的基础,打造边缘计算平台。企业终身授权费:8000元。